Skip to main content

Voice Agents

Admin-grant feature. Voice agents are gated behind the voiceAgents feature flag, granted per organization by Kaanha AI. Lifetime Deal plans do not include voice at any tier — voice is only available on subscription plans (Pro and above) once granted.
Kaanha AI voice agents are full-duplex, multi-turn AI callers — they answer your inbound numbers, place outbound calls, and share the same prompt + tools system as your text chatbots.

Provider Stack

The AI providers are platform-managed — there’s no bring-your-own-key for voice at any plan tier, so per-minute economics stay predictable. You choose from the options below; the underlying provider relationship is Kaanha AI’s.

Engine

The voice engine runs on Bolna, an open-source conversational-AI framework, customized for Kaanha AI’s telephony and reliability needs — chunked audio delivery for smooth playback, pre-synthesized welcome messages so the caller hears an instant clean greeting, and per-turn latency instrumentation so slow turns are visible rather than just “the call felt laggy.”

What Voice Agents Do

  • Answer inbound calls routed from a phone number you assign to the agent.
  • Place outbound calls from the agent’s dialer, or as part of an outbound campaign (see below).
  • Multi-turn conversation — full STT → LLM → TTS loop with interruption handling, end-of-utterance detection, and configurable silence timeouts.
  • Tool calls — the same built-in CRM/product tools your text chatbots use (order lookups, stock checks, appointment scheduling, and more), plus any tools you’ve enabled specifically for voice. Tool calls are HMAC-verified end to end.
  • Real-time transcription — every utterance persisted to the database; visible in the call’s history entry once the call ends.
  • Multi-agent delegation — a voice Lead Agent can call a Helper agent mid-call the same way a text Lead Agent does (see AI Chatbots → Multi-Agent Orchestration); voice’s delegation depth cap is 2 versus 3 for text, to keep latency in check.
  • Cross-channel follow-up — a voice agent can push a WhatsApp message to the caller’s contact mid-call or after the call ends.

Setting Up a Voice Agent

Navigate to Voice Agents and click + New Voice Agent. Configure it across its tabs:
  1. Agent — name, description, welcome message (the first thing the agent says when the call connects), language, and hangup prompt.
  2. LLM Config — provider (OpenAI/Anthropic), model, temperature, and related generation settings.
  3. Audio — STT/TTS provider and voice selection. Voices are previewable in the UI before you commit to one.
  4. Engine — task type (conversation, extraction, etc.) and any advanced engine-level configuration.
  5. Call — timing behavior: how long to wait after the caller stops speaking, interruption sensitivity, hangup-after-silence, max call duration, backchanneling (“mm-hmm” style acknowledgements), filler words, and ambient noise.
  6. Tools — enable built-in tools this agent can call mid-call.
  7. Team — multi-agent delegation settings (Lead/Helper/Solo), if the multiAgent feature is enabled for your org.
  8. History — past calls, transcripts, and latency/quality data once the agent has taken calls.
  9. Analytics — aggregate stats across all calls.
  10. Inbound — inbound-specific settings (e.g. matching a known caller against your CRM).
Saving snapshots the full configuration as a new version (see Agent Versioning below) and syncs it to the voice engine — the engine is ready to handle calls immediately.

Backing Up or Cloning a Voice Agent — Export Manifest

Just like a chat bot, a voice agent’s full configuration can be exported as a single JSON file — click Export manifest in the agent’s editor header. This is a read-only snapshot for backup or reference; re-importing it to create a new agent isn’t available yet.

Phone Number Assignment

Voice agents need a phone number to receive inbound calls or place outbound calls.
  1. Go to Phone Numbers.
  2. Purchase a number (subject to your plan’s allowance), or connect a number you already own from an external carrier via SIP (see below).
  3. Assign the number to a voice agent from the dropdown.
  4. The telephony webhook is auto-configured to route to the engine — this happens automatically on every save, so if the routing is ever deleted externally, saving the agent again repairs it.
You can reassign or release numbers at any time.

Telephony: Two Paths

Which path a call takes depends on the number’s provider, resolved automatically — you don’t have to configure this yourself:
  • Indian numbers (Vobiz) — the primary path for Indian DIDs. The call connects directly from the carrier to the voice engine; there’s no intermediate hop.
  • Twilio numbers — used for non-Indian numbers. The call is bridged through Twilio’s media-streaming infrastructure to the voice engine.
Both paths land in the same STT → LLM → TTS pipeline once connected — the difference is invisible to the caller and to how you configure the agent.

Inbound Call Flow

Webhook signature verification is fail-closed — calls from unverified sources are rejected.

Outbound Calls

Outbound calls require explicit recipient consent and are the customer’s legal responsibility to verify (see Compliance Considerations).
  • Single call: open the voice agent and use its dialer to place a call to a specific number, optionally pre-loading contact/deal context so the agent has memory of the relationship.
  • Bulk campaigns: create an Outbound Campaign (see Campaigns → Voice) — upload a contact list, set a calling window (respecting the campaign’s timezone), a concurrency limit, and a retry policy for no-answers. The campaign dialer sweeps the list automatically within your configured window.

AI Behavior & System Prompts

