Multilingual Setup Guide

TTMA supports 22 languages out of the box. This guide covers how to configure your voice agent's language, choose the right voice, write an effective playbook in your target language, and handle callers who switch languages mid-call.

Supported languages

Each language is identified by a BCP-47 code. Set this code in your dashboard or config to lock the agent to that language. The special value auto lets the model detect and match the caller's language automatically.

LanguageBCP-47 CodeRecommended voices
Arabicar-EGCharon, Kore
Bengalibn-INPuck, Aoede
Dutchnl-NLOrus, Leda
English (US)en-USKore, Puck, Charon
Frenchfr-FRAoede, Achird
Germande-DECharon, Kore
Hebrewhe-ILKore, Puck, Charon
Hindihi-INSulafat, Puck
Indonesianid-IDLeda, Achird
Italianit-ITAoede, Orus
Japaneseja-JPLeda, Puck
Koreanko-KRKore, Puck
Mandarin Chinesezh-CNLeda, Orus
Polishpl-PLSulafat, Charon
Portuguese (Brazil)pt-BRAoede, Achird
Romanianro-ROVindemiatrix, Orus
Russianru-RUKore, Charon
Spanishes-USAoede, Puck
Thaith-THLeda, Puck
Turkishtr-TRSulafat, Achird
Ukrainianuk-UAKore, Orus
Vietnamesevi-VNLeda, Puck

How to set the language

There are three ways to set the language. The dashboard is the simplest for most users. All methods produce the same result - the agent speaks and listens in that language.

1. Dashboard (recommended)

Open the Voice tab in your TTMA dashboard. Under "Language", select from the dropdown. The change takes effect within 5 minutes on the next call.

2. Environment variable

Set NINJA_TALK_LANGUAGE=he-IL in your instance's .env file and restart the gateway. This is the boot default and is overridden by the dashboard setting.

3. Per-call via API (outbound only)

When placing outbound calls, write the task goal and script in the target language. The model follows the language of the prompt it receives. Combine with a language-specific playbook for best results.

# Example: set Hebrew via environment
NINJA_TALK_LANGUAGE=he-IL
NINJA_TALK_VOICE=Kore

Choosing a voice

All 30 available voices work in all supported languages. However, some voices sound more natural in certain languages. The table above lists recommended pairings based on production testing.

For gendered languages (Hebrew, Arabic, Russian, Polish, Hindi), the voice's gender determines the bot's grammatical forms. A female voice like Kore will use feminine first-person conjugation. A male voice like Charon will use masculine forms. This happens automatically - no extra configuration needed.

Tip: Listen to voice samples in the dashboard before choosing. A voice that sounds great in English may have a different character in another language. Test with a real call in your target language.

Playbook in your language

For best results, write the entire playbook (script, greeting, and tool descriptions) in the target language. The model produces more natural output when its instructions match the expected output language.

If you set the language to he-IL but write the playbook in English, the bot will still respond in Hebrew - but phrasing may sound translated rather than native. Writing in the target language from the start eliminates this.

// Example Hebrew greeting in dashboard:
"shalom, ani ha-sochenet ha-virtualit shel [Company].
eich ani yechola laazor lecha hayom?"

// The greeting field accepts text in any language.
// Write it exactly as you want the bot to speak it.

Mixed-language calls

When a caller switches languages mid-call (common in multilingual markets like Israel, India, or Quebec), the bot's behavior depends on your language setting:

  • auto - the bot follows the caller and switches to match. Best for markets where code-switching is common.
  • Fixed language (e.g. he-IL) - the bot stays in Hebrew regardless. Even if the caller mixes in English loan-words, the bot responds in Hebrew. The language rules explicitly instruct: "Never code-switch."

For businesses that must communicate in a specific language for legal or brand reasons, set a fixed language. For general customer service where callers may speak different languages, use auto.

Per-call language override (outbound)

When placing outbound calls via the Voice API, you can effectively override the language on a per-call basis by writing the task goal, script name, and facts in the target language. The bot will speak in whatever language it receives its instructions in.

POST /v1/voice/calls
{
  "from": "+16473705600",
  "to": "+972501234567",
  "triggeredBy": "billing-system",
  "task": {
    "goal": "להזכיר ללקוח על חיוב פתוח",
    "script": "payment-reminder-he",
    "facts": {
      "שם_לקוח": "דוד כהן",
      "סכום": "250 שקלים"
    }
  }
}

The deployment-level language setting still applies as the default. Per-call instructions in a different language override it for that specific call.

RTL languages: Hebrew and Arabic

Hebrew (he-IL) and Arabic (ar-EG) are right-to-left languages. On the voice side, RTL has no impact - speech is speech. However, there are considerations for the text portions of your setup:

  • Playbook editing - the dashboard text fields accept RTL text natively. Write Hebrew or Arabic directly.
  • Caller gender detection - both Hebrew and Arabic have rich grammatical gender. The bot auto-detects the caller's gender from their first 1-2 utterances and locks verb/adjective agreement for the rest of the call.
  • Bot self-reference - in Hebrew and Arabic, the bot's own gender forms are determined by the selected voice. Female voices (Kore, Aoede, Sulafat) use feminine self-reference. Male voices (Charon, Puck, Orus) use masculine.
  • Numbers and dates - the bot handles mixed LTR/RTL content (phone numbers, dates, amounts) automatically within speech.

Tips for best quality

Write prompts in the target language

The playbook, greeting, and tool descriptions should all be in the language you want the bot to speak. Mixed-language prompts produce awkward phrasing.

Use culturally appropriate names

If your bot introduces itself by name, choose a name that sounds natural in the target language. A bot named "Sarah" works in English and Hebrew but may feel out of place for a Japanese or Mandarin audience.

Test with native speakers

Place a test call and have a native speaker evaluate the bot's fluency, register (formal vs. informal), and gender agreement. Issues that are invisible to non-speakers can be immediately obvious to native ears.

Match formality to your market

French defaults to "vous" (formal). Japanese defaults to polite register (desu/masu). Indonesian uses "Anda". These defaults are built into the language rules and match typical business phone etiquette. The bot will mirror the caller's informality if they switch first.

Keep responses short

All language rules enforce "keep responses short and natural for phone." This applies across all languages. Long-winded answers sound worse in every language, but especially in tonal languages (Mandarin, Thai, Vietnamese) where rhythm matters.

Need help with a specific language?

If your language is not in the list above, the voice model supports 97 languages natively. Set the language to auto and write your playbook in the target language - the bot will follow.

Open dashboard