Аналитики, а в особенности Data Sciense специалисты, работающие с Jupyter Notebook знают что некоторые операции могут проводиться достаточно долго. Сам я недавно столкнулся с задачей по парсингу данных, которая заняла у меня около 4 часов, и было довольно нудно постоянно мониторить, закончилась ли операция. И я просто настроил автоматическую отправку сообщения в Telegram. В этой статье расскажу как сделать такое же оповещение за 5 простых шагов.
Шаг 1: Регистрируем Telegram бота
1. Открываем бота BotFather. Это официальный бот, для регистрации и управления своими ботами.
2. В меню выбираем "Create a new bot" или отправляем команду /newbot.
3. На первый вопрос "Alright, a new bot. How are we going to call it? Please choose a name for your bot" указываем любое имя. Под этим именем ваш бот будет находиться в списке контактов. Я выбрал Hello from Jupyter.
4. На второй вопрос "Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot" надо указать username бота, который обязательно должен оканчиваться на _bot. Я выбрал jupyter_to_tg_bot.
5. Если все хорошо, новый бот будет создан, а BotFather пришлет с токеном управления ботом.
Шаг 2: Узнаем ID созданного бота
6. Отправьте своему боту любое сообщение, после чего откройте ссылку https://api.telegram.org/bot<сюда_вставьте_полученный_токен>/getUpdates. На странице надо найти строчку update_id, это и ест ID бота.
Шаг 3: Пишем функцию отправки сообщения
Чтобы бот прислал сообщение, достаточно отправить POST запрос на эндпоинт, с указанием текста сообщения, токена и ID чата. Поэтому простой функцию, которая принимает на вход указанные данные будет достаточно:
def message_to_tg(token=None, chat_id=None, message=None):
""" Функция отправляет в telegram бот заданное сообщене.
Args:
token [str]: Токен бота
chat_id [str]: ID бота
message [str]: Текст сообщения
"""
if token is None:
print('[+] ERROR: No token found!')
if chat_id is None:
print('[+] ERROR: No chat id found!')
if message is None:
message= '[+] Something happend in Jupyter'
requests.post(
f'https://api.telegram.org/bot{api_token}/sendMessage',
params=dict(chat_id=chat_id, text=message)
)
Остается добавить вызов функции в конце ячейки.
Теперь, после завершения обработки задачи в ячейке, вы будете получать сообщение в Telegram.