Build an AI Voice Receptionist with Vapi

Build a 24/7 AI voice receptionist for an HVAC business using Vapi.

Introduction

30 Second Summary

30% of inbound calls to service businesses go unanswered. Every missed call is a lost customer walking straight to a competitor. AI voice agents solve this by answering every call around the clock, capturing leads, and routing emergencies to a human instantly.

In this project, you will build a fully functional AI voice receptionist for a fictional HVAC company. Your agent will handle routine service requests on its own, convert price shoppers into booked appointments, send SMS confirmations, and transfer emergencies to a real phone number.

What You'll Build

A 24/7 AI receptionist named Sarah for CoolAir Comfort HVAC that answers customer calls, captures structured lead data, handles objections, sends text confirmations, and escalates emergencies to a human technician.

By the end of this project, you'll have:

  • A configured Vapi voice assistant with an HVAC-specific system prompt and price-shopper objection handling that converts callers into booked appointments.
  • Custom function tools for lead capture, emergency call transfer, and SMS confirmations working together in a single call flow.
  • A live phone number you can call to demo the full experience to business owners.
  • Secret Mission: Add appointment scheduling with a simulated availability check that offers callers specific time slots.

Are there any prerequisites?

You'll need an OpenAI API key ready to go. Basic familiarity with JavaScript is helpful but not required. Everything else is set up during the project.

Set Up Your Vapi Account

Before Sarah can answer calls, she needs a brain and a voice. Vapi is the voice AI platform that orchestrates the entire call pipeline: converting speech to text, sending it to an LLM for a response, and speaking that response back to the caller.

In this step, you will create a Vapi account, locate your platform API key, and connect your OpenAI API key so Vapi can use gpt-4o as the intelligence behind your receptionist.

In this step, get ready to:
  • Create a Vapi account with $10 in free credits.
  • Locate your Vapi API key.
  • Add your OpenAI API key as a provider credential.
Create your Vapi account

Vapi gives new accounts $10 in free credits. At roughly $0.15 per minute of voice conversation, that gives you about 65 minutes of testing.

  • Open your browser and navigate to dashboard.vapi.ai.
  • Click Sign Up.
  • Create your account using your email or Google login.
  • Complete the signup flow and land on the Vapi Dashboard.

What is Vapi?

Vapi is a voice AI platform that connects three services into a real-time pipeline: speech-to-text (understanding what the caller says), an LLM (deciding what to respond), and text-to-speech (speaking the response aloud).

You configure the pipeline through the dashboard and Vapi handles the real-time orchestration.

Check your credits

After signing up, look for a credits indicator in the dashboard. You should see $10.00 available. If you do not see credits, check your email for a verification link and complete email verification first.

Locate your Vapi API key

Your Vapi API key identifies your account when making API calls. You will not need it for this project's dashboard-based workflow, but knowing where it lives is useful for future integrations.

  • Click your profile icon in the top right corner of the dashboard.
  • Select Vapi API Keys.
  • You will see your API key listed on this page. Leave it here for now.

Why do I need to know where my API key is?

For this project, you will configure everything through the Vapi Dashboard directly. If you later want to manage your assistant programmatically or integrate Vapi into a backend server, you will authenticate using this API key.

Add your OpenAI API key as a provider credential

Vapi needs access to an LLM to generate responses during calls. By adding your OpenAI API key, you allow Vapi to send conversation context to gpt-4o and receive intelligent responses.

  • In the Vapi Dashboard, navigate to the Integrations tab (under Settings or in the left sidebar).
  • Find the Provider Credentials section for model providers.
  • Locate OpenAI in the list of providers.
  • Paste your OpenAI API key into the field and save.

What does adding a provider credential do?

When Vapi receives a caller's speech, it converts that audio to text and sends the text to the LLM you have configured. By adding your OpenAI key here, you are telling Vapi to route LLM requests through your own OpenAI account.

This means you get billed at OpenAI's standard rates directly, rather than paying a markup through Vapi.

Key not saving?

Make sure you are pasting the full API key with no trailing spaces. If the key is rejected, go back to the OpenAI platform and generate a fresh key. Expired or revoked keys will not validate.

Help me troubleshoot my OpenAI API key in Vapi

Your account is ready. You have Vapi set up with credits and your OpenAI key connected. Next up, you will create the HVAC assistant and give it the personality, knowledge, and call-handling logic it needs to answer real customer calls.

Create Your HVAC Assistant

Your Vapi account is ready and connected to OpenAI. Now it is time to build the brain of your AI receptionist.

