清除Telegram Bot中的“​​pending_update_count”

时间:2016-12-27 16:41:46

标签: webhooks telegram telegram-bot telegram-webhook

我想清除机器人中的所有pending_update_count

以下命令的输出:

https://api.telegram.org/botxxxxxxxxxxxxxxxx/getWebhookInfo

显然我用xxx

替换了真正的API令牌

就是这样:

{
 "ok":true,"result":
    {
     "url":"",
     "has_custom_certificate":false,
     "pending_update_count":5154
    }
}

正如您所看到的,我现在有5154个未读更新! (我很确定这些待定更新是错误的!因为没有人使用这个Bot!它只是一个测试机器人)

顺便说一句,这个pending_update_count数字正在快速增长! 现在我正在写这篇文章,数字增加了51并达到了5205!

我只想清除这些待处理的更新。 我很确定这个Bot已陷入无限循环!

有没有办法摆脱它?

P.S:

我还清除了webhook网址。但没有改变!

更新

getWebhookInfo的输出是:

{
   "ok":true,
   "result":{
      "url":"https://somewhere.com/telegram/webhook",
      "has_custom_certificate":false,
      "pending_update_count":23,
      "last_error_date":1482910173,
      "last_error_message":"Wrong response from the webhook: 500 Internal Server Error",
      "max_connections":40
   }
}

为什么我得到Wrong response from the webhook: 500 Internal Server Error

6 个答案:

答案 0 :(得分:6)

我认为你有两个选择:

  1. 设置什么都不做的webhook,只对电报服务器说200 OK。电报将发送所有更新到该URL,并清除该队列。
  2. 禁用webhook并在使用getUpdates方法获取更新后,再次启用webhook
  3. <强>更新

    webhook的问题在你身边。您可以尝试在您的URL上模拟电报的POST查询。 它可以是这样的:

    {"message_id":1,"from":{"id":1,"first_name":"FirstName","last_name":"LastName","username":"username"},"chat":{"id":1,"first_name":"FirstName","last_name":"LastName","username":"username","type":"private"},"date":1460957457,"text":"test message"}
    

    例如,您可以使用PostMan将此文本作为POST查询正文发送,然后尝试调试后端。

答案 1 :(得分:2)

只需在钩子方法的末尾添加return 1;即可。

<强>更新

通常这是因为数据库的查询延迟。

答案 2 :(得分:1)

对于任何在2020年及以后看到此消息的人,Telegram API现在支持根据{{3 }}。

答案 3 :(得分:0)

我解决的就是这样

POST tg.api/bottoken/setWebhook to emtpy "url"
POST tg.api/bottoken/getUpdates
POST tg.api/bottoken/getUpdates with "offset" last update_id appeared before

做这几次服务器

POST tg.api/bottoken/getWebhookInfo

一看就知道了。

POST tg.api/bottoken/setWebhook with filled "url"

答案 4 :(得分:0)

我通过更改文件访问权限文件-将权限文件设置为755

来解决此问题

然后增加php.ini文件中的内存限制

答案 5 :(得分:0)

一种快速而肮脏的方法是在此处获取一个临时 webhook:https://webhook.site/ 和 将你的 webhook 设置为那个(它每次都会用 HTTP/200 代码回答,将你的待处理消息重置为零)