电报API消息订单
我正在构建一个telegram bot。电报API消息订单
这意味着我是一次管理几个聊天(每个都有一个唯一的聊天ID)。
当用户将消息发送到机器人回复一个答案。
我正在使用通过HTTP的电报API。
然而,当我想有时候送几个邮件到达时顺序错误,因为它是不确定的,其HTTP请求将首先接受。
是否有一个序列参数发送到电报API任何无证无论如何我必须处理队列中的HTTP请求?
电报机器人应该有类似人类的互动。所以我的建议,以避免您的问题将是定义TYPINGSPEED
常数,并将其与sendChatAction()
机器人API调用结合起来,以便如果“感觉”像你的消息实际上是由“快速打字”的人类写的。在用户屏幕上
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正在写...”:
在Ruby中,它会给这样的事情。
当然,该代码的缺点是如果消息很长(因为使用sleep
函数),处理答案的过程在数秒之前不会返回。因此,根据同时使用您的机器人的用户数量,您最好做一些容量规划并根据需要产生尽可能多的进程,以确保您的机器人可以处理所需的并行讨论数量。
我这样做我自己,我从来没有经历过你所描述的问题。
你必须照顾他们以正确的顺序发送给你自己,因此,如果你不想让他们失序排队。 官方HTTP Bot API不能确保正确的消息顺序。
目前,Telegram Bot API不提供此类参数。 也就是说,您需要等待服务器的响应,并在发送下一条消息之前检查它是否正常。
如果您使用NodeJs,那么有一个名为tgfancy的模块可以为您处理ordered message sending(以及轮询和其他许多事情)。
Thibauld的回答增加,以使交互作用看起来更加会话使用sendChatAction方法的一个非常好的建议。我唯一的一点是,一个机器人不应该假装它是一个人,所以没有必要让它看起来像一个打字。那是,sendChatAction
将用于表明您的机器人已收到用户的消息并正在处理它。
你是否以异步方式发送消息? –
是的。通过API。 – Guy
您是否尝试过invokeAfterMsg方法?它也可以在机器人上使用吗? –