Il tuo primo chatbot Telegram

di Lorenzo Neri
506 visualizzazioni

Vuoi creare il tuo primo chatbot Telegram, ma non sai da dove partire? In questo articolo ti aiuterò a muovere i tuoi primi passi per dargli vita!

In diversi articoli abbiamo visto quanto siano potenti le API di Telegram, ma soprattutto quali possono essere i potenziali e le applicazioni a cui puoi dare vita tu stesso grazie a tutto quello che puoi realizzare con i chatbot.

Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!

In questo articolo finalmente, ti guiderò nella creazione del tuo primo chatbot!

Passo numero 0: BotFather

Per creare il tuo primo chatbot con Telegram, devi prima crearlo tramite BotFather: non hai alternative.

Se non l’hai ancora creato, o magari non sai ancora che cosa sia BotFather… Vai su questo articolo e torna solo quando hai capito come funziona e hai dato vita al tuo primo chatbot.

… P.s. se sei qui e non sai che cosa sia un chatbot forse ti conviene fare il passo “-1” e leggere il mio articolo dove spiego che cos’è un chatbot.

Passo 1: il chatbot più semplice che tu possa creare

Qual è il chatbot più semplice che tu possa creare?

Immagino tu non abbia ancora dimestichezza in materia: uno che ti risponde a pappagallo.

Il chatbot più semplice che tu possa realizzare è quello che in sintesi gli scrivi “ciao” e lui ti risponderà “ciao caro, benvenuto”. Semplice.

Tuttavia, non voglio nemmeno ammorbarti anzi: rendiamo più “pepato” tutto questo così che ti faccio scoprire anche alcune potenzialità aggiuntive. Ci stai?

Passo 2: il processo di funzionamento del tuo primo chatbot Telegram

Il chatbot sta sempre in ascolto: di te, dei tuoi utenti, di tua nonna se vuole usarlo… Comunque sta sempre in ascolto e può rispondere praticamente sempre a tempo zero.

Naturalmente ti starai chiedendo come fa il tuo chatbot a recepire i messaggi che gli arrivano? Tramtie il metodo “getUpdates”.

Il metodo “getUpdates” fa semplicemente questo:

Chiede alle API di Telegram tutti i messaggi che il chatbot ha ricevuto nelle ultime 24 ore e vengono restituiti in ordine cronologico.

Fermo lì: ci hai fatto caso che ho scritto “nelle ultime 24 ore”? Questa è, se vogliamo proprio dirla, l’unica limitazione delle API di Telegram.

Perciò sì: un chatbot non ha memoria dei messaggi più vecchi di 24 ore. Vengono eliminati in automatico.

Chiarito questo, il metodo “getUpdates” restituisce un vettore di oggetti Updates: questi sono in sintesi i messaggi che il chatbot riceve, ma andiamo con ordine.

Come ti dicevo poco fa, i messaggi li riceviamo continuamente in modo ciclico: come fare allora a rispondere con ordine e soprattutto… Evitare di rispondere più di una singola volta?

Ci serve un algoritmo, ovvero il processo con cui il nostro chatbot può funzionare.

L’algoritmo di cui abbiamo bisogno: sì Picasso mi fa un baffo!

Commentiamo assieme l’algoritmo.

Il tuo primo chatbot riceve dei messaggi: andiamo a prendere solo il più recente di tutti.

Ti starai giustamente chiedendo: perchè solo il più recente? Perché è il più recente a cui il chatbot deve rispondere.

In uno scenario di partenza, il messaggio più recente di tutti è l’unico: non ce ne sono altri.

Viene da sé, che una volta risposto al più recente, passeremo ai successivi.

Come? Teniamo salvato l’identificativo dell’ultimo messaggio a cui abbiamo risposto.

Lo dico per completezza: ogni messaggio su Telegram, indipendentemente dalla chat, ha un identificativo univoco in tutto il suo mondo.

Quindi, ci salviamo l’identificativo perché? Se noterai il grafico dell’algoritmo ci evita di rispondere per due volte di fila, anzi un numero indefinito di volte, allo stesso messaggio.

