> ## Documentation Index
> Fetch the complete documentation index at: https://www.bolna.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Build a Bengali voice agent on Bolna

> Build a Bengali voice agent on Bolna: the transcribers and voices that support Bengali, its language code, starting calls in Bengali, and an API example.

A Bengali voice agent on Bolna is a regular agent whose transcriber (speech-to-text) and voice (text-to-speech) are both set to Bengali, with a prompt written in Bengali script. This page lists the providers whose Bolna docs confirm Bengali support, the language code to send, and a minimal API example.

Bolna's language code for Bengali is `bn`. Bengali is one of the languages Bolna [detects automatically](https://www.bolna.ai/docs/customizations/supported-languages#languages-with-automatic-detection) mid-call.

If you want one agent that handles both English and Bengali on the same call, start here for the Bengali side, then follow [Set up multilingual voice AI agents](https://www.bolna.ai/docs/customizations/multilingual-languages-support). For every language, see the [languages overview](https://www.bolna.ai/docs/customizations/languages/overview).

***

## Choose a Bengali transcriber

The transcriber turns the caller's Bengali speech into text. Send the plain code `bn` as `transcriber.language`, not a locale such as `bn-IN` ([Create Agent](https://www.bolna.ai/docs/api-reference/agent/v2/create.md#transcriber)).

| Provider | `provider` / `model` | Bengali notes |
| - | - | - |
| [Sarvam](https://www.bolna.ai/docs/sarvam-transcriber.md) | `sarvam` / `saaras:v4` | Built for Indian languages and code-mixed speech. `saaras:v4` is Sarvam's recommended model and the only Sarvam model that reads `keywords`. |
| [Soniox](https://www.bolna.ai/docs/soniox.md) | `soniox` / `stt-rt-v6` or `stt-rt-v5` | Bengali as a single language, or the multilingual option for callers who mix English and Bengali in one sentence. |
| [Gemini](https://www.bolna.ai/docs/gemini-transcriber.md) | `gemini` / `gemini-3.5-transcribe-live` | Bengali is in its supported language list. Bolna hints Bengali for the whole call. |

For callers in India, the Sarvam page calls Sarvam usually the strongest transcriber choice. Compare all transcribers in [Choosing a speech-to-text provider](https://www.bolna.ai/docs/concepts/choosing-speech-to-text.md).

***

## Choose a Bengali voice

The voice (synthesizer) speaks the agent's replies. Most providers require `language` inside `provider_config`, so set it to `bn` ([Create Agent](https://www.bolna.ai/docs/api-reference/agent/v2/create.md#synthesizer)).

| Provider | `provider` / `model` | Bengali notes |
| - | - | - |
| [Sarvam](https://www.bolna.ai/docs/sarvam-voice.md) | `sarvam` / `bulbul:v4-flash` or `bulbul:v3` | `bulbul:v4-flash` has 3 Bengali voices, each built for one use case. `bulbul:v3` has 16 voices that work in every Bulbul language. `language` is required. |
| [Maya](https://www.bolna.ai/docs/maya.md) | `maya` / `Maya 2 Native` | Two voices, `Ananya` and `Arjun`, both speak Bengali. `language` is optional and defaults to `en`, so set `bn`. |
| [Soniox](https://www.bolna.ai/docs/soniox-voice.md) | `soniox` / `tts-rt-v2` | Bengali is one of its ten Indian languages. `language` is required. |
| [Navana](https://www.bolna.ai/docs/navana.md) | `navana` / `navana-tts` or `navana-tts-fast` | Every Navana voice speaks Bengali. `language` is required, so set `bn`. |
| [ElevenLabs](https://www.bolna.ai/docs/elevenlabs-voice.md) | `elevenlabs` / `eleven_v4_turbo` or `eleven_v3_conversational` | Both models support 74 languages, including Bengali ([September 2026](https://www.bolna.ai/docs/changelog/september-2026.md) and [August 2026](https://www.bolna.ai/docs/changelog/august-2026.md) changelogs). Also supports [pronunciation lists](https://www.bolna.ai/docs/customizations/pronunciation.md). |

Voice catalogs change over time. Confirm a valid `model` and `voice_id` pair with [List voices](https://www.bolna.ai/docs/api-reference/voice/get_all.md), or preview voices in the [Languages tab](https://www.bolna.ai/docs/agent-setup/audio-tab.md). See [Choosing a text-to-speech provider](https://www.bolna.ai/docs/concepts/choosing-text-to-speech.md) for a wider comparison.

> [!NOTE]
>
> On Sarvam `bulbul:v4-flash`, the spoken language follows the script of the text, not `language`. Keep the prompt in Bengali script and the voice a Bengali voice. A v4 Flash voice id names its language, as `<persona>_bn_<use case>`.

***

## Write the prompt for Bengali

* **Write in Bengali script, not romanized Bengali.** `নমস্কার! আপনি কেমন আছেন?` rather than `Nomoskar! Apni kemon achhen?`. Native script gives more accurate pronunciation and stops the text being treated as English.
* **Keep common English loanwords in Latin script.** Callers say "order", "OTP" and "support ticket" in English, so keep those words as they are inside Bengali script text instead of forcing a pure Bengali translation.
* **Set gender and politeness explicitly.** These are often carried by verb forms, so name the forms you want for the agent's persona rather than writing "be polite".
* **Read alphanumerics character by character, in English.** For OTPs, registration numbers and order IDs, this avoids misheard and mispronounced digits.
* **Leave language switching out of the prompt.** Bolna switches languages itself.

The full guidance, with examples, is in [Writing prompts in non-English languages](https://www.bolna.ai/docs/writing-prompts-in-non-english-languages.md).

***

## Create a Bengali agent over the API

This uses the same body shape as the [API quickstart](https://www.bolna.ai/docs/quickstarts/api.md), with Sarvam for both transcription and voice.

**1. Write the agent config**

Save this as `agent.json`:

```json theme={"system"}
{
  "agent_config": {
    "agent_name": "Bengali Support Agent",
    "agent_welcome_message": "নমস্কার! আমি আপনাকে কীভাবে সাহায্য করতে পারি?",
    "tasks": [{
      "task_type": "conversation",
      "toolchain": { "execution": "sequential", "pipelines": [["transcriber", "llm", "synthesizer"]] },
      "tools_config": {
        "llm_agent": {
          "agent_type": "simple_llm_agent",
          "agent_flow_type": "streaming",
          "llm_config": { "provider": "openai", "model": "gpt-4.1-mini", "max_tokens": 150, "temperature": 0.2 }
        },
        "transcriber": {
          "provider": "sarvam",
          "model": "saaras:v4",
          "language": "bn",
          "stream": true,
          "endpointing": 500,
          "keywords": "Bolna, PhonePe, Flipkart",
          "context": "Inbound support line for an electronics retailer in India. Callers ask about order status and returns, and often read out order numbers."
        },
        "synthesizer": {
          "provider": "sarvam",
          "provider_config": {
            "voice": "Priya",
            "voice_id": "priya",
            "model": "bulbul:v3",
            "language": "bn",
            "speed": 1.0
          },
          "stream": true,
          "buffer_size": 150
        },
        "input": { "provider": "plivo", "format": "wav" },
        "output": { "provider": "plivo", "format": "wav" }
      },
      "task_config": { "call_terminate": 90, "hangup_after_silence": 10 }
    }]
  },
  "agent_prompts": {
    "task_1": {
      "system_prompt": "আপনি একজন সহায়ক সাপোর্ট এজেন্ট। সংক্ষেপে উত্তর দিন।"
    }
  }
}
```

The voice is `priya`, one of the 16 `bulbul:v3` voices that work in every Bulbul language. To use one of the 3 Bengali `bulbul:v4-flash` voices instead, set `model` to `bulbul:v4-flash` and take the `voice` and `voice_id` pair from [List voices](https://www.bolna.ai/docs/api-reference/voice/get_all.md). `sampling_rate` and `encoding` are left out because Bolna sets them for Sarvam to match the telephony provider.

**2. Create the agent**

```bash curl theme={"system"}
curl https://api.bolna.ai/v2/agent \
  -H "Authorization: Bearer $BOLNA_API_KEY" \
  -H "Content-Type: application/json" \
  -d @agent.json
```

```python Python theme={"system"}
import os, urllib.request, json

with open("agent.json") as f:
    body = json.load(f)

req = urllib.request.Request(
    "https://api.bolna.ai/v2/agent",
    data=json.dumps(body).encode(),
    headers={"Authorization": f"Bearer {os.environ['BOLNA_API_KEY']}",
             "Content-Type": "application/json"},
)
print(json.load(urllib.request.urlopen(req)))
```

The response contains the new `agent_id`.

**3. Place a test call**

Call the agent with [`POST /call`](https://www.bolna.ai/docs/api-reference/calls/make), as in the [API quickstart](https://www.bolna.ai/docs/quickstarts/api.md), and check the transcript with [`GET /executions/{id}`](https://www.bolna.ai/docs/api-reference/executions/get_execution).

To use another provider, swap the `transcriber` or `synthesizer` block for one from the provider's page. Every combination is validated when you create the agent: an unsupported transcriber `model` and `language` pair returns `400 Provided language: <language> is not available for the model: <model>`.

***

## Improve recognition with keywords and context

Brand names, product names and place names are where Bengali transcription most often goes wrong. Bolna has two transcriber fields for this:

* `keywords`: a comma-separated list of terms callers say.
* `context`: a sentence or two describing the call.

Support for Bengali transcribers:

* **Sarvam**: `keywords` on Sarvam needs `saaras:v4`, and takes up to 50 terms of up to 64 characters each. `context` works on every Saaras model.
* **Soniox**: reads both. `context` can run to about 10,000 characters.
* **Gemini** is not in the provider support table for these fields.

> [!NOTE]
>
> Sarvam transcribes English words in the native script of the call's language. On a Bengali agent, a boosted term such as `PhonePe` can come back in Bengali script rather than Latin script.

See [Keywords and context](https://www.bolna.ai/docs/customizations/asr-keywords-and-context.md) for the full provider support table and how to write good terms.

***

## Fix pronunciation of numbers and names

A pronunciation list tells the voice how to say a word: an acronym, a brand name, a place name, or a number. Pronunciation lists work on [ElevenLabs](https://www.bolna.ai/docs/elevenlabs-voice.md) and on [Cartesia](https://www.bolna.ai/docs/cartesia.md) `sonic-3` and newer; of these, only ElevenLabs is confirmed for Bengali. On other providers the list is ignored.

Write how a word should sound in Bengali script, and keep in mind that each language has its own list. See [Control how your agent pronounces words](https://www.bolna.ai/docs/customizations/pronunciation.md) for the dashboard steps, the `pronunciation_rules` API field and limits.

***

## Serve Bengali and English on one agent

Many callers move between Bengali and English. Bolna handles this in two ways:

* **Code-mixing within a sentence.** Sarvam and Soniox transcribe callers who mix English into Bengali; on Soniox, pick the multilingual option. A sentence with a few English words is still treated as Bengali.
* **A full language switch.** Add both English and Bengali to one agent with [`multilingual_config`](https://www.bolna.ai/docs/customizations/multilingual-config-reference), each with its own transcriber, voice and prompt. Bengali is one of the languages Bolna [detects automatically](https://www.bolna.ai/docs/customizations/supported-languages#languages-with-automatic-detection), so with the default "requested or auto detected" trigger the agent follows a caller who moves into Bengali. The [multilingual quickstart](https://www.bolna.ai/docs/quickstarts/multilingual.md) shows the API shape.

On a multilingual agent, you can also:

* [Start a call in Bengali](https://www.bolna.ai/docs/customizations/start-call-in-language.md) with `"agent_data": { "language": "bn" }` on `POST /call`, or an `agent_language` column set to `bn` in a batch CSV. Inbound calls can return `agent_language` from your caller data source.
* Let system messages such as the hangup and "are you still there?" checks [follow the active language](https://www.bolna.ai/docs/customizations/auto-switch-multilingual-messages.md).
* Read [How language switching works](https://www.bolna.ai/docs/customizations/language-switching-behavior.md) for what does and doesn't trigger a switch.

***

## Phone numbers for Bengali agents in India

* [Buy an Indian number](https://www.bolna.ai/docs/buying-phone-numbers) in the dashboard through Plivo or Vobiz.
* For commercial or telemarketing calls in India, read [How to get 140 & 160-series phone numbers in India](https://www.bolna.ai/docs/obtaining-regulated-phone-numbers.md) for the TRAI and DLT requirements.
* To use numbers from your own carrier, connect it with a [SIP trunk](https://www.bolna.ai/docs/sip-trunking/overview#using-sip-trunks-in-india).

***

## Next steps

> [card] [Languages overview](https://www.bolna.ai/docs/customizations/languages/overview)
>
> Every language with a guide, and its providers

> [card] [Multilingual setup](https://www.bolna.ai/docs/customizations/multilingual-languages-support)
>
> Indian language support by provider, and per-language voices and prompts

> [card] [Sarvam speech-to-text](https://www.bolna.ai/docs/sarvam-transcriber.md)
>
> Saaras models, language codes and biasing limits

> [card] [Sarvam text-to-speech](https://www.bolna.ai/docs/sarvam-voice.md)
>
> Bulbul models and voice catalogs per language

> [card] [Start a call in a language](https://www.bolna.ai/docs/customizations/start-call-in-language.md)
>
> Pick the opening language per call, batch row or inbound caller

> [card] [How language switching works](https://www.bolna.ai/docs/customizations/language-switching-behavior.md)
>
> What does and doesn't trigger a mid-call switch


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.