Eventanmeldung

Eventanmeldung7 Min. Lesezeit

Hochzeits-RSVP-Formular auf deiner eigenen Hochzeitswebsite

Ein RSVP-Formular für eine selbst gebaute Hochzeitswebsite: eine Antwort pro Einladung, ein Menü pro Gast, eine Frist und eine Liste, wer noch nicht geantwortet hat.

Preet SutharGründer, Ikiform

Gib jeder Einladung einen eigenen RSVP-Link mit Einladungscode und den Namen der Gäste, und lass das Formular pro Gast einen Namen und eine Menüwahl anzeigen. Jede Antwort wird an Ikiform gesendet, du bekommst also für jede eine E-Mail und eine CSV für das Catering. Gleiche die Antworten in einer Tabelle mit deiner Gästeliste ab, um zu sehen, wer noch nicht geantwortet hat, und pausiere das Formular nach deiner Frist.

Was bei einer Hochzeit anders ist

Ein Meetup zählt Fremde. Eine Hochzeit zählt eine Gästeliste, die du schon hast, Einladung für Einladung. Daraus folgen vier Dinge:

  • Eine Antwort pro Einladung, nicht pro Person. Ein Paar oder eine Familie antwortet gemeinsam.
  • Namentliche Gäste statt einer Gästezahl. Du hast Ada und Sam eingeladen, nicht 2. Begleitpersonen stehen auf der Einladung oder eben nicht.
  • Ein Menü pro Person. Das Catering braucht die Summen für Fisch, Rind und vegetarisch, plus Kinderteller.
  • Eine feste Frist und eine Nachfassliste. Die Location will die Zahlen bis zu einem Datum, und die nützliche Liste ist die, wer noch nicht geantwortet hat.

Hochzeitswebsite-Dienste wie Zola, The Knot und Joy haben RSVP-Tools, die auf einer Gästeliste aufbauen, mit Suche nach Namen. Wenn du einen davon für deine Site nutzt, nimm dessen RSVP. Diese Seite ist für eine Hochzeitsseite, die du selbst gebaut hast, auf Squarespace, Carrd, Framer oder mit einfachem HTML, bei der die Rückmeldung auf deiner eigenen Seite stattfinden soll.

Ikiform hat keine Gästelisten-Suche und keine sich wiederholenden Feldgruppen, das Formular kann also nicht von selbst wissen, wer zu einer Einladung gehört. Der Trick ist, dieses Wissen in den Link zu packen.

Von der Gästeliste zu den Zahlen fürs Catering, mit persönlichen RSVP-LinksGästelisteeineZeile proEinladungpersönlicherLink?party=okafor&names=Ada,SamRSVP-Seiteein Menüpro NameIkiformspeichert,mailt dirCSV-ExportTab mitAntwortenneben derGästelistenichtgeantwortethiernachhakenMenü-SummenfürsCateringFormelQR oder NachrichtPostimportierenabgleichenVon der Gästeliste zu den Zahlen fürs Catering, mit persönlichen RSVP-LinksGästelisteeine Zeile pro Einladungpersönlicher Link?party=okafor&names=Ada,SamRSVP-Seiteein Menü pro NameIkiformspeichert, mailt dirCSV-ExportTab mit Antwortenneben der Gästelistenicht geantwortethier nachhakenMenü-Summenfürs CateringFormelQR oder NachrichtPostimportierenabgleichen
  1. Deine Gästelisten-Tabelle hat eine Zeile pro Einladung: einen kurzen Code, den Namen des Haushalts und die Namen der Gäste.
  2. Eine Formel macht aus jeder Zeile einen persönlichen RSVP-Link mit Code und Namen.
  3. Du druckst den Link als QR-Code auf die Einladung oder schickst ihn in einer Nachricht.
  4. Die RSVP-Seite liest den Link, zeigt pro Gast einen Namen und eine Menüwahl und sendet dann an Ikiform.
  5. Du exportierst die Antworten als CSV und importierst sie neben die Gästeliste.
  6. Der Abgleich der Codes zeigt, welche Einladungen noch nicht geantwortet haben, damit du weißt, bei wem du nachhaken musst.
  7. Zählst du jedes Menü über alle Antworten, ergeben sich die Summen fürs Catering.
Die Gästeliste bleibt in deiner Tabelle. Der Link trägt nur so viel davon, wie nötig ist, um das Formular persönlich zu machen.

Trage in deiner Gästelisten-Tabelle einen kurzen Code in Spalte A ein, etwa okafor oder nguyen-family, den Haushalt in B und die Vornamen der Gäste in C, durch Kommas getrennt. Diese Formel in D baut den Link:

Gästeliste, Spalte D
="https://ada-and-sam.example/rsvp?party=" & A2 & "&names=" & ENCODEURL(C2)

Druck jeden Link als QR-Code auf die Einladung oder füge ihn in eine Nachricht ein. Schreib Codes klein und mit Bindestrichen; das Pattern des Felds lehnt alles andere ab, wodurch ein vertippter Code früh auffällt.

Das Formular

Füge das in deine Hochzeitsseite ein oder in einen Embed-Block in einem Baukasten. Es liest party und names aus dem Link, fügt pro Gast eine Zeile mit Name und Menü hinzu, bis zu vier, und blendet sich nach der Frist aus. Ohne Namen im Link zeigt es eine einzelne Zeile zum Ausfüllen.

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>
  • Das Menü jedes Gastes enthält Can't come, sodass ein Haushalt, in dem eine Person nicht kommen kann, trotzdem eine einzige Antwort sendet.
  • Die Namensfelder sind vorausgefüllt, aber bearbeitbar, damit ein Gast eine Schreibweise korrigieren oder ein Kind eintragen kann.
  • Das Formular sendet auf klassischem Weg und landet über _redirect auf deiner Dankeseite. Schreib Datum, Ort und einen Kalenderlink dorthin; Ikiform schickt deinen Gästen keine E-Mails.
  • Die Frist blendet das Formular nur im Browser aus. Wähle zum Stichtag auch in Ikiform Pause form, damit ein gespeicherter Tab nichts mehr senden kann. Pausierte Formulare antworten mit 403 form_paused.

