Automations — use the WhatsApp voice event trigger. That binds a dedicated webhook and will not overwrite your New conversation flow.Custom backends — events are also POSTed to the assistant’s conversation webhook URL (the same URL used for new-conversation notifications). Filter incoming POSTs on
"event": "whatsapp_voice".Event types
Payload
Every voice event is a small JSON object. It does not include provider IDs, trunks, recordings, transcripts, or costs.string
Always
whatsapp_voicestring
One of the event types above
integer
WhatsApp sender that owns the chat
string
Customer number in E.164
string
Conversation UUID, or
nullstring
Assistant UUID
string
Current permission status:
pending, granted, rejected, revoked, expired, or nullstring
When granted consent ends, or
nullboolean
Whether you may place a WhatsApp call right now
integer
Present only on
voice_call. Dashboard call id.string
Present only on
voice_call: whatsapp_outbound or whatsapp_inboundTypical automation
- Customer replies to your template (24-hour window opens)
- You request permission
- Your server receives
call_permission_granted - You place the call
- You receive
voice_call, then later the post-call webhook
call_permission_granted, the customer declined, ignored the card, or the ask never delivered. Check Get call permission and WhatsApp Calling.
Delivery
- POST JSON, 10 second timeout, up to 3 retries
- Respond with HTTP 2xx so we do not retry
- Ignore events whose
eventis notwhatsapp_voiceif you also use this URL for new conversations

