Введение в Data Engineering: дата-пайплайны: Практические задачи построения пайплайнов / Нотификации в Telegram
Всё готово для того, чтобы попробовать отправить сообщение самому себе.
Необходимо установить зависимость:
pip install pyTelegramBotAPI
Чтобы отправить код необходимо вызвать метод send_message
у инстанса Telebot
:
import telebot
bot = telebot.TeleBot('<ваш_токен>')
bot.send_message('151436083', 'hello')
Первый два аргументы в метод send_message
это chat_id
и текст сообщение. chat_id
это по сути идентификатор пользователя, узнать свой chat_id можно, добавив бота @userinfobot
и запустив через команду /start
:
Давайте подготовим функцию-callback:
# файл telegram_notify.py
import os
import traceback
import warnings
import telebot
from luigi import Task
CHAT_ID = '<chat_id>'
BOT_TOKEN = os.environ.get('TG_BOT_TOKEN')
def send_notification(task: Task, exception: Exception):
if BOT_TOKEN is None:
warnings.warn('TG_BOT_TOKEN is not set')
# если не задан токен в переменной окружения, то просто выходим, чтобы не ломать
# работу пайплайна
return
bot = telebot.TeleBot(BOT_TOKEN)
text = (
f'Упала задача: {task.__class__.__name__}\n'
f'Исключение: {exception.__class__.__name__}, {traceback.format_exc()}'
)
bot.send_message(CHAT_ID, text)
В коде токен для телеграм-бота я пытаюсь получить из переменной окружения TG_BOT_TOKEN
. В Linux создать переменную окружения можно следующей командой:
export TG_BOT_TOKEN="<token>"
Код модуля находится в репозитории.