11

我正在构建一个电报机器人

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

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

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

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

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

4

4 回答 4

0

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

如果您使用 NodeJs,那么有一个名为tgfancy的模块可以为您处理有序的消息发送(以及轮询和许多其他事情)。

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

于 2017-04-24T13:22:15.673 回答
0

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函数),处理答案的进程不会在几秒钟内返回。因此,根据同时使用您的机器人的用户数量,您最好进行一些容量规划并根据需要生成尽可能多的进程,以确保您的机器人可以处理所需的并行讨论数量。

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

于 2016-04-27T15:16:26.840 回答
0

我用电报cli构建了一个机器人并遇到了同样的问题。因此,我认为将具有短时间增量的消息作为捆绑发送是 Telegram 特有的

于 2015-08-19T21:29:08.937 回答
-1

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

于 2017-04-20T20:13:01.543 回答