Bloc RSVP
Une question gratuite « Serez-vous présent ? » avec prise en charge de la capacité et de la liste d'attente — l'équivalent gratuit du plafond de stock à billet payant du bloc Produit, pour les événements qui n'ont besoin que d'un décompte de participants plutôt que d'un paiement.
Comment ça fonctionne
Un RSVP sans invités se comporte exactement comme un vote à choix unique d'un sondage : « Oui » et « Non » se rendent comme la même paire de puces lien-en-premier que buildChipGroup produit pour une option de sondage. La confirmation se fait sur la vue en direct hébergée (ou directement via une soumission de formulaire dans l'email, là où le client le prend en charge) avant que quoi que ce soit ne soit enregistré, de sorte qu'un scanner d'entreprise qui précharge le lien ne puisse pas gonfler le décompte.
Activer Autoriser à amener des invités ne change que la réponse « Oui » : un simple lien GET ne peut pas offrir un choix comme un vrai champ de formulaire, donc le nombre d'invités devient un contrôle cinétique <form><select> disponible uniquement sur la vue en direct. Cela reflète la façon dont les réponses en texte/lien du bloc Devoir ont elles aussi besoin de la vue en direct pour tout ce qu'un lien fixe ne peut pas porter. « Oui (choisir des invités) » se rend comme un simple lien vers la vue en direct elle-même sur le repli de niveau 2/niveau 3, plutôt que directement vers /act. Un « Oui » sans invité (0 invité choisi, ou invités désactivés entièrement) atteint quand même /act comme un lien normal en un tap dans les deux cas — seule l'étape de choix du nombre d'invités nécessite spécifiquement la vue en direct.
La comptabilisation de la capacité se fait à l'intérieur d'une seule transaction Firestore qui effectue aussi la vérification de déduplication par destinataire. Contrairement au paiement du bloc Produit, qui se contente de revérifier une requête .count() et de rembourser en cas de rare survente, un RSVP n'a pas de filet de sécurité de type remboursement pour une réponse au-delà de la capacité. La décision et l'écriture se font donc de manière atomique ensemble, plutôt que comme deux étapes séparées qu'une situation de concurrence pourrait scinder. Réglez Capacité au-dessus de 0 et, une fois que les RSVP confirmés plus leurs invités la dépasseraient, la réponse est enregistrée comme en liste d'attente plutôt que confirmée, et le destinataire voit votre propre message de liste d'attente plutôt qu'un remerciement générique.
Une réponse « Non » est toujours enregistrée comme déclinée, jamais vérifiée par rapport à la capacité. Capacité 0 signifie illimité, la même convention « 0 = non défini » qu'utilise le champ de stock du bloc Produit. Une réponse anonyme (sans jeton de destinataire — par exemple, une provenant d'un fichier HTML exporté et collé dans un ESP tiers) saute entièrement la vérification de déduplication, puisqu'il n'y a pas de destinataire sur lequel se baser. Elle passe quand même par la même transaction de capacité, donc un afflux anonyme ne peut toujours pas survendre la limite de la liste d'attente ; seule la détection des doublons par personne est indisponible sur ce chemin.
Si le projet a une date de clôture ou un plafond de réponses configuré (voir cycle de vie d'une enquête), un RSVP clos remplace les deux puces par des versions grisées inertes plus une note « Cette enquête est close » sur la vue en direct.
Champs configurables :
- Question — par défaut « Serez-vous présent ? »
- Capacité (0 = illimité).
- Autoriser à amener des invités — ajoute un sélecteur de nombre d'invités à « Oui ».
- Nombre maximal d'invités par RSVP (si les invités sont autorisés) — plafonne la plage du sélecteur (1–20).
- Message de liste d'attente — affiché à la place d'un remerciement normal une fois la capacité atteinte.
- Couleur de fond, marge intérieure, bordure et rayon de bordure sur la carte.
- Couleur/taille de la question, et surcharges de couleur/fond des boutons Oui/Non.
Chaque RSVP se synthétise en décomptes confirmés/déclinés/en liste d'attente et un total d'invités, écrit directement dans la réserve d'agrégation rsvpBlocks du projet plutôt que via le chemin d'incrémentation générique des réponses que tous les autres blocs utilisent. C'est une exception délibérée, puisque la décision confirmé-contre-en-liste-d'attente doit se produire dans la même transaction que le décompte lui-même.
Exemples
Subject
Will you join us?
La finalité de projet « Événement » démarre un nouveau projet avec un bloc RSVP déjà en place aux côtés de Lien de réunion, Lieu, et Ajouter au calendrier. Définissez une capacité pour un lieu à places limitées et le bloc gère la liste d'attente sans configuration supplémentaire — voir Événements et webinaires. Un club utilise le même bloc pour un essai ou un nombre limité de places pour un déplacement, la capacité gardant le décompte honnête sans que personne n'ait à le suivre à la main — voir Équipes et clubs sportifs. Une rencontre communautaire gratuite sans aucune limite de places laisse simplement la Capacité à 0, utilisant le RSVP purement pour un décompte fiable plutôt que pour une application quelconque de la capacité.
À quoi ressemble l'alternative statique
<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>
Ceci est le repli de niveau 2 sans invités : de simples liens vers /v/[token]/act, de forme identique aux puces d'option d'un sondage, visibles partout où le formulaire dans l'email ne se rend pas.