VoiceLayer
Dashboard

Build / Voice & turn-taking

Making it sound human

Two things decide whether an agent sounds real: how you write its lines, and how patiently it takes turns. Both are settings you control — neither needs a better model.

Write for the ear, not the page

Everything you type is spoken aloud. An LLM left alone writes prose — correct, complete, and instantly robotic. Give it examples of what you actually want instead of telling it to “be conversational”.

the difference
Written (reads badly out loud)
  "I have verified that access point AP-CEDAR-204 is back online
   with a signal strength of -57 dBm."
  "I will now create ticket TKT-5001 with severity level 1."

Spoken (what you want)
  "Okay, good news... your Wi-Fi box just came back up, and the
   signal's looking strong."
  "So I've opened a ticket for this — ticket five thousand one —
   and it's flagged top priority."

Pacing

Punctuation is the only timing control you have — and the one you need.

pacing
Use an ellipsis where a person would pause:
  "Alright... give me one second while I pull that up."

Punctuation is your timing. Short sentences. One idea each.
And it's fine to start a sentence with And, But or So.

One light filler per turn, never stacked:
  "Okay, so... let me take a look."
🚫

Don’t use SSML. Tags like <break time="300ms"/> or <emotion> are not supported and will be read out or mangled. Modern voices are designed to interpret punctuation instead — an ellipsis is your pause tag.

Numbers, dates and IDs

This single habit does more for realism than anything else. Identifiers are written for screens; say them the way a person would.

say it, don’t print it
Ticket TKT-5001   ->  "ticket five thousand one"
-57 dBm           ->  "a strong signal"
90 seconds        ->  "about a minute and a half"
2026-07-30        ->  "this Thursday"
+14155550100      ->  read one digit at a time

Turn-taking

Two behaviours you tune together: how easily the caller can interrupt (barge-in), and how long the agent waits after they stop before deciding it’s their turn (end-of-turn). Set them in Capabilities → Voice & turn-taking.

Patient caller

Waits out mid-thought pauses, and small words like “mm-hm” don’t cut the agent off. Use for older callers, distressed callers, or anyone reading a number off a screen.

Fast-paced line

Any word barges in, quick end-of-turn. Use for dispatch desks and expert users who know what they want.

Announcements only

The agent can’t be interrupted while speaking. Use for confirmations and compliance lines that must be heard in full.

Getting this wrong is loud. Too eager and the agent talks over people or repeats a question while they’re still thinking; too patient and it feels asleep. If callers sound cut off, move toward Patient caller.

In the SDK code

agent.ts
speech: {
  interruption: { minWords: 2, minDuration: 600 },
  endpointing:  { minDelay: 900, maxDelay: 4000 }
}

minWords: 2 means a backchannel like “mm-hm” won’t cut the agent off, but “wait, stop” will. minDelay is how long silence must last before the caller’s turn is considered over.

🎧

Judge it by ear, on a real call. Reading a transcript tells you nothing about pacing. Call the agent, interrupt it on purpose, and pause mid-sentence to see whether it waits.