Use when placing a phone call through ErzyCall, or when reading the result of one. Defines what success means before dialling, and how to tell whether a finished call actually achieved anything. Use w
`status: "ended"` does not mean it worked. It means the phone call is over. Most calls end without a human ever hearing your message.
This large 886-word instruction set is purpose-built for debugging work in AI coding agents. Paste directly into your CLAUDE.md or AI agent settings.
status: "ended" does not mean it worked. It means the phone call is over. Most calls end without a human ever hearing your message.
Across the last 150 real calls on this platform:
| What happened | Share |
|---|---|
| Nobody answered | 52% |
| Failed on our side — never connected, or errored into silence | 24% |
| Human picked up and hung up (could be anything) | 17% |
| Assistant actually delivered its message | 6% |
If you report "done" the moment a call ends, you will be wrong roughly nineteen times out of twenty. Never tell the user a call succeeded because it finished.
Do this first, in one sentence, and keep it. It must be checkable from a transcript.
Call get_call and read endedReason first, then the transcript. Never read status alone.
| endedReason | What really happened | What to do |
|---|---|---|
| assistant-ended-call | The assistant finished its script. Only this is a candidate for success. Still read the transcript — finishing the script is not the same as achieving the objective. | Check the transcript against your written objective |
| customer-ended-call | A human hung up. Could be a completed conversation or an instant rejection. Ambiguous by itself. | Read the transcript. Short duration = they hung up on you |
| customer-did-not-answer | Nobody picked up. This is not a failure and not a rejection. | Retry later — see the retry table |
| customer-busy | Line engaged | Retry later |
| twilio-failed-to-connect-call | The call never reached the network. Our problem, not theirs. | Retry sooner. If it repeats for one number, the number may be bad |
| assistant-request-returned-error | Our defect. The person's phone rang and delivered silence. | Stop. Do not retry in a loop. Report it |
| silence-timed-out | The call connected but nobody spoke | Treat as a defect; investigate before retrying |
Any endedReason not in this table: don't guess. Fall back to the transcript and duration, and report the raw value to the user rather than mapping it to something above.
durationSeconds: 0 with an ended status means nothing was said, whatever the reason claims. A "successful" call lasting three seconds did not accomplish anything. Treat a 0-second or near-0-second call as a defect, not a normal no-answer — investigate before retrying it, the same as assistant-request-returned-error.
Ask two questions, in order:
| Situation | Retry? |
|---|---|
| No answer / busy | Yes — after a gap, at a different time of day |
| Failed to connect | Yes, sooner — it is an infrastructure blip |
| Our assistant errored | No. Stop and report. Retrying a broken configuration burns money and rings real people for nothing |
| Person asked not to be called | Never. Suppress them — see erzycall-contact-safety |
| Objective met | No |
Two rules that override the table:
erzycall-campaign-runner.403 CONTACT_OPTED_OUT, and is recorded with endedReason: "contact-opted-out". That is a permanent stop, not a retryable failure.Report outcomes, not activity. "I placed 40 calls" is not a result.
Say, in this shape:
> Reached 6 of 40 people. 3 confirmed for Tuesday, 2 asked to reschedule, 1 asked not to be contacted again (suppressed). 21 didn't answer and can be retried this evening. 8 failed to connect — that's on our side. 4 hit a fault and I've stopped retrying them.
Always separate:
A call takes roughly a minute to actually ring after create_call returns. Do not poll in a tight loop and do not block. Create the call, do something else, come back for the result.
Erzycall Call Outcomes is a free debugging skill for AI coding agents. Use when placing a phone call through ErzyCall, or when reading the result of one. Defines what success means before dialling, and how to tell whether a finished call actually achieved anything. Use w. It provides a specialized system prompt that configures your agent with debugging expertise.
Copy the system prompt below and paste it into your CLAUDE.md file or Claude Code's custom instructions to activate Erzycall Call Outcomes.
Erzycall Call Outcomes is compatible with Claude Code, Cursor, GitHub Copilot, Windsurf, OpenClaw, Cline, and any AI agent that supports custom system prompts or .cursorrules files.
Yes, Erzycall Call Outcomes is completely free and open source. The full source is available on GitHub at https://github.com/Erzy-Inc/erzycall-agent-skills/blob/main/skills/erzycall-call-outcomes/SKILL.md. You only need a subscription to the AI agent you use it with.
Weekly roundup of top Claude Code skills, MCP servers, and AI coding tips.