【问题标题】:Telegram API messages orderTelegram API 消息顺序
【发布时间】:2015-11-09 02:48:18
【问题描述】:

我正在构建一个telegram bot

这意味着我同时管理多个聊天(每个聊天都有一个唯一的聊天 ID)。

当用户向机器人发送消息时,会回复一个答案。

我正在使用通过 HTTP 的电报 API。

但是,当我想发送一些消息时,有时它们会以错误的顺序到达,因为不确定哪个 HTTP 请求会首先被接受。

是否有任何未记录的方式将序列参数发送到电报 API 或者我必须在队列中处理 HTTP 请求?

【问题讨论】:

  • 你是否以异步方式发送消息?
  • 你试过invokeAfterMsg方法了吗?它也可以在机器人上使用吗?
  • 您可以尝试使用我们的工具:hubtype.com/products/chatbots.html 它与 Telegram 机器人集成并为您处理消息排序

标签: chatbot telegram-bot


【解决方案1】:

我用 telegram-cli 构建了一个机器人并遇到了同样的问题。 所以我认为将短时间增量的消息作为捆绑发送是 Telegram 特有的

【讨论】:

    【解决方案2】:

    Telegram 机器人应该具有类似人类的交互。所以我建议避免你的问题是定义一个排序 TYPINGSPEED 常量并将它与 sendChatAction() bot api调用结合起来,这样如果“感觉”你的消息实际上是由一个“快速打字”的人写的.

    在 ruby​​ 中,它会给出这样的结果:

    your_msg.split("\n").each do |line|
        writing_time=line.length/TYPINGSPEED
        TelegramBot.client.api.sendChatAction(chat_id: chat_id, action: "typing")
        sleep(writing_time)
        TelegramBot.client.api.sendMessage(your_options)
    end
    

    sendChatAction 在用户屏幕上很好地显示“nameofyourbot is writing...”。

    当然,此代码的缺点是如果您的消息很长(因为使用了sleep 函数),处理答案的进程将不会在几秒钟内返回。因此,根据同时使用您的机器人的用户数量,您最好进行一些容量规划并根据需要生成尽可能多的进程,以确保您的机器人可以处理所需的并行讨论数量。

    我自己在做这件事,我从来没有遇到过你描述的问题。

    【讨论】:

      【解决方案3】:

      目前 Telegram Bot API 不提供此类参数。 也就是说,您需要等待服务器的响应并在发送下一条消息之前检查它是否正常。

      如果您使用 NodeJs,有一个名为 tgfancy 的模块可以为您处理 ordered message sending(以及轮询和许多其他事情)。

      Thibauld 的回答添加了一个非常好的建议,即使用 sendChatAction 方法以使交互看起来更具会话性。我唯一的观点是机器人不应该假装它是一个人,所以没有必要让它看起来像有一个打字。也就是说,sendChatAction 将用于表明您的机器人已收到用户的消息并正在处理它。

      【讨论】:

        【解决方案4】:

        必须为自己按正确的顺序发送它们,因此如果您不希望它们出现故障,请将它们排队。 官方的 HTTP Bot API 并不能确保正确的消息顺序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-12
          • 2018-08-06
          • 2016-04-04
          • 2014-08-11
          • 1970-01-01
          • 2016-05-09
          • 2017-09-17
          • 2017-11-28
          相关资源
          最近更新 更多