# Rückmeldungen in einer Google-Tabelle sammeln

Das Formular „Sagt uns Bescheid / Let us know“ schickt die Antworten an die Adresse in
`config.json → rsvp.endpoint`. Am einfachsten ist eine Google-Tabelle mit einem kleinen Skript.
Jeder Gast bekommt **eine Zeile**; ändert er seine Antwort, wird seine Zeile überschrieben.

## Einrichten (ca. 5 Minuten)

1. Neue Google-Tabelle anlegen, z. B. „Mi & Luke – Rückmeldungen“.
2. Menü **Erweiterungen → Apps Script**, den vorhandenen Code löschen und das Skript unten einfügen. Speichern.
3. **Bereitstellen → Neue Bereitstellung** → Typ **Web-App**
   - Ausführen als: **Ich**
   - Zugriff: **Jeder**
   → **Bereitstellen**, Zugriff erlauben, die **Web-App-URL** (endet auf `/exec`) kopieren.
4. In `config.json` eintragen:
   ```json
   "endpoint": "https://script.google.com/macros/s/…/exec",
   ```
   Optional die Frist: `"deadline_de": "1. Februar 2027"`, `"deadline_en": "1 February 2027"`.
5. `node build.js` ausführen und `dist/` neu hochladen.

Ohne `endpoint` funktioniert das Formular trotzdem, wenn `whatsapp` oder `email` eingetragen ist:
dann öffnet sich eine fertig ausgefüllte WhatsApp-Nachricht bzw. E-Mail mit allen Angaben.

## Skript

```javascript
function doPost(e) {
  var lock = LockService.getScriptLock();
  lock.waitLock(10000);
  try {
    var d = JSON.parse(e.postData.contents);
    var sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
    var head = ['Zeit', 'Gäste', 'Zusagen', 'Absagen', 'Anzahl dabei', 'Essen & Allergien', 'Musikwunsch', 'Nachricht', 'Sprache', 'Link'];
    if (sh.getLastRow() === 0) { sh.appendRow(head); sh.setFrozenRows(1); }

    var yes = d.answers.filter(function (a) { return a.coming; }).map(function (a) { return a.name; });
    var no  = d.answers.filter(function (a) { return !a.coming; }).map(function (a) { return a.name; });
    var row = [new Date(), d.guests, yes.join(', '), no.join(', '), yes.length,
               d.diet || '', d.song || '', d.message || '', d.lang, d.path];

    // gleiche Karte (Link) schon vorhanden? -> Zeile überschreiben
    var last = sh.getLastRow(), r = 0;
    if (last > 1) {
      var paths = sh.getRange(2, head.length, last - 1, 1).getValues();
      for (var i = 0; i < paths.length; i++) if (paths[i][0] === d.path) { r = i + 2; break; }
    }
    if (r) sh.getRange(r, 1, 1, row.length).setValues([row]);
    else sh.appendRow(row);
    return ContentService.createTextOutput('ok');
  } finally {
    lock.releaseLock();
  }
}
```

Die Spalte **Anzahl dabei** lässt sich unten mit `=SUMME(E2:E)` zusammenzählen.
