Creare un chatbot Telegram in Go

In questo articolo vedremo come creare un chatbot, ovvero un risponditore automatico, per la piattaforma di instant-messaging Telegram, in linguaggio Go. Il linguaggio Go è stato introdotto da Google e presenta caratteristiche interessanti che lo rendono particolarmente utile per la creazione di servizi web. La sua caratteristica centrale sono le go-routine, ovvero dei thread di esecuzione leggeri, particolarmente utili nella programmazione concorrente. Ma andiamo al dunque e iniziamo a vedere il codice. Innanzitutto, occorre ovviamente avere un account Telegram e registrare il proprio risponditore automatico tramite il bot @BotFather. Per far ciò inviamo il comando

/newbot

e rispondiamo alle domande. In particolare dovremo indicare il nome del nostro chatbot e prendere nota del nostro token, che useremo per le chiamate alle API della piattaforma. Fatto questo, apriamo il nostro editor di testo preferito e iniziamo importando le librerie necessarie per Telegram e SQLite scaricate da GitHub, aprendo le connessioni verso Telegram e il database e aprendo il canale dei messaggi con

import (
    "database/sql"; "strings"; "time" 

    "github.com/tucnak/telebot"
    _ "github.com/mattn/go-sqlite3"
)

bot, err := telebot.NewBot(); checkErr(err)
db, err := sql.Open("sqlite3", "./database.db"); checkErr(err);

messages := make(chan telebot.Message, 100) 
bot.Listen(messages, 1*time.Second) 
defer close(messages)

Siamo quindi arrivati al cuore del nostro chatbot. Per proseguire dobbiamo definire quelli che saranno i comandi che l’utente potrà impartire al nostro risponditore e le sue risposte. Per questo articolo ho immaginato di creare un bot per registrare le spese che oltre ai comandi standard /start e /help, risponde ai comandi /cancella per cancellare l’ultima spesa inserita, /lista per ottenere la lista delle spese inserite, /reset per azzerare la lista delle spese e /totale per avere la somma delle spese inserite. Per inserire una spesa invece basta inserire il suo importo senza nessun comando. Ecco il codice

for message := range messages {
    	//skip messages that are not text
        if message.Text == "" { continue } 

        command := strings.ToLower(message.Text)

        switch command {
        case "/start": 
            startCmd(message) 

        case "/help", "aiuto", "ciao":
            helpCmd(message) 
            
        case "cancella":
            cancellaCmd(message) 
            
        case "lista":
            listaCmd(message) 
            
        case "reset":
            resetCmd(message) 

        case "totale":
            totaleCmd(message) 
            
        default:
            if strings.HasPrefix(command, "spesa") { 
                spesaCmd(message) //WORKING!
            } else {
            	bot.SendMessage(message.Chat, "Comando sconosciuto!", nil)
            }
        }
    }

Come si può vedere, il codice è molto semplice e restano da scrivere solo i metodi che implementano i vari comandi.

Una volta finito il nostro codice quello che dovremo fare è procurarci un hosting che supporti il linguaggio Go su cui caricare il nostro chatbot e procedere alla sua attivazione. Fatto ciò potremo scrivere al nostro bot in qualsiasi momento e usare i suoi comandi da tutte le piattaforme da cui possiamo usare Telegram. Nel prossimo articolo andremo più in dettaglio nell’implementazione dei comandi e la gestione del database SQLite. Stay tuned!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *