Как поставить вебхук telegram
Перейти к содержимому

Как поставить вебхук telegram

  • автор:

Telegram Webhook

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

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

  • Адрес (URL) страницы с программным кодом;
  • Поддержка IPv4, но рекомендуем поддержка IPv6 из-за частой блокировки телеграмма по IPv4;
  • Возможность сервера обрабатывать HTTPS трафик;
  • Наличие SSL сертификата.

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

  • setWebhook – установка соединения . При этом необходимо передать адрес, на который будут отправляться сообщения из чата;
  • deleteWebhook – удаление соединения . Указание предыдущей команды без параметров также удалит его;
  • getWebhookInfo – получение текущего статуса соединения.

Активация Webhook Telegram

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

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

https://api.telegram.org/botТОКЕН/setWebhook?url=ВАША_ССЫЛКА

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

https://api.telegram.org/botТОКЕН/setWebhook?url=ВАША_ССЫЛКА&certificate=ФАЙЛ_СЕРТИФИКАТА

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

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

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

Для установки сертификата на сервера чаще всего используется криптографический пакет с открытым исходным кодом OpenSSL . Его можно скачать с официального сайта. Настройка зависит от операционной системы и сервера.

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

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

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

Интеграция Вебхук и
Telegram (персональный)

Не тратьте время на сведение данных и синхронизируйте Вебхук и Telegram (персональный) за 5 минут.
Упростите рутинную работу за счет Albato.

Как работает Albato
Создайте собственную интеграцию между вашими сервисами
Придумайте интеграцию между ними, которая подойдет для решения ваших задач
Соберите придуманный сценарий при помощи ««конструктора» Albato, без участия программистов
Решайте сами, какие данные и в какой момент нужно передавать
Просто нажмите «Запустить», чтобы ваша интеграция заработала
Подключите к Albato сервисы, которыми пользуетесь в 2 клика
Доступные Триггеры и Действия

  • Триггеры
  • Действия
  • Триггеры и Действия

Без кода и программистов

Легко подключайте и интегрируйте нужные сервисы самостоятельно. С Albato вам не потребуется помощь и участие программистов.

Быстрый старт за 5 минут

Чтобы начать не нужны технические навыки. С помощью конструктора интеграций Albato вы можете реализовать даже сложные сценарии с множеством условий.

Поддержка и сообщество

Задавайте вопросы и консультируйтесь с экспертами Albato прямо из личного кабинета, без длительных ожиданий ответов на почте. Или исследуйте и вдохновляйтесь с помощью нашей Базы знаний и сообщества Albato в Telegram

Доступная цена

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

