> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hubtalk.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Phrase corrections and pauses

> The organization's replacement dictionary and [pause N] markup in the agent's text.

# Phrase corrections and pauses

## Phrase corrections

A separate cabinet section, **Phrase corrections**, holds an organization-wide dictionary of "wrong → right" pairs. The replacement is **literal**: the platform looks for exactly the string you wrote and puts yours in its place. There are deliberately no regular expressions — the people who maintain the dictionary are not programmers, and a mistake in a regex costs more than it saves.

* A rule can be bound **to one agent**; leaving the binding empty means "every agent in the organization".
* A correction applies **both to the audio and to the text in history**: the caller hears the corrected phrase and the transcript shows the same one.
* **The dictionary is live.** Corrections are not frozen into a session snapshot: change the dictionary and the very next utterance comes out corrected, with nothing to restart.
* The agent's voice panel carries a **toggle** that enables the dictionary for that agent. **It is off by default** — existing agents noticed nothing.

Why it exists: where one model serves every language while callers speak their own, the same grammatical mistakes repeat call after call. On a client's production data the error appeared in 8.9 % of calls, and **four rules covered 64 %** of them. A prompt fixes such regularities unreliably; a replacement is deterministic.

<Note>
  **The dictionary has no effect in realtime mode.** There the speech is synthesized by the model as a whole, and there is simply no point at which the text could be substituted before it is voiced.
</Note>

## Pauses in speech

An agent that reads a phone number or an amount in one breath sounds like a machine. Write `[pause N]` between two words — `N` is seconds, from 0.1 to 3.0 — and the agent stops there: `Our number is eight [pause 0.4] six six [pause 0.4] two two.` The case of the word and extra spaces do not matter; the fractional separator is a dot. The value is rounded to the nearest 0.05 s and pulled to the nearest edge if it is out of range, so `[pause 5]` is spoken as three seconds and `[pause 0]` as 0.1 — the phrase is never rejected over its pause.

The tag works in fixed node text, in generated replies, and in everything else the agent says out loud: the opening line, silence reminders, the phrase after a failed transfer, the closing words of an End node. You can also let the model place pauses itself — describe in the prompt when one is wanted and give the tag as the example; a pause the model wrote is handled exactly like one you typed. Copilot knows the tag and will suggest `[pause N]` rather than a provider-specific form.

**What the caller hears depends on the voice.** Where the voice supports a pause of an exact length — ElevenLabs on every model except `eleven_v3`, Cartesia, Inworld, Azure — the pause is real, to within the 0.05-second grid. Where it does not — OpenAI, Soniox, the self-hosted `cybernet` voice, ElevenLabs `eleven_v3` — the platform puts punctuation instead: a comma below 0.4 s, an ellipsis from 0.4 s up. The break is audible, but its length belongs to the voice: measured, punctuation gives between 0.18 and 0.64 s, so `[pause 2]` on OpenAI sounds like roughly 0.6 s and is indistinguishable from `[pause 0.5]`. Silence is never inserted as audio — in listening tests that sounded like the line breaking up.

A per-node voice and the reserve voice that steps in when the main one is unavailable each get the pause in the form their own voice understands: the tag is compiled per voice, not once per agent.

**Density has a ceiling.** Three pauses per request reach ElevenLabs and Cartesia as real pauses (twenty on Inworld, no limit on Azure); from the fourth on, counting left to right, they become punctuation. Voices get unstable when a sentence is stuffed with tags, and three is enough for a phone number if you group the digits.

<Note>
  **`[pause]` without a number is removed, not spoken.** So is any unparsed construction that starts with `[pause` — the word is never read aloud, whatever the typo. A square bracket not followed by `pause` is ordinary text: `[1, 2, 3]` is still read as "one, two, three". The older `<break time="0.5s"/>` form keeps working and means exactly the same on every voice, including those that never understood it, so existing texts need no rewriting; a half-typed `<break` is now cut out instead of being read letter by letter.
</Note>

**Where the tag does nothing.** In the chat tester and in text channels there is no speech to pause, and the person is shown the reply without the tag. In an agent running in **realtime (speech-to-speech) mode** there is no separate synthesis step: the markup is stripped from the instructions before they reach the model, and the agent validator raises the warning `realtime_pause_markup` for every place that carries one — a warning, not a block on publishing.

<img src="https://mintcdn.com/hubtalk/cKl-cjuDGhk4sToG/images/v4_agent_realtime_pause_warning_en.png?fit=max&auto=format&n=cKl-cjuDGhk4sToG&q=85&s=41941ac5cb90c7fe567eaf692ab4749a" alt="The Issues tab: the pause-markup warning for realtime mode, naming the node it came from" width="520" height="783" data-path="images/v4_agent_realtime_pause_warning_en.png" />

Wherever the conversation is shown as text — the live transcript of a test call, the [call history](/v4/platform/campaign-history), session exports, reports and the payload of your [webhooks](/v4/webhooks) — the agent's words appear without the tag. The synthesis chunk log keeps the compiled text, because re-synthesis and the TTS cache denylist are keyed by it.

**What the call tells you.** A `pause_markup` event with the status *warning* is written for a turn **only when the compilation lost something**: `density_capped` — the ceiling cut in and the extra pauses became punctuation; `value_clamped` — a value outside 0.1–3.0 was pulled to the edge; `markup_dropped` — an unparsed construction or a broken `<break` was removed. Ordinary compilation writes no event. Separately, a voice with no native pause is recorded **once per call** as a `tts_capability` event titled `no_native_pause` — that is how you tell which case an agent is in without listening. Neither event affects the call's health verdict.

One accounting caveat: the TTS character counter of a call counts the characters **you typed**, while the provider bills the compiled text — `[pause 0.5]` is 11 characters against 20 for `<break time="0.50s"/>` and 1 for a comma. Expect the provider's own invoice to differ by about ten characters per pause.

**How long to make it.** 0.3–0.5 s between groups of digits, after a name, before "right?" — that reads as breathing. 0.8–1.2 s before a question that needs a decision or after bad news. Over two seconds almost never: on the phone that long a silence means "has the call dropped?", and people start talking over the agent. And not in every sentence — a pause works because the rest of the speech flows.
