2015-08-16 127 views
8

我正在構建一個telegram bot電報API消息訂單

這意味着我是一次管理幾個聊天(每個都有一個唯一的聊天ID)。

當用戶將消息發送到機器人回覆一個答案。

我正在使用通過HTTP的電報API。

然而,當我想有時候送幾個郵件到達時順序錯誤,因爲它是不確定的,其HTTP請求將首先接受。

是否有一個序列參數發送到電報API任何無證無論如何我必須處理隊列中的HTTP請求?

+0

你是否以異步方式發送消息? –

+0

是的。通過API。 – Guy

+0

您是否嘗試過invokeAfterMsg方法?它也可以在機器人上使用嗎? –

回答

0

我使用telegram-cli構建了一個bot,並且遇到了同樣的問題。 所以我認爲這是特定的電報用很短的時間增量將消息作爲包

+0

作爲捆綁包?你的意思是手動連接它們嗎? – Guy

0

電報機器人應該有類似人類的互動。所以我的建議,以避免您的問題將是定義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函數),處理答案的過程在數秒之前不會返回。因此,根據同時使用您的機器人的用戶數量,您最好做一些容量規劃並根據需要產生儘可能多的進程,以確保您的機器人可以處理所需的並行討論數量。

我這樣做我自己,我從來沒有經歷過你所描述的問題。

0

必須照顧他們以正確的順序發送給你自己,因此,如果你不想讓他們失序排隊。 官方HTTP Bot API不能確保正確的消息順序。

0

目前,Telegram Bot API不提供此類參數。 也就是說,您需要等待服務器的響應,並在發送下一條消息之前檢查它是否正常。

如果您使用NodeJs,那麼有一個名爲tgfancy的模塊可以爲您處理ordered message sending(以及輪詢和其他許多事情)。

Thibauld的回答增加,以使交互作用看起來更加會話使用sendChatAction方法的一個非常好的建議。我唯一的一點是,一個機器人不應該假裝它是一個人,所以沒有必要讓它看起來像一個打字。那是,sendChatAction將用於表明您的機器人已收到用戶的消息並正在處理它。