Support

Eingehende Webhooks

Erhalten Sie Ereignisse von externen Plattformen und vergeben Sie automatisch Seeds an Ihre Kunden. Eingehende Webhooks ermöglichen es Ihnen, jedes Drittanbiete

📥 Eingehende Webhooks

Erhalten Sie automatisch Ereignisse von externen Plattformen und vergeben Sie Samen an Ihre Kunden. Eingehende Webhooks ermöglichen es Ihnen, jedes Drittanbieter-Tool — Quiz-Apps, Formulare, Bewertungsplattformen, Zapier, Make und mehr — mit Ihrem LoyaltyTree-Loyalitätsprogramm zu verbinden.


So funktioniert es

Das System der eingehenden Webhooks verwendet ein Quellen- & Codes-Modell:

  1. Erstellen Sie eine Quelle — Eine Quelle repräsentiert eine externe Plattform oder ein Tool (z.B. "Typeform", "Zapier", "Meine Quiz-App"). Jede Quelle erhält eine eindeutige Webhook-URL und einen geheimen Schlüssel zur Sicherheit.
  2. Fügen Sie Codes zur Quelle hinzu — Jeder Code definiert eine spezifische Aktion, die Samen vergibt (z.B. "quiz_completed", "form_submitted", "birthday_claimed"). Sie legen fest, wie viele Samen jeder Code vergibt, mit optionalen Limits.
  3. POST-Anfragen senden — Ihre externe Plattform sendet eine POST-Anfrage an die Webhook-URL mit dem Code und den Kundeninformationen. LoyaltyTree findet oder erstellt den Kunden und vergibt die Samen automatisch.

Externe PlattformPOST an Webhook-URLLoyaltyTree validiert & vergibt SamenKundenbalance aktualisiert


Erste Schritte

Schritt 1: Erstellen Sie eine Webhook-Quelle

Navigieren Sie zu Stores → [Ihr Geschäft] → Integrationen → Eingehende Webhooks. Klicken Sie auf + Quelle hinzufügen und geben Sie ihr einen Namen, der die externe Plattform beschreibt (z.B. "Typeform-Quiz" oder "Zapier-Automatisierung").

Wenn die Quelle erstellt wurde, erhalten Sie:

  • Webhook-URL — Der Endpunkt, an den Ihre externe Plattform Anfragen sendet
  • Webhook-Geheimnis — Ein geheimer Schlüssel zum Signieren von Anfragen (empfohlen zur Sicherheit)

Schritt 2: Codes hinzufügen

Jeder Code repräsentiert eine spezifische Aktion, die Sie belohnen möchten. Klicken Sie auf + Code hinzufügen in Ihrer Quelle, um einen zu erstellen.

Feld Erforderlich Beschreibung
Code Ja Der genaue Wert, der im Webhook-Payload gesendet wird (z.B. quiz_completed). Dies muss mit dem übereinstimmen, was Ihre externe Plattform sendet.
Anzeigename Ja Ein benutzerfreundlicher Name, der im Admin-Dashboard und in der Transaktionshistorie angezeigt wird (z.B. "Quiz abgeschlossen").
Beschreibung Nein Eine optionale Notiz für Ihr Team, wann dieser Code verwendet wird.
Anzahl der Samen Ja Wie viele Samen bei jeder Auslösung dieses Codes vergeben werden. Standardmäßig 1.
Max. Samen/Kunde Nein Die maximale Gesamtzahl an Samen, die ein einzelner Kunde von diesem Code verdienen kann. Leer lassen für unbegrenzt. Sobald ein Kunde dieses Limit erreicht, werden weitere Webhook-Anrufe für ihn erfolgreich zurückgegeben, aber 0 Samen vergeben.
Cooldown (Stunden) Nein Minimale Stunden zwischen Auszeichnungen für denselben Kunden bei diesem Code. Verhindert Missbrauch, indem die Häufigkeit, mit der ein Kunde Samen verdienen kann, begrenzt wird. Leer lassen für keinen Cooldown.
Aktiviert Umschalten, um diesen Code zu aktivieren oder zu deaktivieren, ohne ihn zu löschen. Deaktivierte Codes geben einen 403-Fehler zurück.