Füge diese Definition im Tab Fields des Formulars ein. Probier es aus: Ein Einladungscode mit Großbuchstabe oder Leerzeichen scheitert am Pattern, mit der Meldung, die du festgelegt hast.

Vorschau

Führt den Validator von Ikiform in deinem Browser aus. Es wird nichts gesendet.

Die Felder folgen der Reihenfolge auf der Einladung, daher steht in der CSV hinter dem Namen jedes Gastes sein Menü. Nur der erste Gast ist Pflicht.

Wer noch nicht geantwortet hat und was zu bestellen ist

  1. Exportiere die Rückmeldungen unter Submissions als CSV und importiere sie in einen Tab namens Replies in der Gästelisten-Tabelle.
  2. Hat eine Einladung zweimal geantwortet, behalte ihre neueste Zeile: Sortiere nach created_at, neueste zuerst, und entferne Duplikate in der Spalte party.
  3. Liste die Einladungen ohne Antwort auf, mit den Codes in Spalte A der Gästeliste und party in Spalte E von Replies:
Nicht geantwortet
=FILTER(A2:C, A2:A <> "", ISNA(MATCH(A2:A, Replies!E2:E, 0)))

Zähle dann jedes Menü für das Catering. Namen entsprechen nie einem Menüwert, daher funktioniert ein Bereich über alle Gästespalten:

Fischteller
=COUNTIF(Replies!G2:N, "fish")
ZahlWie
Personen, die kommenAddiere die Zahlen für beef, fish, vegetarian und child
Kann nicht kommenCOUNTIF über denselben Bereich für not_coming
KindertellerCOUNTIF für child, was die meisten Caterer separat berechnen
Hinweise zur ErnährungLies die Spalte note. Dort verstecken sich Allergien
Benachrichtigungs-E-Mails kommen mit der E-Mail-Adresse des jeweiligen Gastes als Reply-To an, sodass du Fragen direkt aus deinem Postfach beantworten kannst. Ikiform schickt E-Mails an dich und deinen Partner, nicht an deine Gäste.

Bevor du die Einladungen verschickst

  • Setze Allowed domains auf die Domain deiner Hochzeitsseite und, während du testest, auf die Staging-Domain des Baukastens.
  • Ikiform führt wiederholte Einsendungen per E-Mail-Adresse weder zusammen noch lehnt es sie ab. Eine identische Wiederholung innerhalb von 24 Stunden erhöht nur den Spam-Score. Dedupliziere dort, wo die Liste liegt, oder beim Export. Die neueste Antwort pro Code ist die gültige.
  • Jeder mit einem Link kann dessen Code oder Namen ändern. Für eine Hochzeit ist das in Ordnung; deine Tabelle entscheidet, wer eingeladen war, und die Liste der fehlenden Antworten zeigt alles Ungewöhnliche.
  • Ältere Verwandte nutzen das Formular vielleicht gar nicht. Trag Antworten per Telefon oder auf Papier in deine Tabelle ein, damit die Zahlen vollständig bleiben.

Vor dem Versand der Einladungen prüfen

  1. Öffne deinen eigenen Einladungslink auf dem Handy. Die Namen werden angezeigt, jeweils mit Menüwahl.
  2. Wähle bei einem Gast Can't come, sende ab und lande auf deiner Dankeseite.
  3. Öffne Submissions im Dashboard. Die neue Einsendung ist da, mit jedem Feld, das du gesendet hast.
  4. Prüfe das Postfach jedes Benachrichtigungsempfängers. Jeder bekommt eine E-Mail mit den Feldern, und Reply geht an den Absender, wenn das Formular ein email-Feld hat.
  5. Importiere die CSV und prüfe, ob die Liste der fehlenden Antworten deinen Code nicht mehr zeigt.
  6. Setze die Frist in einer Testkopie auf gestern und prüfe, ob sich das Formular ausblendet.

Stolperfallen

ProblemWas zu tun ist
422 mit party: Use the link from your invitationDer Code enthält Großbuchstaben, Leerzeichen oder andere Zeichen. Korrigiere den Code in der Tabelle oder lass den Gast seinen Link verwenden.
Ein Gast sieht eine leere Zeile statt NamenDer Link hat seinen names-Teil verloren, oft weil eine Messenger-App ihn gekürzt hat. Schick den vollständigen Link oder den QR-Code.
422 validation_failedDer Post passt nicht zur Felddefinition des Formulars. error.fields nennt jedes Feld und den Grund. Gleiche den name des Eingabefelds an die Feld-ID an.
403 origin_not_allowed, oder jeder Post landet im SpamDie Domain der Seite steht nicht unter Allowed domains des Formulars. Füge sie hinzu, plus localhost für lokale Tests. Subdomains einer eingetragenen Domain sind erlaubt.
Der Browser landet auf der Dankeseite von Ikiform statt auf deiner_redirect wird ignoriert, außer seine Domain steht unter Allowed domains und es ist eine https:-URL. Füge die Domain hinzu oder setze stattdessen Redirect after submit in den Einstellungen des Formulars.

Fragen

Hängst du bei einem Schritt fest oder willst eine Anleitung für deinen Fall? Schreib an hello@ikiform.com.