Skip to content

NO ANSWER outcome misleading: calls rejected before handset rings report as callee no-answer #105

Description

@DannyBaanks

CALL-E: NO ANSWER outcome misleads when carrier rejects before reaching handset

Summary

When an outbound call fails immediately, the API/CLI returns NO ANSWER
with hangup_type: ByCallee and duration_seconds: 0. This is misleading
because the call never reached the handset — it got rejected before ringing.

Reproduction

Three identical attempts (same plan, same number, same region, 30s apart):

Environment: Windows 11, Node v22.23.1, calle CLI 0.5.0, post-provisioning fix (Issue #103).

calle call plan --to-phone "+52••••••9116" --goal "Say: Danny..." --region MX
calle call run --plan-id <plan_id> --confirm-token <token>
calle call status --run-id <run_id>

Results observed

Attempt run_id Status Hangup Type Duration Callee sees ring?
1 LYI-...TsLA NO ANSWER ByCallee 0s NO
2 1BiD...Hw NO ANSWER ByCallee 0s NO
3 nVI5...EvQ NO ANSWER ByCallee 0s NO

Server-side timeline per run:

[stage_start]    run_call started
[external_call]  botlab create bot
[external_call]  calling resolve robot id
[external_call]  calling create task
[result]         calling task created
[progress]       calling task status=pending
[progress]       calling task status=calling
[callee_realtime] Call ended; syncing final Calling result
[progress]       calling task status=NO ANSWER
[error]          calling task completed with status=NO ANSWER

call_start_time == call_end_time == the same second. duration_seconds: 0.

Request

When a call ends in under 0 seconds with hangup_type: ByCallee before the
device ever rings, we would like:

  1. A distinct outcome or diagnostic value (e.g., NO_ANSWER_NO_RING,
    CARRIER_REJECTED, UNSUPPORTED_DESTINATION, REGION_NOT_SUPPORTED).
  2. If this is simply the carrier's "no coverage in that region" behavior for a
    specific destination, the CLI/docs should say so instead of conflating it
    with "user didn't pick up".

Current behavior

NO ANSWER means "the carrier did not connect to a handset" and conflates:

  • callee actually unanswered (normal failure)
  • callee-side screen/visual voicemail (still an answer to the carrier)
  • carrier rejected the number/regional drop (no ring, no opportunity to answer)

This is particularly deceptive in an SDK: a caller calling e.g. wait_for_result
sees NO ANSWER and assumes the remote device was reached, but @call-e/core
knows the call instantly dropped (ByCallee, 0s).

Behavior expected

A truthful outcome that lets callers distinguish these cases so retry logic and
analytics are correct.

Where the seam is (not a bug, but worth noting)

Not a blocker (we understand this can be implementation-carrier-dependent), but
a useful second-order observation added to the known "[not-call]" patterns:

  • Attempt sequence: plan -> confirm_token -> run_call -> get_call_run
  • Outcome signal: NO ANSWER with ByCallee + 0s duration
  • Missing signal: a "reachability" classification (ringing vs rejected)

Notes

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions