bot-telegram-non-funziona

Durante l’utilizzo di un bot Telegram sviluppato in PHP potremmo incappare in un problema non molto intuitivo da risolvere.

Che sia una risposta all’interno del bot stesso o un messaggio inviato ad un canale, se il testo non raggiungesse la destinazione desiderata potrebbe anche non essere colpa del mancato funzionamento del bot.

Succede spesso anche a bot che fino a quel momento hanno funzionato senza alcun problema, improvvisamente la risposta che ci aspettavamo non arriva più e ci ritroviamo a smantellare l’intero codice pur di capire come mai ha smesso di funzionare.

In realtà il bot funziona, ma siamo noi che potremmo dimenticare il fatto che risponde tramite delle chiamate url verso il servizio https://api.telegram.org. Il problema potrebbe essere nella presenza di caratteri speciali all’interno della variabile del messaggio che vogliamo inviare.

Se ci trovassimo per esempio a dover inviare un messaggio del genere:

$messaggio = "L’invincibile Hulk…";

Nel momento in cui ne andremo a fare un urlencode per inserirlo nel parametro text dell’url da spedire verrà generato un errore per colpa dei due caratteri , in quanto si tratta di due caratteri speciali che bisogna codificare.

Come risolvere il problema?

Senza metterci a cercare online tabelle di conversione dei caratteri, possiamo utilizzare il bot @urltelegrambot, che ci viene incontro per tradurre tutti i caratteri speciali che vogliamo, e per testare la visualizzazione di un codice html.

url-bot-telegram

Il bot convertirà in formato url tutti i caratteri che gli invierete. Siano essi singoli caratteri (speciali e non), emoji o pezzi di codice html, questi verranno convertiti nella stringa URL da inserire dopo il tag text= di una chiamata di risposta del bot, permettendoci di correggere il messaggio che vogliamo inviare ricordandoci di attivare il parsing HTML, come in questo caso

$messaggio = “L”.urldecode(“%E2%80%99″).”invincibile Hulk”.urldecode(“%E2%80%A6”);

$messaggio = urlencode ($messaggio);

$url = “https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHATID>&parse_mode=HTML&text=”.$messaggio;

Praticamente bisogna prima sostituire tutti i caratteri speciali con l’urldecode del codice comunicato dal bot, dopodiché convertire con l’urlencode tutto il messaggio e darlo in pappa all’url.

Collegamenti esterni

Può essere utile creare una mappa di conversione, sostituendo tutte le occorrenze con un solo comando, le info nell’articolo Sostituire le occorrenze di una stringa in PHP.

Conclusione

Noi vi diamo appuntamento alla prossima guida per Telegram, nel mentre vi ricordiamo di seguirci sui Canali Telegram InsideTelegram e InsiDevCode , poi se vi avanza del tempo oppure se avete problemi con Telegram oppure dei dubbi amletici non esitate ad iscrivervi al nostro SuperGruppo InsideTelegram Lab.

Quando il bot Telegram non manda più i messaggi