Blocco RSVP
Una domanda gratuita "Parteciperai?" con supporto a capienza e lista d'attesa — la controparte senza costo del limite d'inventario per biglietti a pagamento del Blocco Prodotto, per eventi che hanno bisogno solo di un conteggio partecipanti piuttosto che di un pagamento.
Come funziona
Un RSVP senza accompagnatori si comporta esattamente come il voto a scelta singola di un sondaggio: "Sì" e "No" vengono renderizzati come la stessa coppia di chip link-first che buildChipGroup produce per un'opzione di sondaggio. La conferma avviene sulla vista live ospitata (o direttamente tramite un invio di modulo dentro l'email, dove il client lo supporta) prima che venga registrato qualsiasi cosa, così uno scanner aziendale che pre-carica il link non può gonfiare il conteggio.
Attivare Consenti di portare accompagnatori cambia solo la risposta "Sì": un semplice link GET non può offrire una scelta nel modo in cui può farlo un vero campo di modulo, quindi il conteggio accompagnatori diventa un controllo <form><select> cinetico disponibile solo sulla vista live. Questo rispecchia il modo in cui le risposte testo/link del blocco Compito hanno bisogno della vista live per tutto ciò che un link fisso non può portare. "Sì (scegli accompagnatori)" viene renderizzato come un semplice link verso la vista live stessa sul fallback di livello 2/livello 3, invece che direttamente verso /act. Un "Sì" senza accompagnatori (0 accompagnatori scelti, o accompagnatori disattivati del tutto) raggiunge comunque /act come un normale link a un tap in entrambi i casi — solo il passaggio del conteggio accompagnatori ha specificamente bisogno della vista live.
La contabilità della capienza avviene dentro un'unica transazione Firestore che esegue anche il controllo di deduplicazione per destinatario. A differenza del checkout del blocco Prodotto, che si limita a riverificare una query .count() e a rimborsare in caso di rara corsa a inventario esaurito, un RSVP non ha alcun meccanismo di ripiego in stile rimborso per una risposta oltre capienza. Quindi la decisione e la scrittura avvengono atomicamente insieme, invece che come due passaggi separati che una corsa potrebbe dividere. Imposta Capienza sopra 0 e, una volta che gli RSVP confermati più i loro accompagnatori la supererebbero, la risposta viene registrata come in lista d'attesa invece che confermata, e il destinatario vede il tuo Messaggio lista d'attesa invece di un generico ringraziamento.
Una risposta "No" viene sempre registrata come rifiutata, mai verificata rispetto alla capienza. Capienza 0 significa illimitata, la stessa convenzione "0 = non impostato" che usa il campo inventario del blocco Prodotto. Una risposta anonima (senza token del destinatario — per esempio una proveniente da un file HTML esportato e incollato in un ESP di terze parti) salta del tutto il controllo di deduplicazione, dato che non c'è un destinatario a cui associarla. Passa comunque per la stessa transazione di capienza, però, così un'ondata anonima non può comunque sforare il limite della lista d'attesa; solo il rilevamento dei duplicati per persona non è disponibile su quel percorso.
Se il progetto ha una data di chiusura o un limite di risposte configurato (vedi ciclo di vita del sondaggio), un RSVP chiuso sostituisce entrambi i chip con versioni grigie inerti più una nota "Questo sondaggio è chiuso" sulla vista live.
Campi configurabili:
- Domanda — di default "Parteciperai?".
- Capienza (0 = illimitata).
- Consenti di portare accompagnatori — aggiunge un selettore del conteggio accompagnatori a "Sì".
- Massimo accompagnatori per RSVP (se gli accompagnatori sono consentiti) — limita l'intervallo del selettore (1–20).
- Messaggio lista d'attesa — mostrato al posto di un normale ringraziamento una volta raggiunta la capienza.
- Colore di sfondo, padding, bordo e raggio del bordo sulla card.
- Colore/dimensione della domanda, e sovrascritture colore/sfondo dei pulsanti Sì/No.
Ogni RSVP confluisce in conteggi di confermati/rifiutati/in lista d'attesa e un totale accompagnatori, scritti direttamente nel bucket aggregato rsvpBlocks del progetto invece che tramite il percorso generico di incremento delle risposte usato da ogni altro blocco. Si tratta di un'eccezione deliberata, dato che la decisione confermato-vs-lista d'attesa deve avvenire dentro la stessa transazione del conteggio stesso.
Esempi
Subject
Will you join us?
Lo scopo di progetto "Evento" avvia un nuovo progetto con un blocco RSVP già presente insieme a Link della riunione, Sede e Aggiungi al calendario. Imposta una capienza per una sede con posti limitati e il blocco gestisce la lista d'attesa senza alcuna configurazione extra — vedi Eventi e webinar. Un club usa lo stesso blocco per una prova o per un numero limitato di posti in trasferta, con la capienza che mantiene onesto il conteggio senza che nessuno debba tenerlo a mano — vedi Squadre sportive e club. Un ritrovo comunitario gratuito senza alcun limite di posti lascia semplicemente Capienza a 0, usando l'RSVP puramente per un conteggio affidabile piuttosto che per un'applicazione della capienza.
Come appare il fallback statico
<div id="em-rsvp-1" style="margin:12px 0;background-color:transparent">
<p style="margin:0 0 10px;font-weight:600;font-size:16px;color:#111827">Will you attend?</p>
<div>
<span class="kn-fallback">
<a href="https://mailinapp.com/v/eyJhbGci.../act?blockId=rsvp-1&blockType=rsvp&action=rsvp&response=yes"
style="display:inline-block;margin:0 6px 6px 0;padding:8px 14px;border:1px solid #d1d5db;
border-radius:6px;background-color:#ffffff;color:#111827;font-size:14px;text-decoration:none">
Yes
</a>
<a href="https://mailinapp.com/v/eyJhbGci.../act?blockId=rsvp-1&blockType=rsvp&action=rsvp&response=no"
style="display:inline-block;margin:0 6px 6px 0;padding:8px 14px;border:1px solid #d1d5db;
border-radius:6px;background-color:#ffffff;color:#111827;font-size:14px;text-decoration:none">
No
</a>
</span>
</div>
</div>
Questo è il fallback di livello 2 senza accompagnatori: semplici link verso /v/[token]/act, identici nella forma ai chip di opzione di un sondaggio, visibili ovunque il modulo dentro l'email non venga renderizzato.