Skip to main content

Overview

Every call in Voxworks carries several layered fields that together tell you where it is, why it ended, and what actually happened on it:
  • Status — where the call is in its life: waiting to dial, dialling, live, or finished (and if finished, how). This is the coloured value you see in the Call Log and filter on.
  • End Reason — the finer detail behind a finished call: who hung up, whether voicemail was reached, whether the call was handed to a human.
  • Progress — how far the call has moved through post-call processing (transcript, summary, analysis, automations). Mostly visible through the API.
  • Dispatch status — a short plain-text note on scheduled outbound calls recording where they are in the dispatch queue.
  • Outcome — the Post-Call Analysis classification of what happened in the conversation itself: appointment booked, not interested, message taken, and so on.
This page is the canonical reference for all of them, plus the rules for what you can cancel, reschedule, or retry in each status. Sibling pages cover the narratives: Dispatch, Concurrency & Delays for the queue-to-dial journey, Scheduling & Managing Calls for creating and managing calls, and Post-Call Analysis for configuring outcome classification.

The status pipeline

A scheduled outbound call moves through the pipeline in one direction: Scheduled → Queued → In Progress → a terminal status
  • Scheduled — the call is waiting for its scheduled time. Its dispatch status shows a countdown, and this is the only state in which a call can be cancelled.
  • Queued — the dispatch engine has claimed the call and the dial is starting. This state normally lasts only a moment. Once a call is Queued, a cancel can no longer win the race — dialling is already underway.
  • In Progress — the call is live. The Call Log shows an animated status dot, the row updates in place every few seconds, and you can listen in via Live Monitoring.
  • Terminal statuses — the call has finished, one way or another. See the table below.
Inbound calls, web calls, and test calls skip the first two states: the call record is created the moment the call connects, already In Progress. Note that “test call” here means the specific Test Call button (or any call on a number set to Test) — see Environments: Test vs Live for how that differs from Live inbound/outbound calls. Rescheduling is the one deliberate exception to the one-way rule: it returns a finished call to Scheduled so the same record dials again — see What you can do in each status.

Status reference

The Status column and filter in the Call Log use the display labels below. The API returns the raw value in the call object’s status field (a string, e.g. "in-progress"). Two display notes:
  • The Call Log’s status filter offers All Statuses, Scheduled, Completed, Voicemail, Dropout, Hang Up, Rang Out, Failed and Queued. Live calls are easiest to find on the Dashboard or by their animated dot.
  • The Dashboard’s Call Success Rate chart counts the share of calls with status Completed — it is a connection metric, distinct from the objective-based Objective Met % described below.

What you can do in each status

The canonical eligibility rules for the three manual actions. Reschedule (app) is the Re-dial action on a batch’s call list, which moves the same call record back to Scheduled at a new time. Retry (API) creates a new call from the old one via the Retry Call endpoint — see the API endpoints reference. Web calls can never be retried. Key rules behind the table:
  • Cancel only works on Scheduled calls. The dispatcher claims calls atomically, so a cancel and a dial never race — whichever lands first wins cleanly. Single calls are cancelled via the API’s Cancel Call endpoint; batch calls in bulk with Cancel Batch (or held with Pause Scheduler). See Scheduling & Managing Calls.
  • The API’s Reschedule Call is stricter than the app — it only moves calls that are still Scheduled. For finished calls, use Retry Call.
  • Retry Call covers every terminal status except Completed. A retry reuses the original’s contact, script, outbound number, and objectives, links back to the original with a retry counter, and dials immediately unless you pass a new time.

Automatic batch retries

Batch calls that don’t connect are also retried automatically, on a per-outcome policy you can tune per batch. The platform classifies each finished call into a retry class using its status and end reason together: Permanent dispatch failures (status Failed with end reason Failed — for example an invalid number or a missing outbound number) are deliberately not retried: they can never succeed as they stand. If the contact rings you back before a retry fires, pending retries for them are cancelled by default. Every retry is a billed attempt — the full policy controls live in Calling Rules.

End reasons

