How to Write a System Prompt for AI Voice Calls
When someone calls a phone number you've configured for inbound AI, the AI follows whatever you put in the systemPrompt field. There's no training step — the prompt IS the AI's brain for that call. A vague prompt produces vague (or hallucinated) answers; a structured prompt produces accurate, on-brand replies.
The structure that works
Every reliable voice-AI prompt has the same four sections. Each one does a specific job: facts the AI can reference, exact numbers it must quote, behavior rules for the call, and explicit prohibitions. Skip any section and the AI fills the gap by inventing details.
Facts the AI is allowed to cite — products, services, company background. The AI never goes beyond what's in here.
Exact numbers. If the AI doesn't see a real price here, it will invent “tiered plans” or “starting at $X” on its own.
Call-flow guardrails — tone, what to do when the AI doesn't know something, how to end the call.
Explicit prohibitions. “Never invent pricing.” “Never promise outcomes.” This is your last line of defense against hallucination.
Worked example — AgentCall
Here's a complete prompt for an inbound AI on the AgentCall number itself, using real pricing from our llms.txt. Notice every claim the AI can make is grounded in a fact stated in the prompt — there's no room for it to make things up.
You are the AI receptionist for AgentCall, a phone-number API built for AI agents.
WHAT WE DO:
- Provision real, non-VoIP phone numbers (US and Canada).
- Send and receive SMS, including automatic OTP code extraction.
- Make outbound voice calls and answer inbound calls — including AI voice calls where an AI handles the conversation.
- Hosted MCP server at api.agentcall.co/mcp for Claude Desktop, Cursor, and Windsurf.
PRICING:
- Free plan: 1 number, 10 SMS/month, 5 voice minutes/month, 5 OTP extractions/month. $0/month.
- Pro plan: $19.99/month base.
- Local/mobile numbers: $2.00/month each
- Toll-free numbers: $2.50/month each
- 1 SIM number included; additional SIMs $8.00/month each
- SMS outbound: $0.015/message
- Voice outbound: $0.035/minute
- AI voice calls (in or out): $0.40/minute
- Call recording: $0.01/minute on top of voice
- No setup fees. Cancel anytime.
INSTRUCTIONS:
- Use only the WHAT WE DO and PRICING sections above. Never make up features or numbers.
- If asked about something not listed, say "Let me have someone follow up on that — can I get your name and the best email or number to reach you?"
- Keep replies under 2 sentences.
- If the caller says goodbye, thank them and end the call promptly.
NEVER:
- Invent pricing tiers, discounts, or promotions that aren't listed above.
- Promise specific delivery dates or outcomes.
- Claim features we don't have (e.g. video calling, fax, MMS).
- Stay on the line after the caller has said goodbye.Use a Template Instead of Starting from Scratch
We ship 5 production-ready prompt templates as a public API endpoint. Each template uses the 4-section structure above, with [BRACKETED] placeholders for your business details. Pick the template closest to your use case, replace the placeholders, and pass it as the systemPrompt on POST /v1/numbers/:id/inbound-config.
Endpoint
Public — no authentication required. Returns all 5 templates with first message, system prompt, recommended voice, and suggested max duration.
curl https://api.agentcall.co/v1/calls/prompt-templatesAvailable templates
receptionistReceptionist (Front Desk)General-purpose front-desk answering. Start here if you're not sure which template fits.
lead-qualifierLead Qualifier (Sales)Inbound B2B sales calls. Gathers BANT data and routes serious prospects to a human.
appointment-bookerAppointment BookerCaptures name, contact, and preferred slot, then promises a confirmation email. The AI doesn't touch a calendar — a human or backend finalizes.
customer-supportCustomer Support (FAQ Deflection)Answers a defined FAQ. Escalates anything outside the FAQ to a human. Reduces support load without breaking trust.
call-screenerCall Screener (Anti-Spam)Filters unsolicited calls before they reach you. Useful for solo founders and anyone whose number gets scraped.
Fetch a template and configure inbound AI
Full Node.js flow — pull the template, fill in your placeholders, and attach it to a supported number:
import AgentCall from 'agentcall'
const client = new AgentCall(process.env.AGENTCALL_API_KEY)
// 1. Fetch templates (public, no auth)
const res = await fetch('https://api.agentcall.co/v1/calls/prompt-templates')
const { templates } = await res.json()
// 2. Pick the receptionist template
const template = templates.find((t) => t.id === 'receptionist')
// 3. Fill in your business details
const systemPrompt = template.systemPrompt
.replaceAll('[BUSINESS_NAME]', 'Acme Plumbing')
.replaceAll('[BUSINESS_TYPE]', 'a residential plumbing company')
.replace(
'[2-3 sentences describing your products or services and target customers]',
'We do emergency plumbing, drain cleaning, and water-heater installs in the Austin TX area. Most jobs are scheduled within 24 hours.'
)
const firstMessage = template.firstMessage.replaceAll(
'[BUSINESS_NAME]',
'Acme Plumbing'
)
// 4. Attach to your number — incoming calls now answered by AI
await client.numbers.configureInboundAi('num_abc123', {
systemPrompt,
firstMessage,
voice: template.recommendedVoice,
maxDurationSecs: template.maxDurationSecs,
})Common Mistakes
Open-ended instructions are an invitation to hallucinate. The AI will fill the silence with plausible-sounding details that don't match your business. Ground every claim in a fact stated in the prompt.
“Be brief” combined with “explain everything in detail” produces unpredictable results. Pick one tone and stick with it. If you need both, decide which wins by situation and say so.
If you don't tell the AI what to say when it's stumped, it makes something up. Always include an explicit instruction like: “If asked something you don't know, say ‘Let me have someone follow up — can I get your name and number?’”
Without a clear instruction to end the call when the caller is done, the AI keeps talking past goodbye. Include: “If the caller says goodbye, thank them and end the call promptly.”
The hard cap is 10,000 characters per prompt. More importantly, a prompt that tries to handle every possible call (sales + support + booking + billing) handles all of them poorly. Pick a focused use case per number — you can give different numbers different prompts.
When the AI Needs Truly Live Data
System prompts are great for stable facts (services, hours, pricing tiers). They're the wrong tool for data that changes per call: current inventory, account balances, today's availability, order status. For those, the AI needs to call a function during the conversation — that's tool calling, and it's on our roadmap.
For now, the safe pattern is: have the AI gather the question and promise a callback (“I'll have someone check on that and get back to you within an hour”), then trigger an outbound workflow with the live data. Don't put dynamic numbers in the prompt.
FAQ for Voice Prompts
10,000 characters max. The endpoint rejects anything longer. In practice, well-structured prompts for a single use case fit in 1,500–4,000 characters.
Yes. Call POST /v1/numbers/:id/inbound-config again with the new content. Changes take effect on the next incoming call — no redeploy, no restart.
No. We don't train or fine-tune any model on your data. Your prompt is the only source of business knowledge per call. Once the call ends, the AI has no memory of it for future calls.
Yes. Each number's inboundConfig is independent. Run a sales line with one prompt, a support line with another, and a screener on a third — same account, different numbers, different AIs.
Related
Ready to put a voice on your number?
Provision a number, paste a template, and your AI receptionist is live in minutes.
Get API Key — Free