Schritt 3: Konfigurieren Sie Ihre externe Plattform

Richten Sie Ihre externe Plattform (Zapier, Typeform, benutzerdefinierte App usw.) so ein, dass sie eine POST-Anfrage an Ihre Webhook-URL sendet, wann immer die Aktion erfolgt. Siehe den Abschnitt Request Format unten für das genaue Payload-Format.


Codes & Limits erklärt

Codes und ihre Limits arbeiten zusammen, um Ihnen präzise Kontrolle darüber zu geben, wie Samen vergeben werden:

Anzahl der Samen

Jeder Code hat eine feste Anzahl an Samen. Jedes Mal, wenn der Webhook mit diesem Code ausgelöst wird, erhält der Kunde genau so viele Samen. Wenn Sie beispielsweise "quiz_completed" auf 5 Samen setzen, vergibt jeder qualifizierte Webhook-Aufruf 5 Samen.

Max. Samen pro Kunde

Dies setzt ein Lebenszeitlimit pro Kunde pro Code. Es sind die insgesamt Samen, die dieser Kunde von diesem spezifischen Code verdienen kann, nicht die Anzahl der Male, die er ihn auslösen kann.

Beispiel: Sie erstellen einen Code quiz_completed mit Anzahl der Samen = 5 und Max. Samen/Kunde = 15.
  • 1. Quiz abgeschlossen → +5 Samen (insgesamt: 5) ✅
  • 2. Quiz abgeschlossen → +5 Samen (insgesamt: 10) ✅
  • 3. Quiz abgeschlossen → +5 Samen (insgesamt: 15) ✅
  • 4. Quiz abgeschlossen → +0 Samen (Limit erreicht) — gibt Erfolg zurück, aber keine Samen vergeben

Cooldown (Stunden)

Setzt eine minimale Wartezeit zwischen Samenvergaben für denselben Kunden bei demselben Code. Der Cooldown-Timer beginnt nach der letzten erfolgreichen Vergabe.

Beispiel: Sie erstellen einen Code daily_visit mit Anzahl der Samen = 2 und Cooldown = 24 Stunden.
  • Montag 10 Uhr → +2 Samen ✅
  • Montag 15 Uhr → +0 Samen (Cooldown aktiv, versuchen Sie es in 19 Stunden erneut)
  • Dienstag 11 Uhr → +2 Samen ✅
Tipp: Sie können beide Limits kombinieren! Zum Beispiel, setzen Sie einen Code mit Anzahl der Samen = 10, Max. = 30 und Cooldown = 168 Stunden (7 Tage), um 10 Samen pro Woche zu vergeben, bis zu 30 insgesamt.

Request Format

Sendet eine POST-Anfrage an Ihre Webhook-URL mit folgendem JSON-Body:

{
  "code": "your_code_here",
  "customer": {
    "email": "customer@example.com",
    "shopify_customer_id": "12345",
    "first_name": "Jane",
    "last_name": "Smith"
  },
  "metadata": {
    "quiz_score": 95,
    "source_page": "spring-quiz"
  }
}
Feld Erforderlich Beschreibung
code Ja Der Codewert, der mit einem Ihrer konfigurierten Codes übereinstimmt (z.B. quiz_completed)
customer.email Ja* E-Mail-Adresse des Kunden. Wird verwendet, um den Kunden zu finden oder zu erstellen. Erforderlich für neue Kunden.
customer.shopify_customer_id Nein* Die Shopify-ID des Kunden. Kann anstelle der E-Mail verwendet werden, um bestehende Kunden zu identifizieren.
customer.first_name Nein Vorname des Kunden. Wird verwendet, wenn neue Kunden erstellt werden.
customer.last_name Nein Nachname des Kunden. Wird verwendet, wenn neue Kunden erstellt werden.
metadata Nein Zusätzliche Daten, die Sie mit der Transaktion speichern möchten (z.B. Quiz-Ergebnisse, Seiteninformationen). Wird als JSON gespeichert und ist in Protokollen sichtbar.

