Hi Vapi Support,
I’m running into a persistent issue where webhooks sent from Vapi to our GoHighLevel (GHL) workflow are not always triggering as expected.
✅ What's Working:
When calls end normally (e.g., "voicemail" or successful engagements), the end-of-call-report webhook is received and contains:
transcript
analysis
recordingUrl
assistantOverrides.variableValues
customer.number
These trigger GHL workflows correctly.
❌ What's Failing:
When the call ends with:
json
Copy
Edit
"endedReason": "customer-did-not-answer"
the webhook is:
Still received at our GHL endpoint
BUT missing key fields (no transcript, analysis, etc.)
So it does not match the GHL webhook sample structure and is ignored silently
As a result, we have no visibility in GHL logs and the lead is completely missed in the automation.
🔎 Questions for Support:
Can Vapi force inclusion of transcript, analysis, and recordingUrl fields in all end-of-call-report payloads, even if empty or null?
Can we add a fallback message or enforce structure from our side (e.g., in assistant config or via assistantOverrides) to normalize webhook payloads, especially for calls that are missed or unanswered?
Is there a recommended way to ensure that customer.number or assistantOverrides.variableValues.phone is always included in the top-level payload for mapping downstream?
Can you confirm if there's any webhook delivery logic that filters or suppresses minimal call logs based on endedReason?
We would prefer to resolve this within Vapi if possible before setting up external proxying/filtering middleware. Let me know what options you recommend to standardize webhook output and ensure all end-of-call-report events can be reliably processed.
Thanks so much for your help!