Language switches get a second try
October 13, 2026 · platform
When a caller changes language, VoiceThere starts the speech models for the new language. Usually that takes a few seconds, but now and then a start stalls. Until now the switch gave up after 30 seconds and the caller's speech went to the old language's recognizer without anyone saying so.
Now the caller hears what is going on. As soon as a switch has to start the models, the agent speaks a holding message in the current voice that names the target, for example "One moment, switching to German." It follows your wait message mode: after the caller stops talking by default, at once with immediate, and not at all with off. Texts you write yourself can use a {language} placeholder for the language name.
Each attempt waits 20 seconds. If the models are not running by then, the holding message plays again and the switch is requested once more. Whatever the caller says in the meantime is held, so nothing is lost if the second attempt works.
After about 40 seconds with no models, your agent receives voice_language_switch_failed with reason: "language_unavailable", the language the call stays in (fallbackLanguage) and the number of attempts. The event arrives before the held speech is transcribed in the previous language, so your agent can tell that the next transcript comes from the old model. With the wait message turned on, the caller hears a short sentence in the old voice saying the language is not available right now and that the call continues in the previous one. Built-in sentences exist for English, German, Spanish, French, Italian, Portuguese, Dutch and Polish.
Switches your agent starts with setVoiceLanguage are bounded the same way and resolve with reason: "language_unavailable" when the models never start. The language-switch agent template speaks the same holding message and the unavailable notice, and it will reach you with the next @voicethere/agent release.
Read more
- Switching language mid-conversation describes the holding message, the two attempts, the new event fields and what happens to held speech.
- System log events lists the
language_switch.retryandlanguage_switch.unavailable_messagelines, therepeatflag onlanguage_switch.wait_messageand the extra fields onlanguage_switch.failed.