如何从Telegram Bot数据库中删除所有请求(getUpdates)

时间:2018-01-28 19:37:21

标签: php telegram-bot

你好我的机器人继续向我发送消息。 我的代码是:

while(true)
{
    header('Content-Type: text/html; charset=utf-8');
    $token= "MY-TOKEN";
    $url= "https://api.telegram.org/bot".$token."/getUpdates";
    $update = file_get_contents($url);
    $arrayUpdate= json_decode($update, true);
    foreach ($arrayUpdate['result'] as $key) {
            $chat_id = $key['message']['from']['id'];
            $command = $key['message']['text'];
    }
    if($command == "/start"){
        $text= "starting...";
        $url= "https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chat_id."&text=".$text;
        file_get_contents($url);
    }
}

我的机器人向我发送消息无限我希望我的机器人在我使用它时发送消息然后停止并等待下一个请求。

1 个答案:

答案 0 :(得分:0)

您的问题是您在无限while循环中放置检查更新的代码。所以你得到无限的信息。解决这个问题:

  • 管理更新的“抵消”。每次更新都有一个名为update_id的唯一ID号。每次收到更新时,其update_id等于最后一条消息的update_id + 1(每次更新到达时,其update_id都会增加一个)。您可以通过在执行update_id时传递offset来要求bot api仅获取getUpdates大于或等于您指定的更新的更新:

    这是一个使用GET的例子:
    api.telegram.org/bot<TOKEN>/getUpdates?offset=<UPDATE_ID>

    保存收到的最后一条消息的update_id。将其添加1.下次当您通过getUpdates要求更新时,请将此新update_id作为offset传递,如上所示(或通过POST)。 api将为您带来下一条收到的消息。此外,当您使用偏移量来获取新消息时,旧消息将被删除。使用getUpdates
  • 无法获取这些内容
  • 仅处理您收到的最后一条消息,而不是全部消息。目前,您正在处理一个请求中收到的所有邮件。但是这样你就可以不止一次地处理旧消息。所以只需处理最后一个,让api在每个请求中删除最后一条消息。
  • 保存在getUpdates队列中的消息最终将变为空,因为每个请求中的每条旧消息都会被删除。不要忘记照顾这种情况。

有关getUpdates的更多信息: API Documentation