Connect by JBRH Open Connect

Answering inbound calls

An inbound call is answered inside the workspace that owns the number, greeted with a sentence synthesised during the ring, and then held as a conversation until somebody ends it. Before the greeting there are two gates — the line's permission and hours, and the budget — and a refusal at either is spoken aloud in the business's own name rather than left as silence.

Status
Available What this means
Audience
both
Channels
phone
In the app
#/calls
Last verified
Product version
6.3.2

What the caller hears, second by second#

MomentWhat the caller hearsWhat Connect is doing
RingRingingVerifying the callback, resolving the workspace, synthesising the greeting
PickupThe greeting, immediatelyPlaying pre-synthesised audio; the caller's own audio is muted for this sentence
First wordsSilence while they speakDetecting end of speech; a one-word answer is enough to start a turn
First replyThe answerModel first token plus end-of-turn detection — the floor, not a setting
InterruptionThe voice stopsBarge-in, if the caller speaks over the voice within the first two seconds of a reply

The greeting is synthesised during the ring rather than after pickup because a caller who has said hello into silence has already formed an opinion. Warming it moved the inbound greeting from about three seconds to none. When the warm copy is missing, live synthesis fills in and the call still starts — the event records which of the two happened.

The gates before the greeting#

Workspace resolution
The number must belong to a workspace. No workspace means no settings, no greeting and no record.
Line permission and hours
A line that is off, or closed at this hour, is refused with the spoken closed-line message and the row is ended with outcome line_off or after_hours.
Budget
budget_refusal is asked before answering an inbound call as well as before placing an outbound one. A refused inbound gets the spoken closed-line message, not silence.
Capacity
On the realtime path, admission refuses not_ready when no worker has checked in within 90 seconds, or when every live worker is over its load threshold.
Model availability
A session the model refuses to start is retried once on the same model and once on the mutable fallback before the call is given up, and model_session_restarted goes on the record.

Three ways an answered call used to go silent#

The failures worth knowing about here are not conversational. They are structural, they were all silent, and each was found by driving the live endpoint rather than by reading code.

  1. A host-less action URL. _turn_url emitted an action URL with no host when public_url was unset. The greeting plays, the carrier has nowhere to post what it hears, and the call goes silent while the caller is still talking.
  2. A <Gather> as the last element in the document. When nothing usable was heard, the carrier ran off the end of the XML and hung up. Two real calls went greeting, fifteen seconds of listening, NORMAL_CLEARING — and the turn URL was never requested once. A <Redirect> now follows </Gather>, back to the turn handler, which answers empty speech with "sorry, I did not catch that".
  3. One URL doing two jobs. /voice/{carrier}/status was both the hangup URL and the status URL, and ended the call on *any* status. A ringing callback hung up on a live caller.

The common shape is that a caller experienced a broken call and Connect recorded a normal one. That is why the carrier's call log is treated as a second source of truth rather than as a support tool of last resort.

What is written while they talk#

A Call row exists from the moment the call is accepted, and it is updated rather than replaced: ring and answer times, the provider's status, participants, cost as it accrues, and the resolved voice settings snapshotted onto quality so a later review judges what actually ran. Each sentence in either direction becomes a turn, and the wire timings for each reply are posted as their own events rather than inferred from when a transcript row arrived.

At the end the same closing work runs whichever engine held the call: the row is closed, the cost booked, and the summary, lead capture, memory and follow-up run as a deferred digest so that a slow model call cannot make the ending itself fail.

Questions#

Does the caller hear anything while Connect decides whether to answer?

They hear ringing. The decisions that could refuse the call — permission, hours, budget, capacity — are made before pickup, so a refusal is either a call that is never answered or a call answered specifically to say the line is closed. Connect does not answer and then think.

Why can the caller not interrupt the greeting?

The caller's audio is muted for the length of the greeting, which is what stopped the voice re-introducing itself over people. Interruption is available from the first reply onwards, and speaking over the voice more than two seconds into a reply is treated as an interruption that was ignored and reported as a finding.

A caller says nobody spoke. What does that mean?

If the greeting could not be said at all, the worker records engine_error at the greeting and ends the call rather than leaving the caller in silence; the call is written as a silent failure with outcome not_reached. If the greeting played and then nothing followed, the cause is upstream of the conversation — see the three failures above.