gennaio 16, 2021 · NodeJS Telegram

Telegram Bot in NodeJS: primi passi

Edit 27/01/2020: tolta la spiegazione generica circa l'inizializzazione di un progetto NodeJS, visto che è tutto spiegato in un post ad hoc.

Qualche mese fa ho fatto qualche esperimento con Telegram, la piattaforma di messaggistica. Uno degli aspetti più interessanti di questa piattaforma (al contrario di Whatsapp, per esempio) è la possibilità di creare e/o utilizzare bot. Un bot altro non è che una specie di utente controllato da un programma che ne determina le azioni. Un bot può essere messaggiato direttamente o inserito in una chat di gruppo, e può inviare messaggi, rispondere a richieste eccetera; il limite sta in cosa è in grado di fare il suo programma.

Come culmine dei miei esperimenti ho realizzato un bot denominato "CovidBOT" in grado di fornire, su richiesta, una serie di informazioni numeriche e grafiche relative alla situazione della pandemia in Italia. I dati sono scaricati direttamente dal GitHub della Protezione Civile. Il codice del bot, comprensivo di istruzioni e screenshot, è liberamente scaricabile da GitHub. In questa piccola serie di tutorial vorrei spiegare alcuni passaggi circa il lavoro che ho realizzato.


Creazione bot su Telegram

Prima di cominciare ci occorre una chiave API di Telegram; una chiave API è una sorta di identificativo privato del nostro bot, e serve a far si che solo il nostro software (che contiene la chiave) sia in grado di controllare il bot stesso. La chiave deve essere richiesta al bot ufficiale di Telegram, "BotFather". Lo possiamo cercare per nome direttamente dall'app:

Apriamo una conversazione con il padrino e, se non ci ricordiamo la lista dei comandi, usiamo il comando "/help". Per creare un nuovo bot, che resterà legato al nostro account, usiamo il comando "/newbot".

Dobbiamo inserire il nome descrittivo (libero) e lo username (senza spazi e deve terminare con "bot"), dopodichè il nostro bot sarà già registrato e ci verrà consegnato il token.


Creazione programma NodeJS

Per prima cosa, cercando in giro ho trovato un pacchetto npm che permette di interfacciare con semplicità una applicazione NodeJS con le API di Telegram: node-telegram-bot-api.

Apriamo il nostro editor di fiducia, spostiamoci in una cartella vuota e inizializziamo alla solita maniera il progetto node. Possiamo usare come punto di partenza quanto descritto in questo post. Gli script e le dipendenze di sviluppo non richiedono alcuna modifica rispetto al template fornito.

Aggiungiamo le dipendenze di progetto:

npm install node-telegram-bot-api dotenv

Node-telegram-bot-api, come detto prima, è un pacchetto che contiene funzionalità di interfacciamento con i sistemi di Telegram. Dotenv è una libreria usata per consentire l'accesso ai files di configurazione. Parlando di configurazione, creiamo nella root del progetto un file chiamato ".env" (mi raccomando il punto all'inizio del nome) con questo contenuto:

BOT_TOKEN=xxxxxxxxxxxx

Ovviamente al posto delle "x" mettiamo il nostro token. Ps: se usiamo un sistema di versioning (tipo git) ricordiamoci di NON committare mai il file .env. Non sarebbe una cattiva idea andare SUBITO ad aggiungerlo nel nostro .gitignore.

Poi creiamo una cartella "src", e dentro questa scriviamo un file "index.js":

import telegrambot from 'node-telegram-bot-api';
import dotenv from 'dotenv'

// Inizializzazione dotenv
dotenv.config()

// Lettura token
const token = process.env.BOT_TOKEN;
if (!token){
  console.log("Telegram bot token not provided!")
  process.exit()
}

// Creazione bot telegram
const bot = new telegrambot(token, {polling: true});
bot.on("polling_error", (err) => console.log("Errore connessione", err));

// Predisposizione di un comando di prova
bot.onText(/\/ciao/, async (msg, match) => {
  
  const chatId = msg.chat.id;

  try{
    bot.sendMessage(chatId, "Buongiorno carissimo!")	
  }
  catch (err){
    console.log(`Errore durante gestione messaggio: ${err.message}`)
  }

})

In questo primo bot di esempio quello che facciamo è:


Test

Che ci crediate o meno il bot è già pronto per i test. Lo possiamo avviare in modalità sviluppo con il comando:

npm run dev

Andiamo a cercare il nostro bot su Telegram:

Apriamo una conversazione con il bot e proviamo a eseguire il comando "/ciao".

Funziona! (non facciamo caso al messaggio /start, è chiamato automaticamente da Telegram quando si inizia una conversazione con un bot). Chiaramente il bot continuerà a funzionare finchè l'applicazione sarà in esecuzione.

Con questo concludiamo questo primo breve tutorial sulla realizzazione di un bot Telegram con NodeJS. Nei prossimi post cercherò di entrare in dettaglio su qualche aspetto più interessante dei miei esperimenti.

Saluti!