Telegram bot:循环数据库查询

时间:2017-11-04 00:05:30

标签: telegram-bot php-telegram-bot

我有一个简单的机器人(我正在使用webhook)响应命令并转到数据库并为找到的每条记录发送贴纸和简单的html消息。

如果有很多记录(20个或更多并且用了超过2分钟来完成这个时间),僵尸就会疯狂并显示结果4次(完成一次,然后又重新开始3次),我试图添加一个sleep()计时器,以避免循环,但没有运气。不确定我错过了什么或做错了什么。

这是我的代码:

$update = json_decode(file_get_contents('php://input'));

if (isset($update->message)){

//Fetching update
$message = $update->message;
$message_id = $update->message->message_id;
$text = $message->text;
$chat_id = $message->chat->id;

    switch($text){     
    case "read":
        $age = 18;
        read_fields($age, $chat_id);
        break;

    default:
        bot('SendMessage',[
            'chat_id' => $chat_id,
            'text' => "This is a test"
        ]);
    }
}

function read_fields($age, $chat_id){
    include("conexion.inc");

    $i = 0; 
    $sticker = "";
    $id = "";
    $name = "";

    $sql = "SELECT id, name, sticker FROM Persons WHERE age =  ".$age;
    $php = mysql_query($sql, $con);
    while($row=mysql_fetch_assoc($php)){

        $sticker = $row['id_sticker']; 
        $id = $row['id'];
        $name = $row['name']; 

        bot('sendSticker',[
            'chat_id' => $chat_id,
            'sticker' => $id_sticker
        ]);

        $message = $id."-<b>".$name."</b>";

        bot('SendMessage',[
            'chat_id' => $chat_id,
            'parse_mode' => "HTML",
            'text' => $mensaje
        ]); 

        sleep(3);

        $i++;
    }

    bot('SendMessage',[
        'chat_id' => $chat_id,
        'text' => "### ".$i." total ### "
   ]);    

}

1 个答案:

答案 0 :(得分:0)

Telegram Bot API将在服务器端考虑丢弃时重试webhook请求,因此您需要缩短响应时间。

一种解决方案是快速处理它们,但似乎并不容易。

如果您知道如何在超时之前关闭HTTP连接,那就这样做,因为它的实现与您的HTTP服务器不同,请尝试搜索NginX fastcgi close upstream connection