telegram-chatbot-python - библиотека для интеграции с мессенджером Telegram через API сервиса green-api.com. Чтобы воспользоваться библиотекой, нужно получить регистрационный токен и ID аккаунта в личном кабинете. Есть бесплатный тариф аккаунта разработчика.
Документация к REST API находится по ссылке. Библиотека является обёрткой к REST API, поэтому документация по ссылке выше применима и к самой библиотеке.
Чтобы отправить сообщение или выполнить другие методы GREEN API, аккаунт Telegram в приложении телефона должен быть в авторизованном состоянии. Для авторизации аккаунта перейдите в личный кабинет и сканируйте QR-код с использованием приложения Telegram.
Установка:
python -m pip install telegram-chatbot-pythonfrom telegram_chatbot_python import GreenAPIBot, Notification
Перед запуском бота необходимо удалить (при наличии) адрес отправки уведомлений (URL) из личного кабинета или выставив пустой webhookUrl с помощью метода SetSettings. Следующие настройки будут включены ботом автоматически:
{
"incomingWebhook": "yes",
"outgoingMessageWebhook": "yes",
"outgoingAPIMessageWebhook": "yes"
}bot = GreenAPIBot(
"4100000000", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345"
)
bot = GreenAPIBot(
"4100000000", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345",
bot_debug_mode=True
)
Также можно включить режим отладки API:
bot = GreenAPIBot(
"4100000000", "d75b3a66374942c5b3c019c698abc2067e151558acbd412345",
debug_mode=True, bot_debug_mode=True
)
Чтобы начать получать входящие уведомления, нужно настроить инстанс. Открываем страницу личного кабинета по ссылке. Выбираем инстанс из списка и кликаем на него. Нажимаем Изменить. В категории Уведомления включаем все что необходимо получать.
Чтобы начать получать сообщения, вам нужно создать функцию-обработчик с одним параметром (notification).
Параметр notification это класс в котором хранится объект уведомления (event) и функции для ответа на сообщение.
Чтобы отправить текстовое сообщение в ответ на уведомление, вам нужно вызвать функцию notification.answer и передать
туда текст сообщения. Параметр chatId указывать не нужно, так как он автоматически подставляется из уведомления.
Далее нужно добавить функцию-обработчик в список обработчиков. Сделать это можно с помощью
декоратора bot.router.message как в примере или с помощью функции bot.router.message.add_handler. Декоратор
обязательно нужно вызвать с помощью скобок.
Чтобы запустить бота, нужно вызвать функцию bot.run_forever.
Остановить бота можно с помощью сочетания клавиш Ctrl + C.
В этом примере бот ответит только на сообщение message.
Ссылка на пример: base.py.
@bot.router.message(text_message="message")
def message_handler(notification: Notification) -> None:
notification.answer("Hello")
bot.run_forever()
Получать можно не только входящие сообщения, но и исходящие. Также можно получать статус отправленного сообщения.
- Чтобы получать исходящие сообщения, нужно использовать объект
bot.router.outgoing_message; - Чтобы получать исходящие API сообщения, нужно использовать объект
bot.router.outgoing_api_message; - Чтобы получать статус отправленного сообщения, нужно использовать объект
bot.router.outgoing_message_status.
Тело уведомления находится в notification.event. В этом примере мы отправляем в консоль тело нового уведомления.
В этом примере бот получает все входящие сообщения.
Ссылка на пример: event.py.
@bot.router.message()
def message_handler(notification: Notification) -> None:
print(notification.event)
bot.run_forever()
Сообщения можно фильтровать по чату, по отправителю, по типу и тексту сообщения. Для фильтров чата, отправителя и типа
сообщения можно использовать строку (str) или список из строк (list[str]). Текст сообщения можно фильтровать по
тексту, по команде и регулярным выражениям. Ниже таблица с названиями фильтров и возможными значениями.
| Название фильтра | Описание | Возможные значения |
|---|---|---|
from_chat |
Чат или чаты от которых нужно получать сообщения | "79876543210@c.us" или ["79876543210@c.us", "11002345678@c.us"] |
from_sender |
Отправитель или отправители от которых нужно получать сообщения | "79876543210@c.us" или ["79876543210@c.us", "11002345678@c.us"] |
type_message |
Тип или типы сообщения, которые нужно обрабатывать | "textMessage" или ["textMessage", "extendedTextMessage"] |
text_message |
Ваша функция будет выполнена если текст полностью соответствует тексту | "message" или ["message", "MESSAGE"] |
regexp |
Ваша функция будет выполнена если текст полностью соответствует шаблону регулярного выражения | r"message" или (r"message", re.IGNORECASE) |
command |
Ваша функция будет выполнена если префикс и команда полностью соответствуем вашим значениям | "help" или ("help", "!/") |
@bot.router.message(command="command")
bot.router.message.add_handler(handler, command="command")
Чтобы фильтровать сообщения по чату, отправителю или типу сообщения, нужно добавить строку (str) или список из
строк (list[str]).
from_chat = "79876543210@c.us"
from_sender = "79876543210@c.us"
type_message = ["textMessage", "extendedTextMessage"]
Чтобы фильтровать сообщения по тексту сообщения, регулярным выражениям или команде, нужно добавить строку (str).
text_message = "Привет. Мне нужна помощь"
regexp = r"Привет. Мне нужна помощь"
Чтобы фильтровать сообщения по команде, нужно добавить строку (str) или кортеж (tuple). Вам нужно указать либо
название команды, либо название команды и строку префиксов. Префикс по умолчанию: /.
command = "help"