Voice agents
Build phone-based AI agents that handle inbound calls, outbound calls, and campaigns.
Voice agents handle real telephony — inbound calls to your business number, outbound calls in campaigns, and warm transfers to human agents. Powered by Pipecat, an open-source voice pipeline that orchestrates STT, LLM, and TTS in a sub-second loop.
Create a voice agent
Dashboard → Agents → New agent → Voice.
Required fields:
- Name — internal label.
- System prompt — the behavior you want. Treat it like a job description: who the agent is, what it can do, what it shouldn't say, when to transfer.
- Greeting — the first thing the agent says when the call connects.
- LLM provider + model — see Models.
- STT provider + model — speech-to-text. Deepgram nova-3 is a great default for English; for non-English see your provider's language list.
- TTS provider + voice — text-to-speech. Cartesia and ElevenLabs offer the most natural voices; Deepgram and OpenAI are cheaper.
Optional but worth setting:
- Max call duration — auto-hang up after N seconds. Default 600 (10 min).
- End-call phrases — words that trigger termination ("goodbye", "talk to you later").
- Interruption sensitivity — how easily the agent stops talking when the user interrupts. Default 0.6.
- Background noise filter — toggle on for noisy callers.
- Recording — on by default. Recordings are uploaded to your S3 after each call and surfaced on the call detail page.
Models
LLM providers
OpenAI, Anthropic, Google, Groq, Azure, DeepSeek, Mistral, Together, Fireworks, Cerebras, Perplexity, Grok, OpenRouter.
For voice we recommend:
- GPT-4o-mini or Claude Haiku — fast, cheap, very good for most flows.
- GPT-4o or Claude Sonnet — reasoning-heavy use cases.
- Groq Llama 3.3 70B — the lowest first-token latency we've measured, great for keeping conversations snappy.
STT (speech-to-text) providers
Deepgram, Azure, AWS, Sarvam, OpenAI, Google, Groq, AssemblyAI, ElevenLabs, Gladia.
TTS (text-to-speech) providers
ElevenLabs, Cartesia, Deepgram, Azure, AWS, Sarvam, OpenAI, Google, LMNT, Rime, Groq, Fish, Hume.
Phone numbers
A voice agent needs a phone number to receive calls or place outbound calls.
Dashboard → Phone numbers:
- Buy a number — pick a country and area code; Nerva provisions a number via Twilio.
- Bring your own — paste your Twilio or Plivo credentials and we'll configure your existing numbers.
Each number can be assigned to one agent at a time. Reassign at any time.
Inbound calls
Once a number is assigned to an agent, callers will hear the agent's greeting on connect. The full pipeline runs entirely on Nerva infrastructure:
Each call appears in Conversations during and after — you can listen to the recording, read the transcript, and see analysis (sentiment, summary, extracted data) once post-processing completes.
Outbound calls
Two ways to place outbound calls:
- Single dial —
POST /api/agents/{id}/dialwith a phone number. Useful for one-off triggers from your backend. - Campaigns — upload a CSV of contacts and Nerva will dial them at a configurable concurrency. Get real-time progress and per-contact status. See Dashboard → Campaigns.
Tools
Voice agents can call tools mid-conversation — to look up data, book appointments, transfer the call, etc.
Built-in tools:
- End call —
end_callwith a reason. - Transfer call —
transfer_callto a phone number. - Knowledge base lookup — RAG against documents you upload.
- Custom webhook — POST any URL with extracted parameters and use the response in conversation.
CRM tools (when a CRM integration is attached): lookup_contact,
check_availability, book_appointment, get_pipelines. See
CRM integrations.
Knowledge base
Upload PDFs, web pages, or paste text — Nerva chunks, embeds, and stores them in a vector store. The agent can retrieve relevant chunks during a call to answer questions about your specific business.
Dashboard → Knowledge bases → New to create one, then attach it to your agent in the editor.
Post-call analysis
Every completed call automatically gets:
- Transcript — searchable, timestamped per turn.
- Recording — uploaded to S3, played back from the call detail page.
- Analysis — summary, outcome (successful / unsuccessful / escalated / missed), action items, sentiment, custom data extraction.
- Cost breakdown — per-provider costs (STT, LLM, TTS, telephony).
- Latency metrics — TTFB per turn for each provider.
Customize the analysis schema in the agent editor's Analysis tab — define
custom fields the LLM should extract from each call (e.g., lead_qualified,
appointment_time, complaint_category).
Webhooks
Subscribe to real-time events when calls happen:
call.started,call.ended,call.analyzed,call.failed
See Webhooks and Event reference.
See also
- Chat agents — the chat-channel equivalent
- CRM integrations — sync call data to your CRM
- Webhooks — push events to your backend in real time