Что такое вебхук телеграмм

Telegram Webhook

Telegram Webhook – это технология, позволяющая отслеживать в чате события в реальном времени и отправлять информацию о нем на указанный адрес. Если вы создали бот, то метод необходим, чтобы система могла реагировать на сообщения и действия пользователей. Получая информацию о них, сервер отправляет ее программе бота, в алгоритм которой заложена обработка.

Что такое вебхук телеграмм. Смотреть фото Что такое вебхук телеграмм. Смотреть картинку Что такое вебхук телеграмм. Картинка про Что такое вебхук телеграмм. Фото Что такое вебхук телеграмм

Что нужно для рабочего коннекта Webhook

Команды работы с методом описаны в Telegram Webhook Bot API. К ним относятся:

Активация Webhook Telegram

Чтобы использовать метод постоянного коннекта сервера и бота, следует запустить программный код, в котором выполняется команда API для Телеграм.

Для официального сертификата SSL :

Для самоподписанного сертификата :

ВАША_ССЫЛКА — это ссылка на скрипт, обрабатывающий запросы от сервера Telegram, например сообщения или команды для вашего бота.

Какая команда будет использоваться для отправки сообщения в мессенджер зависит от языка программирования.

Например, для PHP это будет curl_exec(), а для Python — requests.get().

Что такое вебхук телеграмм. Смотреть фото Что такое вебхук телеграмм. Смотреть картинку Что такое вебхук телеграмм. Картинка про Что такое вебхук телеграмм. Фото Что такое вебхук телеграмм

Официальные цифровые подписи устанавливаются на хостинге провайдером. Эта одна из услуг большинства компаний.

Прежде чем использовать Webhooks убедитесь, что вам доступен этот функционал.

Создание бота для Telegram на Webhooks предпочтительнее, чем использования метода getUpdates. Во втором случае приходится закладывать в код постоянное обращение этой команды к боту. Это делается в циклическом режиме. В конце концов начинаются баги, и он подвисает. Webhook же держит постоянное соединение, но запросы отправляются только когда произошло событие, например, пользователь ввел сообщение.

Источник

Делаем телеграм бот на Webhooks «для себя»

Для начала что такое Webhook, в контексте телеграм ботов есть два варианта взаимодействия с API:

Что такое вебхук телеграмм. Смотреть фото Что такое вебхук телеграмм. Смотреть картинку Что такое вебхук телеграмм. Картинка про Что такое вебхук телеграмм. Фото Что такое вебхук телеграмм

Я очень надеюсь что читатели уже кодили на python и мне не придется разбирать то, что происходит в каждой строке, но я все же вкратце опишу.

В самом верху вы видите 4 константы (по хорошему их бы вынести в отдельный какой-то конфиг):

Так же я подключил logger что бы удобней было контролировать то, что хочется видеть в в логах.

Помогает flask понять, какой тип запросов обрабатывать, и описывает то, что ему делать

если запрос который пришел был немного не таким как ожидалось)

тот объект json который мы приняли от телеграм, он «скармливается» в telebot, и потом в хендлерах (как в данном случае start) будет доступен как аргумент функции (правда без пустых значений) в данном случае в виде message

в нашем хендлере start мы всем кто его выполнил в боте в ответ отправим тот json который нам отправил telegram 😁

(у меня ngrok http 8444, этот тот порт который указан в переменной APP_PORT)

и вы увидите что-то на подобие этого:

Что такое вебхук телеграмм. Смотреть фото Что такое вебхук телеграмм. Смотреть картинку Что такое вебхук телеграмм. Картинка про Что такое вебхук телеграмм. Фото Что такое вебхук телеграмм

Что это значит? ngrok сгенерит адрес который отображается в консоли:

Что такое вебхук телеграмм. Смотреть фото Что такое вебхук телеграмм. Смотреть картинку Что такое вебхук телеграмм. Картинка про Что такое вебхук телеграмм. Фото Что такое вебхук телеграмм

Его вы копируете и вставляете в переменную WEB_HOOK_URL, так телеграм будет знать куда отправлять запросы, отправит их на сгенерированный адрес, ngrok в свою очередь перенаправит все что отправил телеграм во flask на указанный при запуске ngrok порт, и вуаля, все работает 😁

Обратите внимание на эту строку при запуске самого бота (вы же его запустили после того как засетили WEB_HOOK_URL? если нет, запускайте, не стесняйтесь😁 )

