Skip to content

Call lifecycle

A call is one attempt to reach one recipient. If the first attempt doesn’t reach them, a retry is a new call with its own id. A recipient called three times has three call records.

→ CALL_RESULT webhooknot reachedretry, if attempts remainansweredhang upresult readyno resultcampaign cancelledend date passedSCHEDULEDQUEUEDINITIATEDRINGINGNO_ANSWERBUSYFAILEDIN_PROGRESSANALYZINGCOMPLETEDCANCELLEDEXPIREDANALYSIS_FAILED
WaitingIn progressReachedNot reached / failedSetup / stoppedSimplified: only the usual paths are drawn. The table below has every status.

Every call moves through some of these statuses. They fall into six stages:

Stage Statuses Meaning
Waiting SCHEDULED QUEUED Not dialled yet.
Connecting INITIATED RINGING Being set up, or ringing.
Talking IN_PROGRESS The agent is on the line with the customer.
Getting the result ANALYZING → COMPLETED / ANALYSIS_FAILED The conversation ended and the result is being prepared.
Not reached NO_ANSWER BUSY FAILED Rang or connected, but nobody usable was reached.
Stopped before dialling CANCELLED EXPIRED Removed from the queue before it could ring.

See Statuses for the one-line meaning of each status.

Trigger Effect
Gowajee’s dialler picks up a waiting call SCHEDULED → QUEUED → INITIATED → RINGING
The customer answers RINGING → IN_PROGRESS
The customer doesn’t answer, rejects, or the line is busy RINGING → NO_ANSWER or BUSY
The call hangs up IN_PROGRESS → ANALYZING → COMPLETED or ANALYSIS_FAILED
You pause the campaign Waiting calls (SCHEDULED, QUEUED, INITIATED) go back to SCHEDULED. Calls already ringing or talking finish normally.
You cancel the campaign Waiting calls become CANCELLED. Calls already ringing or talking finish normally.
The campaign’s endDateTime passes Waiting calls become EXPIRED.
A call waits too long in the queue It becomes CANCELLED and is retried without using up an attempt.
Gowajee re-analyzes a finished call COMPLETED or ANALYSIS_FAILED → ANALYZING → a fresh result.
A late result arrives for a call whose analysis had failed ANALYSIS_FAILED → COMPLETED.

A call is retried when it ends as NO_ANSWER, BUSY, FAILED, or CANCELLED from a queue timeout — and the recipient still has attempts left. Each retry is a new call, with its own id and sessionId.

  • The wait before a retry is counted from when the previous call ended, not from when it was dialled.
  • A retry only happens inside the campaign’s calling hours.
  • With more than one caller number configured, the caller ID rotates: a retry never uses the number the recipient was just called from.
  • The voice is re-picked for every call, including retries.
  • Someone who was reached (COMPLETED, including voicemail) at any point in the campaign is never called again.

See Scheduling → Retries for the exact fields (maxAttempts, retryInterval) and a worked timeline.

Field Meaning
callStartedAt When the conversation started. null if the customer never answered.
callEndedAt When the attempt ended. Set even for calls nobody answered.
callDuration Seconds, with 3 decimals, as a numeric string such as "120.120", or null. Parse it with parseFloat/float().

callResult is ready once callStatus is COMPLETED. There are three ways to read it:

A few things that affect the result:

  • When analysis couldn’t run, the call is still COMPLETED, but the result has a fixed fallback shape instead of your fields — see Webhooks → When the analysis could not run.
  • Re-analysis sends the same call again with a new result and isReAnalysis: true. Upsert on call.id so the newer result replaces the older one. See Webhooks → Re-analysis.
  • Recordings are fetched separately, with GET /api/call/:callId/record-url. The links it returns expire within 1 hour, so fetch a fresh one when you need it rather than storing the URL.
Change Webhook sent?
A call reached the customer and was analyzed (COMPLETED) Yes
A call ended without a conversation (NO_ANSWER, BUSY, FAILED, or a queue-timeout CANCELLED) Yes, with callResult: null
A call’s analysis failed (ANALYSIS_FAILED) No
A COMPLETED call Gowajee doesn’t analyze (no recording and no transcript, or the agent stopped with an error) No
A waiting call became CANCELLED because you cancelled the campaign No
A waiting call became EXPIRED No
Gowajee re-analyzed a call you already received Yes, a new CALL_RESULT with isReAnalysis: true

This is a summary. For the full rules and the payload shape, see Webhooks → When is it sent?.