Схема работы 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
).