我知道这是Telegram sends duplicate POST JSON requests to webhook和Telegram sends duplicate POST JSON requests to webhook的副本。 但是,对此问题没有足够的答案,所以:
我有一个PHP应用程序处理来自Telegram的webhook请求。然而,Telegram没有看到webhook成功运行(尽管hurl.it清楚地显示它在这样的请求上发回200)。
因此,我的机器人回复了一段时间的消息,因为Telegram只是赢得了消息的处理。
这里也描述了这个问题(lib I' m using):
https://github.com/irazasyed/telegram-bot-sdk/issues/23
然而,那里也没有明确答案......
我该如何解决?
1)我的机器人正在使用webhook 2)肯定会返回200 OK响应 3)用户收到机器人的回复 的更新 4)不是暂停。
我的getWebhookInfo
回复:
[decodedBody:protected] => Array
(
[ok] => 1
[result] => Array
(
[url] => https://bots.chatforge.me/t/test
[has_custom_certificate] =>
[pending_update_count] => 3
[last_error_date] => 1514900657
[last_error_message] => Unsupported Media Type: unsupported content-encoding
[max_connections] => 40
)
)
答案 0 :(得分:2)
如果Telegram及时收到HTTP 200,它将不会重复该请求。我的猜测是你的请求/响应超时。使用getwebhookinfo查看上次请求错误的内容,如果不是超时则更新问题。
似乎问题是内容编码标题。我建议您向机器人发布一些虚假数据,并查看您收到的内容编码标题。使用我在https://core.telegram.org/bots/webhooks中找到的卷曲或使用类似Postman的程序。
curl -v -k -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
"update_id":10000,
"message":{
"date":1441645532,
"chat":{
"last_name":"Test Lastname",
"id":1111111,
"type": "private",
"first_name":"Test Firstname",
"username":"Testusername"
},
"message_id":1365,
"from":{
"last_name":"Test Lastname",
"id":1111111,
"first_name":"Test Firstname",
"username":"Testusername"
},
"text":"/start"
}
}' "https://YOUR.BOT.URL:YOURPORT/"