Una introduzione ai bot di Telegram

Lo scorso 24 Giugno, Telegram ha rilasciato la nuova piattaforma dedicata ai bot. 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 @BotFather.

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 documentazione ufficiale.

getMe

E’ il comando che ci farà ottenere le informazioni base del proprio bot.

telegram-bot-getMe

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:

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.

telegrambot-start

Se lanciamo ora il metodo getUpdates tramite Postman otterremo qualcosa del genere.

telegram-chatid

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.

telegrambot-sendmessage

Che produrrà l’effetto di inviare un messaggio all’utente

telegra-messaggio-ricevuto

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).

telegram-sendphoto

Il risultato sarà

telegram-photoreceived

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:

  • @ImageBot – permette di cercare immagini attraverso keyword.
  • @TriviaBot – permette di giocare a quiz trivia.
  • @PoolBot – permette di creare sondaggi da condividere in altre chat.

O per la collaborazione in gruppi chat:

  • @GithubBot – 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

  • @AlertBot – permette di impostare promemoria direttamente nella chat.
  • @HotOrBot – 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:

Nicola Malizia

Studente di Ingegneria informatica presso l'Università della Calabria. Appassionato del mondo informatico fin da bambino, trascorre parte del suo tempo libero a sperimentare nuove tecnologie ed ad esplorare concetti della Computer Science. La condivisione è il suo obiettivo principale, mantiene due blog: unnikked.tk rivolto ad un pubblico esclusivamente italiano dove tratta tutorial pratici e semplici da seguire, con una impostazione da sistemista, unnikked.ga è rivolto invece ad un pubblico più ampio e tratta argomenti più complessi propri del suo campo di studi.

  • Pietro

    Come faccia a creare un “comando” ma senza mettere lo / all’inizio (es. Io~ciao bot~ciao, come va?)
    In modo che se io scriva una parola anche senza lo / lui mi possa rispondere?