Pendaftaran acara

Pendaftaran acara6 menit baca

Formulir RSVP pernikahan di website pernikahan Anda sendiri

Formulir RSVP untuk website pernikahan yang Anda buat sendiri: satu balasan per undangan, satu menu per tamu yang disebut namanya, tenggat, dan daftar siapa yang belum membalas.

Preet SutharPendiri, Ikiform

Beri setiap undangan link RSVP sendiri yang membawa kode undangan dan nama tamunya, lalu biarkan formulir menampilkan satu nama dan pilihan menu per tamu. Setiap balasan dikirim ke Ikiform, jadi Anda mendapat email untuk masing-masing dan CSV untuk diserahkan ke katering. Cocokkan balasan dengan daftar tamu di spreadsheet untuk melihat siapa yang belum menjawab, lalu jeda formulir setelah tenggat.

Apa yang berbeda dari pernikahan

Meetup menghitung orang asing. Pernikahan menghitung daftar tamu yang sudah Anda punya, undangan demi undangan. Empat hal mengikuti dari situ:

  • Satu balasan per undangan, bukan per orang. Pasangan atau keluarga menjawab bersama.
  • Tamu bernama, bukan jumlah tamu. Anda mengundang Ada dan Sam, bukan 2. Plus-one tercantum di undangan atau tidak sama sekali.
  • Satu menu per orang. Katering butuh total ikan, daging sapi, dan vegetarian, ditambah porsi anak.
  • Tenggat tegas dan daftar untuk ditagih. Venue meminta angka sebelum tanggal tertentu, dan daftar yang berguna adalah siapa yang belum membalas.

Layanan website pernikahan seperti Zola, The Knot, dan Joy punya alat RSVP yang dibangun di sekitar daftar tamu, dengan pencarian berdasarkan nama. Jika Anda memakai salah satunya untuk situs Anda, pakai RSVP-nya. Halaman ini untuk situs pernikahan yang Anda buat sendiri, di Squarespace, Carrd, Framer, atau HTML biasa, tempat Anda ingin RSVP ada di halaman Anda sendiri.

Ikiform tidak punya pencarian daftar tamu maupun grup berulang, jadi formulir tidak bisa tahu sendiri siapa saja yang ada di satu undangan. Triknya adalah menaruh informasi itu di link.

Dari daftar tamu ke angka untuk katering, dengan link RSVP personalsheetdaftartamusatubaris perundanganlinkpersonal?party=okafor&names=Ada,SamhalamanRSVPmenuuntuktiap namaIkiformmenyimpan,mengirimiemaileksporCSVtabbalasandisampingdaftartamubelummembalastagihmerekatotalmenuuntukkateringrumusQR atau pesankirimimporcocokkanDari daftar tamu ke angka untuk katering, dengan link RSVP personalsheet daftar tamusatu baris per undanganlink personal?party=okafor&names=Ada,Samhalaman RSVPmenu untuk tiap namaIkiformmenyimpan, mengirimi emailekspor CSVtab balasandi samping daftar tamubelum membalastagih merekatotal menuuntuk kateringrumusQR atau pesankirimimporcocokkan
  1. Sheet daftar tamu Anda punya satu baris per undangan: kode pendek, nama keluarga, dan nama-nama tamu.
  2. Sebuah rumus mengubah tiap baris menjadi link RSVP personal yang membawa kode dan nama-nama itu.
  3. Anda mencetak link sebagai kode QR di undangan, atau mengirimnya lewat pesan.
  4. Halaman RSVP membaca link dan menampilkan satu nama dan satu pilihan menu per tamu, lalu mengirim ke Ikiform.
  5. Anda mengekspor balasan sebagai CSV dan mengimpornya di samping daftar tamu.
  6. Mencocokkan kode menunjukkan undangan mana yang belum membalas, jadi Anda tahu siapa yang perlu ditagih.
  7. Menghitung tiap menu di seluruh balasan memberi total untuk katering.
Daftar tamu tetap di sheet Anda. Link hanya membawa secukupnya agar formulir terasa personal.

Di sheet daftar tamu, isi kode pendek di kolom A, seperti okafor atau nguyen-family, nama keluarga di B, dan nama depan tamu di C, dipisahkan koma. Rumus ini di D membuat link-nya:

