У меня есть конечная точка, которую я запускаю с помощью команды 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
понимает дополнительные параметры запроса (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"
Смотрите мой комментарий в вашем вопросе.