iOS漫游器上的电报错误发送多次相同的消息

时间:2019-02-07 10:50:00

标签: ios telegram telegram-bot

我认为我已经在iOS应用程序中发现了一个Telegram错误,该错误导致该漫游器多次发送同一条消息。重现此问题的步骤是:

  • 单击内联按钮,键入callback
  • 在机器人应答之前立即锁定手机屏幕
  • 稍等片刻,然后解锁屏幕

这时会注意到,机器人开始多次发送相同的消息。复制起来并不容易,在僵尸程序尚未响应时锁定屏幕非常重要,因此对于需要花费一些时间进行响应的僵尸程序而言,它更容易。此外,在答案中,机器人必须发送一条消息(而不是编辑已存在的消息)。

我使用Microsoft Bot Framework开发了该bot,但是所有bot都给我带来了同样的问题,无论是我的还是其他人都使用与我不同的其他技术开发的。例如,我也能够在@BotFather上重现它。有时,它进入一个循环,要停止它,您必须将任何消息发送给机器人。 我使用的是iPhone 5,iOS版本12.1.2,电报版本5.2。我也在iPhone 8上尝试过,但没有在其他版本的Telegram上尝试过。 我也碰巧收到了20多个相同的消息。


我已经与Telegram的Bot支持人员联系,但没有人回答我。有没有人遇到过同样的问题?

1 个答案:

答案 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
}