2015-08-16 15 views
8

Ich baue eine telegram bot.Telegram API Nachrichten bestellen

Das bedeutet, ich bin Verwaltung mehrerer Chats auf einmal (jeweils mit einer eindeutigen Chat-ID).

Wenn ein Benutzer eine Nachricht an den Bot sendet antwortet mit einer Antwort.

Ich verwende die Telegramm-API, die über HTTP ist.

Wenn ich jedoch ein paar Nachrichten senden möchte, kommen sie manchmal in der falschen Reihenfolge, da es unsicher ist, welche HTTP-Anfrage zuerst angenommen wird.

Gibt es eine nicht dokumentierte Möglichkeit, einen Sequenzparameter an die Telegramm-API zu senden, oder muss ich die HTTP-Anfragen in einer Warteschlange behandeln?

+0

Senden Sie Nachrichten asynchron? –

+0

Ja. Über die API. – Guy

+0

Haben Sie die InvokeAfterMsg-Methode versucht? Ist es auch auf Bots verfügbar? –

Antwort

0

Ich baute einen Bot mit Telegramm-CLI und bekam das gleiche Problem. Also ich denke, es ist Telegram-spezifische Nachrichten mit einem kurzen Zeit-Delta als ein Bündel senden

+0

Als ein Bündel? Meinst du das manuell? – Guy

0

Telegram Bots sollen eine menschenähnliche Interaktion haben. Also mein Rat, um Ihr Problem zu vermeiden wäre, eine Art TYPINGSPEED Konstante zu definieren und es mit dem Bot-API-Aufruf sendChatAction() zu kombinieren, so dass, wenn "fühlt" wie Ihre Nachrichten tatsächlich von einem 'schnell schreibenden' Menschen geschrieben werden.

In Rubin, wäre es so etwas wie diese geben:

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 schön zeigt "nameofyourbot schreibt ..." auf dem Benutzerbildschirm.

Natürlich ist der Nachteil dieses Codes, dass der Prozess, der die Antwort verarbeitet, nicht vor einigen Sekunden zurückkehrt, wenn Ihre Nachricht lang ist (wegen der Verwendung der sleep-Funktion). Abhängig von der Anzahl der gleichzeitigen Benutzer, die Ihren Bot verwenden, sollten Sie eine gewisse Kapazitätsplanung durchführen und so viele Prozesse generieren, wie Sie benötigen, um sicherzustellen, dass Ihr Bot die Anzahl der erforderlichen parallelen Diskussionen bewältigen kann.

Ich mache das selbst und ich habe nie das Problem erlebt, das Sie beschreiben.

0

Sie müssen müssen kümmern sich darum, sie in der richtigen Reihenfolge für Sie selbst und damit Warteschlange sie, wenn Sie nicht wollen, dass sie außer Betrieb geraten. Die offizielle HTTP-Bot-API stellt keine korrekte Nachrichtenreihenfolge sicher.

0

Momentan bietet die Telegram Bot API keinen solchen Parameter. Dafür müssen Sie auf die Antwort des Servers warten und prüfen, ob alles in Ordnung war, bevor Sie die nächste Nachricht senden.

Wenn Sie NodeJs verwenden, gibt es ein Modul namens tgfancy, das ordered message sending (zusammen mit Abfragen und so viele andere Dinge) für Sie behandelt.

Thibaulds Antwort fügt einen wirklich netten Vorschlag hinzu, die sendChatAction Methode zu verwenden, um die Interaktion gesprächiger zu machen. Mein einziger Punkt ist, dass ein Bot nicht so tun soll, als sei er ein Mensch, also muss man nicht so aussehen, als würde man tippen. Das heißt, würde dazu dienen, anzuzeigen, dass Ihr Bot die Nachricht des Benutzers erhalten hat und diese verarbeitet.

Verwandte Themen