Telegram как проверить webhook

от admin

telegram bot — Как установить Webhook. Как узнать информацию по Webhook вашего бота

Если Вы пришете своего telegram bot-а, возможно вы выберите в качестве механизма обновления данных Webhook. Тогда Вам придётся разобраться с тем, как же настроить Webhook.

После регистрации бота у Вас появится его личный токен.

    Для настройки Webhook достаточно перейти в браузере по индивидуальной ссылке, которую Вам нужно предварительно сгенерировать. Ссылка вида (текст и квадратные скобки заменить на корректные данные):

Telegram bot get Webhook Updates send message

This tutorial helps you to set telegram bot webhook simply in 5 minutes by following 7 steps.

After you understand what is happening in Telegram Bot, for a better experience, I recommend you use one of these best telegram bot libraries. Here

Setting Telegram Bot WebHook, get updates and then sending a message to a Telegram bot:

Step 1: making a bot

First visit the father of bots in telegram: https://t.me/@BotFather

Then run this command in @BotFather to create a new bot:

After this command botFather asks you:

So give it a name and then botFather again asks you for the bot username:

As and example, I chose this username: mediumtelegramBot

Then botFather replied me this message which includes what I need: Telegram bot Token:

Step 2: downloading a prepared telegram bot code example

Now visit this package: https://github.com/Eleirbag89/TelegramBotPHP which is a very simple PHP Telegram Bot API for sending messages.

We are going to use some files of this package in a simple way and not use this package comprehensively.

In local make a directory and then download and put these files in it:

1- Telegram.php from here raw format here

2- TelegramErrorLogger.php from here raw format here

Step 3: Being familiar with getting telegram bot updates via getUpdate or Webhooks

In this step you should know this fact:

There are two mutually exclusive ways of receiving updates for your bot — the getUpdates method on one hand and Webhooks on the other. Incoming updates are stored on the Telegram server until the bot receives them either way, but they will not be kept longer than 24 hours.

Regardless of which option you choose, you will receive JSON-serialized Update objects as a result.

Simply, getUpdates method is useful when you are going to get updates manually by calling Telegram server minute by minute to see wheter there is any more updates? while Webhook in the other side is for asking Telegram server to call your bot server as soon as a user send a message or command to the bot and every thing is automatic. It depends to you and your case. But I prefere WebHooks.

Reference : Link1 , More about webhook Link2

Step 4: Testing Telegram bot and getting updates

Now I open the bot that I created already in Telegram app and start it. Then type a message and send it to the bot.

Then in the browser check the following url after putting the correct telegram bot token in it.

I replaced the token that I got it in step 1. Something like this :

I will see a JSON update like this:

You have another option to get the updates withoud need to trigger the above url. see the next step.

Step 5: response to the user messages by getUpdates method

Download this file raw format here and put it (getUpdates.php) in the directory you created beside the Telegram.php and TelegramErrorLogger.php files you have got in step 2.

Now you have 3 file in this directory:

Telegram.php, TelegramErrorLogger.php and getUpdates.php

Then install valet. valet by default is set on .test domain. Then via terminal go to the directory of the project you created and do

After doing “valet link telegramproject” you can reach your project in the browser.

and can response to the messages receieved by telegram bot via triggering this:

As an example in the bot type this: /git and then trigger this url: telegramproject.test/getUpdates.php and see the automatic response!

If you look at the getUpdates file content you will see:

Step 6: setting Webhook

First of all you need a php file as a Webhook to handle the Telegram server request after calling our bot server.

For this aim I made in my project this file: update.php

and put in it this content:

Then I have to introduce to Telegram server the webhook address of the bot server. Telegram server needs HTTPS. So I need to use ngrok.io service. After installing ngrok in terminal when I am in the project dirctory I do:

Then ngrok publish our project into a secure url something like

Our next task is to introduce the new https address as a webhook to Telegram server. Something like this:

In my case it will be:

Then trigger the above url. And you see:

In this way if you send any message to the telegram bot you will see the automatic response ‘Hello’.

Читать:
Как пригласить в телеграмм канал

Step 7: More info and attention

If you set a webhook you can not get updates like what you see in steps 4 and 5.

If you want to delete or deactive the bot webhook you need to trigger this url after replacing the correct bot token:

Obtain information about Webhook:

To get information about webhook parameters use the following url after replacing the correct bot token.

Делаем телеграм бот на Webhooks "для себя" ⁠ ⁠

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

polling — Это когда наш бот, в каком-то вечном цикле опрашивает телеграм на наличие «обновлений», то есть если пользователь в боте сделал какое-то действие, что бы бот обработал его ему нужно понять что действие совершено, и что вообще произошло, в этом ему и помогает polling, но мы не будем об этом😁

webhook — Это тоже штука для того что бы бот понимал что изменилось, но в данном случае не бот опрашивает телеграм на наличие изменений, а телеграм «шлет» изменения для телеграм бота. Тут есть несколько важных моментов, для того что бы работал webhook у вашего бота должно быть доменное имя с настроенным ssl сертификатом, иначе не секюрно и телеграм откажется взаимодействовать с вашим ботом, и тут когда я начинал «играться» с webhook у меня возник вопрос, а как вообще это настроить для тестов, да и вообще как это настроить? ниже я попытаюсь это описать, а именно как развернуть это локально для разработки и самообучения. Для работы будет использоваться python, flask, ngrok, telebot

1 — Начнем пожалуй с самого кода (я надеюсь вы уже сделали самого бота в телеграм? нуу через BotFather? если нет, тут мануал), когда нам телеграм будет слать запросы мы должны их не только как-то принять, но и обработать, в этом нам поможет flask ну и естественно python, код базовой и довольно тестовой (то есть не для прода) версии ниже, сори что скрин, я не нашел как тут разместить код в удобочитаемом виде:

Делаем телеграм бот на Webhooks "для себя" Telegram, Telegram бот, Https, Длиннопост

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

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

API_TOKEN — Когда вы создадите бот в BotFather, вам будет выдан токен, вот его нужно добавить сюда

APP_HOST = ‘127.0.0.1’ — Эта и следующая переменная для flask, он будет принимать запросы которые идут на порт и интерфейс указанный в этих переменных

APP_PORT = ‘8444’

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

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

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

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

видете в блоке json_string = flask.request.get_data().decode(‘utf-8’) ? json_string это как раз

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

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

а вот теперь самое интересное, что по доменному имени? и выход есть, ngrok, переходим на их сайт, создаем аккаунт, следуем всем инструкциям и скачиваем бинарный файл (ну или инсталлируем, как удобно, так как у меня мак, я скачал бинарный файл и просто разместил его в /usr/local/bin/ngrok, в итоге он стал доступен просто вызвав ngrok, не забудьте если делаете так же поставить исполняемый бит на файл chmod +x /usr/local/bin/ngrok, что бы у него было право на исполнение ) потом его нужно запустить, и тут все просто, пишем:

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

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

Делаем телеграм бот на Webhooks "для себя" Telegram, Telegram бот, Https, Длиннопост

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

Делаем телеграм бот на Webhooks "для себя" Telegram, Telegram бот, Https, Длиннопост

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

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

Делаем телеграм бот на Webhooks "для себя" Telegram, Telegram бот, Https, Длиннопост

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

Похожие статьи