In this step, you will create an assistant named Sarah who knows how to handle HVAC customer calls. The system prompt you give her defines everything: her personality, what services she knows about, how she handles emergencies, and how she converts price shoppers into booked appointments.

In this step, get ready to:
  • Create a new assistant from a Blank Template and configure the model.
  • Paste a detailed HVAC-specific system prompt with objection handling.
  • Set the first message Sarah speaks when she answers a call.
Create a new assistant and configure the model

Every Vapi assistant starts from a template. You will use the Blank Template so you have full control over the configuration.

  • In the Vapi Dashboard, click Assistants in the left sidebar.
  • Click Create Assistant.
  • Select Blank Template as your starting point.
  • Change the assistant name to Sarah.
  • Scroll down to the Model section.
  • Select openai as the provider.
  • Select gpt-4o as the model.

Why GPT-4o for a voice agent?

Voice assistants need fast, high-quality responses because callers expect near-instant replies. GPT-4o provides the intelligence to handle complex conversation flows (like objection handling) while keeping latency low enough for natural phone conversations.

Paste the HVAC system prompt

The system prompt is the most important part of your assistant. It defines Sarah's personality, her knowledge of HVAC services, how she handles each type of call, and the exact scripts she uses to convert price shoppers into booked appointments.

  • In the Model section, find the System Prompt field.
  • Clear any placeholder text and paste the following system prompt:
# CoolAir Comfort HVAC - AI Receptionist (Sarah)

## Identity & Personality
You are Sarah, a friendly and professional AI receptionist for CoolAir Comfort HVAC. You answer incoming calls 24/7 and help customers with their heating and cooling needs.

- Warm, professional, and reassuring
- Speak clearly and concisely (this is a phone call, not a text chat)
- Use natural conversational language, not robotic scripts
- Empathize with customers experiencing discomfort (no AC in summer, no heat in winter)
- If asked directly whether you are an AI, answer honestly

## Services You Know About
- AC repair and installation (central air, mini-splits, window units)
- Furnace repair and installation (gas, electric, oil)
- Heat pump systems
- Preventive maintenance plans ($99/year covers two tune-ups)
- Duct cleaning and sealing
- Thermostat installation (smart thermostats)
- Indoor air quality (filters, purifiers, humidifiers)
- Emergency service (available 24/7 for true emergencies)

## Call Flow
1. Greet the caller warmly
2. Ask how you can help them today
3. Listen to their issue and ask clarifying questions
4. Determine if this is an emergency (see emergency criteria below)
5. Collect their information: full name, phone number, address, and description of the issue
6. For NON-EMERGENCIES: Capture the service request, send an SMS confirmation, and let them know a technician will call back within 2 hours during business hours (Mon-Sat 7am-6pm)
7. For EMERGENCIES: Capture basic details quickly, then immediately transfer to the on-call technician

## Emergency Criteria
The following situations are emergencies requiring immediate transfer:
- Gas smell (natural gas or propane leak)
- Carbon monoxide alarm going off
- Flooding or water damage from HVAC system
- No heat when outdoor temperature is below freezing
- Electrical burning smell from HVAC equipment

If unsure whether something is an emergency, ask: "Are you or anyone in your home in immediate danger?" If yes, treat as emergency.

## Price-Shopper Objection Handling
When callers ask about pricing (e.g., "How much to replace a compressor?" or "What do you charge for a new AC unit?"):

1. Acknowledge: "That's a great question, and I completely understand wanting to know costs upfront."
2. Explain why no flat price: "Every home is different - the size of your system, the brand, accessibility, and current condition all affect the final price. I'd hate to give you a number that ends up being inaccurate."
3. Offer the $99 diagnostic: "What I can do is schedule our $99 diagnostic visit. Our technician will assess your specific situation and give you an exact quote on the spot. And here's the best part - if you decide to go ahead with the repair, we waive that $99 fee completely."
4. Create urgency: "We do have availability this week. Would you like me to check what times work for your area?"
5. If they push back: "I totally get it. Many of our customers felt the same way, but they appreciated getting an accurate quote rather than a ballpark that could be off by hundreds of dollars. Plus with the $99 waiver, it's really a free visit if you go with us."

Never give flat pricing for repairs or installations. Always redirect to booking the diagnostic.

## Information to Collect
For every service request, collect:
- Customer's full name
- Phone number (confirm by reading it back)
- Service address
- Description of the issue
- Service type (repair, maintenance, installation, emergency)
- Whether this is an emergency (based on criteria above)

## Important Notes
- Business hours: Monday-Saturday, 7:00 AM - 6:00 PM
- Emergency service available 24/7
- Service area: within 30 miles of downtown
- Always confirm the phone number by reading it back
- If a caller is rude or abusive, remain professional and offer to have a manager call them back