Daftar tamu, kolom D
="https://ada-and-sam.example/rsvp?party=" & A2 & "&names=" & ENCODEURL(C2)

Cetak setiap link sebagai kode QR di undangan, atau tempel ke pesan. Buat kode dengan huruf kecil dan tanda hubung; pattern field menolak yang lain, sehingga kode yang salah ketik ketahuan sejak awal.

Formulirnya

Tempel ini ke halaman pernikahan Anda, atau ke blok embed di pembuat situs. Kode ini membaca party dan names dari link, menambahkan satu baris nama dan menu per tamu, hingga empat, dan menyembunyikan diri setelah tenggat. Tanpa nama di link, formulir menampilkan satu baris untuk diisi.

rsvp.html
<form id="rsvp" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <input type="hidden" name="party" id="party">
  <div id="guests"></div>
  <label>Email for updates <input name="email" type="email" autocomplete="email" required></label>
  <label>A song that gets you dancing <input name="song" maxlength="120"></label>
  <label>Anything we should know? <textarea name="note" rows="3" maxlength="1000"></textarea></label>
  <input type="hidden" name="_redirect" value="https://ada-and-sam.example/thank-you">
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
  <button type="submit">Send our RSVP</button>
</form>
<p id="closed" hidden>RSVPs closed on 1 May. Message us if your plans have changed.</p>

<template id="guest-row">
  <fieldset>
    <legend></legend>
    <label>Name <input data-part="name" maxlength="80" autocomplete="off"></label>
    <label>Meal
      <select data-part="meal">
        <option value="beef">Beef</option>
        <option value="fish">Fish</option>
        <option value="vegetarian">Vegetarian</option>
        <option value="child">Child's menu</option>
        <option value="not_coming">Can't come</option>
      </select>
    </label>
  </fieldset>
</template>

<script>
  const DEADLINE = new Date("2027-05-01T23:59:00+01:00");
  const params = new URLSearchParams(location.search);
  const party = (params.get("party") ?? "").toLowerCase();
  const names = (params.get("names") ?? "").split(",").map((name) => name.trim()).filter(Boolean).slice(0, 4);
  const rsvp = document.getElementById("rsvp");

  if (Date.now() > DEADLINE.getTime()) {
    rsvp.hidden = true;
    document.getElementById("closed").hidden = false;
  } else {
    document.getElementById("party").value = party;
    const rows = names.length ? names : [""];
    rows.forEach((name, index) => {
      const n = index + 1;
      const row = document.getElementById("guest-row").content.cloneNode(true);
      row.querySelector("legend").textContent = name || "Your name";
      const input = row.querySelector('[data-part="name"]');
      input.name = `guest_${n}_name`;
      input.value = name;
      input.required = n === 1;
      row.querySelector('[data-part="meal"]').name = `guest_${n}_meal`;
      document.getElementById("guests").append(row);
    });
  }
</script>
  • Menu setiap tamu menyertakan Can't come, sehingga keluarga yang salah satu anggotanya tidak bisa datang tetap mengirim satu balasan.
  • Input nama sudah terisi tetapi bisa diedit, jadi tamu bisa memperbaiki ejaan atau menuliskan nama anak.
  • Formulir mengirim dengan cara biasa dan mendarat di halaman terima kasih Anda lewat _redirect. Taruh tanggal, venue, dan link kalender di sana; Ikiform tidak mengirim email ke tamu Anda.
  • Tenggat hanya menyembunyikan formulir di browser. Saat tenggat tiba, pilih juga Pause form di Ikiform, agar tab yang tersimpan tidak bisa mengirim. Formulir yang dijeda menjawab 403 form_paused.

Tempel definisi ini di tab Fields formulir. Coba saja: kode undangan dengan huruf kapital atau spasi gagal di pattern, dengan pesan yang Anda atur.

Pratinjau

Menjalankan validator Ikiform di browser Anda. Tidak ada yang dikirim.

Field disusun sesuai urutan undangan, jadi CSV berisi nama setiap tamu diikuti menunya. Hanya tamu pertama yang wajib.

