Найти в Дзене
In Data We Trust

Отправка в Telegram сообщения о завершении обработки ячейки Jupyter Notebook

Оглавление

Аналитики, а в особенности 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

Шаг 2: Узнаем ID созданного бота

6. Отправьте своему боту любое сообщение, после чего откройте ссылку https://api.telegram.org/bot<сюда_вставьте_полученный_токен>/getUpdates. На странице надо найти строчку update_id, это и ест ID бота.

-3

Шаг 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)
)

Остается добавить вызов функции в конце ячейки.

-4

Теперь, после завершения обработки задачи в ячейке, вы будете получать сообщение в Telegram.

-5