【问题标题】:Telegram bug on iOS bot sending multiple times same messageiOS bot上的电报错误发送多次相同的消息
【发布时间】:2019-07-29 16:00:36
【问题描述】:

我想我在 iOS 应用上发现了一个 Telegram 错误,导致机器人多次发送相同的消息。重现问题的步骤是:

  • 点击内联按钮,输入回调
  • 在机器人回答之前立即锁定手机屏幕
  • 稍等片刻,然后解锁屏幕

此时会注意到机器人开始多次发送相同的消息。这并不容易重现,当机器人尚未回答时锁定屏幕很重要,因此需要一些时间来响应的机器人更容易。此外,在答案中,机器人必须发送一条消息(而不是编辑已经存在的消息)。

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


我已经在 Telegram 上联系了机器人支持,但没有人回复我。有没有遇到同样问题的人?

【问题讨论】:

    标签: ios telegram telegram-bot


    【解决方案1】:

    在 iOS 和 macOS 上,当我单击内联按钮并将客户端计算机 (macbook) 关闭(睡眠模式)并将其打开时,我的机器人会收到用户发送的最后一条消息。每次 message_id 都是一样的。 我通过以下方式解决它:当我的脚本向 Telegram 服务器发送请求时,它会收到响应。该响应包含一个 message_id 字段,我将其保存。

    任何下一条消息都必须有另一个 message_id。我只是将该数字与存储的数字进行比较,并且仅当该数字不是已保存时,我才运行脚本的其余部分。

    您可以尝试我的测试机器人并在 google table 中查看结果。

    @ios_bug_bot (https://t.me/ios_bug_bot)

    https://docs.google.com/spreadsheets/d/1VTx-O1w_-ka1RzGfaVLVBDu0CQxk16QeJTeFYOE4yvo/edit?usp=sharing

    机器人源代码在这里

    https://github.com/avtomatron/telegram_bot/blob/master/google_script_bot

    【讨论】:

    • 嗨,我很高兴其他人遇到了这个问题,这证明这实际上是一个电报错误。我们发现 Bot Framework 在向用户发送消息后不会发送 AnswerCallbackQuery (core.telegram.org/bots/api#answercallbackquery),并且该错误仅在用户退出电报客户端(阻止设备或“图标化”应用程序)之前发生发送 AnswerCallbackQuery。这就是为什么我们会在用户的消息到达后立即发送自己的消息(甚至在使用机器人回答之前)。
    • 这减少了错误发生的可能性,但不会完全取消它,因此我们也将消息 ID 保留在一边,如果来自用户的后续消息具有相同的 ID,我们将不响应。这样,如果用户再次单击按钮,消息 ID 是相同的,我们无法知道是用户再次按下按钮还是错误。这样机器人将永远不会响应。
    • 我们唯一想到的是:连同消息 ID,我们还留出了消息的时间戳,当具有相同 ID 的消息到达时,我们检查是否至少 5 秒从我们预留的时间戳传递。如果是这样,几乎可以肯定 AnswerCallbackQuery 已经发送,因此可能是用户点击了按钮,我们让机器人响应,否则我们阻止机器人的回答。
    • Sombe,我改了答案,请看一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2017-01-27
    • 2020-06-13
    相关资源
    最近更新 更多