Hi randomreaper,
Thanks — I reviewed the docs on Call Ended Reasons and Debugging Voice Agents and the related threads. Short answer and concrete next steps:
Likely cause
- Race between the end-call action and TTS finishing: the end-call tool fired (or connection closed) before the last TTS audio finished, so the voice websocket disconnected early. Docs:
https://docs.vapi.ai/calls/call-ended-reason
Quick checks to run now
1. Confirm no client-side code, transport timeout, or webhook actively closes the call immediately after tool fires (you said none, but re-check any infrastructure that receives the end-of-call webhook).
2. In dashboard Observe > Call Logs for call 019b390b-3420-7776-bc9d-6a25af194eef: check timestamps for:
- assistant spoken messages (TTS start/end)
- tool call event (endCall)
- websocket close / provider disconnect
That will show whether websocket closed before TTS end (see Debugging guide:
https://docs.vapi.ai/debugging).
3. Ensure only one closing mechanism is used. Remove simultaneous triggers (system prompt asking to hang up + endCall tool) so the assistant only calls endCall once.
4. Use the end-call tool with a request-complete message and enable “End the call after message is spoken” (that is the supported place to guarantee hangup after TTS finishes). If you need the assistant to speak a custom closing phrase, set assistant.endCallMessage too (docs:
https://docs.vapi.ai/api-reference/assistants/list?explorer=true).
5. Lower model temperature and ensure the model does not call endCall in the same response chunk that also produces spoken text (avoid LLM returning tool call + speak concurrently).
If the problem persists (after steps above)
- Capture one failing call’s raw logs and the Observe timing (timestamps) for the events above and share those timestamps here so I can confirm whether the disconnect came from Vapi closing the transport or from the provider/webhook/your infra.