Voice agents share Kaanha AI’s text-chatbot prompt format. A good voice prompt:
  • States the agent’s identity (“You are Riya, a sales rep for Acme Inc.”).
  • Defines the task scope — task-specific agents only, per Meta’s policy on AI agents; the same principle applies to voice as to WhatsApp chat.
  • Lists what the agent must NOT do (don’t promise refunds, don’t quote prices, etc.).
  • Sets escalation triggers (“If the caller asks for a human, transfer immediately.”).
Example:
Debug a misbehaving agent by reading the call transcript in the agent’s History tab — every turn is logged, along with per-turn latency so you can spot where a call felt slow.

Testing Without a Real Phone Call

Two tools let you iterate on a voice agent without dialing a real number:
  • Browser test call — speaks directly to the engine from your browser’s microphone, full audio round-trip, no phone required.
  • Text chat simulation — a text-only conversation using the agent’s exact system prompt and provider, for quickly checking prompt behavior without any audio involved.

Welcome Message Pre-Synthesis

When you save a voice agent, the engine pre-synthesizes the welcome message and caches it so the caller hears a clean, immediate greeting before the live STT/LLM/TTS loop spins up. All three TTS providers (Sarvam, Deepgram Aura, ElevenLabs) support this.

Tool Calls

Tools let the agent invoke real backend functions mid-conversation — the same built-in CRM/product tool registry your text chatbots use, plus anything you’ve specifically enabled for voice in the agent’s Tools tab. Tool calls are HMAC-verified between the engine and the platform, and scoped to your organization — there is no cross-tenant tool execution.

Call Recording & Conversation Persistence

Agent Versioning

Every save creates a new version snapshot of the agent’s full configuration. Open Version History from the agent editor to:
  • Review past versions with their change summary and who saved them
  • Roll back to any prior version — publishing a version atomically restores that exact configuration and re-syncs the engine

Outbound Campaigns

Create a campaign under Campaigns → Voice to dial a list of contacts automatically:
  • Upload or select the contact list
  • Set the calling window (start/end time, in the campaign’s own timezone) so calls only go out when it’s appropriate to call
  • Set a concurrency limit (how many calls run at once)
  • Configure retry behavior for no-answers (exponential backoff, capped)
The campaign dashboard shows live progress — contacted, completed, failed, no-answer — as it works through the list.

Synthetic Monitoring

The platform runs an automatic health probe against every active voice agent every 15 minutes — checking the engine is reachable, the agent’s config is loaded correctly, and welcome-message synthesis works. If an agent fails two checks in a row, it’s flagged for review. You can see the current health status per agent from the admin system dashboard (super-admin only).

Content Safety

Voice agents pass every LLM input/output through the same content-safety filtering used by your text chatbots. If a flagged classification is returned:
  • The agent emits a safe fallback line instead of the LLM’s response.
  • The conversation is automatically routed to a human handler.
  • The flagged content is logged for compliance review.

AI Disclosure & Human Escalation

Unlike text chatbots (where the platform automatically injects a disclosure message), voice disclosure is currently the operator’s responsibility to include in your own welcome message or system prompt — for example, “This call may be handled by an AI assistant.” We recommend every voice agent’s welcome message make this clear, both as a matter of policy and of caller trust. Configure a HUMAN-style escalation phrase in your system prompt (e.g. “if the caller says ‘human’ or ‘representative’, transfer the call”) — the agent honors it and transfers or queues the caller accordingly. See /ai-disclosure for the platform’s full AI disclosure and system card.

Multi-Tenant Isolation

Every voice agent is scoped to your organization end to end:
  • API routes are org-scoped and authenticated.
  • The engine authenticates each agent operation against the org-scoped agent ID.
  • Inbound webhooks resolve the dialed number back to your organization before routing anywhere.
  • HMAC verification on every engine ↔ platform callback prevents cross-tenant spoofing.
There is no shared agent state across organizations.

Outbound SIP Trunking — External Carrier Integration

If you have phone numbers from an external carrier (Vobiz, Plivo, Exotel, Vonage, or any SIP provider) that you’d rather keep with that carrier, you can route calls from it into the platform via SIP instead of transferring the number. How it works: your carrier routes calls outbound via SIP to a per-organization SIP domain the platform generates for you. The platform receives the call and forwards it to the voice engine — the same path as a natively-purchased number. Setup:
  1. Go to Phone Numbers → Connect External Number.
  2. The platform generates an isolated SIP domain and credentials for your organization.
  3. Copy the SIP server, username, and password into your carrier’s SIP trunk / outbound route configuration.
  4. Confirm setup, then assign the number to a voice agent as usual.
Credentials are stored encrypted and scoped to your organization. Use Revoke to rotate or remove credentials at any time — the SIP domain stays provisioned, so regenerating is instant.

Compliance Considerations

Voice & Billing

Voice usage is metered against your plan’s monthly credit allowance (shared with AI messaging and SMS on Pro and above) — one credit covers roughly 6 seconds of call time. If you run out mid-cycle, you can top up with a credit pack at any time. See Billing & Plans for exact allowances per plan.

Troubleshooting

  • AI Chatbots — text counterpart with shared prompt + tools system, MCP tool connections, and bot manifest export
  • Billing & Plans — voice availability and credit allowance per plan
  • SMS Channel — shares the same number pool as voice on supported carriers
  • AI Disclosure — the platform’s AI disclosure and system card
  • Security & Compliance — TCPA, DNC, and multi-tenant isolation