Схема работы Telegram бота


Красный - запросы отправки даных (без обработки полученных даных)
Зеленый - запросы получения даных (получение масива update, даных на сервере Telegram)

На примере взаимодействия модуля Msgs

Как видим, схема состоит из трёх функциональных частей: модуля Msgs::Messaging, Backend::Plugin::Telegram и Telegram::BotAPI.

Уведомления присылаются:

  • Пользователю - в теме, которая прикреплена к нему.
  • Администратору - в теме, в которой он ответственный

Msgs::Messaging через Telegram отсылает специальное уведомление, в котором есть кнопки вызова callbackQuery с полем data.
data - строка длиной до 64 байт.

Для кнопки «Ответить», data содержит значение MSGS:REPLY:%MSG_ID%. ('МОДУЛЬ:ОПЕРАЦИЯ:ДАННЫЕ')
Когда клиент нажимает на кнопку «Ответить», в Backend::Plugin::Telegram попадает update типа callback. Из него вытягивается поле data, и разбивается на части. В зависимости от значения МОДУЛЬ, подгружается нужный ModuleInterface и callback передаётся в его метод process_data(). Если ModuleInterface может обработать ОПЕРАЦИЯ, он возвращает обьект класа Operation, в которую будут приходить все сообщения пользователя, пока установлен блокирующий флаг (has_operation_lock).

У Operation есть три основных метода:

  • on_start - вызывается сразу же после начала операции
  • on_message - сюда передаются все сообщения пользователя. Если после текущего сообщения, нужно завершить операцию, возвращается 1.
  • on_finish - вызывается перед закрытием операции.

После закрытия Operation, блокирующий флаг удаляется и все сообщения обрабатываются как обычно (через определённые ранее callback).