Industry context
HVAC, plumbing, pest control, and broader home services.
Production voice agents that answer inbound calls, qualify the job, and book appointments directly into CRM and dispatch systems.
Home-service businesses lose revenue every time a call rings out. This case study covers the full forward-deployed path: mapping how each business qualifies and books work, designing a voice agent around those rules, integrating telephony with CRM and dispatch platforms, and operating the system in production against real call traffic.
~$20K/mo in booked appointment revenue
24/7 inbound call coverage
ServiceTitan & FieldRoutes integrations
On This Page
Context
Context
For HVAC, plumbing, and pest-control operators, the phone is the top of the funnel. Every inbound call is a job that will either be booked, deferred, or lost — and the operational machinery behind that decision spans scheduling, dispatch, service-area rules, CRM records, and callback workflows.
Industry context
HVAC, plumbing, pest control, and broader home services.
Operational setting
Inbound call handling, qualification, appointment scheduling, dispatch, and callback workflows.
My role
Co-Founder & Technical Lead at Playmaker — customer discovery, solution architecture, implementation, production deployment, and post-launch optimization.
What was at stake
Missed-call revenue, booking quality, dispatch efficiency, and whether the business can answer 24/7 without staffing phones 24/7.
Problem
The failure mode is simple and expensive: a customer with a real problem calls, nobody answers, and the first competitor to pick up wins the job. The operational reality behind it is harder — coverage, qualification, and booking each depend on people being available and making consistent decisions under pressure.
Service businesses cannot staff phones around the clock. Outside business hours, callers reached voicemail — and callers with urgent problems rarely leave one. They call the next company on the list.
During seasonal spikes, more calls arrived than the team could answer. Overflow was invisible: the business never knew which calls it lost or what they were worth.
Urgency, service-area fit, membership status, and job value were assessed differently by different people. Similar calls produced different outcomes.
Even answered calls required a human to check availability, create or find the customer record, and book the job in the CRM. Every manual step added delay and dropped detail before dispatch.
The business did not need a phone bot that could chat. It needed a system that could carry a call all the way to a correctly booked job inside its real scheduling and dispatch workflow — or hand it to a human with full context when it should not proceed alone.
Discovery
The agent's behavior had to come from how the business actually works — not from generic call scripts. Discovery meant embedding with the people who run intake and dispatch and converting their judgment into explicit, testable rules.
Shadowed live call handling to capture what actually gets asked, booked, deferred, and escalated — including the exceptions no script covers.
The gap between documented process and real behavior is where deployments fail; this is where the real requirements came from.
Captured service areas, urgency tiers, membership handling, pricing boundaries, and scheduling constraints from stakeholders — most of it undocumented tribal knowledge.
These rules became the agent's qualification and booking logic, encoded per customer rather than hard-coded into the product.
Defined explicitly what the agent may do on its own — book standard jobs, schedule callbacks — and what must escalate to a human, such as emergencies and out-of-policy requests.
A conservative boundary earned operator trust first; autonomy expanded only as production behavior proved out.
Aligned with owners on how the system would be judged: answered-call coverage, booking outcomes, and revenue from appointments the agent booked.
Defining the metric up front kept the deployment accountable to a business outcome, not to demo quality.
Architecture
The system is organized as a pipeline from telephony to operational outcome. Each layer has one responsibility, and every call ends in an explicit, recorded state: a booked appointment, a scheduled callback, or a human handoff with context.
Inbound call — after-hours, overflow, or front-line coverage.
Twilio
Call routing and bidirectional audio streaming into the voice runtime.
OpenAIElevenLabs
Understands the caller, reasons over the customer's business rules, and responds in a natural voice.
FastAPIRedis
Conversation state, qualification logic, tool invocation, and escalation decisions.
ServiceTitanFieldRoutesREST APIsWebhooks
Availability lookup, customer records, appointment booking, and callback creation.
Booked appointment, scheduled callback, or human handoff with full context.
PostgreSQLDashboard
Every call logged with its outcome for review, diagnosis, and optimization.
Telephony is handled by Twilio — call routing and bidirectional audio streaming into the voice runtime.
The voice runtime combines speech recognition, OpenAI reasoning over the customer's business rules, and ElevenLabs voice synthesis for natural responses.
FastAPI services orchestrate the conversation: state in Redis, qualification logic, tool invocation, and escalation decisions.
Operational tools connect to ServiceTitan and FieldRoutes over REST APIs and webhooks — availability lookup, customer records, appointment creation, and callbacks.
Every call and outcome is recorded in PostgreSQL and surfaced in a dashboard for review, so failures are found by inspection rather than by customer complaint.
Integrations
A voice agent that cannot write into the business's systems is an answering machine. Most of the engineering effort lived in the integration layer — making third-party platforms behave reliably inside a real-time conversation.
Inbound call routing, media streaming, and the telephony edge of the system.
Conversational reasoning, qualification against business rules, and tool-call orchestration.
Natural voice synthesis — the difference between a caller staying on the line and hanging up.
CRM and dispatch integration: customer records, job types, technician availability, and appointment booking.
CRM integration for pest-control operations — the same booking outcomes against a different platform's data model.
Synchronous lookups during the call; asynchronous confirmation and follow-up events after it.
Deployment
The system runs as containerized services with the same delivery discipline as any production platform — versioned, tested, and deployed through CI/CD rather than by hand.
FastAPI services packaged in Docker and deployed on AWS.
PostgreSQL for call records, outcomes, and configuration; Redis for conversation state.
A TypeScript / React (Next.js) dashboard for call review and operational visibility.
GitHub Actions CI/CD for automated build, test, and deployment.
Per-customer configuration — service areas, rules, and integrations — kept out of code so new deployments are configuration work, not forks. This pipeline cut new-tenant deployment time by 80%.
Operational Challenges
Live phone calls are an unforgiving runtime. The engineering that made the system trustworthy was almost entirely about failure modes, timing, and handoffs — not about the happy path.
Conversational turn-taking collapses if responses lag. Response generation and speech synthesis are streamed so the caller hears the agent begin speaking without dead air.
Real callers talk over the agent, change their minds mid-sentence, and answer questions out of order. The conversation logic had to handle interruption and correction rather than assume a scripted flow.
Matching a caller to an existing customer record — without creating duplicates and without interrogating the caller — required careful lookup logic against each CRM's data model.
CRM APIs time out and scheduling lookups fail while a customer is on the line. Every tool call has a fallback path, degrading to callback capture instead of a dead end.
Booking means honoring technician availability, service areas, and job-type rules — not inventing a slot. Scheduling constraints came directly from the dispatch workflow.
When a call needs a human, the handoff includes what the caller said and what the agent did — so the customer never starts over.
Calls, transcripts, and outcomes are logged and reviewed in the dashboard. Post-launch optimization is a scheduled discipline: review conversations, diagnose failures, tighten rules, and expand autonomy.
Results
The deployment is judged by what lands on the schedule. These outcomes reflect the system running against real inbound call traffic in live operations.
Approximately $20,000 per month in revenue from AI-booked home-service appointments.
24/7 inbound coverage — after-hours and overflow calls are answered and booked instead of going to voicemail.
Booked jobs land directly in the CRM and dispatch workflow with structured details, replacing manual record creation.
Calls that should not be handled autonomously reach humans as clean handoffs with context, not cold transfers.
The system's value is continuity: the same call that used to end at a voicemail now ends as a scheduled job with a technician assigned — without adding headcount to the phone room.
What This Demonstrates
This deployment is the full FDE loop in one engagement: ambiguous customer environment in, measurable operational outcome out.
01
Entering a live operation, extracting how it actually works, and converting that into deployable system behavior.
02
Owning the entire path — discovery, architecture, integration, production deployment, and post-launch optimization — rather than one slice of it.
03
Integration depth across telephony, LLM orchestration, voice synthesis, CRM, dispatch, and scheduling under real-world failure modes.