Webhooks na gesprekken
Ontvang meldingen via webhooks wanneer gesprekken zijn beëindigd en de analyse is voltooid.
Overzicht
Met webhooks na gesprekken kun je gedetailleerde informatie over een gesprek ontvangen nadat de analyse is voltooid. Wanneer deze zijn ingeschakeld, stuurt ElevenLabs een POST-request naar je opgegeven endpoint met uitgebreide gespreksgegevens.
ElevenLabs ondersteunt drie typen webhooks na gesprekken:
- Transcriptiewebhooks (
post_call_transcription): Bevatten volledige gespreksgegevens, waaronder transcripties, analyseresultaten en metadata - Audiowebhooks (
post_call_audio): Bevatten minimale gegevens met base64-gecodeerde audio van het volledige gesprek - Webhooks voor mislukte gespreksinitiatie (
call_initiation_failure): Bevatten informatie over mislukte pogingen om gesprekken te starten, waaronder redenen voor mislukking en metadata
Webhooks na gesprekken inschakelen
Webhooks na gesprekken kunnen voor alle agents in je workspace worden ingeschakeld via de instellingenpagina van ElevenAgents.

Webhooks na gesprekken moeten een statuscode 200 retourneren om als geslaagd te worden beschouwd. Webhooks die herhaaldelijk mislukken, worden automatisch uitgeschakeld als er 10 of meer opeenvolgende fouten zijn en de laatste succesvolle aflevering meer dan 7 dagen geleden was, of als de webhook nog nooit succesvol is afgeleverd.
Webhooks na gesprekken kunnen automatisch opnieuw worden geprobeerd als ze mislukken. Zie opnieuw proberen van webhooks.
Authenticatie
Het is belangrijk dat de listener alle binnenkomende webhooks valideert. Webhooks ondersteunen momenteel authenticatie via HMAC-handtekeningen. Stel HMAC-authenticatie als volgt in:
- Sla het gedeelde geheim dat is gegenereerd bij het maken van de webhook veilig op
- Verifieer de header ElevenLabs-Signature in je endpoint met de SDK
De JavaScript SDK biedt constructEvent; de Python SDK biedt construct_event met rawBody, sig_header en secret (in Python heten deze niet payload / signature). Beide verifiëren de handtekening, valideren de timestamp en parsen de JSON-payload.
Python
JavaScript
Voorbeeld van een webhookhandler met FastAPI:
Aangepaste requestheaders
Naast HMAC-handtekeningvalidatie kun je bij elke webhookaflevering aangepaste headers opnemen. Dit is handig om API-sleutels, bearer tokens of andere authenticatieheaders door te geven die je ontvangende endpoint vereist.
Dashboard
CLI
SDK
Aangepaste headers kunnen momenteel niet via het ElevenAgents-dashboard worden geconfigureerd. Gebruik de SDK of API om aangepaste headers in te stellen.
Aangepaste headers werken naast HMAC-authenticatie. auth_type moet nog steeds zijn ingesteld op hmac,
en aangepaste headers worden verzonden naast de header ElevenLabs-Signature.
Aangepaste headers zijn alleen schrijfbaar. Het endpoint voor het weergeven van webhooks
retourneert request_headers niet in het antwoord, dus je kunt niet teruglezen welke headers
voor een webhook zijn geconfigureerd.
IP-allowlisting
Voor extra beveiliging kun je de statische uitgaande IP’s van ElevenLabs aan je allowlist toevoegen. Zie IP-allowlisting voor de volledige lijst met IP-adressen.
Door IP-allowlisting te combineren met HMAC-handtekeningvalidatie voeg je meerdere lagen beveiliging toe.
Webhookoverschrijvingen per agent
Standaard gebruiken alle agents in je workspace de webhook die in je workspace-instellingen is geconfigureerd. Je kunt dit per agent overschrijven om gegevens na gesprekken voor verschillende agents naar verschillende endpoints te sturen.
Dashboard
CLI
SDK
post_call_webhook_id moet verwijzen naar een webhook die al in je workspace bestaat. Je kunt ook met de array events opgeven welke eventtypen je wilt verzenden:
Structuur van webhookantwoorden
ElevenLabs verstuurt drie verschillende typen webhooks na gesprekken, elk met een andere gegevensstructuur:
Transcriptiewebhooks (post_call_transcription)
Bevatten uitgebreide gespreksgegevens, waaronder volledige transcripties, analyseresultaten en metadata.
Velden op hoofdniveau
Structuur van data-object
Het object data bevat:
Audiowebhooks (post_call_audio)
Bevatten minimale gegevens met de audio van het volledige gesprek als base64-gecodeerde MP3.
Velden op hoofdniveau
Structuur van data-object
Het object data bevat alleen:
Audiowebhooks bevatten alleen de drie hierboven vermelde velden. Ze bevatten GEEN transcriptiegegevens, metadata, analyseresultaten of andere gespreksdetails.
Webhooks voor mislukte gespreksinitiatie (call_initiation_failure)
Bevatten informatie over pogingen om telefonische gesprekken te starten, waaronder redenen voor mislukking en metadata van de telefonieprovider.
Webhookevents voor mislukte gespreksinitiatie worden verzonden wanneer een gesprek niet kan worden gestart vanwege verbindingsfouten, omdat de gebruiker het gesprek weigert of niet opneemt. Als een gesprek naar voicemail gaat of wordt opgenomen door een geautomatiseerde service, wordt er geen webhook voor mislukte gespreksinitiatie verzonden, omdat het gesprek succesvol is gestart.
Velden op hoofdniveau
Structuur van data-object
Het object data bevat:
Voor uitgaande gesprekken via Twilio wordt failure_reason afgeleid van de Twilio-CallStatus: busy en no-answer worden ongewijzigd doorgegeven en failed wordt gerapporteerd als unknown. Voor andere Twilio-gespreksstatussen wordt geen webhook voor mislukte gespreksinitiatie verzonden.
Structuur van metadata-object
De structuur van het object metadata verschilt afhankelijk van of het uitgaande gesprek via Twilio of via SIP-trunking is gevoerd. Het object bevat een veld type dat onderscheid maakt tussen de twee, en een veld body met providerspecifieke details.
SIP-metadata (type: "sip"):
Het object body voor SIP-metadata bevat:
Twilio-metadata (type: "twilio"):
Voorbeelden van webhookpayloads
Voorbeeld van transcriptiewebhook
Voorbeeld van audiowebhook
Voorbeelden van webhooks voor mislukte gespreksinitiatie
Voorbeeld van Twilio-metadata
Voorbeeld van SIP-metadata
Aflevering van audiowebhooks
Audiowebhooks worden afzonderlijk van transcriptiewebhooks afgeleverd en bevatten alleen de essentiële velden om het gesprek te identificeren, samen met de base64-gecodeerde audiogegevens.
Audiowebhooks kunnen worden in- of uitgeschakeld met de schakelaar “Audiogegevens verzenden” in je webhookinstellingen. Deze instelling kan zowel op workspace-niveau (in de ElevenAgents-instellingen) als op agentniveau (in webhookoverschrijvingen van afzonderlijke agents) worden geconfigureerd.
Streamingaflevering
Audiowebhooks worden geleverd als streaming HTTP-requests met de header transfer-encoding: chunked om grote audiobestanden efficiënt te verwerken. Elke request krijgt na 5 minuten een time-out.
Opnieuw proberen
Wanneer opnieuw proberen voor de webhook is ingeschakeld, worden mislukte audioafleveringen volgens hetzelfde schema opnieuw geprobeerd als transcriptiewebhooks. Bij een nieuwe poging wordt de volledige audiopayload opnieuw verzonden; dedupliceer daarom op conversation_id. Zie opnieuw proberen van webhooks voor het schema, fouten die opnieuw kunnen worden geprobeerd en limieten voor audiogrootte.
Audiowebhooks verwerken
Omdat audiowebhooks via chunked transfer encoding worden afgeleverd, moet je streaminggegevens correct verwerken:
Audiowebhooks kunnen grote bestanden zijn. Zorg er daarom voor dat je webhookendpoint streaming requests kan verwerken en voldoende geheugen- en opslagcapaciteit heeft. De audio wordt afgeleverd in MP3-formaat.
Gebruiksscenario’s
Geautomatiseerde opvolging na gesprekken
Met webhooks na gesprekken kun je geautomatiseerde workflows maken die direct worden geactiveerd nadat een gesprek is beëindigd. Hier zijn enkele praktische toepassingen:
CRM-integratie
Werk je systeem voor klantrelatiebeheer bij met gespreksgegevens zodra een gesprek is voltooid:
Stateful gesprekken
Behoud gesprekscontext tussen meerdere interacties door status op te slaan en op te halen:
- Geef bij de start van een gesprek je gebruikers-ID door als dynamische variabele.
- Stel bij het einde van een gesprek je webhookendpoint in om gespreksgegevens in je database op te slaan op basis van de uit
dynamic_variablesgeëxtraheerde gebruikers-ID. - Wanneer de gebruiker opnieuw belt, kun je deze context ophalen en aan het nieuwe gesprek doorgeven in een dynamische variabele
{{previous_topics}}. - Zo creëer je een naadloze ervaring waarin de agent eerdere interacties “onthoudt”.