* Mindestens eines von email oder shopify_customer_id ist erforderlich. E-Mail ist erforderlich, wenn der Kunde noch nicht in LoyaltyTree existiert.


HMAC-Signaturverifizierung (empfohlen)

Um zu überprüfen, dass die Anfragen tatsächlich von Ihrer Plattform kommen (und nicht von jemandem, der Ihre Webhook-URL gefunden hat), signieren Sie Ihre Anfragen mit HMAC-SHA256.

So signieren Sie Ihre Anfrage:
  1. Nehmen Sie den rohen JSON-Anfrage-Body als String
  2. Erstellen Sie einen HMAC-SHA256-Hash mit Ihrem Webhook-Geheimnis als Schlüssel
  3. Fügen Sie den hex-kodierten Hash in einen der unterstützten Header ein

Unterstützte Signatur-Header (LoyaltyTree überprüft alle diese):

  • X-Webhook-Signature
  • X-Hub-Signature-256
  • X-Signature

Der Signaturwert kann entweder der rohe hex-Hash oder mit sha256= vorangestellt sein (beide Formate werden akzeptiert).

Alternative: Plain Token-Authentifizierung

Wenn HMAC-Signierung in Ihrer Plattform nicht möglich ist, können Sie Ihr Webhook-Geheimnis als einfachen Token im X-Token-Header übergeben. LoyaltyTree vergleicht es direkt mit Ihrem Geheimnis.

Beispiel: Signieren mit Node.js

const crypto = require('crypto');

const payload = JSON.stringify({ code: 'quiz_completed', customer: { email: 'jane@example.com' } });

const signature = crypto .createHmac('sha256', 'your_webhook_secret') .update(payload) .digest('hex');

