In questi giorni mio figlio ha iniziato la prima elementare, e la comunicazione scuola/famiglia è stata sin da subito complicata, in una maniera quasi tragicomica. Il problema non risiede tanto negli strumenti, quanto nella capacità e/o nella voglia di usarli efficacemente. Allora mi sono detto: cogliamo l’occasione per risolverci da noi il problema e per imparare qualcosa di nuovo.
L’alunno La scuola non si applica
La scuola pubblica online le comunicazioni rivolte ai genitori su due siti, negli orari più disparati e molto spesso con un preavviso strettissimo rispetto all’oggetto della comunicazione stesso.
La soluzione suggerita dalla scuola, inutile dirlo, è di “tenere monitorati” i siti durante tutto il giorno; eppure nel 2023 persino il meccanico mi manda una notifica quando devo fare il tagliando all’auto, siamo sicuri che non si possa fare di meglio?
Realizziamo un bot!
L’idea è quindi quella di realizzare un bot che monitori per noi i siti della scuola e ci mandi una notifica ogni volta che viene pubblicata una nuova news. Insomma, questo bot ha il compito di trasformare un servizio erogato in modalità “pull” in uno “push”. Il funzionamento di base quindi è:
- Il bot monitora periodicamente per noi i siti in oggetto
- Quando rileva delle nuove comunicazioni, ci invia una notifica
- Il bot deve anche “ricordarsi” per quali comunicazioni sono già state inviate le notifiche.
Bot? Telegram!
E’ da tempo che voglio provare a realizzare un bot di Telegram, e questo progetto è abbastanza semplice per essere un buon punto di inizio. Ho deciso di realizzare il backend di questo bot con Firebase, perché ci offre tutto quello di cui abbiamo bisogno:
- funzioni serverless invocabili via http, per implementare l’interfaccia di comunicazione del bot
- funzioni serverless programmabili tramite cron, per monitorare i siti
- un database dove tenere traccia delle comunicazioni gestite e degli utenti che utilizzano il bot
Il backend quindi è costituito da 2 funzioni:
- La prima viene invocata tramite webhook da Telegram ogni volta che un utente comunica con il nostro bot. Al momento il nostro bot gestisce un solo comando, quello di avvio della chat, e in corrispondenza di questo comando non facciamo altro che salvare nel database l’identificativo della chat (ci servirà per inviare le notifiche successivamente) e inviare poi un messaggio di benvenuto all’utente.
- La seconda funzione, più corposa, viene eseguita tramite cron una volta all’ora, ed ha il compito di scansionare i siti della scuola ed estrapolare le ultime comunicazioni pubblicate. Se le comunicazioni pubblicate sono già presenti nel database non facciamo nulla, in caso contrario inviamo a tutte le chat presenti sul database (inserite tramite la funzione precedente) una notifica per ogni comunicazione, e salviamo inoltre la comunicazione sul database, così che la prossima volta non venga inviata nuovamente la stessa notifica. Terremo sul database al massimo le ultime 10 comunicazioni gestite.

Ho implementato le funzioni in ambiente Node usando Typescript. Per interfacciarmi con le API di Telegram ho utilizzato la libreria Telegraf.
Per estrapolare le news dai siti della scuola ho dovuto usare due approcci diversi:
- Il primo sito dispone di un feed RSS, per cui ho utilizzato la libreria rss-parser
- il secondo sito invece non offre nessuna tipologia di dato strutturato per cui ho dovuto eseguire lo scraping della pagina utilizzando la libreria jsdom.
Condiamo il tutto con qualche try/catch, qualche riga di log e….funziona!
Tiriamo le somme
Questi progetti, nella loro semplicità, sono una occasione perfetta per sporcarci le mani e ampliare le nostre competenze. Se volete diventare degli sviluppatori migliori, mettetevi in gioco! Prendere un problema e costruitevi una soluzione: quello che imparerete lungo il percorso, a lungo andare, farà la differenza ✌️