Telegram 向 webhook 发送重复的 POST JSON 请求

Posted

技术标签:

【中文标题】Telegram 向 webhook 发送重复的 POST JSON 请求【英文标题】:Telegram sends duplicate POST JSON requests to webhook 【发布时间】:2016-10-30 16:41:49 【问题描述】:

我正在尝试为电报开发城市机器人,但遇到了一个问题。 向机器人发送消息后,Telegram 向 webhook url 发送 2 个重复请求。 Webhook 脚本工作两次并向用户发送两次响应。 脚本 - 来自官方电报文档的 hellobot.php。 使用自签名 SSL 的服务器 vps 托管,并将证书密钥上传到电报。

来自服务器日志。

149.154.167.209 - - [28/Jun/2016:13:48:00 +0300] "POST /apps/gate.php HTTP/1.0" 200 86 "-" "- 149.154.167.209 - - [28/Jun/2016:13:48:00 +0300] "POST /apps/gate.php HTTP/1.1" 200 86 "-" "- 149.154.167.209 - - [28/Jun/2016:13:48:00 +0300] "POST /apps/gate.php HTTP/1.0" 200 86 "-" "- 149.154.167.209 - - [28/Jun/2016:13:48:00 +0300] "POST /apps/gate.php HTTP/1.1" 200 86 "-" "-

如何解决这个问题?

【问题讨论】:

你找到这个问题的答案了吗? 【参考方案1】:

您的机器人应该存储最后一个update_id,然后通过 update_id 进行比较

【讨论】:

【参考方案2】:

当 Telegram 收到来自您的机器人用户的消息时,将消息以 JSON 格式发送到您的 webhook URL。

如果

    在您的响应页面中出现错误, 或需要很长时间才能完成响应,

然后 Telegram 再次将消息发送到您的服务器。

【讨论】:

如果您仔细检查附加的服务器日志,我的服务器会在正常时间响应 200 个代码。【参考方案3】:

你能发布一些代码吗?

如果您要求getupdates 并在每个result 上向用户发送响应;它可能会发送重复,因为您没有正确设置偏移量

偏移量(说明): 要返回的第一个更新的标识符。必须比先前接收到的更新的标识符中的最高值大一。默认情况下,会返回从最早的未确认更新开始的更新。一旦使用高于其 update_id 的偏移量调用 getUpdates,则认为已确认更新。 ...

#getupdates_offset

【讨论】:

我询问了 webhook 方法,谢谢回复,但对我来说没用。

以上是关于Telegram 向 webhook 发送重复的 POST JSON 请求的主要内容,如果未能解决你的问题,请参考以下文章

Telegram Webhook 和 Ngrok 无法正常工作

如何收听Telegram Bot错误? (Google App Script + Webhooks)

如何让 ngrok 工作的 Telegram webhook?

markdown 为Telegram Webhook设置路由

为什么我的Telegram机器人无休止地发送消息

Telegram bot 消息读取回调