Skip to main content
Signierter Webhook bei jeder Zustellstatusänderung (sent, delivered, read, failed) einer von dir gesendeten WhatsApp-Nachricht
Der Read Receipts Webhook liefert einen signierten HTTP-Callback an deinen Server, sobald sich der Status einer von dir gesendeten WhatsApp-Nachricht ändert — sent, delivered, read oder failed. Nutze ihn für Zustellverfolgung, Lesebestätigungen und Audit-Trails. Er wird pro WhatsApp-Sender konfiguriert, sodass verschiedene Sender auf unterschiedliche Endpunkte zeigen können.

Webhook-Konfiguration

So aktivierst du Read Receipts für einen Sender:
  1. Bearbeite deinen WhatsApp-Sender und öffne den Bereich Read Receipts Webhook
  2. Trage deine Webhook-URL ein und speichere
  3. Ein Signing Secret wird automatisch generiert — verwende es, um die Signatur jeder Anfrage zu verifizieren
Jeder Payload enthält die whatsapp_message_id, die von den Endpunkten Send Template und Send Free-form zurückgegeben wird, sodass du jedes Update der ursprünglichen Nachricht zuordnen kannst.

Request-Format

Der Webhook wird als POST-Request an deine konfigurierte URL mit einem JSON-Body und einem X-Signature-256-Header gesendet.

Payload-Struktur

string
Der Ereignistyp. Wert: message_status
integer
Numerische Kennung der Nachricht — dieselbe whatsapp_message_id, die beim Senden zurückgegeben wurde. Verwende sie, um das Status-Update der ursprünglichen Nachricht zuzuordnen.
string
Provider-Nachrichtenkennung für über Twilio gesendete Nachrichten, sonst null
string
Provider-Nachrichtenkennung (WhatsApp wamid) für über die Meta Cloud API gesendete Nachrichten, sonst null
string
Eindeutige Kennung (UUID) der Konversation, zu der die Nachricht gehört, oder null
string
Eindeutige Kennung (UUID) des mit dem Sender verbundenen Assistenten, oder null
object
Der WhatsApp-Sender, von dem die Nachricht gesendet wurde
string
Telefonnummer des Empfängers
string
Telefonnummer des Senders
string
Nachrichtenrichtung. Wert: outbound
string
Der neue Zustellstatus. Mögliche Werte: sent, delivered, read, failed, undelivered
integer
Provider-Fehlercode, wenn status failed oder undelivered ist, sonst null
string
Rohe Provider-Fehlermeldung, wenn die Nachricht fehlgeschlagen ist, sonst null
string
Menschenlesbare Fehlerbeschreibung, sonst null
string
ISO-8601-Zeitstempel, wann die Plattform die Statusänderung erfasst hat, in der konfigurierten Zeitzone des WhatsApp-Nummerninhabers
string
ISO-8601-Zeitstempel der eigenen Ereigniszeit des Carriers, in der konfigurierten Zeitzone des Inhabers. Vorhanden bei über die Meta Cloud API gesendeten Nachrichten; null bei Twilio (der Twilio-Status-Callback enthält keine Ereigniszeit). Bevorzuge diesen Wert, wenn er vorhanden ist — er ist die autoritative Zeit des Carriers.

Signatur verifizieren

Jede Anfrage enthält einen X-Signature-256-Header mit einem HMAC-SHA256 über den rohen Request-Body, signiert mit dem Signing Secret deines Senders:
Berechne die Signatur über den rohen Body neu und vergleiche sie mit einem Constant-Time-Vergleich. Lehne die Anfrage ab, wenn sie nicht übereinstimmt.

Retry-Verhalten

Wenn dein Endpunkt einen Nicht-2xx-Status zurückgibt oder die Anfrage fehlschlägt, wird die Zustellung wiederholt: Serverfehler (5xx) und Rate Limits (429) werden erneut versucht. Clientfehler (4xx) gelten als falsch konfigurierter Endpunkt und werden nicht erneut versucht.

Wichtige Hinweise

  • Der Webhook wird pro Sender konfiguriert — jeder Sender kann eine eigene URL und ein eigenes Secret haben.
  • Ereignisse, die über die Schaltfläche Make test request in den Sender-Einstellungen ausgelöst werden, enthalten ein zusätzliches Feld test: true und Platzhalterwerte. Echte Status-Updates enthalten niemals test.
  • read wird nur ausgelöst, wenn der Empfänger Lesebestätigungen in seinen WhatsApp-Datenschutzeinstellungen aktiviert hat. delivered wird immer ausgelöst.
  • Status können in falscher Reihenfolge ankommen oder vom Provider erneut gesendet werden. Wir leiten nur echte Fortschritte weiter, sodass du für dieselbe Nachricht kein delivered nach read erhältst — behandle den Webhook dennoch als Quelle der Wahrheit und dedupliziere nach whatsapp_message_id + status.
  • timestamp ist immer der Zeitpunkt, zu dem die Plattform die Änderung erfasst hat (in der Zeitzone des Nummerninhabers). provider_timestamp ist die autoritative Ereigniszeit des Carriers, wenn verfügbar — bevorzuge sie für Genauigkeit und falle auf timestamp zurück, wenn sie null ist.
  • Verwende Regenerate in den Sender-Einstellungen, um das Signing Secret zu rotieren, falls es jemals offengelegt wurde.