Magazine Cultura

Creare un chatbot Telegram in Go

Creato il 13 marzo 2019 da Nicola Nicodemo

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!


Ritornare alla prima pagina di Logo Paperblog