What does this system prompt do?

This prompt is structured into clear sections that guide Sarah's behavior across different scenarios:

  • Identity & Personality sets Sarah's tone and communication style for phone conversations.
  • Call Flow gives Sarah a step-by-step script for handling every call from greeting to resolution.
  • Emergency Criteria defines the five situations where Sarah must transfer immediately (gas smell, carbon monoxide, flooding, no heat below freezing, electrical burning smell).
  • Price-Shopper Objection Handling trains Sarah to redirect pricing questions to a $99 diagnostic booking instead of quoting a flat price.
Set the first message and publish

The First Message is what Sarah says the moment she picks up the phone. It needs to be warm, professional, and brief so callers feel welcome without waiting.

  • Find the First Message field in your assistant configuration (above the Model section).
  • Paste the following greeting:
Hi there, thanks for calling CoolAir Comfort HVAC! This is Sarah. How can I help you today?

Why keep the greeting short?

Voice AI latency is measured in milliseconds. A short, punchy greeting means the caller hears Sarah respond almost instantly after the line connects. Long greetings feel robotic and waste the caller's time.

  • Click Publish to save your assistant configuration.
  • Click Talk to Assistant to open a live voice test.
  • Say something like "Hi, my AC isn't cooling" and confirm Sarah responds with a follow-up question about your situation.

You should hear Sarah greet you with the first message and then ask clarifying questions about your HVAC issue.

Sarah not responding or sounding off?

  • Make sure you clicked Publish before testing. Unpublished changes will not take effect.
  • Check that openai is selected as the provider and gpt-4o as the model in the Model section.
  • Confirm your OpenAI API key is still connected under provider credentials (from Step 1).

Why isn't my Vapi assistant responding when I click Talk to Assistant?

Sarah now has a complete personality, HVAC expertise, and objection handling scripts. Next up, you will give her tools to actually capture service request data during calls.

Build the Lead Capture Tool

Sarah can talk to callers, but right now she has no way to actually do anything with the information she collects.

In this step, you will give Sarah a tool that structures caller data into a clean service request. When the LLM decides it has enough information from the caller, it will call this tool and pass the collected details as structured parameters.

In this step, get ready to:
  • Create a Function tool in the Vapi dashboard.
  • Define six parameters that capture everything Sarah needs from a caller.
  • Attach the tool to your assistant and set a natural processing message.
Create a new Function tool

A Function tool in Vapi tells the LLM what structured data it can collect from the conversation. When the LLM decides to call the tool, Vapi captures the parameters and logs them to your call history.

  • In the Vapi dashboard, click Tools in the left sidebar.
  • Click Create Tool.
  • Select Function as the tool type.

Why Function instead of Code?

A Function tool defines a schema that the LLM fills in during the conversation. You do not need to host a server or write code for it to work.

Without a Server URL, Vapi simply logs the structured function call to your call history. This is perfect for a demo because you can see exactly what data Sarah captured without deploying any backend infrastructure.

Define the capture_service_request function

Now you will configure the tool's identity and parameters so the LLM knows what information to extract from the caller.

  • In the Tool Name field, enter capture_service_request.
  • In the Description field, enter: Captures a customer's service request details including their contact information, issue description, and whether the issue is an emergency.

Why does the description matter?

The description tells the LLM when to call this tool. A clear, specific description helps the model decide the right moment in the conversation to trigger the function call.

Next, you will define six parameters in the Parameters section (the JSON Schema editor). These are the fields that the LLM will fill in based on what the caller says.

  • Add each of the following parameters using the schema editor, setting the name, type, and description for each one:
  • customer_name (string): The customer's full name.
  • phone_number (string): The customer's phone number for callback.
  • address (string): The customer's service address.
  • issue_description (string): Detailed description of the HVAC issue.
  • service_type (string): Type of service needed (repair, maintenance, installation, or inspection).
  • is_emergency (boolean): Whether the issue requires immediate attention.
  • Mark all six parameters as required.

What does this schema do?

Each parameter maps to a piece of information Sarah needs from the caller. The LLM reads the parameter descriptions and knows to ask the caller for each one before triggering the function call.

The is_emergency boolean is especially important. In the next step, you will use this flag to decide whether to transfer the call to a human or send an SMS confirmation.

  • Leave the Server URL field empty.

No server needed for this demo

Without a Server URL, Vapi logs the structured function call data directly in your call history. You can inspect exactly what Sarah captured after each test call without deploying a backend.

Configure the Request Start message and attach the tool

When Sarah calls the tool during a conversation, there is a brief processing pause. A Request Start message fills that silence so the caller does not think they have been disconnected.

  • Scroll down to the Messages section of the tool configuration.
  • Find Request Start and enter a natural message like: Let me get that service request logged for you.
  • Click Create (or Save) to save the tool.

What are tool messages?

Vapi supports four message types for tools: Request Start, Request Complete, Request Failed, and Request Delayed. Each one lets you control what Sarah says at different stages of the tool call.

For now, Request Start is the most important. It gives the caller a natural acknowledgment while the system processes their request.

Now attach the tool to your Sarah assistant.

  • Click Assistants in the left sidebar.
  • Select your Sarah assistant.
  • Scroll down to the Tools accordion section and expand it.
  • Add the capture_service_request tool.
  • Click Publish to save your changes.

Don't see your tool in the list?

Make sure you saved the tool in the previous step. Return to Tools in the left sidebar and confirm capture_service_request appears in your tools list.

If it is missing, re-create it following the steps above and make sure you click Create at the bottom of the form.

help me attach my tool to my Vapi assistant

Your lead capture tool is ready. Next up, you will add emergency call transfer so Sarah can route urgent situations to a real human instantly.

Add Emergency Transfer to Human

Sarah can now capture caller information. But what happens when someone calls with a genuine emergency, like a gas leak or flooding?

In this step, you will add a transferCall tool that forwards emergency callers directly to a human technician. You will also update the system prompt so Sarah knows exactly when to escalate.

In this step, get ready to:
  • Create a transferCall tool with your phone number as the emergency destination.
  • Update your system prompt with emergency detection criteria and transfer logic.
  • Attach the transferCall tool to your Sarah assistant.
Create the transferCall tool

Vapi provides a built-in transferCall default tool that forwards an active call to any phone number you configure. Unlike the custom function tool you created earlier, you do not need to define parameters for this one.

What is a default tool?

Vapi provides several built-in default tools: transferCall, endCall, sms, dtmf, and apiRequest. These handle common call-control actions without requiring a server.

The transferCall tool transfers the call to any of the destinations defined in the tool configuration. The LLM decides when to trigger it based on your system prompt instructions.

  • Click Tools in the left sidebar of the Vapi Dashboard.
  • Click Create Tool.
  • Select transferCall as the tool type.
  • In the Destinations section, add a destination with type number.
  • Enter your own cell phone number with country code (e.g. +15551234567) as the destination number. This is who Sarah will transfer emergency callers to during testing.
  • Scroll down to the Messages section.
  • Add a Request Start message with the following content:
I'm connecting you to our emergency technician right now, please stay on the line.

What does the Request Start message do?

This is what Sarah says to the caller the moment the transfer begins. It reassures the caller that help is on the way and keeps them on the line while the connection happens.

  • Confirm your destination number is correct and your Request Start message is set.
  • You should see your new transferCall tool listed on the Tools page.

Don't see transferCall as a tool type option?

Make sure you are in the Tools section of the left sidebar (not the assistant's model configuration). The tool types appear when you click Create Tool.

help me find the transferCall tool type in the Vapi dashboard

Update the system prompt with emergency transfer logic

The transferCall tool exists, but Sarah does not know when to use it yet. You need to add instructions to your system prompt that define what counts as an emergency and tell Sarah to transfer the call immediately when she detects one.

  • Click Assistants in the left sidebar.
  • Select your Sarah assistant.
  • Find your system prompt and add the following emergency handling section at the end:
## Emergency Detection and Transfer

The following situations are EMERGENCIES that require immediate transfer to a human technician:
- Gas smell or suspected gas leak
- Carbon monoxide alarm going off
- Flooding or water damage from HVAC equipment
- No heat when outdoor temperature is below freezing
- Electrical burning smell from HVAC equipment

When you detect an emergency:
1. First, use the capture_service_request tool with is_emergency set to true to capture the caller's information.
2. Then IMMEDIATELY use the transferCall tool to connect them to our emergency technician.
3. Before the transfer, say: "I'm connecting you to our emergency technician right now, please stay on the line."

Do NOT attempt to schedule a regular appointment for emergencies. Transfer immediately after capturing basic information.

What does this prompt addition do?

This gives the LLM a clear decision framework. When the caller describes any of the five emergency scenarios, Sarah knows to capture the info first (so no data is lost) and then trigger the transfer.

The explicit list of emergencies prevents false positives. A routine maintenance call will not trigger a transfer, but a gas leak will.

  • Click Publish to save your system prompt changes.

Why define emergency criteria explicitly?

Without a specific list, the LLM might over-trigger on vague complaints like a slightly warm house, or under-trigger on real dangers. Listing exact scenarios gives Sarah a reliable decision boundary.

When you pitch this to a real HVAC business, you would customize this list with their specific emergency definitions.

Attach the transferCall tool to your assistant

Creating the tool makes it available in your account, but Sarah can only use it if it is explicitly attached to her configuration.

  • With your Sarah assistant still selected, scroll down until you see the Tools section.
  • Expand the Tools accordion.
  • Add your new transferCall tool from the dropdown. You should now see both capture_service_request and the transferCall tool listed.
  • Click Publish to save your changes.

Why attach tools separately from the prompt?

The system prompt tells the LLM when and why to use a tool. The tools list tells Vapi which tools the LLM is actually allowed to trigger. Both need to be in place for the transfer to work.

  • Verify that your assistant now shows two tools attached: capture_service_request and your transferCall tool.

Transfer tool not appearing in the dropdown?

Make sure you completed the tool creation in the Tools section first. The tool must be saved before it appears in the assistant's tool attachment dropdown.

Also confirm you added a valid destination phone number with a country code when creating the tool. Tools without a valid configuration may not appear.

help me attach the transferCall tool to my Vapi assistant

Web calls cannot complete a transfer to a phone number

Vapi only supports phone-to-phone transfers. If you test with the dashboard's Talk to Assistant button (which is a web call), Sarah will say the transfer message but the actual phone connection will not complete.

To fully test the transfer, you will need a phone number connected to your assistant (covered in a later step). For now, confirming that Sarah recognizes the emergency and attempts the transfer is enough.

Sarah now has full emergency escalation capability. When a caller reports a gas leak or any other emergency, she captures their details and immediately connects them to a real person. Next up, you will add SMS confirmation so non-emergency callers get a text message summarizing their service request.

Add SMS Confirmation

Sarah can now handle routine calls and escalate emergencies. But there is one more thing callers expect from a professional HVAC company: a confirmation text after they hang up.

In this step, you will add an SMS tool so Sarah can text callers a summary of their service request. This closes the loop and gives the customer something tangible to reference.

In this step, get ready to:
  • Create an SMS tool in the Vapi Dashboard.
  • Configure the SMS message template for service confirmations.
  • Update Sarah's system prompt to trigger SMS after non-emergency calls.
Create the SMS tool

The sms tool is one of Vapi's built-in default tools. It sends text messages through a connected Twilio account.

  • Click Tools in the left sidebar of the Vapi Dashboard.
  • Click Create Tool.
  • For the tool type, select SMS (this is a built-in default tool, not a Function tool).

What is the SMS default tool?

Unlike the custom Function tools you created earlier, the sms tool is pre-built by Vapi. It uses a configured Twilio account to send text messages during or after a call. You define the message content in the system prompt, and the LLM decides when to trigger it based on your instructions.

Twilio account required for live SMS

The SMS tool requires a Twilio account connected to Vapi to actually send texts. If you do not have a Twilio account yet, that is okay. Sarah can still SAY she is sending a text (the prompt handles it gracefully), and you can connect Twilio later.

For now, continue with the setup. The tool configuration will be ready to work the moment you connect Twilio.

Configure the SMS message template

The system prompt will tell Sarah exactly what to include in the SMS. You will define the message template so every caller receives a consistent confirmation.

  • Return to your Sarah assistant by clicking Assistants in the left sidebar.
  • Select your Sarah assistant from the list.
  • Scroll down to the system prompt field.
  • Add the following SMS instructions at the end of your existing system prompt:
## SMS CONFIRMATION (Non-Emergency Calls Only)

After capturing a non-emergency service request using capture_service_request, send an SMS confirmation to the caller's phone number using the sms tool.

SMS message format:
"CoolAir Comfort HVAC - Your service request has been received. Issue: [issue_description]. A technician will contact you within [timeframe based on urgency]. Reply STOP to opt out."

After triggering the SMS tool, tell the caller: "I've just sent a confirmation text to your phone with the details of your service request."

Do NOT send SMS for emergency calls. Emergency calls should be transferred immediately after capturing the service request.

What does this prompt addition do?

This section gives Sarah clear rules for when and how to send a text. She will only send an SMS for non-emergency callers, include the specific issue in the message, and verbally confirm that the text was sent.

The bracketed placeholders like [issue_description] and [timeframe based on urgency] are filled dynamically by the LLM based on the conversation context.

Attach the SMS tool to your assistant
  • Scroll down to the Tools accordion in your Sarah assistant configuration.
  • Expand the accordion.
  • Add the sms tool you just created.
  • Click Publish to save your changes.

Your Sarah assistant should now have three tools attached: capture_service_request, transferCall, and sms.

Don't see the SMS tool in the dropdown?

Make sure you selected the correct tool type when creating it. The SMS tool is a built-in default tool type, not a Function. Go back to Tools in the left sidebar and verify the tool was created successfully.

help me find and attach the SMS tool to my assistant

Sarah now handles the full non-emergency flow: capture the service request, send an SMS confirmation, and let the caller know help is on the way. Next up, you will test all three flows to make sure everything works together.

Test and Refine Your Agent

You've built Sarah's entire toolkit. She can capture leads, transfer emergencies, and send SMS confirmations. Now it's time to call her and see how she performs under pressure.

In this step, you'll run three distinct test conversations that exercise every branch of Sarah's call flow. You'll refine her system prompt based on what you hear.

In this step, get ready to:
  • Test the non-emergency flow and verify Sarah captures info, mentions SMS, and provides next steps.
  • Test the emergency flow and verify Sarah initiates a live transfer to your phone.
  • Test the price-shopper flow and verify Sarah redirects to booking a diagnostic appointment.
Test the non-emergency flow

The Vapi dashboard has a built-in voice testing tool that lets you have a live conversation with your assistant directly in the browser. No phone number needed yet.

  • In the Vapi Dashboard, navigate to Assistants in the left sidebar.
  • Select your Sarah assistant.
  • Click Publish to save your latest changes.
  • Click Talk to Assistant to start a live voice conversation.

What is Talk to Assistant?

This is Vapi's built-in testing tool. It connects your microphone directly to the assistant so you can speak to Sarah in real time. She'll respond with her configured voice, use her system prompt, and trigger tools exactly as she would on a real phone call.

Now you'll play the role of a customer calling with a routine maintenance request. Speak naturally as if you were actually calling an HVAC company.

  • Wait for Sarah to greet you with her First Message.
  • Tell her you'd like to schedule routine AC maintenance. For example: "Hi, my AC hasn't been serviced in a year and I'd like someone to come take a look."
  • When Sarah asks for your details, provide a name, phone number, and address.
  • Listen for Sarah to confirm she's captured your service request.
  • Listen for Sarah to mention sending an SMS confirmation to your phone.
  • Listen for Sarah to provide clear next steps (a technician will call back during business hours).

What should I see?

Sarah should ask for your name, phone number, address, and issue details. After collecting everything, she should mention sending a confirmation text and tell you a technician will reach out during business hours.

If you don't have Twilio connected yet, Sarah will still say she's sending a text. The prompt handles this gracefully. You'll connect Twilio later if needed.

Sarah isn't asking for your details?

If Sarah skips collecting your information or jumps straight to ending the call, your system prompt may not clearly instruct her to gather details before using the capture_service_request tool. Go back to the system prompt and make sure the call flow section explicitly states she must collect name, phone, address, and issue description before calling the tool.

Help me fix my system prompt so Sarah collects customer details

Test the emergency flow

This test verifies the most critical path. When a caller reports a genuine emergency, Sarah must capture basic info AND immediately transfer the call to your phone number.

  • Click Talk to Assistant again to start a new test call.
  • Have your personal phone nearby so you can see the incoming transfer.
  • After Sarah greets you, describe an emergency scenario. For example: "I smell gas coming from my furnace. It's really strong and I'm worried."
  • Provide your details when Sarah asks (she should still capture basic info even for emergencies).
  • Listen for Sarah to say something like "I'm connecting you to our emergency technician right now, please stay on the line."
  • Check your personal phone for the incoming call from the transfer.

What should I see?

Sarah should recognize the gas smell as an emergency. She'll quickly capture your name and address, then announce she's transferring you. Your personal phone should ring within a few seconds as the transferCall tool connects the call to the destination number you configured.

Your phone didn't ring?

Check that the destination phone number in your transferCall tool configuration matches your actual cell number, including the country code. Also verify that Sarah's system prompt instructs her to use the transfer tool after detecting an emergency.

Help me debug why my transferCall tool isn't ringing my phone

Test the price-shopper flow

Price shoppers are callers who ask "how much does X cost?" and hang up if you give a number. Sarah is trained to redirect these callers toward booking a diagnostic appointment instead of losing them.

  • Click Talk to Assistant to start another test call.
  • After Sarah greets you, ask a direct pricing question: "How much to replace a compressor?"
  • Listen for Sarah to avoid giving a flat dollar amount.
  • Listen for Sarah to redirect you toward booking a $99 diagnostic appointment, mentioning that the fee is waived if you proceed with the repair.

Why redirect instead of giving a price?

HVAC repair pricing varies wildly based on the unit, age, and specific failure. Giving a flat number over the phone either scares the caller away (too high) or sets unrealistic expectations (too low). The $99 diagnostic converts a price shopper into a booked visit where the technician can give an accurate, on-site quote.

What should I see?

Sarah should acknowledge your question, explain that pricing depends on the specific unit and issue, and offer to book a $99 diagnostic visit. She should mention that the diagnostic fee is waived if you proceed with the repair. The goal is for her to move you toward a booking rather than ending the call with a price.

Sarah giving flat prices instead of redirecting?

If Sarah responds with dollar amounts instead of booking a diagnostic, your system prompt's price-shopper objection handling section may not be specific enough. Make sure the prompt explicitly says: never give flat pricing, always redirect to the $99 diagnostic, and mention the fee waiver. Try adding a concrete example exchange in the prompt to guide the model.

Help me fix Sarah's price-shopper responses

If any of the three flows didn't work as expected, now is the time to refine your system prompt. Small wording changes can make a big difference in how GPT-4o interprets your instructions.

  • Return to your assistant's system prompt in the Vapi Dashboard.
  • Make any adjustments based on what you observed (adding clearer instructions, fixing flow logic, strengthening objection scripts).
  • Click Publish to save your changes.
  • Run the failing test scenario again with Talk to Assistant to confirm the fix worked.

Be specific in your prompt edits

Instead of vague instructions like "handle pricing questions well," add explicit example exchanges. For instance: "If the caller asks about compressor replacement cost, say: 'Great question. Compressor pricing depends on your specific unit. We offer a $99 diagnostic visit where our tech gives you an exact quote on-site. And if you go ahead with the repair, that $99 is waived. Want me to get you scheduled?'"

All three flows are working. Sarah handles routine calls solo, transfers emergencies to your phone, and converts price shoppers into bookings. Next up, you'll connect a real phone number so anyone can call your AI receptionist.

Connect a Phone Number

You've tested Sarah through the dashboard and confirmed all three flows work perfectly. Now it's time to give her a real phone number that anyone can call.

In this step, you'll create a free Vapi phone number and assign Sarah as the inbound assistant. Then you'll call it from your actual phone to experience the full end-to-end flow exactly as a customer would.

In this step, get ready to:
  • Create a free Vapi phone number.
  • Assign Sarah as the inbound assistant on that number.
  • Call the number from your actual phone and test all three flows live.
Create a free Vapi phone number

The dashboard "Talk to Assistant" feature is great for development, but customers need a phone number they can dial. Vapi provides free phone numbers you can create directly from the dashboard.

  • In the Vapi Dashboard, click Phone Numbers in the left sidebar.
  • Click Create Phone Number.
  • Select Free Vapi Number.
  • Enter your preferred area code (e.g., 415 for San Francisco, or your local area code).
  • Click Create to provision the number.

You should see your new phone number appear in the Phone Numbers list.

What is a Free Vapi Number?

A Free Vapi Number is a real phone number provisioned through Vapi that anyone can call. It stays active as long as your account has credits.

Each call costs approximately $0.14-0.15 per minute total (Vapi platform fee plus provider costs). With your $10 in free credits, you have roughly 65 minutes of testing available.

Assign Sarah to the phone number

A phone number on its own doesn't know which assistant to connect callers to. You need to assign Sarah as the inbound assistant so she picks up every call.

  • Click on your newly created phone number to open its settings.
  • Scroll down to Inbound Settings.
  • Find the Assistant dropdown and select your HVAC assistant (Sarah).
  • Save your changes.

Your phone number is now live. Any call to that number will be answered by Sarah.

Don't see your assistant in the dropdown?

Make sure you clicked Publish on your assistant after your last round of changes. Unpublished assistants may not appear in the assignment dropdown.

Try refreshing the page if Sarah still doesn't appear.

Still stuck? Help me assign my assistant to my Vapi phone number.

Test the full experience from your actual phone

This is the moment of truth. You're about to call your AI receptionist from a real phone, just like a customer would. You'll test all three critical flows to confirm everything works end-to-end.

  • Pull out your actual phone (not the dashboard "Talk to Assistant" feature).
  • Dial the Vapi phone number you just created.

Sarah should answer with her greeting. You'll run through three separate test calls.

Three calls to make

Each test exercises a different branch of Sarah's logic. Hang up between each one and call back fresh.

  • Call 1 (routine non-emergency): Describe a maintenance request like "My AC hasn't been serviced in over a year." Confirm Sarah captures your info, mentions an SMS confirmation, and gives you clear next steps.
  • Call 2 (emergency): Say something like "I smell gas coming from my furnace." Confirm Sarah captures your info AND transfers the call to your cell phone.
  • Call 3 (price shopper): Ask "How much does it cost to replace a compressor?" Confirm Sarah redirects you toward booking a diagnostic appointment instead of giving a flat price.

Keep the dashboard open during calls

Watch the call logs update in real time as you speak. You can see the function calls being triggered (like capture_service_request firing) and the structured data Sarah collects. This is also what you'd show a business owner during a demo.

Call not connecting or Sarah not responding?

Check that your Vapi account still has credits remaining. Each minute of calling costs approximately $0.14-0.15.

Verify that Sarah is assigned under Inbound Settings on your phone number. If the Assistant dropdown shows nothing selected, pick Sarah and save again.

If the emergency transfer isn't connecting to your cell, confirm the destination phone number in your transferCall tool matches your actual number (including country code).

Need more help? Help me troubleshoot my Vapi phone number not working.

Secret mission

Add Appointment Scheduling to Sarah

Right now Sarah captures leads and sends confirmations, but callers still have to wait for a human to call back and schedule. What if Sarah could check technician availability and book the appointment on the spot? Add a check_availability tool that turns Sarah into a full scheduling agent.

Clean Up Your Resources

Clean Up Your Resources

Decide whether to keep your resources running, pause them to come back later, or delete them entirely. Your Vapi account has $10 in free credits, and charges only occur when calls are made (roughly $0.15/min). There are no ongoing costs for simply having an assistant or phone number configured.

Cost warning

Your $10 in free credits gives you approximately 65 minutes of testing at ~$0.15/min total cost. Credits are consumed only when calls happen. If you leave the phone number active, anyone who calls it will consume credits. Delete the phone number if you want to prevent any further charges.

Resources you used:

  • Free Vapi Phone Number (assigned to your Sarah assistant for inbound calls).
  • Vapi Assistant: Sarah (with system prompt, model configuration, and attached tools).
  • Custom Function Tools: capture_service_request and check_availability.
  • OpenAI API key stored as a provider credential in Vapi.

Keep everything running

No action needed. Choose this if you plan to demo the agent to business owners or continue developing new features.

  • Your Free Vapi Number stays active as long as your account has credits.
  • Credits are only consumed when calls are made (~$0.15/min).
  • When your $10 runs out, add more credits from the Vapi dashboard to keep the number active.

Pause - I'll come back to this later

Remove the phone number to prevent any inbound calls from consuming credits. Keep your assistant and tools intact so you can reconnect a new number later.

  • In the Vapi dashboard, click Phone Numbers in the left sidebar.
  • Select your Free Vapi Number and delete it.
  • Your Sarah assistant and all custom tools will remain configured. When you're ready to resume, create a new Free Vapi Number and assign Sarah under Inbound Settings.

Delete - I don't want to use this again

Remove all project resources from your Vapi dashboard. This cannot be undone.

  • Click Phone Numbers in the left sidebar. Select your Free Vapi Number and delete it.
  • Click Tools in the left sidebar. Delete capture_service_request and check_availability.
  • Click Assistants in the left sidebar. Select the Sarah assistant and delete it.
  • To remove your OpenAI API key from Vapi, navigate to provider credentials in the dashboard and delete the OpenAI entry. This only removes it from Vapi. Your OpenAI account and key remain active on the OpenAI platform.
  • Do not make any additional test calls to avoid consuming remaining credits.

That's a Wrap!

That's a Wrap!

Nice work! You just built a production-style 24/7 AI voice receptionist for an HVAC business.

You've learned how to:

  • Configure a Vapi voice assistant with a domain-specific system prompt that handles HVAC customer calls, detects emergencies, and converts price shoppers into booked appointments.
  • Build custom function tools for lead capture, emergency call transfer, and SMS confirmation that work together in a single call flow.
  • Connect a real phone number and test all three flows live: routine calls handled solo, price shoppers converted into bookings, and emergencies escalated to a human.
  • Add appointment scheduling with a simulated availability check, creating a complete end-to-end customer experience.

This is the demo that justifies a $2,000 setup fee. Call the number in front of a business owner.

Show them the routine flow where AI handles the call solo and texts the customer. Ask about pricing and watch it convert instead of losing the lead. Then say you smell gas and watch it transfer to their phone. Three calls, three wins, one signature on a contract.

Ready to quiz yourself?