The End Reason appears in the Call Details Metadata section, as a Call Log column and filter, in CSV exports, and in the API call object’s end_reason field (a string, e.g. "AI Hangup"). Occasionally an end reason carries raw telephony detail instead — text mentioning a ring timeout, busy line, or a transient network fault. The retry engine and automations understand these and classify them into the retry classes above.

Correcting an end reason

Automatic classification can occasionally get it wrong — most commonly a voicemail greeting mistaken for a person, or vice versa. In the Call Details panel you can edit the end reason to one of four values: AI Hangup, Failed, User Hangup, or Voicemail. The change saves immediately and flows through to filters and exports. See Call Details.

How the agent decides a call is over

The agent ends calls itself only on an unambiguous close — an exchanged goodbye or an explicit “we’re all set”. Long readouts such as disclaimers are never mistaken for goodbyes, and offers to transfer or “anything else I can help with?” questions don’t trigger a hang-up. If a caller goes silent, the agent checks in first and only says goodbye after an extended silence — see Silence Tolerance.

Dispatch status strings

Scheduled outbound calls carry a plain-text dispatch note in the API call object’s dispatch_status field (a string, e.g. "DELAYED, rate limited"). The canonical set: For the full narrative — the two-minute dispatch window, queue ordering, priority tiers, and delay notifications — see Dispatch, Concurrency & Delays.

Outcomes

The Outcome is the single classification of what happened in the conversation, produced by Post-Call Analysis and shown in the Call Details Analysis tab. Outcome codes are stable snake_case values, so they are safe to build automations and reports against.

Default outbound outcomes

Default inbound outcomes

Inbound and web calls use a different default set:

Custom outcome sets

A script can replace the default rubric with its own outcome options in its Post-Call Analysis tab. For outbound scripts, the three telephony codes — no_answer, voicemail, and did_not_connect — are always appended to a custom set if missing, so non-connections can never be misclassified. The Analysis tab’s footer records which outcome set was used (outbound, inbound, or custom).

Telephony-stamped outcomes

When the call’s status already proves what happened, the outcome is stamped deterministically from the status rather than judged from the transcript: Any other status leaves the outcome to the analysis of the conversation.

Objectives and Success Evaluation

Two further per-call results measure success against your script’s Call Objectives:
  • Call Objectives — each objective on the call is evaluated after the conversation and lands in one of three states: met, not met, or pending (not yet evaluated, or indeterminate). The Call Details panel shows them as toggles you can correct by hand, and CSV exports render them as Success, Fail, or Pending per objective.
  • Success Evaluation — a per-call text field summarising the objective results as a whole. It appears as a Call Log column and filter, in CSV and JSON exports, and as the Evaluation badge in Batch Analytics. Depending on when and how the call was evaluated you may see a simple verdict such as success, failure, or pass, or a compact summary counting objectives met versus total. The Dashboard’s Objective Met % chart is built from these objective counts; its Call Success Rate chart, by contrast, simply counts Completed statuses.

Statuses in automations and the API

  • Call Completed automations fire once a call finishes post-call processing, and can be filtered by call status in the trigger’s conditions — for example, run a follow-up only for Voicemail calls. Calls that never dialled — a permanent dispatch failure or a call cancelled before it started — skip processing entirely, so no automation fires for them. The trigger payload includes the call’s type, status, contact, and timing. See Automation Triggers.
  • Automations that branch on how the dial went classify calls into connected, voicemail, no_answer, or busy using the same status-plus-end-reason rules as the retry engine above.
  • The API’s Get Call Status endpoint returns the live status, progress, and end_reason for polling a call you created; Get Call Result adds the transcript, summary, objectives, and collected data once processing completes. See the API endpoints reference.

Next Steps

  • Dispatch, Concurrency & Delays — the journey from Scheduled to In Progress, and every dispatch status in context.
  • Scheduling & Managing Calls — create one-off calls and use the reschedule, cancel, and retry actions day to day.
  • Post-Call Analysis — configure the outcome set and custom classification fields your calls are scored against.
  • Calling Rules — tune the automatic retry policy your batches apply to voicemail, no-answer, busy, and transient failures.