Lo scorso 24 Giugno, Telegram ha rilasciato la nuova . E’ possibile ora migliorare l’esperienza utente tramite bot già disponibili oppure crearne uno personalizzato. La nuova piattaforma dispone di un accesso API tramite chiamate HTTP rendendo facile ed intuitivo l’interazione con i server di Telegram.
In questo articolo vedremo solo alcuni meccanismi base, senza scendere nei dettagli per quanto riguarda il codice, per fornirvi una idea su come strutturare il programma per un potenziale bot.
BotFather
Il BotFather, come il nome suggerisce, è il bot che vi aiuterà a generare nuovi bot. Attraverso un client Telegram si chatta con esso per la creazione di un bot e la generazione di un API token. Riporto una conversazione di esempio fatta con .
Tu: /newbot
BotFather: Alright, a new bot. How are we going to call it? Please choose a name for your bot.
Tu: IlTuoBelBot
BotFather: Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
Tu: NomeBot
BotFather:
Done! Congratulations on your new bot. You will find it at telegram.me/NomeBot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands.
Use this token to access the HTTP API:
125760859:AAE8Y15d2O_Augr8WbFcs3_VT4R48u515lQ
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
Bisogna prestare attenzione che l’username per il bot deve necessariamente terminare con la parola bot.
Interazione con il bot
Per interagire con il bot in teoria basterebbe utilizzare direttamente il proprio browser. Tuttavia per chiarezza utilizzeremo l’applicazione Postman. Ogni richiesta che andremo a fare sarà formattato secondo questo schema:
https://api.telegram.org/bot/METHOD_NAME
Dove token
è il token che abbiamo generato chattando con @BotFather e METHOD_NAME
è il metodo da far eseguire al bot. Ogni risposta da parte dei bot sarà formattato in JSON. Per una lista dei comandi supportati è consigliabile consultare la .
getMe
E’ il comando che ci farà ottenere le informazioni base del proprio bot.
Ottenere l’input utente
Ci sono due modi per ottenere l’input da un bot cioè i messaggi che gli utenti inviano ad esso per l’interazione:
- Tramite la tecnica di long polling
- Tramite la tecnica webhook
La tecnica long polling (metodo getUpdates
) consiste nell’interrogare periodicamente i server di Telegram per determinare se ci sono messaggi da processare, useremo questo metodo (manualmente) per ottenere il campo chat_id
necessario per l’interazione con uno specifico utente.
Tramite la tecnica webhook invece riceveremo automaticamente su una “callback” i nuovi messaggi da processare direttamente dai server di Telegram. Attraverso il long polling è il nostro codice che periodicamente deve interrogare i server di Telegram per ottenere nuove informazioni, avviene invece il contrario tramite l’uso di un webhook. Bisogna notare che i due metodi sono mutualmente esclusivi, una volta impostato una callback (tramite il metodo setWebhook
) non è più possibile utilizzare il metodo getUpdates
.
sendMessage
Per effettuare un test spediamoci da solo un messaggio. Per prima cosa dobbiamo utilizzare il nostro client per inviare un messaggio /start
(è una convenzione) che servirà a instaurare un “handshake” tra un utente Telegram ed il bot. Un bot non può mai avviare una conversazione con un utente arbitrariamente.
Se lanciamo ora il metodo getUpdates
tramite Postman otterremo qualcosa del genere.
Per chiarezza riporto la risposta in JSON
{
"ok": true,
"result": [
{
"update_id": 246250701,
"message": {
"message_id": 1,
"from": {
"id": 12345,
"first_name": "unnikked",
"username": "unnikked"
},
"chat": {
"id": 12345,
"first_name": "unnikked",
"username": "unnikked"
},
"date": 1443448777,
"text": "/start"
}
}
]
}
La proprietà id
dell’oggetto chat
è proprio l’id cliente da utilizzare nelle prossime chiamate HTTP per spedire messaggi o file multimediali.
Nel nostro caso di esempio è 12345. Da notare come nel campo text sia presente il messaggio "/start"
.
sendMessage
Per spedire un messaggio è necessario utilizzare il metodo sendMessage
che accetta come parametri il campo text
e il campo chat_id
. La richiesta può essere spedita sia utilizzando il metodo POST
o GET
HTTP.
Che produrrà l’effetto di inviare un messaggio all’utente
sendPhoto
Come ulteriore esempio vediamo come inviare una foto ad un utente tramite le API, bisogna utilizzare il metodo sendPhoto
, utilizzando i campi photo
e chat_id
, ed inviare il form come multipart/from-data"
(Postman gestisce questo aspetto per voi).
Il risultato sarà
Conclusioni
La piattaforma bot, secondo il mio parere, è una buona idea poiché va a colmare alcune mancanze cheche altre piattaforme non offrono.
I bot potrebbero essere usati nelle chat di gruppo sia per divertimento:
- – permette di cercare immagini attraverso keyword.
- – permette di giocare a quiz trivia.
- – permette di creare sondaggi da condividere in altre chat.
O per la collaborazione in gruppi chat:
- – permette di rivecere notifiche da repository GitHub.
Anche per un uso personale sono indicati quei bot che aggiungono funzionalità alla piattaforma senza necessariamente essere supportate nativamente
- – permette di impostare promemoria direttamente nella chat.
- – permette di incontrare persone a caso.
In un prossimo articolo vedremo qualche esempio su come strutturare il codice di un bot.
Link utili
Qui di seguito vi propongo una lista di link utili tratti dal sito ufficiale di Telegram:
- Annuncio ufficiale del lancio della sul blog di Telegram.
- fatta dal team di Telegram.
- delle API.
- con codici di esempio.