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.
Configure per widget
In Widget → Customize → AI agent, enable voice chat. A Languages panel appears below the toggle with three controls.
| 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.