Was Sie brauchen
- Ein Make.com-Konto mit einer Verbindung zu Google Sheets
- Ein Google-Tabellenblatt mit Kopfzeile, zum Beispiel: Eingegangen am, Name, E-Mail, Nachricht
- Das Tool, das den Webhook senden soll, oder eine Möglichkeit, eine Testanfrage zu senden (curl, Postman oder ein HTTP-Client Ihrer Wahl)
- Eine ungefähre Vorstellung davon, welche Felder der Absender mitschickt
Schritt für Schritt aufbauen
1. Webhook erstellen
Legen Sie ein neues Szenario an und fügen Sie Webhooks – Custom webhook als Trigger hinzu. Klicken Sie auf Add, geben Sie einen Namen wie „Kontaktformular Website“ ein und speichern Sie. Make zeigt eine URL an, die etwa so aussieht: https://hook.<region>.make.com/<long-random-string>. Kopieren Sie sie. Behandeln Sie sie wie ein Passwort: Wer sie kennt, kann Daten in Ihr Szenario schicken.
2. Auf Daten warten lassen
Klicken Sie auf Run once. Das Modul wartet jetzt auf Daten und zeigt das auch an. Die Struktur lernt es nur, während es lauscht. Überspringen Sie diesen Schritt also nicht.
3. Eine Beispielanfrage senden
Senden Sie aus einem Terminal ein realistisches Beispiel. Mit curl:
curl -X POST "https://hook.<region>.make.com/<your-id>" \
-H "Content-Type: application/json" \
-d '{"name": "Anna Berg", "email": "[email protected]", "message": "Hello"}'
Unter Windows verwenden Sie in PowerShell ausdrücklich curl.exe, da curl dort ein Alias für einen anderen Befehl ist. Postman funktioniert ebenfalls. Make antwortet mit einer kurzen Meldung „Accepted“, und das Modul wird grün.
4. Prüfen, ob die Datenstruktur ermittelt wurde
Öffnen Sie die Ausgabe-Bubble. Dort sollten name, email und message als Felder erscheinen. Diese Struktur verwendet Make im Mapping-Panel. Wenn der Absender später weitere Felder mitschicken kann oder manche optional sind, senden Sie ein zweites Beispiel mit allen Feldern. Um die Struktur später zu ändern, klicken Sie im Modul Custom webhook auf Detect new values und senden eine neue Anfrage. Kennen Sie die Felder vorab, können Sie stattdessen in den erweiterten Einstellungen des Webhooks eine Datenstruktur auswählen; Make lehnt dann Anfragen, die nicht dazu passen, mit Status 400 ab.
5. Filter für Pflichtfelder hinzufügen
Klicken Sie auf die Verbindung nach dem Webhook und fügen Sie einen Filter hinzu: email, exists, und message, exists. So enden unvollständige oder versehentliche Anfragen hier, statt leere Zeilen zu erzeugen.
6. Google Sheets – Add a Row hinzufügen
Wählen Sie die Tabelle und das Tabellenblatt aus. Mappen Sie:
- Eingegangen am:
{{formatDate(now; "YYYY-MM-DD HH:mm")}} - Name:
{{1.name}} - E-Mail:
{{trim(1.email)}} - Nachricht:
{{1.message}}
Die 1. ist in diesem Beispiel die Nummer des Webhook-Moduls. Verwenden Sie für Ihre eigene das Mapping-Panel.
7. Verschachtelte Daten verarbeiten
Echte Payloads enthalten oft verschachtelte Objekte oder Arrays, etwa customer.address.city oder eine Liste von items. Verschachtelte Objekte können Sie mappen, indem Sie sich im Mapping-Panel durch die Baumstruktur klicken. Arrays brauchen einen Iterator, wenn jedes Element eine eigene Zeile werden soll. Möchten Sie eine einzige Zeile, wandeln Sie das Array mit join(map(...)) in Text um.
8. Eine Antwort zurückgeben, falls der Absender eine braucht
Manche Tools erwarten eine bestimmte Antwort, zum Beispiel {"status": "ok"}. Fügen Sie Webhooks – Webhook response hinzu, setzen Sie den Status auf 200 und den Body auf das, was der Absender erwartet. Ohne dieses Modul antwortet Make mit einer Standardmeldung „Accepted“. Make wartet bis zu 180 Sekunden auf die Antwort; danach gibt es trotzdem 200 Accepted zurück.
9. Die URL absichern
Hier die praktischen Möglichkeiten, von der einfachsten aufwärts:
- Halten Sie die URL geheim. Fügen Sie sie nicht in öffentliche Repositories, Screenshots oder clientseitiges JavaScript ein, das Besucher lesen können.
- Nutzen Sie die Authentifizierung per API Key. Fügen Sie beim Erstellen oder Bearbeiten des Webhooks einen oder mehrere API-Keys hinzu. Der Absender schickt den Key dann im Header
x-make-apikeymit, und Make lehnt Anfragen ohne gültigen Key direkt am Webhook ab. - Schränken Sie nach IP ein. Veröffentlicht der Absender feste IP-Adressen, tragen Sie diese kommagetrennt in die Einstellung IP restrictions des Webhooks ein (CIDR-Bereiche funktionieren auch). Anfragen von anderen Adressen werden nicht verarbeitet.
- Kann der Absender diesen Header nicht senden, prüfen Sie stattdessen ein gemeinsames Geheimnis. Bitten Sie ihn, einen Header wie
x-webhook-secretmit einem langen Zufallswert mitzuschicken. Setzen Sie in den erweiterten Einstellungen des Webhooks Get request headers auf Yes und fügen Sie dann einen Filter hinzu: Der Header ist gleich Ihrem Geheimnis. Anfragen ohne diesen Header bleiben am Filter hängen. - Wird die URL bekannt, erstellen Sie einen neuen Webhook und aktualisieren Sie den Absender. Die alte URL erreicht Ihr Szenario dann nicht mehr.
Ein Geheimnis, das in einem Filter geprüft wird, verhindert nicht, dass Anfragen Make erreichen: Jede startet trotzdem einen Lauf, und der Webhook-Trigger verbraucht Credits. Es verhindert nur, dass sie in Ihrem Tabellenblatt landen. Authentifizierung per API Key und IP restrictions greifen direkt am Webhook. Behandeln Sie die URL aber in jedem Fall als Geheimnis.
10. Aktivieren und live testen
Schalten Sie das Szenario ein, lösen Sie im sendenden Tool ein echtes Ereignis aus und prüfen Sie den Tab History sowie das Tabellenblatt. Standardmäßig läuft ein Webhook-Szenario sofort, wenn Daten eingehen; belassen Sie es dabei, es sei denn, Sie möchten die Warteschlange gesammelt nach Zeitplan abarbeiten. Beachten Sie, dass ein Szenario, das sofort ausgeführt wird, nach seinem ersten Fehler deaktiviert wird. Erwägen Sie daher eine Fehlerbehandlungsroute, wie in unserem Leitfaden zu Error Handlern in Make beschrieben.
Häufige Fehler und Lösungen
Das Modul wartet und wartet. Die Anfrage ging an die falsche URL oder Region, oder der Absender wurde durch eine Firewall oder einen Tippfehler blockiert. Vergleichen Sie die URL Zeichen für Zeichen und stellen Sie sicher, dass Run once aktiv ist, bevor Sie senden.
Die Felder erscheinen nicht im Mapping-Panel. Die Struktur wurde aus einer leeren oder abweichenden Anfrage ermittelt. Ermitteln Sie die Datenstruktur neu (Redetermine data structure), senden Sie ein vollständiges Beispiel und prüfen Sie die Bubble.
Der Body kommt als ein einziger Textwert statt als Felder an. Der Absender hat den falschen Content-Type verwendet. Für JSON sollte der Header Content-Type: application/json lauten. Formularcodierte Daten funktionieren ebenfalls, aber der Absender muss angeben, um welches Format es sich handelt.
Daten kommen an, aber nichts landet im Tabellenblatt. Das Szenario ist ausgeschaltet, sodass die Anfragen in der Warteschlange des Webhooks warten, oder der Filter aus Schritt 5 hat sie blockiert. Öffnen Sie Webhooks in der linken Seitenleiste, wählen Sie den Webhook aus und prüfen Sie den Tab Queue; prüfen Sie anschließend die Bedingung des Filters. Sobald das Szenario eingeschaltet ist, werden Einträge in der Warteschlange verarbeitet.
Doppelte Zeilen. Manche Absender versuchen es erneut, wenn sie nicht schnell eine Erfolgsantwort erhalten, andere senden dasselbe Ereignis zweimal. Nehmen Sie nach Möglichkeit eine Ereignis-ID in die Payload auf und gleichen Sie sie mit dem Tabellenblatt ab, bevor Sie eine Zeile hinzufügen, wie in unserem Leitfaden „Typeform zu Google Sheets“.
Ein Feld, das gestern noch da war, ist jetzt leer. Der Absender hat seine Payload geändert. Prüfen Sie eine neue Anfrage in der Bubble, ermitteln Sie die Struktur neu und aktualisieren Sie Ihr Mapping. Verwenden Sie ifempty() für Felder, die manchmal fehlen.