Отладка бота Telegram на localhost

в 1:32, , рубрики: php, telegram bots

Когда для бота Telegram установлен веб-хук, то становится затруднительным отлаживать бота, потому что каждое изменение кода бота на рабочем компьютере должно быть отражено на сервер.
Довольно простым решением данной проблемы мне показалось для включения отладки бота открыть адрес в браузере, который переведет бота на сервере в отладочный режим, позволяя используя вкладку браузера как промежуточное звено получать ответы уже с рабочей машины.
Под катом Вы найдете ссылку на код, написанный на PHP, но описывать я буду только алгоритм действий, не приводя самого кода.

Проект можно найти на GitHub.
Файлы проекта необходимо скопировать себе на сервер, а подключается отладчик к коду бота всего одной строчкой:

include_once( "telegramDebug/debug.inc" );

Этот код должен быть указан до начала любой деятельности самого бота. Лучше всего самой первой строкой веб-хука. В файле index.html необходимо указать локальный путь до веб-хука.

На чём основан принцип отладки

Когда сервер Telegram присылает обновление, то ему совершенно не интересно, что вернет ему веб-хук, потому что для любой операции (отправка сообщения пользователю и т.п.) веб-хук должен сделать запрос к API Telegram. Это очень сильно помогает, потому что в таком случае запрос к API может выполнять не веб-сервер, а рабочая машина, на которой ведется разработка бота. Нужно только заставить рабочую машину сделать этот самый запрос к API, вместо веб-сервера и в отличие от Telegram нам будет очень интересно что вернет веб-хук, потому что он может вернуть предупреждение или сообщение об ошибке, которые помогут отлаживать бота.

Алгоритм работы отладчика

  1. Получаем сообщение от сервера Telegram прежде самого бота.
  2. Если для чата из которого получено сообщение включена отладка, то помещаем сообщение в очередь на отправку на рабочую машину и прекращаем работу веб-хука.
  3. Открытая в браузере вкладка используя long-pooling получает от отладчика сообщение, ранее помещенное в очередь, и перенаправляет его веб-хуку, который расположен на локальной машине.
  4. Локальный веб-хук будет обрабатывать это сообщение точно так же, как он бы сделал это находясь на боевом сервере, никаких специальных изменений в код не требуется.

Алгоритм действий для включения отладки

  1. Открываем в браузере адрес веб-хука по протоколу http (не https), добавив к нему адресу параметр debug=manage в результате увидим страницу (может меняться со временем в лучшую сторону):
    Отладка бота Telegram на localhost - 1
  2. Если не знаем свой ID, то просто пишем что-нибудь боту в Telegram:
    Отладка бота Telegram на localhost - 2
  3. Включаем режим отладки, указав конкретные ID, разделенные ;, для которых этот режим будет работать. Таким образом пользователи бота будут продолжать получать сообщения от "боевой" версии бота, а мы от разрабатываемой версии.
  4. Пишем боту в Telegram, отлаживаем код бота не затрагивая при этом "боевой" сервер. Пусть всё прошло без ошибок, тогда видим:
    Отладка бота Telegram на localhost - 3
  5. Попробуем в коде бота на рабочей машине вызвать несуществующую функцию create_message_help:
    Отладка бота Telegram на localhost - 4

Если Вам это пригодится, но хотелось бы что-то улучшить- приглашаю присоединиться к проекту на ГитХаб.

Автор: ReinRaus

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js