Skip to content
Guide

A Hindi and Malayalam phone agent on Wixzel Voice's sarvam engine

You will have two phone agents on Wixzel Voice, one speaking Hindi and one Malayalam, both on the sarvam engine: Sarvam's Saaras speech recognition, the Sarvam-105B language model and the Bulbul voice as one pipeline. With a SIP trunk already connected it takes about 20 minutes, in cURL. The sarvam engine costs $0.0623 per connected minute, about $0.19 for a three-minute call, billed per second from a prepaid balance, plus your carrier's rate for the line.

By · Published · Updated

Takes
About 20 minutes once a trunk is connected
Engine
sarvam
Engine time
$0.0623 per connected minute

What do you need before you start?

  • A Wixzel Voice API key with credit, exported as WIXZEL_API_KEY.
  • A SIP trunk with a number on it. For Indian numbers, a carrier such as Exotel or Vobiz, with KYC and any DLT registration finished: an account that has not finished them can hold a balance and still have every outbound call cleared.
  • curl, jq and uuidgen.

How do you build this on Wixzel Voice, step by step?

  1. 01Check the languages and voices the engine serves

    Ask the API rather than hardcoding either list:

    shell
    curl https://api.voice.wixzel.com/v1/engines/sarvam/languages \
      -H "Authorization: Bearer $WIXZEL_API_KEY"
    
    curl https://api.voice.wixzel.com/v1/engines/sarvam/voices \
      -H "Authorization: Bearer $WIXZEL_API_KEY"

    The languages endpoint returns 11 codes today: en-IN, hi-IN, bn-IN, gu-IN, kn-IN, ml-IN, mr-IN, od-IN, pa-IN, ta-IN, te-IN. Hindi is hi-IN and Malayalam is ml-IN. The voices are Bulbul v3 speaker names, such as priya, kavya and shubh; Sarvam publishes the names and nothing else, so audition a voice before you choose it.

  2. 02Create the Hindi agent

    Three settings carry the language. voice.stt.language pins recognition and speech to Hindi; the agent's language tells the model to reply in it; and the prompt and opening line are written the way the agent should sound. All three stages are Sarvam models, because the speech-to-text provider selects the pipeline and the other two must come from the same family.

    shell
    curl https://api.voice.wixzel.com/v1/agents \
      -H "Authorization: Bearer $WIXZEL_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Hindi reception",
        "language": "hi-IN",
        "system_prompt": "You answer the phone for Sharma Dental Clinic, in Hindi. Speak the everyday Hindi callers use, English words included. Keep replies to one or two short sentences.",
        "opening_message": "नमस्ते, शर्मा डेंटल क्लिनिक में आपका स्वागत है। बताइए, मैं आपकी क्या मदद करूँ?",
        "voice": {
          "stt": { "model": "sarvam/saaras-v3-realtime", "language": "hi-IN" },
          "llm": { "model": "sarvam/sarvam-105b" },
          "tts": { "model": "sarvam/bulbul-v3", "voice": "priya" }
        }
      }'

    Keep the id from the response as HINDI_AGENT_ID. A language or voice the engine does not serve is refused when the agent is created, with the valid ones listed in the error.

  3. 03Create the Malayalam agent

    The same shape, with ml-IN in both places and a Malayalam opening line:

    shell
    curl https://api.voice.wixzel.com/v1/agents \
      -H "Authorization: Bearer $WIXZEL_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Malayalam reception",
        "language": "ml-IN",
        "system_prompt": "You answer the phone for a dental clinic in Kochi, in Malayalam. Speak the everyday Malayalam callers use, English words included. Keep replies to one or two short sentences.",
        "opening_message": "നമസ്കാരം, കൊച്ചി ഡെന്റൽ ക്ലിനിക്കിലേക്ക് സ്വാഗതം. ഞാൻ എങ്ങനെ സഹായിക്കാം?",
        "voice": {
          "stt": { "model": "sarvam/saaras-v3-realtime", "language": "ml-IN" },
          "llm": { "model": "sarvam/sarvam-105b" },
          "tts": { "model": "sarvam/bulbul-v3", "voice": "kavya" }
        }
      }'

    Keep this id as MALAYALAM_AGENT_ID. One agent speaks one language: the sarvam engine has no automatic detection mode, so serving both groups of callers means one number per language on the way in, and choosing the agent per call on the way out.

  4. 04Route calls in, or place one out

    Give a number the Hindi agent for inbound calls, or ring someone with the Malayalam one:

    shell
    # Inbound: calls to this number reach the Hindi agent
    jq -n --arg agent "$HINDI_AGENT_ID" '{inbound_agent_id: $agent}' |
      curl -X PATCH https://api.voice.wixzel.com/v1/phone-numbers/$NUMBER_ID \
        -H "Authorization: Bearer $WIXZEL_API_KEY" \
        -H "Content-Type: application/json" \
        -d @-
    
    # Outbound: the Malayalam agent rings $TO (E.164, for example +91 and ten digits)
    jq -n --arg to "$TO" --arg agent "$MALAYALAM_AGENT_ID" --arg from "$NUMBER_ID" \
      '{to: $to, agent_id: $agent, from_number_id: $from}' |
      curl https://api.voice.wixzel.com/v1/calls \
        -H "Authorization: Bearer $WIXZEL_API_KEY" \
        -H "Idempotency-Key: $(uuidgen)" \
        -H "Content-Type: application/json" \
        -d @-

    Idempotency-Key is required on POST /v1/calls: a retry with the same key returns the original call instead of dialling twice.

  5. 05Test with the way your callers really talk

    Most callers mix English into Hindi or Malayalam: dates, numbers, brand names, words like "appointment" and "cancel". Sarvam's models cope with code-mixed speech such as Hinglish, within what the models handle, so write the prompt to allow it rather than forbid it.

    What the agent cannot do is follow a caller who switches wholly to another Indian language, because recognition is pinned to voice.stt.language when the call starts. Place a few calls with real phrasing before you route live traffic, and read what was heard in the transcript from GET /v1/calls/{id}.

What does this build cost on Wixzel Voice?

Engine time for 3-minute calls on the sarvam engine at $0.0623 per connected minute: about $0.19 per call. Telephony is your own trunk at your carrier’s rate and is not included.

Monthly engine cost for this guide’s build
Calls per monthConnected minutesEngine cost per month
5001,500$93.45
2,5007,500$467
10,00030,000$1,869

The sarvam engine is $0.0623 per connected minute including the orchestration fee; the classic engine, for comparison, is $0.0867, so a Hindi or Malayalam minute on Sarvam costs less than an English one on classic. Each stage is metered in its own unit while the call is live, so a quiet call costs less than the estimate and a talkative one more. Your carrier bills the line separately.

Prepaid, with no subscription and no free tier: add credit from $5 and usage spends it. Estimate your own mix.

Which Wixzel Voice limits apply to this build?

  • One language per agent. The sarvam engine has no automatic language detection, so a caller who switches wholly to another language is not followed.
  • Sarvam processes speech and text in India during the call. The call log, the transcript and any recording are stored on servers in Finland.
  • Bulbul voices come as names only, with no gender or accent descriptions. Auditioning one means a test call, which rings a real phone and spends credit.
  • Indian carriers gate outbound calling behind KYC and often DLT registration. A call your carrier clears for that reason fails at the carrier, and nothing on the platform side can fix it.
  • Five calls can be live at once per account by default, raised on request.

Frequently asked questions

How do I build a Hindi phone agent on Wixzel Voice?
Create an agent on the sarvam engine with voice.stt.language and the agent's language set to hi-IN, a Hindi opening line and a Bulbul voice, then give a number its inbound_agent_id or place a call with POST /v1/calls. It holds phone calls in Hindi over your SIP trunk, or sessions in your web and mobile apps over a WebSocket, at $0.0623 per connected minute.
Can an AI phone agent speak Malayalam?
Yes. Set voice.stt.language and the agent's language to ml-IN on a sarvam agent, write the opening line in Malayalam, and pick a Bulbul voice. Recognition, the language model and the voice all run on Sarvam's models, which are built for Indian languages.
Can one agent speak both Hindi and Malayalam?
No. The recognition language is fixed per agent when the call starts, and the sarvam engine has no detection mode. Create one agent per language and route each number, or each outbound call, to the right one.
Does a sarvam agent on Wixzel Voice understand Hinglish?
Within what Sarvam's models handle, yes: they cope with code-mixed speech, such as English words inside Hindi sentences. Test with real callers' phrasing before going live, and read the transcripts to see what was heard.
Is Indian call data kept in India?
Sarvam processes speech and text in India for the duration of the call. The call log, transcript and any recording are stored in Finland. The Privacy Policy and DPA list every processor and location.

Where to read more

  • Voice enginesdocs

    The two voice shapes, the voice rosters and the language endpoints.

  • Compose a voice enginedocs

    Families, model ids and how a composed minute is priced.

  • SIP trunksdocs

    Exotel and Vobiz setup, and the KYC and DLT checks.

  • Agentsdocs

    Every agent field and where its valid values come from.

APIs for agentic telephony

About Wixzel Voice

Wixzel Voice is a voice AI API for building AI agents that place and answer real phone calls over your own SIP trunk, or talk to people in your web and mobile apps. One API key and one prepaid balance cover every voice engine, billed per second of actual usage.