ZAC! Messaggistica e notifiche in tempo reale

Negli anni, il nostro team ha maturato un'esperienza solida nella realizzazione di aree di assistenza personalizzate e sistemi di notifica in tempo reale all'interno di applicazioni web complesse. Progetti come Betterplazed ci hanno visto impegnati nella creazione di strumenti di supporto diretto tra utenti e amministratori, con un'attenzione particolare alla rapidità della comunicazione e alla chiarezza del tracciamento dei ticket. In GMT invece abbiamo implementato soluzioni avanzate di notifica che ci hanno permesso di gestire alert operativi, messaggi prioritari e aggiornamenti sensibili in modo affidabile e puntuale.

L'Assistenza su ZAC!: per utenti e organizzatori

Forti delle esperienze pregresse, è stato per noi naturale estendere la stessa filosofia anche a ZAC!, dotando la piattaforma di una vera e propria area di Assistenza pensata per facilitare il contatto diretto con gli utenti in difficoltà.

Una schermata della sezione Assistenza di ZAC! da parte dell'amministratore

Questa scelta rispondeva a due obiettivi precisi: da una parte, offrire supporto tempestivo e centralizzato, senza costringere l'utente a cercare canali alternativi come email o messaggi social; dall'altra, monitorare in tempo reale eventuali anomalie nella piattaforma per agire con rapidità e precisione.

Ma non ci siamo fermati a una semplice bacheca di Assistenza. Abbiamo deciso di fare un passo in più, sviluppando un sistema che consente l'aggiornamento automatico della pagina del ticket quando arriva una nuova risposta, che sia da parte dell'amministratore o dell'utente stesso.

Questa dinamica è stata fondamentale per offrire una esperienza di assistenza fluida, dove le conversazioni tra utente e staff si svolgono in modo naturale e reattivo, quasi come in una chat, pur mantenendo la struttura formale e tracciabile di un sistema di ticket.

Per realizzare questa funzionalità, abbiamo fatto leva su Turbo Streams, il potente sistema di broadcast in tempo reale offerto da Hotwire. Grazie a Turbo, ogni aggiornamento rilevante viene inviato direttamente al browser dell'utente tramite WebSocket, consentendo alla pagina del ticket di aggiornarsi istantaneamente, senza bisogno di refresh manuali.

Turbo: HTML over the Wire, zero JS complesso

Il logo di Turbo, il nostro alleato per le notifiche in tempo reale

Turbo non funziona come un framework JavaScript front-end tradizionale: non sposta la logica sul client. Al contrario, mantiene l'intelligenza sul server, inviando frammenti HTML (stream) al browser via WebSocket. Il browser, senza ricaricare la pagina, riceve queste porzioni di markup pronte all'uso e le inserisce nel DOM esattamente dove devono comparire.

Tutto avviene senza scrivere codice JS personalizzato e senza dover gestire librerie client-side per il real-time.

Nel nostro caso, ogni nuova risposta ad una richiesta di assistenza (ticket) genera un evento sul server che innesca la trasmissione di un Turbo Stream, il quale:

WebSocket e Broadcast: la spinta real time

Alla base di Turbo Streams c'è Action Cable, il sistema WebSocket integrato in Rails. Questo ci consente di mantenere connessioni persistenti tra client e server, evitando polling o intervalli artificiali per "chiedere" se ci sono novità.

Quando un messaggio viene aggiunto a un ticket:

  • il backend invia un broadcast Turbo Stream su un canale identificato (es. ticket_42_stream);
  • tutti i client connessi a quel ticket ricevono l'update in tempo reale;
  • il browser aggiorna la sezione interessata (la conversazione, lo stato, eccetera) senza ricaricare nulla;

Questo significa che più utenti possono collaborare o monitorare lo stesso ticket simultaneamente, visualizzando ogni nuova informazione nel momento esatto in cui viene pubblicata.

Una schermata della sezione Assistenza di ZAC!, con ticket e messaggi in tempo reale

Esperienza utente fluida e moderna

Il risultato per l'utente è quello di una chat reattiva, anche se strutturata come un sistema ticket: le risposte arrivano in tempo reale, senza dover fare refresh o cliccare su “Aggiorna”, il flusso delle conversazioni rimane sincrono e naturale, e il contesto rimane sempre visibile, senza flicker o attese.

