Dialt
Developer documentation
Build a realtime voice experience
Dialt is a realtime voice layer you can deploy quickly and improve on your own data, through a simple, opinionated SDK built around your business goals and policies.
Choose your path
Recommended
Browser SDKWeb apps with microphone capture, echo cancellation and playback included. Optional WebRTC transport (experimental) for realtime-grade delivery over UDP on weak networks.
Headless
Python SDKServices and devices that already manage audio capture and playback.
Telephony
TwilioInbound phone calls through a maintained Media Streams bridge.
Protocol
WebSocket APIOther languages and custom media stacks with direct protocol control.
Core concepts
The Dialt primitives
- Session and audio lifecycle. The Browser SDK handles microphone capture, playback, interruption, reconnects and typed events.
- Client tools. Declare what the voice agent can call: name,
description, JSON parameters and execution policy. The basic loop is
tool_call→ host executes →tool_result. - Tool policies.
read_only: safe to execute speculatively.requires_permission: Dialt obtains spoken permission before sending the call.expected_duration: what the caller should hear, the answer directly for fast lookups or an acknowledgement first for anything that takes more than about a second.status_label: a safe description of pending work. - Background tools.
deferred: truelets long-running work detach from the voice turn. The host retains a stable handle and can later send progress, partial results, completion or cancellation. - Progress and partial results.
tool_progress: activity update; does not invoke the model.tool_partial_result: structured intermediate information.reply: trueasks Dialt to narrate that partial proactively. - Interactions. A partial can include an interaction when the background job needs a human decision. A resolver binds each answer to an exact client tool and arguments, making approvals and choices deterministic.
- Evidence-backed completion. Every result has
outcomeandverified. Onlysucceeded+verified: trueauthorizes Dialt to claim confirmed success. This prevents "I opened it" or "payment sent" claims without evidence. - Stable state and lifecycle events. Tool IDs, deferred handles, interaction IDs, acknowledgements and narration-state events let the client survive queuing, interruption, supersession and reconnects without guessing.
- Context injection and typed turns.
sendText: submit a user turn.injectContext: add host context.reply: true: request a proactive response to injected context.
The central design choice is deciding which work should be synchronous, backgrounded, proactively narrated, or require a user interaction. The Browser SDK guide, Background tools guide and WebSocket protocol cover those surfaces.
Browser quickstart
Four steps to your first conversation
- Install the SDK. Run
npm install @dialt/sdk. View it on npm. - Create a persistent key. Keep it on your backend; never ship it in browser JavaScript.
- Mint a scoped session credential. Your authenticated backend calls
POST /api/v1/session-keyswith the persistent key. - Connect the browser SDK. Pass the scoped credential to
DialtClient, then unlock audio, connect and start the microphone from a user gesture.
Guides and references
Go deeper
Conversation evalsTest a target agent with a simulated user in text or voice, then inspect transcripts, checks and linked sessions.
Background toolsLong-running jobs inside a live conversation: deferral, narrated progress, spoken permissions, completion voiceovers and failure semantics.
HTTP APISession credentials, available voices, and your session history: transcripts, response times and audio for every session on your account (the same data as the Sessions page).
Realtime protocolWebSocket operations, events and message formats.