> ## 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 an Odia voice agent on Bolna

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

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

Bolna's language code for Odia is `od`, except on Maya, which takes `or`. Odia is not 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 Odia on the same call, start here for the Odia 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 an Odia transcriber

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

| Provider | `provider` / `model` | Odia 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`. |

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 an Odia voice

The voice (synthesizer) speaks the agent's replies. Set `language` inside `provider_config` to `od` on Sarvam and `or` on Maya ([Create Agent](https://www.bolna.ai/docs/api-reference/agent/v2/create.md#synthesizer)).

| Provider | `provider` / `model` | Odia notes |
| - | - | - |
| [Sarvam](https://www.bolna.ai/docs/sarvam-voice.md) | `sarvam` / `bulbul:v3` | `bulbul:v4-flash` has no Odia voices, so use `bulbul:v3` and its 16 voices. `language` is required. |
| [Maya](https://www.bolna.ai/docs/maya.md) | `maya` / `Maya 2 Native` | Two voices, `Ananya` and `Arjun`, both speak Odia. `language` is optional and defaults to `en`, so set `or`. Maya uses `or` for Odia, not Bolna's `od`. |
| [Navana](https://www.bolna.ai/docs/navana.md) | `navana` / `navana-tts` or `navana-tts-fast` | Every Navana voice speaks Odia. `language` is required: set `od`, which Bolna sends to Navana as its own code `or`. |

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.

***

## Write the prompt for Odia

* **Write in Odia script, not romanized Odia.** `ନମସ୍କାର! ଆପଣ କେମିତି ଅଛନ୍ତି?` rather than `Namaskar! Apana kemiti achhanti?`. 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 Odia script text instead of forcing a pure Odia 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 an Odia 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": "Odia 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": "od",
          "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": "od",
            "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. `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 Odia 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 Odia 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.

> [!NOTE]
>
> Sarvam transcribes English words in the native script of the call's language. On an Odia agent, a boosted term such as `PhonePe` can come back in Odia 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.

***

## Serve Odia and English on one agent

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

* **Code-mixing within a sentence.** Sarvam handles switching between English and an Indian language inside a single sentence. A sentence with a few English words is still treated as Odia.
* **A full language switch.** Add both English and Odia to one agent with [`multilingual_config`](https://www.bolna.ai/docs/customizations/multilingual-config-reference), each with its own transcriber, voice and prompt. Odia is not in the [automatic detection](https://www.bolna.ai/docs/customizations/supported-languages#languages-with-automatic-detection) list, so don't rely on a mid-call switch into Odia. Start Odia callers in Odia instead, as below. 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 Odia](https://www.bolna.ai/docs/customizations/start-call-in-language.md) with `"agent_data": { "language": "od" }` on `POST /call`, or an `agent_language` column set to `od` 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.

***

## Notes

* Bolna's code for Odia is `od`, on the transcriber, on Sarvam's voice and in `multilingual_config`. Maya is the exception: its `provider_config.language` takes `or`.
* On Sarvam, use `bulbul:v3` for Odia. `bulbul:v4-flash` has no Odia voices.
* Odia is not one of the languages Bolna detects automatically mid-call. Start Odia callers in Odia, or make Odia the agent's default language.
* Sarvam is the only transcriber whose page lists Odia. The [Cartesia](https://www.bolna.ai/docs/cartesia.md) page notes that Odia is not yet selectable in Bolna on `sonic-3.6`.

***

## Phone numbers for Odia 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.