我认为我已经在iOS应用程序中发现了一个Telegram错误,该错误导致该漫游器多次发送同一条消息。重现此问题的步骤是:
这时会注意到,机器人开始多次发送相同的消息。复制起来并不容易,在僵尸程序尚未响应时锁定屏幕非常重要,因此对于需要花费一些时间进行响应的僵尸程序而言,它更容易。此外,在答案中,机器人必须发送一条消息(而不是编辑已存在的消息)。
我使用Microsoft Bot Framework开发了该bot,但是所有bot都给我带来了同样的问题,无论是我的还是其他人都使用与我不同的其他技术开发的。例如,我也能够在@BotFather上重现它。有时,它进入一个循环,要停止它,您必须将任何消息发送给机器人。 我使用的是iPhone 5,iOS版本12.1.2,电报版本5.2。我也在iPhone 8上尝试过,但没有在其他版本的Telegram上尝试过。 我也碰巧收到了20多个相同的消息。
我已经与Telegram的Bot支持人员联系,但没有人回答我。有没有人遇到过同样的问题?
答案 0 :(得分:1)
在iOS和macOS上,我使用Google电子表格脚本来控制Telegram机器人。 每次我的漫游器收到一个Webhook时,它都会发送回一些东西。 当我关闭客户端计算机(macbook)(睡眠模式)并打开它时,我的机器人收到了用户发送的最后一条消息。一次又一次。 我通过以下方式解决它:当我的脚本向电报服务器发送请求时,它会收到响应。该响应包含一个message_id字段,我将其保存。
下一封邮件必须具有更大的message_id。但是,当我打开Macbook时,它会发送一条带有先前编号的消息。我只是将该数字与存储的数字进行比较,并且只有当数字更大或相同时,才运行脚本的其余部分。对于每个聊天用户,我都存储该号码。看:
var finalurl = 'https://api.telegram.org/bot'+botid+"/sendmessage"
var response=UrlFetchApp.fetch(finalurl, options);
var obj = JSON.parse(response.getContentText());
var message_id = obj.result.message_id;
PropertiesService.getScriptProperties().setProperty(chatid, message_id)
当我收到webhook时:
var current_message_id=obj.callback_query.message.message_id;
chatid = obj.callback_query.message.chat.id;
var last_message_id = Number(PropertiesService.getScriptProperties().getProperty(chatid));
//saveData ("cur="+current_message_id+" last="+last_message_id+" rez="+(current_message_id>=last_message_id ));
if (current_message_id>=last_message_id ){
// do the job
}