smartchat

Webhooks

Ein Webhook lässt SmartChat deiner Software sagen, dass etwas passiert ist, zum Beispiel ein neuer Kontakt oder eine zugestellte Nachricht. Du trägst einen Endpunkt ein (eine https-Adresse) und wählst die Ereignisse, die du willst. SmartChat sendet jedes Ereignis als POST mit einem JSON-Body an den Endpunkt.

Wie du einen Webhook einrichtest, steht unter Einen Webhook einrichten. Die Liste der Ereignisse steht auf der Ereignisseite.

#Was du empfängst

Header:

HeaderBedeutung
SmartChat-Signaturet=<unix seconds>,v1=<hex>. Beweist, dass die Zustellung von SmartChat kommt. So prüfst du sie.
SmartChat-Event-IdID des Ereignisses (evt_...). Für jeden Endpunkt gleich.
SmartChat-Event-TypeDer Ereignisname, zum Beispiel contact.created.
SmartChat-Delivery-IdID dieser Zustellung (whd_...).
SmartChat-Delivery-AttemptNummer dieses Versuchs, beginnend bei 1.
User-AgentSmartChat-Webhooks/2
Content-Typeapplication/json

Body:

{
  "id": "evt_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
  "object": "event",
  "type": "contact.opted_out",
  "api_version": "2026-10-25",
  "created_at": "2026-10-25T09:41:07.412Z",
  "sequence": 128734,
  "account_id": "acc_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
  "livemode": true,
  "request_id": "req_01JAB9C3X7K2M4N5P6Q7R8S9T0",
  "data": {
    "object": { "object": "contact", "id": "con_0f8c1a2e4b7d4c3e9a5b6d7e8f901234", "optin_whatsapp": "opted_out" },
    "previous_attributes": { "optin_whatsapp": "confirmed" }
  }
}
FeldBedeutung
idEreignis-ID. Nutze sie, um doppelte Ereignisse zu finden.
typeEreignisname.
created_atWann das Ereignis passiert ist, mit Millisekunden, in UTC.
sequenceEin Zähler zum Sortieren von Ereignissen.
request_idDie ID des API-Aufrufs, der das Ereignis ausgelöst hat, wenn es einen gab.
data.objectDas Objekt, um das es im Ereignis geht.
data.previous_attributesBei Änderungen: die alten Werte der geänderten Felder.

Der Body ist höchstens 256 KB groß. Wäre er größer, wird data.object auf object und id gekürzt und der Body bekommt "truncated": true. Lies das ganze Objekt mit der API.

#Was du tun musst

  1. Prüfe die Signatur mit dem rohen Body. Code in Shell, Python und TypeScript.
  2. Antworte schnell mit einem beliebigen 2xx-Status. SmartChat wartet 10 Sekunden. Erledige die eigentliche Arbeit, nachdem du geantwortet hast.
  3. Rechne damit, dass Ereignisse doppelt ankommen. Die Zustellung erfolgt mindestens einmal. Behalte die id der Ereignisse, die du bearbeitet hast, und überspringe Wiederholungen.
  4. Verlass dich nicht auf die Reihenfolge. Ereignisse können in anderer Reihenfolge ankommen. Sortiere mit sequence oder created_at.
  5. Nutze https. Erlaubt ist nur https auf Port 443, ohne Benutzername oder Passwort in der Adresse und ohne Weiterleitungen. Interne und private Adressen werden abgelehnt (webhook_url_invalid). SmartChat prüft die Adresse beim Speichern und bei jeder Verbindung noch einmal.

Ein Konto kann bis zu 20 Endpunkte haben. Dieselbe Adresse zweimal im selben Konto ist ein Konflikt. Endpunkte gehören zum Konto, nicht zu einem Schlüssel: Den Schlüssel zu widerrufen, der einen Endpunkt angelegt hat, stoppt ihn nicht.

#Fehlschläge

Antwortet dein Endpunkt nicht mit 2xx, versucht SmartChat es später noch einmal. Den Zeitplan, die Zustände eines Endpunkts und was am Ende passiert, findest du unter Wiederholungen und Zustand.