Bloco RSVP
Uma pergunta gratuita "Você vai comparecer?", com suporte a capacidade e lista de espera — o equivalente sem cobrança ao limite de estoque de ingressos pagos do bloco Produto, para eventos que só precisam de uma contagem de participantes, sem pagamento.
Como funciona
Um RSVP sem acompanhantes se comporta exatamente como o voto de escolha única de uma enquete: "Sim" e "Não" são renderizados como o mesmo par de chips link-primeiro que o buildChipGroup produz para uma opção de enquete. A confirmação acontece na visualização ao vivo hospedada (ou diretamente por meio de um envio de formulário dentro do e-mail, onde o cliente suporta) antes de qualquer coisa ser registrada, para que um scanner corporativo pré-buscando o link não consiga inflar a contagem.
Ativar Permitir levar acompanhantes muda apenas a resposta "Sim": um link GET simples não consegue oferecer uma escolha da forma que um campo de formulário real consegue, então a contagem de acompanhantes se torna um controle <form><select> cinético, disponível apenas na visualização ao vivo. Isso espelha a forma como as respostas em texto/link do bloco de Tarefa também precisam da visualização ao vivo para qualquer coisa que um link fixo não consiga carregar. "Sim (escolher acompanhantes)" é renderizado como um link simples para a própria visualização ao vivo no fallback de nível 2/nível 3, em vez de ir direto para /act. Um "Sim" sem acompanhantes (0 acompanhantes escolhidos, ou acompanhantes desativados por completo) ainda chega a /act como um link normal de um toque, de qualquer forma — só a etapa de contagem de acompanhantes especificamente precisa da visualização ao vivo.
A contabilização de capacidade acontece dentro de uma única transação do Firestore, que também realiza a verificação de deduplicação por destinatário. Diferente do checkout do bloco Produto, que apenas reverifica uma consulta .count() e reembolsa em uma rara condição de corrida por esgotamento, um RSVP não tem um mecanismo de segurança do tipo reembolso para uma resposta acima da capacidade. Então a decisão e a gravação acontecem atomicamente juntas, em vez de como duas etapas separadas que uma condição de corrida poderia dividir. Defina Capacidade acima de 0, e assim que as confirmações — mais quaisquer acompanhantes — ultrapassarem esse limite, as próximas respostas "sim" são registradas como em lista de espera em vez de confirmadas, e o destinatário vê sua própria mensagem de lista de espera configurada, em vez de um agradecimento genérico.
Uma resposta "Não" é sempre registrada como recusada, nunca verificada contra a capacidade. Capacidade 0 significa ilimitado, a mesma convenção "0 = não definido" que o campo de estoque do bloco Produto usa. Uma resposta anônima (sem token de destinatário — por exemplo, uma vinda de um arquivo HTML exportado e colado em um ESP de terceiros) pula completamente a verificação de deduplicação, já que não há destinatário para associar. Mesmo assim, ela ainda passa pela mesma transação de capacidade, então uma enxurrada anônima ainda não consegue vender além do limite da lista de espera; apenas a detecção de duplicidade por pessoa não fica disponível nesse caminho.
Se o projeto tiver uma data de encerramento ou um limite de respostas configurado (veja ciclo de vida da pesquisa), um RSVP encerrado troca os dois chips por versões inertes e cinzas, mais um aviso "Esta pesquisa está fechada" na visualização ao vivo.
Campos configuráveis:
- Pergunta — o padrão é "Você vai comparecer?"
- Capacidade (0 = ilimitado).
- Permitir levar acompanhantes — adiciona um seletor de contagem de acompanhantes ao "Sim".
- Máximo de acompanhantes por RSVP (se acompanhantes forem permitidos) — limita o intervalo do seletor (1–20).
- Mensagem de lista de espera — exibida em vez de um agradecimento normal assim que a capacidade é atingida.
- Cor de fundo, preenchimento interno, borda e raio da borda no cartão.
- Cor/tamanho da pergunta, e substituições de cor/fundo dos botões Sim/Não.
Todo RSVP é resumido em contagens de confirmados/recusados/em lista de espera e um total de acompanhantes, gravado diretamente no bucket agregado rsvpBlocks do projeto, em vez de passar pelo caminho genérico de incremento de resposta que todo outro bloco usa. Essa é uma exceção deliberada, já que a decisão entre confirmado e em lista de espera precisa acontecer dentro da mesma transação que a própria contagem.
Exemplos
Subject
Will you join us?
O propósito de projeto "Evento" inicia um novo projeto com um bloco RSVP já colocado ao lado de Link de reunião, Local e Adicionar ao calendário. Defina uma capacidade para um local com assentos limitados, e o bloco cuida da lista de espera sem nenhuma configuração extra — veja Eventos e webinars. Um clube usa o mesmo bloco para uma seletiva ou um número limitado de vagas em uma viagem, com a capacidade mantendo a contagem de participantes honesta sem que ninguém precise rastreá-la manualmente — veja Times e clubes esportivos. Um encontro comunitário gratuito sem nenhum limite de assentos simplesmente deixa a Capacidade em 0, usando o RSVP puramente para uma contagem confiável de participantes, em vez de qualquer aplicação de limite.
Como é o fallback estático
<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>
Este é o fallback de nível 2 sem acompanhantes: links simples para /v/[token]/act, com o mesmo formato dos chips de opção de uma enquete, visíveis onde quer que o formulário dentro do e-mail não seja renderizado.