Что такое вебхук телеграмм. Смотреть фото Что такое вебхук телеграмм. Смотреть картинку Что такое вебхук телеграмм. Картинка про Что такое вебхук телеграмм. Фото Что такое вебхук телеграмм

Она говорит о том что код который я написал лучше не юзать для прода, и он больше для общеобразовательных целей) я надеюсь я более менее правильно объяснил, если есть вопросы задавайте, я не являюсь разработчиком и это просто мое хобби, так что если я где-то накосячил поясните, поправлю 😁

Источник

Синхронизация бота Telegram с помощью setWebhook

Telegram — быстро развивающийся мессенджер, множество программистов уже попробовали себя в создании ботов для telegram.

В данной статье мы разберёмся с созданием самоподписанного сертификата, научимся устанавливать этот сертификат в nginx и научим нашего бота получать обновления с помощью способа WebHook.

Методы взаимодействия с ботом:

Телеграмм разрешает устанавливать свои сертификаты https, что позволит нас не покупать дорогостоящий сертификат.

Для взаимодействия с пользователем в телеграмме используются 2 принципиально разных способа.

Этот метод используется для получения обновлений через long polling (wiki). Ответ возвращается в виде массива объектов Update. У данного способа обновлений есть масса недостатков. Мы должны сами запрашивать с сервера список сообщений пользователей, что не очень удобно. Для этого мы должны запрашивать каждые n секунд с сервера телеграмма данные. Это ресурсоёмко и не рационально. Лично я, не рекомендую без крайне необходимости использовать данный способ.

Существует ещё один способ получения сообщений от бота. Это использование WebHook. Идея заключается в том, что сервер сам будет присылать нам сообщения пользователя, а мы будем решать, что с ними делать. Каждый раз при получении обновления на этот адрес будет отправлен HTTPS POST с сериализованным в JSON объектом Update. В основном мы будем работать с объектом Message, который, соответственно, получим из Update.

Настройка синхронизации бота telegram с помощью setWebHook:

Приступим к настройке данного способа синхронизации. Для начала нам будет необходимо создать и настроить ssl сертификат.

У меня на сервере установлен дистрибутив FreeBSD, соответственно все дальнейшие действия описаны для этой системы.

Генерация и установка ssl сертификата:

Чтобы создать сертификат нам необходимо выполнить следующие действия:

Создадим папку в которую поместим наши полученные сертификаты:

Источник

Telegram-бот, webhook и 50 строк кода

Как, опять? Ещё один туториал, пережёвывающий официальную документацию от Telegram, подумали вы? Да, но нет! Это скорее рассуждения на тему того, как построить функциональный бот-сервис используя Python3.5+, asyncio и aiohttp. Тем интереснее, что заголовок на самом деле лукавит…

Так в чём же лукавство заголовка? Во-первых, кода не 50 строк, а всего 39, а во-вторых, и бот не такой сложный, просто эхо-бот. Но, как мне кажется, этого достаточно, чтобы поверить в то, что сделать свой собственный бот-сервис не столь сложно, как может показаться.

Содержание:

1. Что используем

2. Как используем

Сервер

Состояние библиотеки aiohttp на текущий момент таково, что с её использованием можно построить полноценный web-сервер в Джанго-стиле [4].

Для standalone-сервиса вся мощь не пригодится, поэтому создание сервера ограничивается несколькими строками.

N.B. Обратите внимание, что здесь мы определяем роутинг и задаём обработчик входящих сообщений handler.

И стартуем веб-сервер:

Клиент

Для отправки сообщения используем метод sendMessage из Telegram API, для этого необходимо отправить на оформленный должным образом URL POST-запрос с параметрами в виде JSON-объекта. И это мы делаем с помощью aiohttp:

N.B. Обратите внимание, что в случае успешной обработки входящего сообщения и удачной отправки «эха», обработчик возвращает пустой ответ со статусом HTTP 200. Если этого не сделать, сервисы Telegram продолжат в течение какого-то времени «дёргать» запросами хук, либо пока не получат в ответ 200, либо пока не истечёт определённое для сообщения время.

3. Что можно улучшить

Совершенству нет предела, пара идей, как сделать сервис функциональней.

Используем middleware

Допустим, возникла необходимость фильтровать входящие сообщения. Препроцессинг сообщений можно сделать на специальных веб-обработчиках, в терминах aiohtttp — это middlewares [5].

Пример, определяем мидлварь для игнора сообщений от пользователей из черного списка:

И добавляем обработчик при инициализации web-приложения:

Мысли по поводу обработки входящих сообщений

Если бот будет сложнее, чем репитер-попугай, то можно предложить следующую иерархию объектов ApiConversationCustomConversation.

Наследуя от Conversation и переопределяя _handler получаем кастомные обработчики, в зависимости от функциональности бота — погодный, финансовый etc.

И наш сервис превращается в ферму:

4. Реальный мир

Регистрация webhook

И вызываем соответствующий метод API любым доступным способом, например:

N.B. Ваш домен, хук на который вы устанавливаете, должен резолвится, иначе метод setWebhook не отработает.

Используем прокси-сервер

Как говорит документация: ports currently supported for Webhooks: 443, 80, 88, 8443.

Как же быть в случае self-hosted, когда необходимые порты уже скорее всего заняты веб-сервером, да и соединение по HTTPS мы в нашем сервисе не настроили?

Ответ простой, запуск сервиса на любом доступном локальном интерфейсе и использование реверс-прокси, и лучше nginx здесь сложно найти что-то другое, пусть он возьмёт на себя задачу организации HTTPS-соединения и переадресацию запросов нашему сервису.

Заключение

Надеюсь, что работа с ботом через вебхуки не показалась сильно сложнее long polling, как по мне так даже проще, гибче и прозрачнее. Дополнительные расходы на организацию сервера не должны пугать настоящего ботовода.

Пусть ваши идеи находят достойный инструмент для реализации.

Источник

Declaration of VAR

Я тогда давно написал статью про создание Telegram бота, и обещал дополнить её описанием настройки работы через webhook, но так и не дополнил. Вот только сейчас дошли руки.

Что такое вебхук телеграмм. Смотреть фото Что такое вебхук телеграмм. Смотреть картинку Что такое вебхук телеграмм. Картинка про Что такое вебхук телеграмм. Фото Что такое вебхук телеграмм

Что это такое

Как пишут в документации, общаться с серверами Telegram бот может двумя способами:

Разницу можно изобразить следующим образом:

Что такое вебхук телеграмм. Смотреть фото Что такое вебхук телеграмм. Смотреть картинку Что такое вебхук телеграмм. Картинка про Что такое вебхук телеграмм. Фото Что такое вебхук телеграмм

Очевидно, что второй способ ( setWebhook ) рациональнее для всех участников процесса. Однако в нём присутствует неявная сложность: кто-то должен принимать сообщения от Telegram на стороне бота, то есть необходим веб-сервер или его эквивалент.

Как настроить

Сертификат

С доменом и сертификатом просто. Домен у меня уже был, а сертификат я получил по этой инструкции.

Вариант с самоподписанным сертификатом на прямой IP адрес я оставляю вам на самостоятельное изучение.

Серверная часть

Серверная часть чуть посложнее. Я переделал текущую реализацию бота на pyTelegramBotAPI, используя пример для AIOHTTP.

Ставим необходимые пакеты:

И сокращённо код бота теперь такой:

Обратите также внимание на отличия от стандартного примера из репозитория:

Так как бота я запускаю не из-под root’а, сервис начал валиться с такой ошибкой:

Но он один фиг не мог открыть файлы оттуда, даже простой ls выдавал ошибку доступа. В общем, или мои познания Linux полный отстой, или одно из двух. Пришлось тупо назначить его владельцем:

Тогда сервис запустился нормально.

Регистрация

Для установки/регистрации webhook’а нужно выполнить следующий HTTP запрос (можно просто открыть этот URL в браузере):

Пока я экспериментировал и разбирался с форматом endpoint’а, Telegram возвращал мне нормальный результат:

Но потом я его видимо задолбал, и он стал возвращать мне следующее:

Но оказалось, что это ни на что не влияет, и webhook нормально устанавливается, так что можно даже не дожидаться таймаута, а просто отменять запрос через пару секунд.

Проверить статус webhook’а можно таким запросом:

Если всё нормально, должно вернуть такое:

Как видим, в поле url стоит наш endpoint.

Однако, мне оно сейчас возвращает такое:

Что указывает на некие проблемы с сертификатом. При этом бот работает нормально, то есть эта ошибка ни на что не влияет. Однако, если вместо fullchain.pem оставить cert.pem (как было указано в примере), то бот работать перестанет.

Стоит также отметить, что если вы установили webhook, то опрос Telegram через getUpdates работать больше будет. Чтобы снять webhook, надо отправить тот же самый запрос, что и для установки, но на этот раз без параметра url :

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *