Skip to content
Tanner
Preserve
All guides
Phones and voice

Build an AI voice agent for your business (the real DIY path)

9 min readUpdated July 2, 2026
01

What you're actually building

The tools in the ai-receptionist-basics guide (see /guides/ai-receptionist-basics) are turnkey: sign up, pay monthly, done. This is the other path: building the same thing from two pieces. Twilio owns the phone number and carries the call. Vapi sits in the middle, turns the caller's speech into text, runs it through an AI model, and turns the answer back into speech. You write the instructions, own both accounts, and pay for usage instead of a flat fee.

Do this if you want control over exactly how it talks and don't mind clicking through two dashboards and reading error messages. Skip it if you want something working by Friday, a packaged tool gets you there faster, and you can always rebuild it this way later once you know what you actually need.

Budget an afternoon for the first working version, then a few evenings fixing what only shows up once real callers hit it.

02

Get a phone number on Twilio

Sign up at twilio.com. New accounts start in trial mode, which caps who you can call and stamps a warning message on every call, so add a payment method and upgrade to a paid account before testing with real numbers.

In the Twilio Console, go to Phone Numbers > Manage > Buy a number. Search by Wisconsin area code (262, 414, 608, 715, 920), filter for Voice capability, and buy one. Numbers run about a dollar a month. Do not port your existing business number into this yet. Build and test on a brand new number first, then decide later whether to route your real line to it.

Twilio's own voice usage is billed per minute on top of whatever Vapi charges you, typically a cent or two a minute for the call leg itself. It is a second, smaller line item on your bill, not a separate subscription.

03

Set up Vapi and connect the number

Create an account at vapi.ai. In the dashboard, go to Phone Numbers > Import and connect your Twilio number using the Account SID and Auth Token from the Twilio Console home page. Vapi now controls what happens when that number rings.

Next, build an Assistant. This is the actual agent: a language model (GPT-4o-mini and similar smaller models keep the per-minute cost down; the flagship models sound a little more natural but cost more per minute), a text-to-speech voice (Vapi ships several, and cloned or premium voices from ElevenLabs cost more per minute than the stock ones), and a system prompt, which is the instructions block. Assign the assistant to your phone number and every call now runs through it.

As of mid-2026, budget roughly 10 to 25 cents per minute all-in on Vapi's standard tier once you add a decent voice and model, on top of Twilio's per-minute call cost. Check current pricing before you commit; both companies adjust rates and Vapi in particular has changed its plan structure more than once.

04

Write the system prompt

This box is the entire business. Everything the ai-receptionist-basics guide says about instructions applies here too, but here you're writing it from scratch with no template underneath. Structure it in plain sections, not clever prose.

  • Identity and hours: business name, cities served, hours, licensed-and-insured line.
  • Services offered in plain words, and what you don't do, so it declines cleanly.
  • Pricing rule: only the service call or diagnostic fee, if you have a flat one. Every other job gets "that depends on what we find, let's get you on the schedule."
  • Emergency definition and action: what counts (burst pipe, no heat below freezing, active flooding) and where it routes, usually a warm transfer to your cell.
  • Booking behavior: what calendar it can see (see the next section), typical job length per service type, and how much buffer to leave.
  • The fallback: if it doesn't know, take name, number, and a one-line problem description, and say someone will call back. A clean punt beats a confident wrong answer.
Field note

Starter prompt block: "You are the phone assistant for Badger Plumbing, serving Waukesha County, Monday to Friday 7am-5pm. Services: drain cleaning, water heaters, sump pumps, general repair. No new construction, no commercial. Service call fee is $89, state this if asked, never quote any other price. If a caller describes active flooding, a burst pipe, or no heat below freezing, say you're connecting them now and transfer to (262) 555-0134. Otherwise offer to book the next open slot. If you're unsure of anything, take their name, number, and a short description of the problem and say someone will call back within the hour."

05

Give it a calendar and a way to text you

A voice that just talks isn't a receptionist, it needs to actually do something. Vapi supports function calls and tool integrations that let the assistant hit an outside system mid-call. The two you need: checking and writing to a calendar (Cal.com and Google Calendar both have documented paths), and sending an SMS summary to your phone after each call so you're not relying on the caller to have understood correctly.

This is where most DIY builds stall. Wiring a function call means reading Vapi's docs on tool definitions, getting the API scopes right on the calendar side, and testing the handoff between "the model decided to book something" and "the appointment actually appeared." Budget real time here, not the fifteen minutes it looks like in the docs.

If you don't want to build calendar integration yet, ship version one without it: the assistant answers, qualifies the call, and texts you the details to book by hand. That alone beats voicemail, and you can add the calendar function later once the conversation flow is solid.

06

Test it against a mean caller, then read every transcript

Call your new Twilio number from a different phone and try to break it. Mumble. Interrupt mid-sentence. Ask for a price on a job you told it never to quote. Say a fake address wrong twice. Every place it stumbles is a line you add to the prompt, and you will rewrite this prompt a dozen times before it holds up.

Vapi logs a transcript and recording of every call under Calls in the dashboard. Read every one for the first two weeks, not just the ones that seem to have gone wrong. You'll find real questions customers ask that never occurred to you to put in the prompt.

Two failure modes show up constantly. Voicemail detection: if you forward a busy line's overflow here, make sure it isn't leaving a full script into a customer's own voicemail box. Most platforms have an answering-machine-detection setting, turn it on and verify it. Transfer logic: test the actual warm transfer to your cell under real conditions, including what happens if you don't pick up, because a transfer that rings into nothing is worse than none at all.

07

Watch the bill and know when to walk away from it

Per-minute pricing means cost scales with call volume and call length, unlike a flat monthly tool. A slow, chatty assistant that takes ninety seconds to book what should take thirty costs three times as much per call. Tighten the prompt to be efficient, not just accurate.

Check Vapi's usage dashboard weekly for the first month against what the calls are actually worth: leads captured times your close rate times your average ticket. If the DIY build costs more in your time than a $50 to $150 a month packaged tool would cost in cash, that's a real reason to stop building and buy the finished version instead.

Common questions

Questions that come up

Do I need to know how to code?

Not to get a basic version running. The Vapi dashboard handles the model, voice, and prompt with no code. Function calls for calendar booking are the one part that leans technical, closer to following a setup guide closely than writing software. If that part stalls you, ship without it first and add it later, or hand that one piece to someone who does this kind of integration work.

How is this actually different from just paying for Goodcall or Smith.ai?

Those tools are this same Vapi-and-Twilio-style plumbing already built, tested, and wrapped in a support team, for a flat monthly price. Building it yourself gets you full control over the model, voice, and logic, and per-minute pricing instead of a markup, which can run cheaper at low volume. It also means you're the one debugging it at 9pm when something breaks.

What happens if Vapi or Twilio goes down?

Set a fallback in Twilio's number configuration: if the connection to Vapi fails or times out, route the call to plain voicemail or to your cell as a backup, don't leave it dead-ended. Check each service's status page if calls start failing and it isn't your prompt.

Can I use my real business number for this?

Eventually, but not on day one. Build and test everything on the new Twilio number first. Once the prompt is solid and transfers work, you can forward your real number's unanswered calls to it the same way you would with a packaged tool, using conditional call forwarding from your carrier so the AI only picks up what you don't.

Or skip the homework

Rather I just did this?

Rather have this built for you? A 15-minute call gets you a straight answer on what it'd take, and whether it's even worth doing for your volume.