Connect by JBRH Open Connect

Silence and check-ins

Connect keeps its own view of whether the caller is speaking rather than trusting the model's, and it will not say anything into a line while the caller is talking or was heard within the last 2.5 seconds. On the default model no check-in and no goodbye is spoken at all: the silence is recorded, and if the call has genuinely been abandoned the hang-up watcher ends it without a word.

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

Presence is kept by the host, on purpose#

conversation.Presence exists because the SDK's user state on the model path is the model's own detection, and it misses speech starts. A system that speaks whenever it believes the line is quiet, using a signal that misses speech starts, will talk over people. So the host builds its own picture from every transcript chunk it sees and treats that as the truth about who is talking.

The rule that comes out of it is short: nothing is said into the line while the caller is speaking, or was heard within 2.5 seconds. That applies to anything the host might want to insert, not only replies — a check-in, an acknowledgement, a closing line. The most common way an automated voice ruins a call is by starting to speak at the exact moment the person does.

Why the default model says nothing at all#

There is a specific reason no check-in is spoken on Gemini 3.1 Flash Live, and it is worth stating plainly because it looks like a missing feature. The live model refuses say(), so any host-spoken line has to be synthesised by the text-to-speech API instead — and the text-to-speech side has the live voice's name, not its sound. A check-in would arrive in a noticeably different voice, mid-call, to a caller who has been listening to one person for two minutes.

Rather than do that, Connect records the silence and leaves the line quiet. If the caller is still there they will speak; if they are not, the hang-up watcher deals with it. The greeting is the exception that proves the rule — it is text-to-speech audio too, but it is the first thing on the call, so there is no established voice for it to clash with.

Silence that is a fault, and silence that is a person thinking#

What is quietWhat it meansWhat happens
The caller, brieflySomebody is thinking, or reading a number off a screenNothing. Turn detection waits; dynamic endpointing exists for this
The caller, for a long stretchPossibly an abandoned callThe silence check and hang-up timers run; true abandonment ends the call
Connect, after the caller stoppedThe model has not started generatingThe response watchdog nudges it after 5.5 s by default
The whole call, from the startThe greeting could not be spokenengine_error {at: greeting}, the call is ended by the engine, and the record says so

The last row is the one that hurt. Five inbound calls on 2026-09-07 sat in silence and were recorded as "the caller hung up before speaking" — a true statement about the audio and a completely false account of what happened. The engine now writes facts.silent_failure from that event and voice.no_conversation says so, with outcome not_reached.

Distinguishing the third row from the second is the whole reason the watchdog threshold sits where it does; the response watchdog covers why a lower number made calls slower rather than faster.

What a reviewer sees afterwards#

  • *Long gaps* is one of voice_quality.review's deterministic findings, with the setting change that addresses it attached.
  • The silence check and hang-up timers are engine knobs in the Voice Lab, so they are session parameters rather than instructions to a model.
  • A call with fewer than two caller lines and fewer than five caller words is never sent to the summariser at all — ten one-turn rows once carried an invented afternoon at a sales desk.

That last rule is why a mostly-silent call has a thin record rather than a confident one. A summariser given almost nothing will write something; refusing to ask it is cheaper than correcting it.

Questions#

Can I make Connect ask "are you still there?" after a pause?

Not on the default model, and the reason is the voice rather than the wording: the line would be spoken by text-to-speech in a voice that does not match the one the caller has been hearing. The silence timers still run and still end a genuinely abandoned call — it just ends quietly.

Does a long silence still cost money?

The call is open, so the session is open, and a live session is billed for its context on every turn it takes. A silent stretch takes no turns, but the call's own duration is still charged — a call that reports no tokens is charged from its duration at the published per-minute rate, never at zero.

Why did a call end with no goodbye?

Because on the default model there is no goodbye to say — the same text-to-speech constraint applies to a closing line as to a check-in. The ending is attributed on the record instead: hangup_by names the caller, the model, the owner, the engine, the carrier or the agent.