Prova tu stesso a vedere cosa succede senza questa clausola.

Ti piacerebbe scoprire come realizzare chatbot Telegram per tutti i tuoi progetti?

Scopri il percorso Telegram per il mondo embedded e IoT!

Ciò detto, rispondiamo al messaggio e ripetiamo tutto il ciclo.

Passo 3: implementazione dell’algoritmo per il tuo primo chatbot

È giunto il momento di sporcarci le mani.

Partiamo dal messaggio di risposta del chatbot: sarà composto dal nome utente dell’utente che ha scritto al tuo chatbot Telegram, data e ora di ricezione del messaggio infine il testo che gli ha scritto (giusto per fargli vedere che il chatbot è intelligente).

Chiarito questo, vediamo la realizzazione di questo chatbot con Python, ma non ti devi assolutamente preoccupare: non importa il linguaggio di programmazione perché i metodi che vedremo assieme sono pressoché identici negli altri linguaggi con cui puoi operare assieme alle API di Telegram.

import telegram
from time import sleep
chatbot_token="il:tuo_token_del_chatbot_che_vuoi_usare"
ultimo_messaggio_risposto_id=""
chatbot = telegram.Bot(token=chatbot_token)
while True:
    print("Prendo gli ultimi messaggi")
    messaggi = chatbot.getUpdates(timeout=5)
    # verifico se il server mi ha restituito almeno un messaggio
    if len(messaggi)>0:
        print("Ho nuovi messaggi")
        # prendo il meno recente
        ultimo_messaggio = messaggi[-1]
        # verifico se ho già risposto confrontando l'id di questo messaggio
        if ultimo_messaggio.message.message_id != ultimo_messaggio_risposto_id:
            # aggiorno l'id
            ultimo_messaggio_risposto_id = ultimo_messaggio.message.message_id
            # prendo dal messaggio tutti i dati per rispondere all'utente
            testo_messaggio = ultimo_messaggio.message.text
            nome_utente = ultimo_messaggio.message.from_user.username
            data_invio = ultimo_messaggio.message.date
            id_utente = ultimo_messaggio.message.chat_id
            # costruisco il messaggio che sarà un testo
            contenuto_messaggio_da_inviare = f"Ciao {nome_utente}, mi hai scritto in data {data_invio} e il tuo messaggio è questo: {testo_messaggio}"
            # invio il messaggio di risposta all'utente
            chatbot.sendMessage(chat_id=id_utente, text=contenuto_messaggio_da_inviare)

    sleep(2)    
    

Analizziamo un passo per volta.

Il pacchetto nominato “telegram” lo trovi a distanza di un click qui.

Il token del chatbot, lo puoi ottenere grazie a BotFather: con esso dovrai creare un oggetto di tipo “bot” e come parametro, il costruttore vuole appunto il token del tuo chatbot.

La variabile “ultimo_messaggio_risposto_id” è quella che permette di gestire l’ID dell’ultimo messaggio a cui il tuo chatbot ha risposto.

Il “while True” serve a rendere never-ending l’esecuzione dell’algoritmo stesso.

Finalmente vediamo il metodo “getUpdates” di cui abbiamo parlato prima.

Esso, ci restituisce il famoso vettore di oggetti “Update”: fra questi ci sono tutti i messaggi ricevuti dal bot nelle ultime 24 ore.

Ho voluto scrivere un articolo ad esso dedicato: ti invito a scoprirlo a un click di distanza qui.

Tramite esso, ci prendiamo il messaggio più recente di tutti: dentro di esso troviamo il testo del messaggio stesso e tutti i dettagli del nostro utente.

Infine, dovrai far inviare il messaggio al tuo chatbot.

Come?

Tramite il metodo “sendMessage”: esso tramite il chat id e con il testo che desideriamo inviare all’utente in questione permettiamo al chatbot di inviare un messaggio.

Infine, ripetiamo tramite la sleep.

Semplice vero? Ora manda in esecuzione lo script et voilà! Il tuo chatbot ha preso ufficialmente vita!

Continua a scoprire di più con questi articoli!

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più