Telegram 3.0: Creare un Bot

Da poco tempo le app di Telegram si sono aggiornate alla versione 3.0, introducendo, tra le tante novità, delle vere e proprie API per i Bot, facilitandone la creazione. Vediamo come funzionano e come poterne creare uno nostro!

Telegram

Prima…

Non che prima non ci fossero, ma se qualche disgraziato (come me), ha provato a scrivere Bot telegram prima di quest’aggiornamento, sa bene cosa intendo. Bisognava trovare o scrivere librerie per il protocollo MTProto di telegram, per la tecnologia a layer TL-schema ed il suo relativo linguaggio TL, finendo con il programmare in esadecimale. Senza contare che prima serviva un numero di telefono vero e proprio! Insomma chi più ne ha, più ne metta.

…Ora

Ma grazie a questo update, la parte programmativa dei nostri Bot sarà la cosa più semplice del mondo, lasciando che sia il lato creativo quello più importante. Infatti ogni richiesta del singolo bot, si dovrà trasformare in una banalissima richiesta GET o POST, con i risultati in JSON.

In più non sarà più necessario il numero di telefono per i bot, e questi avranno delle limitazioni, come avere sempre lo stato “Bot” invece di “online” o “last seen:..”, ma anche delle comodità. Una delle tante è le tastiere personalizzate. Potremo infatti decidere di avere una tastiera composta da 5 tasti con le relative stelline, per esempio per una votazione da 1 a 5, o solo alcune lettere come ABCD per una risposta ad un quiz ad esempio.

Ma entriamo nel vivo, e vediamo ora come creare un Bot.

Gli argomenti che tratterò in quest’articolo sono tratti dalla pagina dedicata alle API di Telegram.

Creazione

Ironia della sorte, per creare un Bot, bisogna scrivere ad un Bot, chiamato @BotFather.

Telegram BotFather - Comandi

Telegram BotFather – Comandi

Non appena inizierà la chat, questo ci avviserà dei comandi utilizzabili.

Il primo comando è proprio ciò che ci serve: /newbot.

Dando questo comando @BotFather ci chiederà dapprima il nome del nostro Bot, e poi l’username con cui potremo farlo aggiungere a chi vogliamo (il nome dopo la @, per intenderci).

Quest’ultimo dovrà necessariamente terminare con “Bot”. Nomi validi quindi sono ilmiobot, superbot, ecc…, sempre che non siano già stati scelti da altri utenti.

Una volta finita la creazione del Bot, @BotFather ci risponderà così:

Telegram BotFather - Token

Telegram BotFather – Token

L’informazione più importante è ovviamente il token, una stringa lunga 45 caratteri, che avrà la funzionalità di una coppia “utente-password“. Con questa comunicheremo con il serverpiù avanti.

Se vogliamo poi modificare il titolo del Bot (/setdescription), l’username (/setname) o altri parametri potremo farlo, ma dal momento che ritengo ciò piuttosto semplice una volta capito come funziona @BotFather, salterò questi argomenti, a favore delle famigerate…

… Richieste GET!

Finalmente passiamo al dialogo bot-server. Ogni richiesta che faremo, sarà fatta a:

https://api.telegram.org/botTOKEN/<metodo>

Dove al posto di <token> dovremo sostituire il token datoci da @BotFather, e al posto di <metodo> la specifica richiesta che vogliamo fare. Per fare un test di funzionamento possiamo usare la funzione getMe:

https://api.telegram.org/botTOKEN/getMe

Che ritorna le informazioni sul Bot, quali id, first_name, last_name e username.

Se il test è andato a buon fine, possiamo procedere. La prima cosa che normalmente si vuole fare, è richiedere i messaggi ricevuti dal Bot, per poi magari elaborarli e dare una risposta. Abbiamo due metodi per far ciò, dove però uno esclude l’altro: getUpdates e setWebhook.

getUpdates

Ecco la semplice richiesta GET:

https://api.telegram.org/botTOKEN/getUpdates

Eventuali parametri da passare a questa richiesta sono offset, limit, e timeout. Ad esempio questa richiesta chiede tutti gli update più recenti di quello numero 914544921, al massimo 10 update, e, se non sono presenti, aspettane fino a 30 secondi:

https://api.telegram.org/botTOKEN/getUpdates?offset=914544922&limit=10&timeout=30

Notare come, per dire “più recenti di quello numero 914544921”, occorra inserire come parametro offset lo stesso numero+1. Da dove salta fuori questo numero? Se provate a richiedere getUpdates senza parametri, vedrete tutti gli ultimi messaggi ricevuti; ecco, quel numero è il valore del parametro update_id del messaggio.

setWebhook

Un secondo metodo, non per neofiti, per ricevere messaggi è setWebhook. Passando come parametro url un indirizzo, appena il Bot riceverà un messaggio, verrà inviata una richiesta HTTPS POST a quell’url, con i dati formattati in JSON.

Questo metodo, se usato, impedisce di ricevere i messaggi con getUpdates, non supporta connessioni http ma solo https, e non supporta certificati auto-firmati.

sendMessage

Una volta preso il messaggio e dopo averlo elaborato, occorre mandare una risposta!

Il metodo sendMessage fa al caso nostro. I parametri obbligatori sono l’id della chat (utente o gruppo che sia) e il testo del messaggio, rispettivamente chat_id e text.

Il parametro chat_id potrete ottenerlo da un messaggio ricevuto, ad esempio con getUpdates. Una volta ottenuto il messaggio, questo parametro si trova sotto message->chat->id.

E Tanto Altro con Telegram!

Questa è la logica del nuovo funzionamento per i Bot, come avete visto è molto semplice.

Tanti altri metodi, che ora non abbiamo trattato, come sendPhoto, sendAudio, sendLocation ecc.. vi aspettano documentati sulla pagina delle API di Telegram.

Nel prossimo articolo vedremo le richieste GET in pratica, in un linguaggio come il Ruby.

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

Appassionato fin da piccolo al mondo telematico, segue la sua passione studiando Ingegneria Informatica presso il Politecnico di Milano. Predilige linguaggi lato client come C, Java, Ruby e Python, ma ha conoscenze anche nel web con PHP, SQL, Javascript, HTML e CSS. Preferisce lavorare approfonditamente ai cuori dei programmi, tralasciando la grafica come parte finale ‘opzionale’.



Cerca

Seguici

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