Zum Hauptinhalt springen
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

event
string
Der Ereignistyp. Wert: message_status
whatsapp_message_id
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.
message_sid
string
Provider-Nachrichtenkennung für über Twilio gesendete Nachrichten, sonst null
meta_message_id
string
Provider-Nachrichtenkennung (WhatsApp wamid) für über die Meta Cloud API gesendete Nachrichten, sonst null
conversation_id
string
Eindeutige Kennung (UUID) der Konversation, zu der die Nachricht gehört, oder null
assistant_id
string
Eindeutige Kennung (UUID) des mit dem Sender verbundenen Assistenten, oder null
sender
object
Der WhatsApp-Sender, von dem die Nachricht gesendet wurde
to
string
Telefonnummer des Empfängers
from
string
Telefonnummer des Senders
direction
string
Nachrichtenrichtung. Wert: outbound
status
string
Der neue Zustellstatus. Mögliche Werte: sent, delivered, read, failed, undelivered
error_code
integer
Provider-Fehlercode, wenn status failed oder undelivered ist, sonst null
error_message
string
Rohe Provider-Fehlermeldung, wenn die Nachricht fehlgeschlagen ist, sonst null
error_description
string
Menschenlesbare Fehlerbeschreibung, sonst null
timestamp
string
ISO-8601-Zeitstempel, wann die Plattform die Statusänderung erfasst hat, in der konfigurierten Zeitzone des WhatsApp-Nummerninhabers
provider_timestamp
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.