Eingehende Webhooks
Eingehende Webhooks ermöglichen es, Syncler aus externen Systemen heraus anzusprechen – zum Lesen, Schreiben oder zum Starten von Syncs (Ad-hoc). Sie definieren dafür Endpunkte, Schemata (Request/Response) und optional Sicherheits- sowie Steuerungsparameter. So lassen sich Integrationen leicht anschließen, ohne dass Drittsysteme die komplette Syncler-API kennen müssen.
Funktionsumfang auf einen Blick
- Aufrufe per GET (URL-Parameter) oder POST (JSON-Body oder Form-Daten).
- Request-/Response-Schemata (JSON) zur strukturierten Übergabe und Validierung.
- Datenoperationen: Lesen/Schreiben über Sync (mit Transformation & Mapping) oder direkt über System (Schema-basiert).
- Ad-hoc-Ausführung: Startet Syncs/Abläufe mit übergebenen Kontextdaten.
- Sicherheit: Webhook-ID, optionales Secret im Header, aktiv/inaktiv-Schaltung.
- Bedingungen & Platzhalter: Formelbasiertes Gatekeeping, dynamische Filter, Paging.
Aufrufvarianten
GET
Querystring-Parameter werden als Quelldaten interpretiert.POST (JSON)
Erwartet ein JSON-Objekt im Request-Body.POST (Form-Data / x-www-form-urlencoded)
Formularfelder werden serverseitig zu einem JSON-Objekt konvertiert
(Feldnamen → Propertynamen).
Hinweis: Die Webhook-ID für die URL wird automatisch generiert und in der Maske angezeigt. Die vollständige URL ergibt sich aus API-Basis-URL + Webhook-ID.
Sicherheit
Aktiv-Schalter
Nur aktive Webhooks sind aufrufbar. Inaktive Endpunkte antworten mit 410 Gone.Optionales Secret
Übergabe im Headersyncler_webhooksecretoderAuthorization.
Ist kein Secret hinterlegt, entfällt die Prüfung.LinkedIn-Validierung (optional)
Für LinkedIn-Registrierungen kann ein ClientSecret hinterlegt werden. Die Validierung nutzt HMAC-SHA256 über den Challenge-Code. (Details siehe LinkedIn-Dokumentation.)
Bedingungen & Platzhalter
Ausführungsbedingung
Formel, die mit Platzhaltern aus den Anfragedaten (in#…#) befüllt wird.
Liefert die Bedingung false, wird die Aktion nicht ausgeführt.Typische Platzhalter
#Feldname#– Wert aus der eingehenden Anfrage#FlowFilter#– wird in Abfragen ersetzt (siehe „Lesen von Abfragen“)
Beispiel (Bedingung):
#eventType# = 'created' AND #source# <> ''
Einstellungen
1) Allgemein
Name
Administrative Bezeichnung.Ist aktiv
Schaltet die Erreichbarkeit des Endpunkts.
2) Empfänger
Geheimnis (Secret)
Optionales Secret zur Header-Validierung (syncler_webhooksecret/Authorization).Ausführungsbedingung
Formel (true/false) mit Platzhaltern aus den Requestdaten.Empfangene Daten im Protokoll speichern
Speichert den Requestpayload zusammen mit dem Protokolleintrag (erhöht DB-Last).LinkedIn ClientSecret
Für die Challenge-Response-Validierung bei LinkedIn-Webhook-Registrierung.Webhook / Webhook-URL / LinkedIn-URL
Schreibgeschützte IDs/URLs (werden aus Basis-URL + ID gebildet).
3) Verarbeitung
Aktion ausführen
Legt fest, was passieren soll (siehe Abschnitt „Aktionen“).Sync für Aktion
Der zu verwendende Sync (z. B. für Lesen/Schreiben/Starten).
Für Lesen/Schreiben per Sync sind Webhook-Sync-Typen erforderlich.System für Aktion
Direktes Lesen/Schreiben ohne Sync – erfordert Schemaobjekte im System.Schema-Objekt für System
Das Ziel-/Quellschema in der Systemverbindung.Weiterleitungs-URL nach dem Ausführen
Optionaler Redirect (z. B. nach Formularübermittlung).Daten im Datensatz-Speicher für diesen Sync ablegen
Übergibt die eingehenden Daten in den Datensatz-Speicher des gewählten Syncs.
→ Nutzen Sie in Abläufen den Typ: „Universal Ablauf – Daten aus Datensatz-Speicher lesen“.
Bei Aktivierung erhält der Ad-hoc-Start nur die GUID des gespeicherten Datensatzes (nicht die Daten selbst).
4) Lesen von Daten
Suche nach Quelldatensatz für Sync oder System
WHERE-Klausel mit Platzhaltern (SQL/OData – abhängig vom Zielsystem).Sortierung
Order-By-Klausel (falls unterstützt).Nur den ersten Datensatz zurückgeben
Antwort als einzelnes JSON-Objekt statt Array. Hier sollte die Sortierung verwendet werden.
5) Lesen von Abfragen
Abfrage-Filter für Lesen einer Abfrage
Ersetzt den Platzhalter#FlowFilter#in der Abfrage (Sync oder System-Abfrage).Ergebnis in Seiten liefern
Liefert ein Objekt{ data, total }(nur „Lese Abfrage mit System“).Name aus Anfrage für Seitengröße
Default:pageSize.Name aus Anfrage für ersten Datensatz
Default:offset(0-basiert).
6) Schreiben von Daten
Suche nach Zieldatensatz für System
WHERE-Klausel zur Identifikation des zu aktualisierenden Datensatzes mit Platzhaltern.Verhalten bei keiner Übereinstimmung (System-Schreiben)
Überspringen oder Neu anlegen.Verhalten bei exakter Übereinstimmung (System-Schreiben)
Überspringen oder Aktualisieren.
Zusätzliche Registerkarten
JSON-Schema Anfrage
Schema für Requestdaten (POST-JSON, Query-Parameter, Form-Felder).
Kann entfallen, wenn die Verarbeitung ausschließlich über Sync erfolgt.JSON-Schema Antwort
Schema für die Antwort (Objekt/Array/Paging-Objekt).
Wird beim direkten Lesen über System benötigt; beim Sync-Weg liegt das Antwortschema am Sync.Zuordnungen Lesen / Zuordnungen Schreiben
Mapping zwischen System-Schema und Webhook-(Antwort/Anfrage)-Schema für System-basierte Aktionen.Zuordnungen Lesen bei Schreibaktionen Optional: Direktes Zurücksenden des gespeicherten Datensatzes (z. B. zur Rückgabe einer generierten ID).
Aktionen
Starte Sync
Erzeugt einen Ad-hoc-Warteschlangen-Eintrag für den gewählten Sync.
- Eingangsdaten werden als Ausführungsparameter mitgegeben (oder als GUID, wenn Datensatz-Speicher aktiv ist).
- Die Ausführung erfolgt durch den Daemon.
Lese Daten mit Sync
- Erfordert einen Webhook Sync zum Lesen.
- WHERE/ORDER werden aus den Webhook-Einstellungen + Platzhaltern gebildet.
- Transformation & Zuweisungen des Syncs werden angewendet.
- Antwort: JSON-Array (oder erstes Objekt, falls konfiguriert).
Lese Abfrage mit Sync
- Erfordert einen Webhook Sync zum Lesen einer Abfrage.
#FlowFilter#wird aus dem Webhook-Filter ersetzt.- Antwort: JSON-Array (oder erstes Objekt).
Speichere Daten mit Sync
- Erfordert einen Webhook Sync zum Schreiben.
- Transformation, Zuweisungen, Vorbedingung & Übereinstimmungssuche werden im Sync definiert.
- Antwort: Status/Ergebnis gemäß Sync-Konfiguration.
Lese Daten mit System
- Direktes Lesen über System (Schema-basiert).
- Erfordert Suche, Antwort-Schema und Lesemapping am Webhook.
- Keine Transformation möglich.
Lese Abfrage mit System
- Führt eine System-Abfrage aus (Konfiguration im Bereich „Abfrage“).
- Antwort über Lesemapping ins Webhook-Antwortschema.
- Optional Paging
{ data, total }. - Keine Transformation möglich.
Speichere Daten mit System
- Schreibt direkt über System (Schema-basiert).
- Zielschema auswählen und Schreibmapping definieren.
- Optional: Suche + Verhalten bei (Nicht-)Treffer.
- Keine Transformation möglich.
Abläufe starten
Abläufe haben keine direkte Datensatzverarbeitung. Für „Starte Sync“ in einem Ablauf:
- Eingehende Daten per Webhook in den Datensatz-Speicher eines Lese-Syncs schreiben
(Typ: „Universal Ablauf – Daten aus Datensatz-Speicher lesen“). - Den Lese-Sync als ersten Schritt in den Ablauf einfügen.
- Nach erfolgreicher Verarbeitung löscht der Ablauf die verwendeten Speicher-Datensätze.
So lassen sich mehrere nachgelagerte Syncs gekettet ausführen.
Formulare (Web-Form)
- Content-Type wird automatisch erkannt (JSON vs. Form-Daten).
- Formularfelder → JSON-Objekt (Feldname = Propertyname).
- Weiterleitungs-URL am Webhook hinterlegen (z. B. Landingpage).
- Ablauf: Formular → Webhook → Verarbeitung → Redirect.
Beispiele
GET mit Secret
GET /api/webhooks/{webhookId}?eventType=created&source=web
Host: <api-host>
syncler_webhooksecret: <secret-value>
POST (JSON) – Start Sync
POST /api/webhooks/{webhookId}
Content-Type: application/json
Authorization: <secret-or-bearer>
{
"source": "leadform",
"email": "me@example.com",
"firstName": "Mia",
"lastName": "Muster",
"consent": true
}
Paging-Parameter (bei „Lese Abfrage mit System“)
{
"pageSize": 50,
"offset": 0,
"filter": "status='open'"
}
Webhook testen
Mit der integrierten Test-Funktion können Sie einen Webhook direkt aus der Oberfläche aufrufen – ohne externe Tools. Der Test führt keine Simulation aus, sondern triggert alle konfigurierten Aktionen real (Lesen/Schreiben/Sync-Start). Verwenden Sie daher geeignete Testdaten und/oder eine Testumgebung.
In Kombination mit einem Pin auf einen Protokolleintrag des Webhooks inklusive Empfangsdaten kann damit auch eine Wiederholung ausgeführt werden.
Voraussetzungen
- Ein aktiver Webhook (Schalter Ist aktiv eingeschaltet).
- Bei Sync- oder System-Aktionen: die jeweilige Konfiguration (Schema, Zuordnungen, Filter, Abfrage, etc.) ist vollständig.
Aufruf der Test-Funktion
- Öffnen Sie den Webhook in der Oberfläche.
- Klicken Sie auf Aktionsmenü → Testen.
- Der Testdialog öffnet sich mit drei Bereichen:
- Daten senden (Pin/JSON-Editor)
- Empfangene Daten (Server-Antwort)
- Nachrichten-Ticker (Live-Meldungen)
Testdaten festlegen (Bereich Daten senden)
Sie haben zwei komfortable Wege, die eingehenden Daten zu definieren:
Per Pin
Wählen Sie einen vorhandenen Pin aus. Der gespeicherte Datensatz wird als Requestpayload verwendet.Per manueller JSON-Eingabe
Geben Sie Ihren Request-Body im JSON-Editor ein (z. B. Formulardaten, Event-Payload).
Aufruf ausführen
- Klicken Sie auf die Pfeil-Schaltfläche (rechts), um den Test sofort auszuführen.
- Der Aufruf geht an die echte Webhook-URL (keine Simulation).
- Je nach Aktion können Schreiboperationen, Sync-Starts oder Systemabfragen erfolgen.
Ergebnisse prüfen
1) Empfangene Daten (Response)
- Zeigt den Rohinhalt der Webhook-Antwort (JSON-Objekt, JSON-Array oder Paging-Objekt
{ data, total }, je nach Aktion). - Zusätzlich wird der HTTP-Statuscode angezeigt, z. B.:
- 200 OK – Erfolg mit Antwortinhalt
- 204 No Content – Erfolg ohne Ergebnis (z. B. kein Datensatz gefunden, erstes Objekt angefordert)
- 403 – Secret/Autorisierung fehlt oder ist ungültig
- 410 Gone – Webhook ist inaktiv
2) Nachrichten-Ticker
- Zeigt laufende Statusmeldungen (z. B. Start, Filter, Treffer, gespeicherte Datensätze, Warnungen/Fehler).
- Nützlich für Schritt-für-Schritt-Diagnosen (insb. bei Transformationen oder Abfragen).
