DvaarikVoice API

Integrations

Every carrier speaks a different dialect

Twilio sends base64 μ-law wrapped in JSON. Vonage sends raw binary. Exotel uses snake_case and throws away anything under 100 milliseconds. They all flush playback differently, and getting that flush wrong is why callers hear an agent talking over them. Setu is an open-source bridge that speaks all of them and hands the voice engine plain PCM16.

one command
export DVAARIK_API_KEY=dvk_live_...
export AGENT_PROMPT="You are Riya, the receptionist at Sunrise Dental."
npx @dvaarik/setu

MIT licensed · github.com/dvaarikai/setu

Pick your provider

Each guide gives the exact wire format, the frame that flushes queued playback when a caller interrupts, and the one detail that costs an afternoon if nobody warns you about it.

Live means we run that adapter ourselves on real calls every day — today that is Exotel. Documented means the adapter is written from the vendor's own published reference and reviewed, but we have not personally put a paid call through it. If you do, open an issue either way: that label should tell the truth.

Why a bridge at all?

A voice agent is four hard problems — hearing, thinking, speaking, and knowing when to stop talking. The Voice API solves those four behind one WebSocket. The fifth problem is the carrier plumbing, and it has nothing to do with your product: it is byte formats, base64 envelopes, sample rates and buffer flushes, and it reliably eats about a week.

Carriers queue seconds of audio ahead of the caller's ear. When someone interrupts, the agent stops generating — but the caller keeps hearing whatever is already queued unless you send that carrier's specific flush frame. Three providers on this page spell that frame three different ways, one of them under a completely different key. That difference is the entire reason this library exists.

Setu is MIT licensed and its engine interface is public, so it is not locked to Dvaarik — point it at another voice backend and it still works. That is deliberate. A bridge that only crosses to one bank is not a bridge.