Calendario Raccolta Rifiuti → Alexa
Un sistema che trasforma i calendari PDF della raccolta differenziata in promemoria vocali su Alexa — "cosa butto domani?" e un avviso ogni sera prima della raccolta.
Invocazione: “Alexa, apri calendario rifiuti”
Il problema
Ricordarsi ogni sera quale bidone portare fuori è un classico. I calendari del gestore (SERIT) sono PDF: comodi da guardare, inutili da interrogare a voce. Volevo poter chiedere ad Alexa “cosa butto domani?” e, meglio ancora, ricevere un promemoria automatico la sera prima.
Architettura a tre strati
- Ingestione (offline) — scarica i PDF SERIT e li converte in JSON strutturato e validato. È l’unico strato legato al layout del PDF.
- Dati normalizzati — un file per
comune/zona/annopiù uncatalog.jsonindice. Aggiungere un comune significa aggiungere file, senza toccare la skill. - Skill Alexa (Node / AWS Lambda) — risponde a voce e programma i promemoria serali.
Il parser PDF (la parte più interessante)
I PDF SERIT hanno una particolarità insidiosa: i numeri dei giorni sono grafica vettoriale, non testo. Il parser ricostruisce quindi la data dalla sequenza dei giorni della settimana (che invece sono testo) più mese e anno, e la valida confrontandola con il giorno-settimana atteso. Se qualcosa non torna, il programma esce con un codice d’errore: è il segnale che il layout del PDF è cambiato e il parser va rivisto. Sui file di prova: zero incongruenze.
La skill Alexa
- On-demand: “cosa butto oggi/domani” e “quando si raccoglie la frazione”, con scelta della zona a voce.
- Promemoria serali alle 20:00 la sera prima di ogni raccolta, tramite la Reminders API, con la zona salvata in modo persistente (DynamoDB).
Il vincolo che ha ribaltato il progetto
La prima architettura creava i promemoria fuori sessione: una catena
EventBridge → Lambda → Messaging API doveva svegliare la skill ogni sera e programmare
l’avviso. Non funziona. Alexa vieta di creare promemoria fuori da una sessione con
l’utente e risponde NOT_IN_SESSION, anche quando la skill è invocata tramite il canale
di messaggistica. Un assunto sbagliato, smentito dai log.
La soluzione è un promemoria “a orizzonte”: quando apri la skill (o dici “attiva i promemoria”), la skill programma in un colpo solo tutte le raccolte delle successive ~6 settimane, ognuna come avviso vocale la sera prima. A ogni apertura fa un top-up e riempie le settimane mancanti. Il compromesso è dichiarato: è automatico per circa sei settimane, poi basta riaprire la skill per rinnovare l’orizzonte.
Stato
Fasi 0–2 completate e skill in produzione (parser PDF, comandi a voce, promemoria a orizzonte). Resta da confermare l’ultima verifica in-app dei promemoria. Prossima fase: generalizzare ad altri comuni SERIT e pubblicare la skill sullo Store.
Stack
Python (parser) · Node.js / Alexa ASK SDK · AWS Lambda · DynamoDB · Alexa Reminders API