首页 > 解决方案 > Telegram bot API - 如何清除pending_update_count

问题描述

我正在使用 codeigniter + PHP 开发电报机器人来响应用户请求,并且从今天早上开始,它停止工作,并且 pending_update_count : 210 并且还在增加......
我的问题是我们如何清除挂起的计数?

我有什么尝试:
1. 取消设置 webhook 并再次设置 => 这不起作用,pending_update_count 仍然没有清除
2. 使用没有做任何事情的控制器(看下面我的代码)=> 这也不起作用,pending_update_count 仍然没有没有清除

这是我没有做任何事情的代码

class index extends CI_Controller {

function __construct() {
    parent::__construct();

}

public function index() {
    echo('halooo');
    $result = 'ok';
    return $result;
}
}

这就是我通常如何处理来自电报机器人的消息

class index extends CI_Controller {

function __construct() {
    parent::__construct();

}

public function index() {
    $content = file_get_contents("php://input");
    $update = json_decode($content, true);
    $chatID = $update["message"]["from"]["id"];     

    $strcmd = trim($update["message"]["text"]);     

    $strMsg = $this->process($strcmd); //process

    $sendto =API_URL."sendmessage?chat_id=".$chatID."&sendmessage?text=".$strMsg."";
    file_get_contents($sendto);
}   
}           

我在stackoverflow中查看了这些问题,但没有帮助:
1.在Telegram Bot中清除“pending_update_count”
2.在Telegram Bot中清除pending_update_count

标签: phpcodeignitertelegram-bot

解决方案


好的,我已经成功解决了我的问题,我会在这里发布以防有人需要它......
在我发布我的解决方案之前,这个问题有些奇怪,
通常如果pending_update_count > 0,这意味着我们的问题源代码,
我们在某个地方有错误,是由我们的源代码中的某些东西触发的......

并且电报机器人会处理它,由于它是错误的,
我们的 PHP 无法返回状态 ok (200) 给电报,
所以电报会一次又一次地发送它......好像我们有无限循环......
从那里我们知道触发错误的命令,我们可以跟踪我们的源代码并修复它,
同时对于pending_update_count(如果你必须让它快速变为0),通常我们可以使用没有做任何事情的PHP来解决它,
或者你可以通过返回状态 ok (200) 来尝试,使用此命令 => http_response_code(200),
并且不要忘记跟踪和修复您的源代码以使相同的错误不再发生;

但是这一次,它并没有像往常那样表现,电报机器人只是安静,
它没有发送相同的消息/命令,这会导致我们的源代码像往常一样出现错误。
好像,我们的源代码没有收到来自电报机器人的更新。
并且使用没有做任何事情的php也不起作用......

这就是我解决它的方法(巧合)
所以我尝试通过撤销我的机器人(在机器人父亲中运行/revoke)并获取新令牌来解决它,
然后我使用新令牌更新我的所有源代码,再次设置 webhook,
然后使用没有做任何事情的PHP,突然我看到pending_update_count 值下降......
而对于导致这种情况的错误,我仍然找不到问题......

所以,这就是我的解决方案,希望这可以帮助别人......


推荐阅读