Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
abills:docs:manual:sender:telegram:bot [2017/08/10 22:19] anton создано |
abills:docs:manual:sender:telegram:bot [2017/09/18 16:27] (текущий) anton [На примере взаимодействия модуля Msgs] |
||
---|---|---|---|
Строка 2: | Строка 2: | ||
{{ :abills:docs:manual:sender:telegram:backend-plugin-telegram.png?nolink |}} | {{ :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''). |