Documentation menu

RSVPブロック

「参加しますか?」という無料の質問に、参加人数の上限とキャンセル待ちのサポートを組み合わせたものです — 商品ブロックの有料チケットの在庫上限に相当する、無料版のRSVPです。課金ではなく人数の把握だけが必要なイベント向けです。

仕組み

同伴者のないRSVPは、投票の単一選択と全く同じように動作します:「はい」と「いいえ」は、buildChipGroupが投票の選択肢に対して生成するのと同じ、リンクを起点としたチップのペアとしてレンダリングされます。何かが記録される前に、ホスティングされたライブビュー上(またはクライアントが対応していればメール内のフォーム送信を通じて直接)で確認が行われるため、企業のスキャナーがリンクをプリフェッチしても件数が膨らむことはありません。

同伴者の追加を許可をオンにすると、変化するのは「はい」の回答だけです: 単純なGETリンクは実際のフォームフィールドのような選択肢を提供できないため、同伴者数はライブビュー限定のキネティックな<form><select>コントロールになります。これは、固定されたリンクでは伝えられない内容について課題ブロックのテキスト/リンク回答がライブビューを必要としているのと同じ考え方です。「はい(同伴者を選択)」は、ティア2/ティア3のフォールバックでは/actに直接向かうのではなく、ライブビュー自体への単純なリンクとしてレンダリングされます。同伴者のいない「はい」(同伴者0人を選んだ場合、または同伴者機能自体が無効な場合)は、どちらの場合も通常のワンタップリンクとしてそのまま/actに到達します — ライブビューが必要になるのは、同伴者数を選ぶステップだけです。

上限の集計は、受信者ごとの重複チェックも行う単一のFirestoreトランザクションの中で行われます。商品ブロックのチェックアウトは.count()クエリを再チェックするだけで、稀な過剰販売の競合が発生した場合は返金で対応しますが、RSVPには上限超過の回答に対する返金のようなセーフティネットがありません。そのため、判定と書き込みは競合によって分断される可能性のある2つの別々のステップとしてではなく、原子的に同時に行われます。人数上限を0より大きい値に設定すると、確定済みのRSVPとその同伴者を合わせた人数がその上限を超えた時点で、その回答は確定済みではなくキャンセル待ちとして記録され、受信者には汎用的なお礼ではなく、自分で設定したキャンセル待ちメッセージが表示されます。

「いいえ」の回答は常に辞退として記録され、人数上限とは一切照合されません。人数上限0は無制限を意味し、商品ブロックの在庫フィールドが使っている「0 = 未設定」という同じ規則に従っています。匿名の回答(受信者トークンがない場合 — 例えば、サードパーティのESPに貼り付けられたエクスポート済みHTMLファイルからの回答)は、紐付ける受信者が存在しないため、重複チェックを完全にスキップします。ただし同じ人数上限のトランザクションは依然として実行されるため、匿名の集中投稿でもキャンセル待ちの境界を超えて過剰に確定させることはできません — そのパスで使えなくなるのは、1人単位の重複検出だけです。

プロジェクトに終了日または回答数の上限が設定されている場合(アンケートのライフサイクルを参照)、終了したRSVPでは両方のチップが無効なグレー表示に切り替わり、ライブビューには「このアンケートは終了しました」という注記が表示されます。

設定可能なフィールド:

  • 質問 — 既定値は「参加しますか?」です。
  • 人数上限(0 = 無制限)
  • 同伴者の追加を許可 — 「はい」に同伴者数のピッカーを追加します。
  • RSVPあたりの最大同伴者数(同伴者が許可されている場合) — ピッカーの範囲を制限します(1〜20)。
  • キャンセル待ちメッセージ — 人数上限に達した際に、通常のお礼の代わりに表示されます。
  • カード全体の背景色パディング枠線角丸
  • 質問の色/サイズ、およびはい/いいえボタンの色/背景の上書き。

すべてのRSVPは、確定/辞退/キャンセル待ちの件数と同伴者数の合計に集計され、他のすべてのブロックが使う汎用の回答インクリメント経路ではなく、プロジェクトのrsvpBlocks集計バケットに直接書き込まれます。これは意図的な例外です。確定かキャンセル待ちかの判定は、件数そのものと同じトランザクションの中で行う必要があるためです。

Subject

Will you join us?

「イベント」用途のプロジェクトは、ミーティングリンク、会場、カレンダーに追加と並んで、あらかじめRSVPブロックが配置された状態で新しいプロジェクトを開始します。座席数が限られた会場のために人数上限を設定すれば、追加の設定なしにブロックがキャンセル待ちを処理します — イベントとウェビナーを参照してください。クラブでは、トライアウトや遠征参加人数の限られた席のために同じブロックを使い、誰も手作業で追跡する必要なく上限が人数を正確に保ちます — スポーツチームとクラブを参照してください。座席数の制限が全くない無料のコミュニティ集会では、人数上限を0のままにしておき、上限の強制ではなく確実な人数把握のためだけにRSVPを使います。

静的フォールバックの見え方

<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>

これは同伴者なしのティア2フォールバックです: /v/[token]/actへの単純なリンクで、投票の選択肢チップと形状が同一であり、メール内フォームがレンダリングされない場所ではどこでも表示されます。

関連ページ