Grazie a Turbo:

La nostra esperienza con Turbo e Action Cable ci ha permesso di costruire un sistema di messaggistica che non solo è performante, ma anche scalabile e manutenibile, perfetto per le esigenze di ZAC! e delle sagre e feste che supportiamo, tanto che abbiamo deciso di usarlo anche per gestire il sistema di aggiornamento automatico degli ordini.

Sicurezza e contesto

La schermata della sezione Assistenza di ZAC! da parte dell'utente

Abbiamo implementato misure di sicurezza per garantire che solo gli utenti autorizzati possano accedere ai ticket e alle relative conversazioni. Ogni richiesta di assistenza è associata a un utente specifico, e le risposte sono visibili solo a chi ha il permesso di vederle.

Inoltre, ogni ticket mantiene un contesto chiaro: l'utente può vedere lo storico delle interazioni, le risposte precedenti e lo stato attuale della richiesta, tutto in un'unica pagina senza dover navigare tra schermate diverse.

Infine gli amministratori (che saremmo noi) ricevono notifiche e aggiornamenti in tempo reale su tutte le richieste, ma filtrate per assegnazione o priorità.

Questo approccio non solo protegge i dati sensibili, ma ottimizza anche il carico della rete e del browser.

Per garantire che ogni stream sia trasmesso solo agli utenti autorizzati, abbiamo integrato strettamente il sistema di broadcasting di Turbo con due gemme fondamentali per la sicurezza e la gestione delle autorizzazioni in ambiente Ruby on Rails: Devise e Pundit.

Autenticazione con Devise: connessioni sicure fin dall'inizio

Tutte le connessioni WebSocket (e quindi ogni aggiornamento via Turbo Stream) passano solo dopo l'autenticazione tramite Devise, la gemma standard per la gestione degli utenti in Rails.

Devise, integrata con Action Cable, ci consente di identificare in modo certo ogni utente connesso: quando un browser apre una connessione WebSocket, il sistema associa quella connessione a uno user ID specifico, già autenticato nella sessione.

Il logo di Devise, il nostro sistema di autenticazione

In questo modo:

Abbiamo inoltre personalizzato i canali WebSocket in modo da includere nei parametri di sottoscrizione l'ID del ticket (o dell'utente, o un altro identificatore ancora a seconda del caso d'uso), impedendo a chiunque di intercettare stream non destinati a lui.

Infine: Devise ci permette anche di gestire diversi tipi di utenze, come utenti normali, amministratori del sito e gestori degli eventi, un esempio non casuale, visto che è proprio ciò di cui avevamo bisogno per ZAC!. Ogni tipo di utente ha accesso a funzionalità e dati specifici, garantendo un'esperienza personalizzata e sicura.

Autorizzazione con Pundit: accesso controllato e contestualizzato

Il logo di Pundit, il nostro sistema di autorizzazione

Per gestire le autorizzazioni, abbiamo integrato Pundit, una gemma che ci consente di definire regole di accesso granulari per ogni risorsa della nostra applicazione. Utilizziamo Pundit per gestire le autorizzazioni a un livello più fine: ogni volta che un messaggio viene trasmesso o una risposta viene creata, Pundit entra in azione.

  • prima di mandare uno stream, eseguiamo una verifica della policy Pundit;
  • se la policy stabilisce che l'utente non è autorizzato a visualizzare il contenuto, nessun dato viene inviato;
  • questo vale anche per gli aggiornamenti in background, che potrebbero essere “invisibili” all'utente se privi dei giusti permessi;

Questo significa che:

Questo sistema integrato permette alla piattaforma ZAC! di gestire la trasmissione in tempo reale in modo altamente selettivo: il server invia esclusivamente gli stream pertinenti ai singoli utenti, evitando qualsiasi dispersione di dati. In questo modo, il frontend rimane leggero e reattivo, perché non è costretto a ricevere né tantomeno filtrare grandi volumi di informazioni; è il backend che si occupa in modo intelligente di recapitare solo ciò che serve, a chi serve.

