HTTP POST с использованием Telegram Webhook

У меня есть конечная точка, которую я запускаю с помощью команды curl

curl -X POST https://example.com/control -d "channel=X&turn=XXX&id=XXXXXX&auth_key=XXXXX"

Я хочу установить связь между Telegram Webhook и этим POST , поэтому каждый раз, когда мой бот Telegram будет получать сообщение, оно POST на этот URL-адрес.

Я попытался зарегистрировать вебхук Telegram:

https://api.telegram.org/bot<telegram_token>/setWebhook?url=https://example.com/control?channel=X&turn=XXX&id=XXXXXX&auth_key=XXXXX

Но потом я вижу, что POST отправлен только для

https://example.com/control?channel=X

Есть ли способ прикрепить больше данных с помощью веб-хука Telegram?

Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
114
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, проблема в том, что curl понимает дополнительные параметры запроса (turn, id, auth_key) как параметры для https://api.telegram.org, а не для URL-адреса, который вы передаете в параметре url. Вы можете проверить это с помощью https://httpbin.org:

curl -X POST https://httpbin.org/anything -d "url=https://example.com/control?channel=X&turn=XXX&id=XXXXXX&auth_key=XXXXX"

Возвращаемый объект содержит:

"form": {
    "auth_key": "XXXXX",
    "id": "XXXXXX",
    "turn": "XXX",
    "url": "https://example.com/control?channel=X"
},

Решение состоит в том, чтобы использовать флаг --data-urlencode вместо -d (то есть --data):

curl -X POST "https://httpbin.org/anything" --data-urlencode "url=https://example.com/control?channel=X&turn=XXX&id=XXXXXX&auth_key=XXXXX"

Ответ:

"form": {
    "url": "https://example.com/control?channel=X&turn=XXX&id=XXXXXX&auth_key=XXXXX"
},

Телеграмм запрос:

curl -X POST https://api.telegram.org/bot<telegram_token>/setWebhook --data-urlencode "url=https://example.com/control?channel=X&turn=XXX&id=XXXXXX&auth_key=XXXXX"

Смотрите мой комментарий в вашем вопросе.

druskacik 05.12.2022 14:12

Другие вопросы по теме