Configure
Voice languages
Your voice agent speaks and understands 30+ languages natively — no cascading speech-to-text, translation, and text-to-speech pipeline, no extra latency. One language directive goes into the realtime model’s system prompt and the model handles the rest: transcribes in the target language, understands in the target language, responds in the target language.
The languages on offer depend on your voice model (set per organization). Gemini Live auto-detects the spoken language and switches naturally, so a chosen language is a hint rather than a hard lock; xAI Grok and OpenAI Realtime honour a locked language. The picker shows exactly what your current model supports.
Configure per widget
In Widget → Customize → AI agent, tick
Enable voice chat. A Languages panel appears
below the toggle with three controls, shown in the panel below. The provider line
at the top names your organization’s voice model and the
picker underneath offers exactly the languages that model supports. The
Supported languages multi-select is where you ⌘/Ctrl-click to
pick a subset (leave it empty to allow all); the counter beneath it echoes
“N selected” or “All languages allowed.”
The Default language dropdown — whose first row is
(none — use auto-detect result) — sets the lock / fallback code,
and the Auto-detect from the visitor’s first utterance
checkbox at the bottom toggles the detect_language tool call.
Languages
Leave empty to let the agent speak any of the 30+ languages the realtime model supports. Pick a subset to restrict, and optionally set a default for unsupported requests.
Languages available for your voice model (xAI Grok).
The Languages panel under Customize → AI agent — supported set, default, and auto-detect, offering only what your voice model handles.
| Setting | What it does |
|---|---|
| Supported languages | Multi-select. Empty = every language the realtime model supports is allowed. Pick a subset to restrict (e.g. only en-US + es-ES). Non-matching utterances are politely redirected to the default language. |
| Default language | Dropdown. Used as the session lock when Supported languages has exactly one entry, and as the fallback when auto-detect confidence is low or when the visitor speaks something outside your supported list. |
| Auto-detect |
Checkbox. When on, the model runs a detect_language tool on the
first utterance, locks the session to the detected BCP-47 code, and responds in
that language for the rest of the call. Off = no tool call; session runs in the
default (or visitor’s picked) language from the start.
|
Behavior matrix
| Configuration | What the visitor experiences |
|---|---|
| Supported = 1, default set | Session is always in that language. If the visitor speaks another, the agent acknowledges in the locked language and continues. |
| Supported = many, auto-detect on | First utterance triggers detect_language. Session locks to the detected code (if it’s in the supported list). Otherwise switches to the default language. |
| Supported = many, auto-detect off, default set | Session runs in the default language. Visitor can ask to switch mid-call (“can we do this in Spanish?”) — the model calls detect_language again and the session re-locks. |
| Supported = empty, auto-detect on | No restriction. Any language the realtime model handles is accepted; the agent follows whatever the visitor speaks. |
| Supported = empty, auto-detect off, no default | Falls back to English (US) as the universal default so voice never hangs on a missing language. |
During the call
-
The widget shows a small language badge in the voice control bar (
🌐 ESfor a locked session,🌐 autowhile auto-detect is pending). -
The session record’s
detectedLanguagecolumn is set to the BCP-47 code andlanguageSourceis set toconfigured,picker, orautodetect— visible on the conversation review page. - Mid-session switches work: the visitor just asks to change language and the agent complies. The language badge updates on the next turn.
Supported languages
All BCP-47 codes our curated picker offers. The upstream realtime models (xAI Grok, OpenAI gpt-realtime, Google Gemini Live) all handle these natively.
| Code | Native name | English name |
|---|---|---|
en-US | English | English (US) |
en-GB | English | English (UK) |
es-ES | Español | Spanish (Spain) |
es-MX | Español | Spanish (Mexico) |
fr-FR | Français | French |
de-DE | Deutsch | German |
it-IT | Italiano | Italian |
pt-PT | Português | Portuguese |
pt-BR | Português | Portuguese (Brazil) |
nl-NL | Nederlands | Dutch |
sv-SE | Svenska | Swedish |
no-NO | Norsk | Norwegian |
da-DK | Dansk | Danish |
fi-FI | Suomi | Finnish |
pl-PL | Polski | Polish |
cs-CZ | Čeština | Czech |
tr-TR | Türkçe | Turkish |
ru-RU | Русский | Russian |
uk-UA | Українська | Ukrainian |
ar-SA | العربية | Arabic |
he-IL | עברית | Hebrew |
hi-IN | हिन्दी | Hindi |
bn-IN | বাংলা | Bengali |
ja-JP | 日本語 | Japanese |
ko-KR | 한국어 | Korean |
zh-CN | 中文 | Chinese (Simplified) |
zh-TW | 中文 | Chinese (Traditional) |
th-TH | ไทย | Thai |
vi-VN | Tiếng Việt | Vietnamese |
id-ID | Indonesia | Indonesian |
ms-MY | Melayu | Malay |
fil-PH | Filipino | Filipino |
ro-RO | Română | Romanian |
hu-HU | Magyar | Hungarian |
el-GR | Ελληνικά | Greek |
Troubleshooting
-
Agent keeps answering in English even though I selected Spanish.
Check that Supported languages actually contains
es-ES(ores-MX), that the Default is set to the same code, and that the widget has been re-published since you saved. Hard-refresh the page the widget lives on to invalidate the CDN cache. -
Auto-detect picks the wrong language. The
detect_languagetool is called on the first utterance only; a two-word greeting like “hola” may resolve to a low-confidence code. Have the visitor say a full sentence, or disable auto-detect and set a default for your primary market. - Visitor speaks an unsupported language. The agent switches to your default language and politely explains. If this happens often, add that language to Supported languages.