Tutto ciò avviene in un contesto sicuro e tracciabile: ogni aggiornamento è legato a un utente autenticato tramite Devise e autorizzato secondo le policy definite con Pundit. Questo approccio garantisce che nulla venga mostrato a chi non ne ha diritto, proteggendo i dati e al contempo alleggerendo il carico di lavoro del client. Il risultato è un'esperienza d'uso moderna, fluida e reattiva, che non rinuncia alla solidità e alla scalabilità necessarie per affrontare anche i contesti più esigenti.

Notifiche real‑time per non perderti niente

Coerentemente con questa visione, abbiamo affiancato al sistema ticket anche un modulo di notifiche real time, sempre basato su Turbo Streams. Le notifiche vengono mostrate in tempo reale attraverso un'interfaccia snella e discreta, e permettono agli utenti di essere immediatamente informati di risposte, aggiornamenti o cambiamenti di stato nei propri ticket. Lo stesso sistema si integra perfettamente anche con il backend, notificando i membri dello staff quando viene aperta una nuova richiesta o quando un utente invia un messaggio.

Un utente o un organizzatore di feste/sagre verrà avvisato da un numerino in alto a destra di quante eventuali notifiche attendono conferma di lettura, proprio come in un normale social network, e proprio come in un social network, cliccando sul numerino si aprirà un pannello che mostra le notifiche recenti, con la possibilità di cliccare su ciascuna per essere portati direttamente al ticket o alla richiesta di assistenza corrispondente.

Una schermata del pannello notifiche di ZAC!, con le notifiche in tempo reale
La pagina di ZAC!, con le notifiche lette e non lette

Alternativamente, grazie al link "Guarda tutte le notifiche", l'utente può accedere a una pagina dedicata che mostra l'elenco completo delle notifiche, con la possibilità di ricontrollare anche quelle già lette, e persino di cambiare il loro stato da lette a non lette, per tenere traccia di quelle che richiedono ancora attenzione.

Questa combinazione di reattività, affidabilità e usabilità ha reso l'area di Assistenza di ZAC! uno strumento robusto e immediatamente operativo, che riflette l'attenzione del nostro team non solo alla funzionalità, ma anche alla qualità dell'esperienza utente, anche nei momenti delicati come la richiesta di supporto.

Conclusioni

Dopo il successo del nostro primo evento pilota, siamo più motivati che mai a far crescere ZAC! e portarlo in sempre più feste e sagre su tutto il territorio italiano.

Il nostro sogno? Fare di ZAC! il punto di riferimento per l'organizzazione digitale degli eventi locali, aiutando sia chi organizza che chi partecipa.

Se state organizzando una festa, una sagra o qualsiasi evento e volete scoprire come ZAC! può rivoluzionare la vostra gestione, raccontateci il vostro progetto. Saremo felici di aiutarvi a portare la vostra manifestazione nel futuro, con semplicità e rispetto della tradizione.

Puoi visitare il sito ufficiale di ZAC! per scoprire la piattaforma, oppure cliccare qui per leggere la storia e lo sviluppo del progetto.

Hai bisogno di digitalizzare la tua sagra? Oppure hai un'idea per un sito web e cerchi qualcuno che ti dia una mano a realizzarla?

Scrivici

Pagine collegate

Noland

Montaggio e produzione video

ZAC!

Zero attesa in coda

Liuteria Marcellan

Tra artigianato e Youtube

Aquagranda

Una memoria collettiva digitale

Agridan

Gestione di denunce di danni agricoli

GMT

Great Masters of Time

Betterplazed

Monitoraggio rendite dell'affitto di proprietà

Venywhere

Lavorare da remoto a Venezia

Euleria Home

Riabilitazione da remoto

Euleria Lab

Dispositivo medico per il movimento

DVRI

Distretto Veneziano della Ricerca e della Innovazione

Galassie

L’Universo Culturale Veneziano

Beni Relazionali

Il valore della relazione

Sale in Zucca

Tra educazione e natura

SPID Rails

Autenticazione SPID per Ruby on Rails

Disumana

Un magico mondo di divertimento

uMatch

Calcio e data visualization

Scooter Rent Venice

Prenota un tour per il Lido