2015-08-16 18 views
8

Sto costruendo un telegram bot.Ordine messaggi API Telegram

Ciò significa che sono che gestisce più chat contemporaneamente allo (ognuna con un id di chat univoco).

Quando un utente invia un messaggio al bot risponde con una risposta.

Sto usando l'API telegramma che è su HTTP.

Tuttavia, quando desidero inviare alcuni messaggi a volte arrivano nell'ordine sbagliato poiché non è sicuro quale richiesta HTTP verrà accettata per prima.

Esiste un modo non documentato per inviare un parametro di sequenza all'API del telegramma o devo gestire le richieste HTTP in una coda?

+0

Invia messaggi in modo asincrono? –

+0

Sì. Tramite l'API – Guy

+0

Hai provato il metodo invokeAfterMsg? È disponibile anche sui bot? –

risposta

0

Ho creato un bot con telegram-cli e ho avuto lo stesso problema. Quindi penso che sia Telegram specifico per inviare messaggi con un delta breve come un pacchetto

+0

Come pacchetto? Intendi concatenarli manualmente? – Guy

0

I robot di telegram dovrebbero avere un'interazione simile a quella umana. Quindi il mio consiglio di evitare il tuo problema sarebbe quello di definire una costante tipo TYPINGSPEED e combinarla con la chiamata a bot bot sendChatAction() in modo che se "sembra" come se i tuoi messaggi fossero stati scritti da un essere umano che digita velocemente.

In ruby, darebbe qualcosa di simile:

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 ben mostra "nameofyourbot sta scrivendo ..." sullo schermo dell'utente.

Naturalmente, lo svantaggio di questo codice è che il processo di gestione della risposta non verrà restituito prima di alcuni secondi se il messaggio è lungo (a causa dell'uso della funzione sleep). Quindi, a seconda del numero di utenti simultanei che usano il bot, è meglio fare un po 'di pianificazione della capacità e generare più processi di cui hai bisogno per assicurarti che il tuo bot possa gestire il numero di discussioni parallele richieste.

Lo sto facendo io stesso e non ho mai sperimentato il problema che stai descrivendo.

0

È necessario fare in modo di inviarli nell'ordine corretto per sé stessi e quindi metterli in coda se non si desidera che non siano fuori servizio. L'API Bot HTTP ufficiale non garantisce un ordine corretto dei messaggi.

0

Attualmente, l'API Bot di Telegram non fornisce questo parametro. Detto questo, è necessario attendere la risposta del server e controllare se è andato bene prima di inviare il messaggio successivo.

Se si utilizzano NodeJs, esiste un modulo chiamato tgfancy che gestisce ordered message sending (insieme al polling e tante altre cose).

La risposta di Thibauld aggiunge un bel suggerimento di utilizzare il metodo sendChatAction per rendere l'interazione più colloquiale. Il mio unico punto è che un bot non dovrebbe fingere che sia un essere umano, quindi non c'è bisogno di far sembrare che ci sia una battitura. Detto questo, sendChatAction servirebbe allo scopo di indicare che il tuo bot ha ricevuto il messaggio dell'utente e lo sta elaborando.