Skip to main content
Beyond the custom functions you write yourself, VoiceInfra ships four capabilities you can switch on for any agent. They live on the agent’s Functions tab under System Tools, and each one is off until you turn it on.
Each tool also takes an optional custom tool description. This is the text the model reads when deciding whether to use the tool. Leaving it blank uses a sensible default; writing your own is the main lever if a tool fires too often or not often enough.

Auto Language Switching

Lets the agent change the language of the conversation when the caller speaks another language or asks to switch. The agent’s transcription language is the starting language.
  • Supported languages — the languages the agent is allowed to switch to. Leave empty to accept any language the model supports.
  • Voices — optional. A different voice to use for a specific language. Leave blank and the agent keeps its usual voice, but the language is still passed through so the voice pronounces it correctly.
If the agent runs a realtime model, it keeps its configured voice. Language switching still works — the agent understands and replies in the new language — but it cannot swap to a per-language voice mid-call.

Conversation State Updates

Lets the agent assign values to conversation variables mid-call. Those values then become available to later prompts, to function parameters, and to workflow equation transitions. You configure up to 10 updates, each pairing a variable name with an expression:

Writing expressions

Expressions support:
  • Constants — numbers, quoted text, true, false, null
  • Existing variables — any variable already in the conversation
  • LLM extraction — llm: "Does the user sound frustrated?" asks the model to work out a value from the conversation. Write it exactly in that form; a bare question is rejected.
  • Casts — bool(), number(), text()
  • Arithmetic — + - * /
  • Comparisons — =, ==, !=, <, <=, >, >=
  • Logic — and, or, not
  • Conditionals — if <condition> then <value> else <value>
You can have at most one llm: extraction per expression. If you need two model judgements, use two updates.

Rules the editor enforces

  • Variable names use letters, digits and underscores, and must start with a letter or underscore
  • Reserved words (such as and, if, true, llm, text) cannot be used as variable names
  • Each variable may only be assigned once
  • A maximum of 10 updates
Evaluation is all-or-nothing per tool call. If one expression fails, none of the updates in that call are applied, and the agent is told the update failed.

Pause and Listen

Lets the agent pause and stay silent until the caller speaks again — for moments like “give me a second” or “let me think”. While paused, the agent does not fill the silence. The normal inactivity timeout still applies, so a caller who pauses and then says nothing will still get the silence timeout behaviour.

Agent Transfer

Lets this agent hand the conversation to another specialist AI agent — mid-call or mid-chat. The switch lives here, on the Functions tab, alongside the other system tools. Because it is a way of transferring a call, the full guide sits with the other transfer options:

Transfer to another agent

How agent-to-agent hand-off works, its rule settings, and how it differs from transferring to a human.

Frequently asked questions

No. They are part of the agent. Calls, messages, and any transfers you configure are metered normally — see Pricing.
Yes. They are independent switches and can all be on at once.
Agent transfer moves the conversation to another AI agent. A transfer node in a workflow moves the call to a human, an extension, or an external number. Both can exist in the same agent.
It works with all supported providers. What differs is whether the agent can also change voice for the new language — realtime models keep the voice they started with.
Values the agent captures are added to the transcript as extracted data and are visible in the call log’s structured analysis, alongside anything your own functions collected.