Siapa yang belum membalas, dan apa yang perlu dipesan

  1. Ekspor RSVP sebagai CSV dari Submissions lalu impor ke tab bernama Replies di spreadsheet daftar tamu.
  2. Jika satu undangan membalas dua kali, simpan baris terbarunya: urutkan berdasarkan created_at, terbaru di atas, lalu hapus duplikat pada kolom party.
  3. Tampilkan undangan yang belum membalas, dengan kode di kolom A daftar tamu dan party di kolom E tab Replies:
Belum membalas
=FILTER(A2:C, A2:A <> "", ISNA(MATCH(A2:A, Replies!E2:E, 0)))

Lalu hitung tiap menu untuk katering. Nama tidak pernah sama dengan nilai menu, jadi satu range yang mencakup semua kolom tamu sudah cukup:

Porsi ikan
=COUNTIF(Replies!G2:N, "fish")
AngkaCara
Orang yang datangJumlahkan hitungan untuk beef, fish, vegetarian, dan child
Tidak bisa datangCOUNTIF pada range yang sama untuk not_coming
Porsi anakCOUNTIF untuk child, yang biasanya diberi harga terpisah oleh katering
Catatan makananBaca kolom note. Alergi sering tersembunyi di sana
Email notifikasi datang dengan email setiap tamu sebagai reply-to, jadi Anda bisa menjawab pertanyaan langsung dari inbox. Ikiform mengirim email ke Anda dan pasangan, bukan ke tamu.

Sebelum mengirim undangan

  • Atur Allowed domains ke domain situs pernikahan Anda, dan domain staging pembuat situs selama pengujian.
  • Ikiform tidak menggabungkan atau menolak kiriman berulang berdasarkan email. Kiriman identik yang berulang dalam 24 jam hanya menambah skor spam. Lakukan deduplikasi di tempat daftar itu disimpan, atau saat Anda mengekspor. Balasan terbaru per kode adalah jawabannya.
  • Siapa pun yang memegang link bisa mengubah kode atau namanya. Itu tidak masalah untuk pernikahan; sheet Anda yang menentukan siapa yang diundang, dan daftar belum membalas akan menunjukkan hal yang janggal.
  • Kerabat yang lebih tua mungkin sama sekali tidak memakai formulir. Catat balasan lewat telepon dan kertas di sheet Anda agar hitungannya tetap lengkap.

Cek sebelum undangan dikirim

  1. Buka link undangan Anda sendiri di ponsel. Nama-nama muncul, masing-masing dengan pilihan menu.
  2. Pilih Can't come untuk satu tamu, kirim, lalu Anda mendarat di halaman terima kasih.
  3. Buka Submissions di dashboard. Kiriman baru ada di sana dengan setiap field yang Anda kirim.
  4. Cek inbox setiap penerima notifikasi. Masing-masing mendapat email berisi field, dan Reply terkirim ke pengirim formulir jika formulir punya field email.
  5. Impor CSV, lalu pastikan daftar belum membalas tidak lagi menampilkan kode Anda.
  6. Atur tenggat ke kemarin di salinan uji dan pastikan formulirnya tersembunyi.

Hal yang sering menjebak

MasalahYang harus dilakukan
422 dengan party: Use the link from your invitationKodenya berisi huruf kapital, spasi, atau karakter lain. Perbaiki kode di sheet, atau minta tamu memakai link mereka.
Tamu melihat satu baris kosong, bukan nama-namaLink kehilangan bagian names, sering kali karena aplikasi pesan memendekkannya. Kirim link lengkap atau kode QR-nya.
422 validation_failedKiriman tidak cocok dengan definisi field formulir. error.fields menyebutkan setiap field dan alasannya. Samakan name input dengan ID field.
403 origin_not_allowed, atau setiap kiriman masuk ke spamDomain halaman tidak ada di Allowed domains formulir. Tambahkan, ditambah localhost untuk uji lokal. Subdomain dari domain yang terdaftar diizinkan.
Browser mendarat di halaman terima kasih Ikiform, bukan halaman Anda_redirect diabaikan kecuali domainnya ada di Allowed domains dan berupa URL https:. Tambahkan domainnya, atau atur Redirect after submit di pengaturan formulir sebagai gantinya.

Pertanyaan

Mentok di salah satu langkah, atau ingin panduan untuk situasi Anda? Email hello@ikiform.com.