Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
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''​).