Раскрыть про без кода Не требуется разработчик Поддержка 24/7 (консультация и помощь в настройке на любом этапе Быстрое закрытие задач Быстрый запуск за 5 минут Подключение к любому API База знаний (большое кол-во статей, видео примерами использования) Поддержка, которая проконсультирует по любому вопросу Решай сам как будет выглядеть сценарий твоей автоматизации

Telegram Webhook

SERGOOT.RU

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

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

Что такое Telegram Webhook

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

Это позволяет собирать и доставлять информацию без непосредственного реагирования оператора.

Эта технология лучше всего реализуется в работе ботов. Они бывают несколько нескольких типов: игровые, ассистенты, чат-боты и информаторы.

Само взаимодействие организуется следующим образом:

  1. Пользователь пишет команду в чат с программным кодом.
  2. Встроенные алгоритмы принимают заявку и отправляют ее на сервера проекта.
  3. Команда обрабатывается, и передается обратно в понятной для пользователя форме.
  4. Алгоритм выводит информацию на дисплей.

Такая последовательность действий одинаково работает практически при любом взаимодействии с ботами. А технология Webhook упрощает этот процесс и обеспечивает стабильность протекающих процессов.

Если с этим все понятно, тогда давайте поговорим о том, как прописать бота с подобной технологией.

Как прописать бот на Вебхук

Процедура подключения бота на Вебхук несколько отличается от создания простого автоматизированного алгоритма – она основана на использовании самоподписного сертификата.

Для претворения задуманного в жизнь:

Создание ключа и самоподписного сертификата на Webhook

  1. Устанавливаем пакет openSSI.
  2. Создаем правильный ключ доступа и самоподписный сертификат.

Прописывание адреса в строке Common Name для Вебхук

Вводим адрес сервера в пустое поле для ввода «Common Name».

Создание веб сервиса в Вебхук

  • Открываем каталог сертификата и создаем два параметра bot.py b config.py.
  • Кликаем по второму объекту и создаем переменную токен бота.
  • Импортируем пару библиотек для параметра bot.py.
  • Создаем сервер.

    Отправка самоподписного сертификата в Вебхук

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

    Изменение настроек и запуск Вебхук

    Меняем системные настройки, если нужно и запускаем сервер.

    Как только вы увидите значение этого кода статуса, можно считать процедуру успешно завершенной.

    Если с этим пока все понятно, давайте поговорим о возможных проблемах при запуске бота на Вебхук.

    Проблемы запуска

    В Сети есть масса сообщений о том, прописанный алгоритм перестает работать спустя время или сразу после запуска. Чтобы этого избежать, приведем несколько простых советов:

    1. Пропишите команду @Botfather. Она поможет коду избавиться от проблем и ошибок в коде. Если все совсем плохо, будет автоматически создана исправленная копия бота.
    2. Активируем чат командой /setprivacy. После указания адреса ваших алгоритмов, программа опубликует список ошибок и даст рекомендации по их исправлению.
    3. Если чат не работает, а bot работает в штатном режиме, обратитесь за разъяснениями в службу технической поддержки.
    4. Если помощник полностью вышел из строя и не работает, откройте исходный код и проверьте его на предмет ошибок.

    За счет таких простых шагов можно повысить шансы на перезапуск bot, а также не доводить ситуацию до уровня «катастрофично». Помощь встроенных алгоритмов и специалистов техподдержки поможет в решении большинства проблем.

    Итоги

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

    Взаимодействие с системой представлено связкой: телеграмм-бот-сервер-обработка-бот-чат в Телеграмме. Таким образом можно организовать общение полностью автоматизированным, и отвлекать только изредка.

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

    Если у вас возникли проблемы с ботом, проверьте исходный код на предмет ошибок или обратитесь за помощью в службу технической поддержки.

    В статье представлена исчерпывающая информация по теме, так что вам, дорогие друзья, остается использовать полученные знания на практике. Пробуйте, и у вас все получится!

    Вебхуки

    С простым ботом наконец-то разобрались, теперь будем осваивать различные “плюшки”. Первая из них и, пожалуй, самая главная, — вебхуки.

    А в чём, собственно, разница?

    (Следующий абзац был написан в 2015-2016г., библиотеки с того момента много обновлялись, поэтому в некоторых случаях использовать Long Polling будет не хуже, чем вебхуки).
    Давайте для начала разберемся, как боты принимают сообщения. Первый и наиболее простой вариант заключается в периодическом опросе серверов Telegram на предмет наличия новой информации. Всё это осуществляется через т.н. Long Polling, т.е. открывается соединение на непродолжительное время и все обновления тут же прилетают боту. Просто, но не очень надежно. Во-первых, серверы Telegram периодически начинают возвращать ошибку 504 (Gateway Timeout), из-за чего некоторые боты впадают в ступор. Даже pyTelegramBotAPI, используемый мной, не всегда может пережить такое. Во-вторых, если одновременно запущено несколько ботов, вероятность столкнуться с ошибками возрастает. Это вдвойне обидно, если сами боты используются не очень часто.

    Вебхуки работают несколько иначе. Устанавливая вебхук, вы как бы говорите серверам Telegram: “Слышь, если кто мне напишет, стукни сюда — (ссылка)”. Отпадает необходимость периодически самому опрашивать серверы, тем самым, исчезает неприятная причина падений ботов. Однако за это приходится платить необходимостью установки полноценного веб-сервера на ту машину, на которой планируется запускать ботов. Что ещё неприятно, надо иметь собственный SSL-сертификат, т.к. вебхуки в телеграме работают только по HTTPS. К счастью, в один прекрасный день появилась поддержка самоподписанных сертификатов. Вот об их применении я и расскажу.

    Создаем сертификат

    Повторюсь: я не считаю себя супер-мега-крутым специалистом в айти, возможно, я что-то делаю неправильно, тем не менее, это работает и выглядит вполне прилично. Ладно, приступим.
    Для начала, установим пакет openssl (для Linux):
    sudo apt-get install openssl
    Затем сгенерируем приватный ключ:
    openssl genrsa -out webhook_pkey.pem 2048
    Теперь, внимание, генерируем самоподписанный сертификат вот этой вот длинной командой:
    openssl req -new -x509 -days 3650 -key webhook_pkey.pem -out webhook_cert.pem
    Нам предложат ввести некоторую информацию о себе: двухбуквенный код страны, имя организации и т.д. Если не хотите ничего вводить, ставьте точку. НО! ВАЖНО! Когда дойдете до предложения ввести Common Name, следует написать IP адрес сервера, на котором будет запущен бот.

    Генерация сертификата

    В результате получим файлы webhook_cert.pem и webhook_pkey.pem , положим их в какой-нибудь пустой каталог, в котором потом будем создавать бота. Сертификаты готовы, теперь займемся ботом. Чтобы не сильно загружать себе мозги, напишем простого echo-bot’а из урока №1, только теперь с использованием сертификата.

    Наш вишнёвый сервер

    Выше я упомянул необходимость наличия веб-сервера, для работы с вебхуками. Те, кто умело владеет Apache или Nginx, можете дальше не читать. Лично я никак не мог (и не могу до сих пор) понять, как обрабатывать входящие сообщения от этих серверов в Python. Поэтому, было принято простое и довольно эффективное решение — используем веб-фреймворк CherryPy. Это не самый простой фреймворк по сравнению, например, с Flask, но мы будем использовать именно его.
    Итак, установим CherryPy простой командой python3 -m pip install cherrypy

    Новый старый бот

    Перейдем в каталог с нашими сертификатами и создадим файлы bot.py и config.py . В последнем создадим переменную token , в которую передадим токен нашего бота. Открываем bot.py .
    Импортируем 2 библиотеки, зададим необходимые константы и создадим экземпляр бота:

    import telebot import cherrypy import config WEBHOOK_HOST = 'IP-адрес сервера, на котором запущен бот' WEBHOOK_PORT = 443 # 443, 80, 88 или 8443 (порт должен быть открыт!) WEBHOOK_LISTEN = '0.0.0.0' # На некоторых серверах придется указывать такой же IP, что и выше WEBHOOK_SSL_CERT = './webhook_cert.pem' # Путь к сертификату WEBHOOK_SSL_PRIV = './webhook_pkey.pem' # Путь к приватному ключу WEBHOOK_URL_BASE = "https://%s:%s" % (WEBHOOK_HOST, WEBHOOK_PORT) WEBHOOK_URL_PATH = "/%s/" % (config.token) bot = telebot.TeleBot(config.token) 

    Обратите внимание, что Telegram поддерживает всего 4 различных порта при работе с самоподписанными сертификатами. Теоретически, это означает, что на одной машине может быть запущено не больше 4 ботов на вебхуках. Практически, это поправимо, но об этом — в следующий раз.

    Создадим класс, реализующий экземпляр веб-сервера. Это, в принципе, стандартный код, который от бота к боту сильно меняться не будет:

    # Наш вебхук-сервер class WebhookServer(object): @cherrypy.expose def index(self): if 'content-length' in cherrypy.request.headers and \ 'content-type' in cherrypy.request.headers and \ cherrypy.request.headers['content-type'] == 'application/json': length = int(cherrypy.request.headers['content-length']) json_string = cherrypy.request.body.read(length).decode("utf-8") update = telebot.types.Update.de_json(json_string) # Эта функция обеспечивает проверку входящего сообщения bot.process_new_updates([update]) return '' else: raise cherrypy.HTTPError(403) 

    Посмотрите на название функции: index . Это, по сути, обозначает последнюю часть URL. Поясню на примере: если бы мы хотели получать обновления на адрес 80.100.95.20/webhooksbot , то функцию выше мы бы назвали webhooksbot . index — это аналог отсутствия какой-либо дополнительной маршрутизации. Зачем менять это значение на другое, рассказано здесь 12, сейчас это не нужно.
    Итак, что мы видим в коде выше? Принимаем входящие запросы по URL наш.ip.адрес/ , получаем содержимое и прогоняем через набор хэндлеров. Кстати, о них. Т.к. мы реализуем простейших echo-бот, хэндлер нам нужен всего один:

    # Хэндлер на все текстовые сообщения @bot.message_handler(func=lambda message: True, content_types=['text']) def echo_message(message): bot.reply_to(message, message.text) 

    Внимательный читатель всё же заметит одно отличие, о котором я говорить не буду 😉 Заодно ещё один повод открыть документацию.

    Далее, отправим серверу наш самоподписанный сертификат и “обратный адрес”, по которому просим сообщать обо всех новых сообщениях:

    # Снимаем вебхук перед повторной установкой (избавляет от некоторых проблем) bot.remove_webhook() # Ставим заново вебхук bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH, certificate=open(WEBHOOK_SSL_CERT, 'r')) 

    Наконец, укажем настройки нашего сервера и запустим его!

    # Указываем настройки сервера CherryPy cherrypy.config.update(< 'server.socket_host': WEBHOOK_LISTEN, 'server.socket_port': WEBHOOK_PORT, 'server.ssl_module': 'builtin', 'server.ssl_certificate': WEBHOOK_SSL_CERT, 'server.ssl_private_key': WEBHOOK_SSL_PRIV >) # Собственно, запуск! cherrypy.quickstart(WebhookServer(), WEBHOOK_URL_PATH, '/': <>>) 

    Обратите внимание на последнюю строку. Наш сервер в качестве “корня” будет прослушивать адрес вида “ip-адрес/токен_бота”, относительно которого index — это и есть этот адрес. Может, немного криво пояснил, но позднее вам всё станет предельно ясно, сейчас не нужно загромождать голову лишней информацией.

    Запустим бота и напишем ему парочку сообщений. Затем посмотрим в окно терминала:

    Лог сервера

    Если код статуса равен 200 (OK), значит, всё в порядке и бот получил сообщения от сервера.

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

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