It's 2:47 AM. A family's furnace just died in freezing weather. They call every heating company on Google.
Your phone rings. And rings. And rings.
But you're asleep. The call goes to voicemail.
That family calls your competitor. You just lost a $3,500 emergency repair job.
The real cost:
Average emergency call value: $800-3,500
Missed calls per week: 15-40 (industry average)
Lost revenue per month: $12,000-140,000
What You'll Build (30 Minutes)
An AI receptionist that:
✅ Answers calls 24/7 - Never miss another emergency
✅ Looks up customers - Pulls history from ServiceTitan
✅ Dispatches emergency jobs - Creates urgent jobs and assigns technicians
✅ Books appointments - Schedules maintenance and non-emergency work
✅ Answers questions - Office hours, service areas, pricing
✅ Transfers when needed - Connects complex calls to staff
How It Works

Real Example:
Customer: "Our AC stopped working and it's 95 degrees!"
AI: "I'm so sorry! Let me help right away. Your phone number?"
Customer: "555-123-4567"
AI: [Looks up] "Thank you, Mrs. Johnson at 123 Oak Street. Let me dispatch a technician immediately."
AI: [Creates emergency job]
AI: "I've dispatched Mike. He'll be there within 2 hours. You'll receive a text with his ETA and photo."Cost Savings:
AI receptionist: $200-400/month
Traditional answering service: $500-1,200/month
Plus: Capture emergency calls = $12,000-140,000/month in additional revenue
Prerequisites
You'll need:
VoiceInfra account (sign up)
ServiceTitan account with API access
Phone system (PBX, Twilio, or WhatsApp Business)
Business FAQ document
Time: 30 minutes Technical skill: None required!
Step 1: Create Your AI Agent (5 minutes)
VoiceInfra's AI Agent Builder guides you through a questionnaire and auto-generates your AI.
Steps:
Log into VoiceInfra → "Agents" → "Create New Agent" → "Use AI Agent Builder"
Fill in the questionnaire:
Agent Name: Heating & Cooling Emergency Dispatcher
Industry: Home Services - Heating & Cooling
What should your AI DO?
1. Answer emergency calls 24/7 for no heat, no AC, urgent repairs
2. Look up customer information in ServiceTitan
3. Dispatch emergency jobs to on-call technicians
4. Schedule appointments for maintenance
5. Answer common questions about services and pricingWhat should your AI NOT do?
1. Never quote exact prices (only ranges)
2. Never diagnose complex issues - transfer to technician
3. Never promise specific arrival times (use "within 2 hours")
4. Never handle billing disputes - transfer to officeKey Objectives:
- Capture every emergency call to maximize revenue
- Provide fast, empathetic service during stressful situations
- Reduce burden on office staff during busy seasonsClick "Review & Create"
The AI Agent Builder auto-generates:
✅ Voice Model: OpenAI Realtime (ultra-low latency)
✅ Professional, empathetic voice
✅ Custom system prompt for heating & cooling
✅ Optimized conversation flow
Click "Create Agent"
✅ Done! Agent created in 2 minutes.
Step 2: Add Your Knowledge Base (10 minutes)
Create a simple FAQ document for your AI to reference.
Create FAQ File
File: heating-cooling-faq.txt
COMPANY INFO
Company: [Your Company Name]
Phone: [Your Phone]
Service Areas: [Cities you serve]
Hours: Monday-Friday 8 AM - 6 PM, Saturday 9 AM - 4 PM
Emergency Service: Available 24/7
---
SERVICES
- Emergency Repairs (24/7)
- Furnace Repair & Replacement
- Air Conditioner Repair & Replacement
- Heat Pump Service
- Preventive Maintenance Plans
- Indoor Air Quality Solutions
---
PRICING
Service Call: $89 (waived if repair completed)
Furnace Repair: $150-800 depending on issue
AC Repair: $150-900 depending on issue
Furnace Replacement: $3,000-8,000
AC Replacement: $3,500-9,000
Maintenance Plan: $199/year (2 tune-ups)
---
PAYMENT
We accept: Cash, Check, All major credit cards
Financing available
Senior and military discounts available
---
EMERGENCIES
Call immediately for:
- No heat in winter (below 55°F inside)
- No AC in summer (above 85°F with vulnerable people)
- Gas smell or carbon monoxide alarm
- Strange noises or burning smells
- Water leaking from AC unit
---
COMMON QUESTIONS
Q: How quickly can you get here for an emergency?
A: We dispatch within 2 hours for true emergencies.
-
Q: Do you offer same-day service?
A: Yes, for emergencies and often for non-emergency repairs.
-
Q: What brands do you service?
A: All major brands including Carrier, Trane, Lennox, Rheem, Goodman, York.
-
Q: How often should I replace my air filter?
A: Every 1-3 months depending on usage and pets.
-
Q: Do you install smart thermostats?
A: Yes! We install Nest, Ecobee, Honeywell, and others.Upload to VoiceInfra
Go to agent → "Knowledge Base" tab
Click "Upload Document"
Select your FAQ file
Description:
Company FAQ - Services, Pricing, Common QuestionsClick "Upload" → "Link to Agent"
✅ Checkpoint: AI can answer questions about your business!
Step 3: Get ServiceTitan API Access (5 minutes)
Get Credentials
Log in to ServiceTitan
Go to Settings → Integrations → API Application Access
Click "Request API Access" (if needed)
Go to "My Apps" → "Create New App"
Fill in:
App Name:
VoiceInfra AI ReceptionistDescription:
AI voice assistant for call handling
Click "Create"
Copy and save:
Client ID
Client Secret
Tenant ID
Test Connection
Run this CURL command to verify:
curl --request POST \
--url https://auth-integration.servicetitan.io/connect/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data grant_type=client_credentials \
--data client_id=YOUR_CLIENT_ID \
--data client_secret=YOUR_CLIENT_SECRETSuccess response:
{
"access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6...",
"expires_in": 900,
"token_type": "Bearer"
}✅ If you see an access token, you're ready!
Step 4: Create Functions Using CURL (10 minutes)
VoiceInfra's CURL Function Creator converts CURL commands into functions automatically.
Function 1: Customer Lookup
CURL Command:
curl --request GET \
--url "https://api-integration.servicetitan.io/crm/v2/tenant/YOUR_TENANT_ID/customers?phone=5551234567" \
--header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
--header "ST-App-Key: YOUR_CLIENT_ID" \
--header "Content-Type: application/json"Steps:
VoiceInfra → "Functions" → "Create New Function" → "Import from CURL"
Paste the CURL command (with your credentials)
Click "Parse CURL"
Change the function name to:
lookup_customerAdd description:
Look up customer in ServiceTitan by phone numberClick "Create Function"
(Optional) Add instructions (needed if functions are created after the agent; otherwise, the AI builder will automatically manage it):
Use when the customer calls. Ask for the phone number, call this function.
If found: Greet by name and reference service history.
If not found: Ask if they're a new customer.Function 2: Create Emergency Job
CURL Command:
curl --request POST \
--url "https://api-integration.servicetitan.io/jpm/v2/tenant/YOUR_TENANT_ID/jobs" \
--header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
--header "ST-App-Key: YOUR_CLIENT_ID" \
--header "Content-Type: application/json" \
--data '{
"customerId": 12345,
"locationId": 67890,
"jobTypeId": 100,
"priority": "Emergency",
"summary": "No heat - emergency service",
"businessUnitId": 1
}'Steps:
"Import from CURL" → Paste command → "Parse"
Function name:
create_emergency_jobDescription:
Create emergency job in ServiceTitanClick "Create Function"
(Optional) Add instructions (needed if functions are created after the agent; otherwise, the AI builder will automatically manage it):
Use for EMERGENCIES: no heat, no AC, gas smell, water leak.
Get customer info from lookup_customer first.
Set priority to "Emergency".
Provide 2-hour ETA.Function 3: Get Available Slots
CURL Command:
curl --request GET \
--url "https://api-integration.servicetitan.io/jpm/v2/tenant/YOUR_TENANT_ID/appointments/slots?date=2024-03-15&duration=60&businessUnitId=1" \
--header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
--header "ST-App-Key: YOUR_CLIENT_ID"Steps:
"Import from CURL" → Paste → "Parse"
Function name:
get_available_slotsDescription:
Get available appointment timesClick "Create Function"
(Optional) Add instructions (needed if functions are created after the agent; otherwise, the AI builder will automatically manage it):
Use for NON-EMERGENCY appointments.
Ask customer for preferred date.
Present available times.Function 4: Book Appointment
CURL Command:
curl --request POST \
--url "https://api-integration.servicetitan.io/jpm/v2/tenant/YOUR_TENANT_ID/appointments" \
--header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
--header "ST-App-Key: YOUR_CLIENT_ID" \
--header "Content-Type: application/json" \
--data '{
"jobId": 98765,
"start": "2024-03-15T09:00:00Z",
"end": "2024-03-15T10:00:00Z"
}'Steps:
"Import from CURL" → Paste → "Parse"
Function name:
book_appointmentDescription:
Book appointment in ServiceTitanClick "Create Function"
(Optional) Add instructions (needed if functions are created after the agent; otherwise, the AI builder will automatically manage it):
CONFIRM all details before booking:
- Customer name
- Service type
- Date and time
- AddressLink All Functions
Go to agent → "Functions" tab
Add all four functions:
lookup_customercreate_emergency_jobget_available_slotsbook_appointment
Click "Save"
✅ Checkpoint: AI can now interact with ServiceTitan!
Step 5: Set Up Call Transfer (5 minutes)
Configure AI to transfer calls when needed.
When to Transfer
Billing disputes
Complex technical questions
Customer complaints
Warranty/refund requests
Customer requests a human
Configure
Agent → "Call Transfer" tab
Enable "Allow Call Transfer"
Choose "Warm Transfer" (AI explains the situation first)
Add destinations:
Option A: PBX Extensions
Office Manager: ext. 101
Service Manager: ext. 102
Billing: ext. 103Option B: Phone Numbers
Office Manager: +15551234567
Service Manager: +15551234568
Billing: +15551234569Add transfer instructions for each destination
Click "Save"
✅ Checkpoint: AI can transfer calls!
Step 6: Connect Your Phone System (10 minutes)
Choose one option:
Option A: PBX Extension (RECOMMENDED)
VoiceInfra's killer feature! Register as a SIP extension on your existing PBX.
Benefits:
✅ No new phone numbers needed
✅ Transfer to internal extensions (ext. 101, 102)
✅ Works with ANY PBX (3CX, Yeastar, FreePBX, Asterisk, etc.)
✅ 5-minute setup
How it works:

Setup:
Step 1: Create an Extension in Your PBX
PBX admin → Extensions → Add New
Configure:
Extension:
100Name:
AI ReceptionistUsername:
ai-receptionistPassword: [generate strong password]
Save and copy details
Step 2: Register in VoiceInfra
Phone Number → "Add Phone Number" → "Configure PBX Extension"
Enter:
Extension: 100
SIP Domain: pbx.yourcompany.com
Username: ai-receptionist
Password: [from Step 1]
Transport: TCPClick "Register"
Wait for: "Registered"
Step 3: Configure Call Routing
In your PBX, route calls to Extension 100:
Ring Group: Include ext. 100 with the office staff
Time-Based: After hours → ext. 100
IVR: "Press 1 for service" → ext. 100
Step 4: Test
Call your business number
Verify AI answers
Test transfer to the office extension
✅ Done! AI is now part of your phone system!
Option B: Twilio/SIP Provider
Phone Number → "Add Phone Number"
Choose: Twilio, or Custom SIP
Enter credentials (Account SID, Auth Token, Phone Number)
Click "Connect"
Option C: WhatsApp Business (Bonus)
Phone Number → "Add Phone Number" → "WhatsApp Business"
Follow the WhatsApp Business API setup
Need Meta Developer App Token for enabling WhatsApp SIP
Customers can call via WhatsApp (great for international)!
Step 7: Test Everything (10 minutes)
Test 1: Emergency Call
Call and say: "Our furnace stopped working and it's freezing!"
Expected:
AI recognizes an emergency
Asks for phone number
Looks up the customer
Creates an emergency job
Confirms technician dispatch
Provides 2-hour ETA
Verify in ServiceTitan: Emergency job created ✓
Test 2: Appointment Booking
Call and say: "I'd like to schedule a furnace tune-up."
Expected:
AI asks for phone number
Looks up the customer
Asks for preferred date
Shows available times
Confirms and books
Verify in ServiceTitan: Appointment created ✓
Test 3: FAQ Question
Ask: "What are your office hours?"
Expected: AI answers from the knowledge base ✓
Test 4: Call Transfer
Say: "I have a billing question."
Expected: AI transfers to billing extension ✓
Test 5: After-Hours
Call at 11 PM: "Our AC stopped working!"
Expected: AI answers and dispatches emergency ✓
✅ All tests passing? You're ready for production!
Step 8: Monitor & Improve (Ongoing)
View Analytics
Dashboard → "Analytics"
Track:
Total calls handled
Emergency jobs dispatched
Appointments booked
Calls transferred
Average call duration
Review Calls
"Call Logs" → Listen to recordings
Identify improvements:
Did AI handle correctly?
Appropriate tone?
Any misunderstandings?
Update Knowledge Base
Add new questions as you discover them:
Seasonal promotions
New services
Updated pricing
Holiday hours
Seasonal Adjustments
Summer: Prioritize AC emergencies, add summer promos
Winter: Prioritize heating emergencies, add winter promos
Troubleshooting
AI not answering calls?
Check PBX extension registration status.
Verify call routing points to the AI extension
Check that the firewall allows SIP traffic
Check if we need to whitelist VoiceInfra IPs
ServiceTitan API errors?
Verify credentials (Client ID, Secret, Tenant ID)
Check that the access token hasn't expired
Verify API access is enabled
Transfers not working?
Verify transfer destinations are correct.
Check PBX allows transfers from the AI extension
Use E.164 format for phone numbers (+15551234567)
AI misunderstanding?
Review call recordings
Update system prompt with examples
Add more detail to the knowledge base
Poor call quality?
Check internet bandwidth (100 kbps minimum per call)
Verify codec settings (G.711u/a)
Check for network congestion
FAQ
Q: How much does this cost?
A: VoiceInfra: ~$0.20-0.40 per 4-6 minutes of call.
Q: Do I need coding skills?
A: No! Zero coding required. CURL Function Creator does it all.
Q: How long does setup take?
A: 30 minutes or less following this tutorial.
Q: Can I use other scheduling systems?
A: Yes! Works with Jobber, Housecall Pro, FieldEdge, or any system with an API.
Q: What if the AI makes a mistake?
A: Review all calls, cancel/modify jobs in ServiceTitan, and continuously improve.
Q: Can customers tell it's an AI?
A: AI identifies itself. Customers appreciate honesty and 24/7 availability.
Q: Does this work with my existing number?
A: Yes! Using a PBX extension, you keep your existing number.
Q: Will this replace my receptionist?
A: No - it augments your team. Handles after-hours, overflow, and routine tasks.
Q: What's the ROI?
A: Most see ROI in 1-2 months from captured emergency calls and cost savings.
Q: Does this work for other businesses?
A: Yes! Plumbing, electrical, garage door, pool service, locksmith, pest control, etc.
Other Industries This Works For
Same tutorial, just change industry + API:
🔧 Plumbing - Emergency: Burst pipes, sewage backup
⚡ Electrical - Emergency: Power outage, sparking outlets
🚪Garage Door- Emergency: Won't close, broken spring
🏊 Pool Service - Routine: Maintenance scheduling
🔐 Locksmith - Emergency: Lockouts, broken locks
🐜 Pest Control - Emergency: Wasp nests, infestations
What's Next?
🎉 Congratulations! You've built a fully functional AI receptionist!
Recommended Next Steps:
Go Live Gradually
Start with after-hours only
Monitor for 1 week
Expand to overflow calls
Eventually, handle all routine calls
Add Advanced Features
Outbound appointment reminders
Follow-up calls after service
Customer satisfaction surveys
Scale
Multiple agents per location
Route based on service area
Centralized monitoring
Get Help
VoiceInfra Support:
Email: hello@voiceinfra.com
ServiceTitan:
Developer Portal: developer.servicetitan.io
Ready to get started? Sign up for VoiceInfra and build your AI receptionist in 30 minutes!
VoiceInfra's AI receptionist integrates with ServiceTitan to handle emergency calls 24/7, dispatch jobs, and book appointments automatically. Works with any PBX system via extension registration, Twilio, or WhatsApp Business. Build your AI receptionist in 30 minutes with no coding required, just paste CURL commands and go.