fetch('https://loyaltytree.eco/webhooks/inbound/YOUR_SOURCE_ID', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Webhook-Signature': signature }, body: payload });

Beispiel: Signieren mit Python

import hmac, hashlib, json, requests

payload = json.dumps({ "code": "quiz_completed", "customer": {"email": "jane@example.com"} })

signature = hmac.new( b'your_webhook_secret', payload.encode('utf-8'), hashlib.sha256 ).hexdigest()

requests.post( 'https://loyaltytree.eco/webhooks/inbound/YOUR_SOURCE_ID', headers={ 'Content-Type': 'application/json', 'X-Webhook-Signature': signature }, data=payload )

Beispiel: Verwendung von cURL (zum Testen)

curl -X POST https://loyaltytree.eco/webhooks/inbound/YOUR_SOURCE_ID \
  -H "Content-Type: application/json" \
  -H "X-Token: your_webhook_secret" \
  -d '{"code":"quiz_completed","customer":{"email":"jane@example.com"}}'

Antwortformat

Erfolgreiche Antwort (200)

{
  "success": true,
  "seeds_awarded": 5,
  "transaction_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "customer_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef"
}

Erfolgreich, aber begrenzt (200)

Wenn ein Cooldown oder ein Maximal-Samen-Limit die Vergabe verhindert, erhalten Sie dennoch eine 200-Antwort, jedoch mit 0 Samen und einer Erklärung:

{
  "success": true,
  "seeds_awarded": 0,
  "message": "Cooldown aktiv. Versuchen Sie es in 18 Stunde(n) erneut."
}

// oder

{ "success": true, "seeds_awarded": 0, "message": "Maximale Samen (15) bereits für diesen Code vergeben." }

Fehlerantworten

HTTP-Status Fehler Bedeutung
400 Fehlendes erforderliches Feld: code Das Feld code wurde nicht im Anfrage-Body enthalten
400 Fehlendes erforderliches Feld: customer.email oder customer.shopify_customer_id Es wurde kein Kundenbezeichner bereitgestellt
400 Unbekannter Code: xyz Der gesendete Code stimmt nicht mit einem konfigurierten Code für diese Quelle überein
401 Ungültige Webhook-Signatur oder Token Die HMAC-Signatur oder der Token stimmen nicht überein. Überprüfen Sie Ihr Webhook-Geheimnis.
403 Webhook-Quelle ist deaktiviert Die Quelle wurde im Admin-Dashboard deaktiviert
403 Code ist deaktiviert: xyz Der spezifische Code wurde deaktiviert
404 Webhook-Quelle nicht gefunden Die Quell-ID in der URL existiert nicht. Überprüfen Sie die Webhook-URL.

Anwendungsbeispiele

🧩 Quiz-Abschluss

Belohnen Sie Kunden für den Abschluss eines Quiz auf Ihrer Seite (erstellt mit Typeform, Google Forms usw.).

  • Code: quiz_completed
  • Samen: 10
  • Max. Samen: 10 (einmalig)
  • Cooldown: keiner
📋 Umfrageantwort

Vergeben Sie Samen, wenn ein Kunde eine Umfrage nach dem Kauf ausfüllt.

  • Code: survey_completed
  • Samen: 5
  • Max. Samen: 25 (bis zu 5 Umfragen)
  • Cooldown: 168 Stunden (einmal pro Woche)
🎂 Geburtstagsbelohnung

Vergeben Sie Samen am Geburtstag eines Kunden über Ihre Marketingplattform.

  • Code: birthday_reward
  • Samen: 25
  • Max. Samen: keine (jährlich)
  • Cooldown: 8760 Stunden (365 Tage)
📸 Instagram-Tag

Belohnen Sie Kunden, die Ihre Marke auf Instagram taggen (verifiziert durch Ihr Social-Media-Team oder -Tool).

  • Code: instagram_tag
  • Samen: 15
  • Max. Samen: 60 (bis zu 4 Tags)
  • Cooldown: 72 Stunden (einmal alle 3 Tage)

Verbindung mit Zapier

Zapier ist eine der beliebtesten Möglichkeiten, LoyaltyTree mit Hunderten anderer Apps zu verbinden. Wir bauen eine dedizierte LoyaltyTree-Integration im Zapier App Store, die die Einrichtung noch einfacher macht — suchen Sie danach im Zapier-Marktplatz.

💡 Demnächst: Zapier App Store-Integration

Wir fügen LoyaltyTree als native Zapier-App hinzu. Sobald sie verfügbar ist, können Sie nach "LoyaltyTree" im Zapier-App-Verzeichnis suchen und es direkt verbinden — keine Webhook-Konfiguration erforderlich. Bleiben Sie dran!

In der Zwischenzeit können Sie die Aktion Webhooks von Zapier verwenden, um sofort zu verbinden:

Einrichten mit Zapier Webhooks:
  1. Erstellen Sie einen Zap mit Ihrem gewünschten Trigger (z.B. "Neue Typeform-Antwort")
  2. Fügen Sie einen Aktionsschritt hinzu: Webhooks von Zapier → POST
  3. Setzen Sie die URL auf Ihre LoyaltyTree eingehende Webhook-URL
  4. Setzen Sie den Payload-Typ auf JSON
  5. Ordnen Sie die Felder zu:
    • code → Ihr Codewert (z.B. "quiz_completed")
    • customer.email → die E-Mail des Befragten aus dem Trigger
  6. Unter Headers fügen Sie X-Token mit Ihrem Webhook-Geheimniswert hinzu
  7. Testen und aktivieren Sie Ihren Zap

 

Verbindung mit Make (Integromat)

Sie können auch das Modul HTTP / Make a request von Make verwenden, um Webhooks an LoyaltyTree zu senden. Konfigurieren Sie es auf die gleiche Weise wie Zapier — setzen Sie die URL, fügen Sie den JSON-Body mit code und customer hinzu und fügen Sie Ihr Geheimnis im X-Token-Header ein.


Webhook-Protokolle

Jeder eingehende Webhook-Aufruf wird protokolliert und ist im Abschnitt Eingehende Webhooks Ihrer Integrationsseite sichtbar. Die Protokolle zeigen:

  • Zeitstempel – Wann der Webhook empfangen wurde
  • Quelle – Welche Quelle ihn empfangen hat
  • Status – Erfolg oder Misserfolg
  • Details – Verwendeter Code, vergebene Samen oder Fehlermeldung
  • Payload – Der gesamte Anfrage-Body (verschlüsselt im Ruhezustand)

Verwenden Sie die Protokolle, um zu überprüfen, ob Ihre Integration korrekt funktioniert und um Probleme zu beheben.

 


Fehlerbehebung

401 "Ungültige Webhook-Signatur" erhalten
  • Stellen Sie sicher, dass Sie den genauen JSON-Body-String signieren, den Sie senden (keine zusätzlichen Leerzeichen oder Umformatierungen)
  • Überprüfen Sie, ob Sie das richtige Webhook-Geheimnis verwenden (Sie können es im Admin-Dashboard anzeigen)
  • Wenn HMAC-Signierung nicht möglich ist, verwenden Sie den X-Token-Header mit Ihrem Geheimnis als einfachem Wert
  • Sie können das Geheimnis bei Bedarf aus den Quelleneinstellungen neu generieren
400 "Unbekannter Code" erhalten
  • Der code-Wert in Ihrer Anfrage muss genau übereinstimmen mit einem Code, den Sie im Admin-Dashboard konfiguriert haben
  • Codes sind groß-/kleinschreibungssensitiv: Quiz_Completed ist anders als quiz_completed
  • Überprüfen Sie, ob der Code aktiviert ist (nicht deaktiviert)
0 Samen vergeben
  • Überprüfen Sie, ob der Kunde das Max. Samen/Kunde-Limit für diesen Code erreicht hat
  • Überprüfen Sie, ob der Cooldown noch aktiv ist — die Antwortnachricht sagt Ihnen, wie viele Stunden Sie warten müssen
  • Beide geben HTTP 200 mit seeds_awarded: 0 und einer Erklärung im message-Feld zurück
Kunde wird nicht erstellt
  • Neue Kunden benötigen eine E-Mail-Adresse. Wenn Sie nur shopify_customer_id senden, muss der Kunde bereits in LoyaltyTree existieren.
  • Wenn sowohl E-Mail als auch Shopify-ID bereitgestellt werden, sucht LoyaltyTree zuerst nach der E-Mail, dann nach der Shopify-ID und erstellt einen neuen Kunden nur, wenn keine Übereinstimmung vorliegt.

Sicherheit

  • Jede Quelle erhält ein einzigartiges 64-Zeichen-Webhooks-Geheimnis, das automatisch generiert und im Ruhezustand verschlüsselt ist
  • Geheimnisse können jederzeit aus den Quelleneinstellungen neu generiert werden (das alte Geheimnis funktioniert sofort nicht mehr)
  • Anfrage-Payloads sind in den Protokollen verschlüsselt für die Privatsphäre
  • Die Signaturverifizierung verwendet zeit-sicheren Vergleich, um Timing-Angriffe zu verhindern
  • Quellen und Codes können einzeln deaktiviert werden, ohne sie zu löschen

Was this helpful?

Let us know how we can improve our documentation.

contact_support

Still need help?

Our support team is available to assist you with any questions or technical issues.

Contact Support arrow_forward
feedback

Suggest an edit

Did you find an error or missing information? Help us improve our documentation.

Edit on GitHub open_in_new