I 3 errori comuni programmando bot di Telegram

Eccoci tornati a parlare di Telegram! Oggi tratteremo di alcuni errori tipici nella programmazione di Bot per questa piattaforma, errori che spesso sono difficili da scovare, e di conseguenza dietro cui si perde molto tempo.

1. getUpdates: perché continuo a ricevere gli stessi messaggi??

Se state utilizzando una libreria poco ottimizzata, oppure se ne state scrivendo una voi, o se non ne state utilizzando affatto, spesso vi sarete imbattuti in questo problema.

Problema: La funzione getUpdates ritorna sempre gli messaggi, sia quelli nuovi che quelli già letti

Soluzione: La funzione getUpdates è concepita per funzionare in questo modo. Se volete segnalare a telegram che i messaggi vengono “letti”, e di conseguenza far smettere a getUpdates di ritornarli, è necessario inviare un parametro insieme alla richiesta getUpdates. Il parametro in questione è offset, e il contenuto da inviare è un numero identificativo abbastanza grande. Dove lo prendiamo questo numero? Dalla precedente getUpdates!

Esempio:

Prima richiesta:
https://api.telegram.org/botXXXXXXXX:XXXX_XXXXXXXX-XXXXXXXXXXXXXX--XXXXX/getUpdates

che ci restituisce qualcosa di molto simile a:

Telegram getUpdates

Ecco, i parametri update_id contengono ciò che ci interessa. Infatti ora se eseguiremo la richiesta con offset uguale al parametro update_id più grande più uno. (714815832 + 1)

https://api.telegram.org/bot72841216:AAEW_w3NZ4rI2-2Sba5ge2jdNo3U--DYGyo/getUpdates?offset=714815833

2. setWebhook non funziona!

I problemi qui possono essere molteplici.

2.1 Il Webhook è settato correttamente?

Per verificarlo andate sul vostro browser all’indirizzo

https://api.telegram.org/botXXXXXXXX:XXXX_XXXXXXXX-XXXXXXXXXXXXXX--XXXXX/setWebhook?url=URL

e verificate che la risposta sia come la seguente

Telegram Bot setWebhook Response

Altrimenti avete qualche errore nell’url che volete usare come webhook (p.e. non usare https, url malformato, ecc…)

2.2 State utilizzando https o un certificato self-signed?

Perché funzionino i webHook hanno bisogno di utilizzare il protocollo https, e quindi occorre avere un certificato. Avete capito bene, occorre https, quindi non potrete utilizzare il puro http.

Se il certificato che usate per https è self-signed, allora dovrete inviare nella richiesta di set del webhook, anche il file della chiave pubblica del certificato self-signed codificato in base64. (Specifiche informazioni)

2.3 Telegram non usa una normale POST!

Infatti utilizza una post con encode multipart/form-data e non il solito application/x-www-form-urlencoded.

Per questo motivo in qualsiasi linguaggio stiate programmando, non dovete utilizzare i parametri POST, ma spesso e volentieri altri.

Per esempio, se usate PHP non dovete usare $_POST[], ma file_get_contents(“php://input”).

Se usate Node.Js, potrete (con express) fare qualcosa del tipo:

Telegram POST NodeJs

3. Invio di foto con caption/descrizione non riuscito

Anche se non molto documentato, quest’errore è piuttosto comune: cercare di inviare un’immagine con descrizione (caption) troppo lunga. Il risultato è che telegram rifiuta la richiesta di invio.

L’unico workaround a questo problema, è inviare insieme all’immagine un caption corto, con un link ad una descrizione dettagliata, oppure mandare immagine senza caption e, a seguito, inviare il messaggio di testo separatamente.

Questi erano secondo noi i 3 errori più comuni durante lo sviluppo di un bot di Telegram. Se avete incontrato anche voi uno di questi errori, o se ne avete altri, commentate!

Leggi Anche:

  1. INSIDEVCODE SVILUPPA BOT DI TELEGRAM
  2. TELEGRAM BOT IN RUBY CON TELEGRAMAPI
  3. TELEGRAM 3.0: CREARE UN BOT

Seguiteci anche su Facebook, Google Plus, Tumblr e Twitter, per restare sempre in contatto con noi e con le nostre guide.



Cerca

Seguici

Live da Facebook
Live da Twitter
Seguici su Telegram
Canale InsiDevCode Telegram