===== Схема работы Telegram бота ===== {{ :abills:docs:manual:sender:telegram:backend-plugin-telegram.png?nolink |}} \\ Красный - запросы отправки даных (без обработки полученных даных)\\ Зеленый - запросы получения даных (получение масива ''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'').