11

電報ボットを構築しています。

これは、一度に複数のチャットを管理していることを意味します(それぞれに固有のチャット ID があります)。

ユーザーがボットにメッセージを送信すると、回答が返信されます。

HTTP 経由のテレグラム API を使用しています。

ただし、いくつかのメッセージを送信したい場合、どの HTTP 要求が最初に受け入れられるかわからないため、メッセージが間違った順序で到着することがあります。

テレグラム API にシーケンス パラメータを送信する文書化されていない方法はありますか、それとも HTTP リクエストをキューで処理する必要がありますか?

4

4 に答える 4

0

telegram-cli でボットを作成しましたが、同じ問題が発生しました。ということで、短い時間差のメッセージをまとめて送信するのはTelegram特有だと思います

于 2015-08-19T21:29:08.937 に答える
0

電報ボットは、人間のようなやり取りを行うことになっています。したがって、あなたの問題を回避するための私のアドバイスは、ソートTYPINGSPEED定数を定義し、それをボットAPI呼び出しと組み合わせてsendChatAction()、メッセージが実際に「高速タイピング」の人間によって書かれているように「感じる」ようにすることです。

ルビーでは、次のようになります。

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 に答える
-1

自分にとって正しい順序でそれらを送信するように注意する必要があります。そのため、順序が乱れたくない場合はキューに入れます。公式の HTTP ボット API は、メッセージの正しい順序を保証しません。

于 2017-04-20T20:13:01.543 に答える