Skip to main content
Find why a call failed, ended early, had one-way audio or dropped its stream. After logging in, find the call’s UUID (its unique identifier), then request an explanation:
Replace "<call_uuid>" with an ID from the list. The diagnosis reports a timeline and likely causes involving your server, Plivo or the carrier. For voice agents, check the answer URL, its XML and the WebSocket connection. A typical answer:
The hangup causes you will see most often while building a voice agent: If the answer URL and XML are valid but the caller hears silence, test the voice agent and its audio format without a phone with Test your voice agent. For the raw record (hangup cause, source, duration) run plivo voice calls get <call_uuid> -o json, or plivo open call <call_uuid> to see the call and its Call Insights in the console. For a call over a SIP trunk, use plivo sip calls diagnose and plivo sip calls insights; see Check and diagnose a SIP call.

Read the result in a script

With -o json (or when output is piped), diagnose prints one JSON result when the analysis ends:
For a message the ID field is message_uuid instead of call_uuid. -o yaml, -o csv and --query work on this result, for example --query 'data.likely_cause'. -o jsonl streams the assistant’s raw events instead of one result. If the analysis fails, escalates or stops early, diagnose exits with code 3, so a script can tell a finished analysis from one that didn’t finish. Pass --timeout <seconds> to put a limit on a script’s wait: an analysis still running at that point ends with UPSTREAM_TIMEOUT and exit code 3. An unknown UUID exits 1 without using a request from your limit.
The answer is written by Plivo’s AI assistant, so read the prose as an explanation; scripts should read the fields of the -o json result instead. diagnose and plivo ask share a limit of 5 requests per 60 seconds per account. Only calls on your own account can be diagnosed. For messages see Diagnose a message; for general questions see Get help.