Integrationen: Webhooks und Google Sheets
Auf dieser Seite
Integrationen im Menü deiner Website schickt, was auf deiner Website passiert, in dem Moment an andere Tools, in dem es passiert:
- Webhooks senden neue Anfragen, neue Abonnenten und bezahlte Bestellungen an jede App, die sie annimmt: Zapier, Make, n8n, Pabbly, dein CRM oder deinen eigenen Server.
- Google Sheets fügt jede neue Anfrage als Zeile in eine Tabelle ein, ohne dass du ein Google-Konto mit Closer verbinden musst.
Jede Website hat ihre eigenen Integrationen. Du kannst bis zu 5 Adressen pro Website hinzufügen (Webhooks und Tabellen zusammen).
Webhooks
Ein Webhook ist eine Adresse (URL), die Closer mit den Details eines Ereignisses aufruft. Die meisten Automatisierungstools geben dir eine: In Zapier ist es der Trigger Webhooks by Zapier → Catch Hook, in Make das Modul Webhooks → Custom webhook, in n8n der Knoten Webhook.
Einen Webhook hinzufügen
- Öffne Integrationen.
- Füge die Adresse unter Webhook-Adresse ein. Sie muss mit
https://beginnen. - Hake die gewünschten Ereignisse an:
- Neue Anfrage: Ein Besucher hat ein Kontaktformular (oder ein Quiz mit Formular) abgeschickt.
- Neuer Abonnent: Jemand hat sich über ein Newsletter-Formular angemeldet.
- Neue Bestellung: Eine Bestellung in deinem Shop wurde bezahlt.
- Klicke auf Webhook hinzufügen.
- Closer zeigt das Signatur-Secret (
whsec_…) ein einziges Mal. Kopiere es und hinterlege es in der empfangenden App, wenn du prüfen willst, ob Anfragen wirklich von Closer kommen. Wenn du es verlierst, klicke auf Neues Secret; das alte funktioniert sofort nicht mehr. - Klicke auf Test senden. Die empfangende App bekommt ein Beispielereignis (mit
"test": true), und das Ergebnis erscheint im Zustellprotokoll.
Später kannst du Ereignisse per Klick ein- und ausschalten, einen Webhook mit seinem Schalter pausieren oder ihn Entfernen.
Aus Sicherheitsgründen ruft Closer nur öffentliche Internetadressen auf. Adressen in privaten oder internen Netzen (wie
localhost,10.x.x.x,192.168.x.x) werden abgelehnt.
Was Closer sendet
Jede Anfrage ist ein POST mit einem JSON-Body:
{
"id": "1f6c2a9e-…",
"event": "inquiry.created",
"created_at": "2026-10-22T09:30:00+00:00",
"test": false,
"site": { "id": 12, "name": "My site", "url": "https://mysite.closer.li" },
"data": { … }
}
Das event ist inquiry.created, subscriber.created oder order.paid. Was in data steht:
| Ereignis | Felder in data |
|---|---|
inquiry.created |
id, created_at, language, page (wo das Formular abgeschickt wurde, z. B. /contact), name, email, fields (eine Liste aus key, label, value für jedes Formularfeld), quiz (Antworten und Ergebnis, oder null) |
subscriber.created |
id, email, name, language, source (das Formular), created_at |
order.paid |
id, code, email, name, language, items (id, name, price), subtotal, discount, coupon_code, total, currency, mode (test, live oder free), paid_at |
Beträge sind in Cent angegeben (der kleinsten Einheit der Währung): 4500 mit "currency": "EUR" bedeutet 45,00 €.
Header, die mit jeder Anfrage gesendet werden:
X-Closer-Event: der Name des Ereignisses.X-Closer-Delivery: eine eindeutige ID des Ereignisses. Wiederholungen desselben Ereignisses behalten dieselbe ID, sodass du Duplikate ignorieren kannst.X-Closer-Signature:t=1761125400,v1=5d41…, wobeitder Sendezeitpunkt ist (Unix-Sekunden) undv1der HMAC-SHA256 vont + "." + Roh-Body, erstellt mit deinem Signatur-Secret.
Um eine Anfrage zu prüfen, berechne denselben HMAC mit deinem Secret, vergleiche ihn mit v1 und lehne Anfragen ab, deren t älter als ein paar Minuten ist. In PHP:
[$t, $v1] = sscanf($_SERVER['HTTP_X_CLOSER_SIGNATURE'], 't=%d,v1=%s');
$body = file_get_contents('php://input');
$valid = hash_equals(hash_hmac('sha256', $t.'.'.$body, $secret), $v1) && abs(time() - $t) < 300;
Wiederholungen und das Zustellprotokoll
Die empfangende Adresse muss innerhalb von 15 Sekunden mit einem 2xx-Status antworten. Tut sie das nicht (ein Fehler, ein Timeout, ein 500), versucht Closer es noch zweimal: nach etwa 30 Sekunden und nach etwa 5 Minuten. Weiterleitungen werden nicht verfolgt, nutze also die endgültige Adresse.
Das Zustellprotokoll zeigt die letzten 50 Anfragen der Website: Zeit, Ereignis, Adresse, der wievielte Versuch es war (1/3, 2/3, 3/3), den Statuscode, mit dem die Adresse geantwortet hat, und gegebenenfalls den Fehler.
Google Sheets
Jede neue Anfrage wird zu einer Zeile in einer Google-Tabelle: Datum, Seite, Name, E-Mail, dann eine Spalte für jedes weitere Formularfeld (nach seiner Beschriftung). Neue Felder bekommen automatisch eine neue Spalte. Das funktioniert über ein kleines Google Apps Script, das du in deine eigene Tabelle einfügst, sodass Closer nie Zugriff auf dein Google-Konto braucht.
Einrichten (etwa 3 Minuten)
- Erstelle eine neue Tabelle in Google Sheets (am schnellsten öffnest du
sheets.new). Anfragen landen im ersten Tabellenblatt. - Öffne in der Tabelle Erweiterungen → Apps Script (Extensions → Apps Script).
- Lösche den Beispielcode im Editor. Klicke in Closer unter Google Sheets auf Skript kopieren und füge es in den Apps-Script-Editor ein. Klicke auf Speichern (das Disketten-Symbol).
- Klicke auf Bereitstellen → Neue Bereitstellung (Deploy → New deployment). Klicke auf das Zahnrad neben Typ auswählen (Select type) und wähle Web-App (Web app). Stelle ein:
- Ausführen als (Execute as): Ich (Me)
- Zugriff (Who has access): Jeder (Anyone)
- Klicke auf Bereitstellen (Deploy). Google bittet dich, das Skript zu autorisieren: Wähle dein Konto. Wenn du „Google hat diese App nicht überprüft“ siehst, klicke auf Erweitert → (dein Projekt) öffnen (Advanced → Go to …) und auf Zulassen (Allow). Das ist dein eigenes Skript, das in deinem eigenen Konto läuft.
- Kopiere die Web-App-URL (Web app URL). Sie sieht so aus:
https://script.google.com/macros/s/…/exec. - Füge sie in Closer unter Web-App-URL ein und klicke auf Verbinden. Closer sendet sofort eine Testzeile; prüfe, ob sie in der Tabelle erscheint (du kannst sie löschen).
Mit Testzeile senden prüfst du jederzeit die Verbindung. Der Schalter pausiert die Tabelle, der Papierkorb-Button trennt sie.
Halte die Web-App-URL geheim: Jeder, der sie hat, kann Zeilen in diese Tabelle schreiben. Ist sie bekannt geworden, erstelle in Apps Script eine neue Bereitstellung und verbinde die neue URL.
Gut zu wissen
- Nur Anfragen landen in der Tabelle. Für Abonnenten und Bestellungen nutze einen Webhook (zum Beispiel zu Zapier oder Make, die ebenfalls in Google Sheets schreiben können).
- Wenn du das Skript später änderst, nutze Bereitstellen → Bereitstellungen verwalten → Bearbeiten → Neue Version (Deploy → Manage deployments → Edit → New version), damit die URL gleich bleibt.
- Text, der wie eine Formel beginnt (
=,+,-,@), wird als reiner Text geschrieben, sodass eine Formulareingabe keine Formel in deiner Tabelle ausführen kann. - Jede Zeile wird in dem Moment hinzugefügt, in dem die Anfrage eintrifft. Fehlgeschlagene Versuche werden wie bei Webhooks wiederholt und im Zustellprotokoll angezeigt.
- Anfragen über dem Monatslimit deines Tarifs werden im Posteingang gespeichert, aber nicht an Integrationen gesendet.
Keine Antwort gefunden?
Schreib uns, wir antworten innerhalb eines Werktags.