Was ein guter Receiver leisten muss
Ein zuverlässiger Webhook-Receiver sollte:- HTTPS-
POST-Anfragen akzeptieren - die Signatur prüfen, bevor er dem Payload vertraut
- schnell bestätigen
- langsame Arbeit in eigene Hintergrundjobs auslagern
- doppelte Lieferungen sicher verarbeiten
- genug Details protokollieren, um Fehler später debuggen zu können
Der empfohlene Ablauf
Request empfangen
Nimm den rohen Request-Body genau so entgegen, wie er geliefert wird. Parsen und Re-Serialisieren vor der Signaturprüfung ist nicht erlaubt.
Signatur prüfen
Berechne den HMAC mit deinem Webhook-Secret und vergleiche ihn mit dem Signatur-Header.
Schnell bestätigen
Sende eine erfolgreiche Antwort, sobald die grundlegende Verifizierung abgeschlossen ist.
Der grundlegende Event-Lebenszyklus
Für viele Konversations-Workflows sind drei Ereignisse entscheidend:conversation.startedconversation.endedconversation.analysis.completed
So denkst du darüber nach
| Ereignis | Bester Einsatz |
|---|---|
conversation.started | Tracking starten, Live-Session-Zustand anlegen oder festhalten, dass die Konversation begonnen hat |
conversation.ended | Endgültiges Anrufergebnis, Dauer, transkriptnahe Daten und Verarbeitung nach dem Anruf |
conversation.analysis.completed | Zielergebnisse, gesammelte Insights und Auswertungsdaten nach dem Anruf |
Praktische Regel
Wenn dein nachgelagertes System Insight- oder Scoring-Ergebnisse benötigt, halte nicht beiconversation.ended an. Warte auf conversation.analysis.completed.
Minimales Receiver-Beispiel
Idempotenz und Schutz vor Duplikaten
Gestalte deinen Receiver so, dass dasselbe Ereignis mehr als einmal sicher verarbeitet werden kann. Gute Muster:- verarbeitete
event_id-Werte speichern - nachgelagerte Schreibvorgänge nach Möglichkeit idempotent gestalten
- keine Seiteneffekte vor der Signaturprüfung
- CRM-Updates
- Ticket-Erstellung
- Abrechnungs- oder Nutzungsaktualisierungen
- Aufgabenerstellung
Logging-Empfehlungen
Protokolliere genug Daten, um Fehler nachzuverfolgen, ohne Secrets preiszugeben. Gute Felder zum Protokollieren:- Event-ID
- Event-Typ
- Account- oder Organisations-Identifier
- Lieferzeitstempel
- Verifizierungsergebnis
- dein internes Verarbeitungsergebnis
- rohen Signing-Secrets
- vollständigen Authorization-Headern
- sensiblen Payload-Inhalten, sofern deine Compliance-Regeln es nicht erlauben
Häufige Implementierungsfehler
Body vor der Signaturprüfung parsen
Body vor der Signaturprüfung parsen
Verifiziere immer gegen den rohen Request-Body. Das Re-Serialisieren von JSON kann die Byte-Darstellung verändern und Signaturprüfungen zum Scheitern bringen.
Langsame Arbeit im Request-Thread ausführen
Langsame Arbeit im Request-Thread ausführen
Blockiere die Webhook-Antwort nicht, während du andere Systeme aufrufst oder schwere Verarbeitung durchführst. Bestätige zuerst, dann fahre in deiner eigenen Queue fort.
`conversation.ended` als finales Analyse-Ereignis behandeln
`conversation.ended` als finales Analyse-Ereignis behandeln
conversation.ended teilt dir mit, dass der Anruf abgeschlossen ist. conversation.analysis.completed ist das bessere Ereignis für Post-Call-Scoring und insight-gesteuerte Workflows.Debugging-Checkliste
- Bestätige, dass die Webhook-Subscription aktiv ist.
- Bestätige, dass die Ziel-URL vom öffentlichen Internet aus erreichbar ist.
- Bestätige, dass du das aktuelle Signing-Secret verwendest.
- Bestätige, dass dein Receiver den rohen Body liest, bevor er ihn parst.
- Bestätige, dass der abonnierte Ereignistyp mit dem Workflow übereinstimmt, den du testest.
- Prüfe deine eigenen Anwendungslogs auf Event-ID, Verifizierungsergebnis und Verarbeitungsergebnis.
Nächste Schritte
Webhooks
Webhook-Subscriptions im Dashboard konfigurieren
Webhook-Ereignisse
Payload-Felder und Ereignistypen nachschlagen
Integrationstests
Deine End-to-End-Ereignisverarbeitung validieren
Secrets
Wiederverwendbare Anmeldedaten sicher speichern