我有一个简单的机器人(我正在使用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 ### "
]);
}
答案 0 :(得分:0)
Telegram Bot API将在服务器端考虑丢弃时重试webhook请求,因此您需要缩短响应时间。
一种解决方案是快速处理它们,但似乎并不容易。
如果您知道如何在超时之前关闭HTTP连接,那就这样做,因为它的实现与您的HTTP服务器不同,请尝试搜索NginX fastcgi close upstream connection
。