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.
606 calls handled
83 booked end-to-end
$50K+ completed revenue traced downstream
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.
Evaluation
A voice agent that sounds good in a demo can quietly fail in production — booking the wrong job type, mishandling an edge case, or regressing after a rule change nobody re-tested. Because every call already ends in an explicit recorded state, those states became the substrate for evaluation: the system's real behavior was measured against operational outcomes, not vibes, and regressions were caught by inspection before customers felt them.
The headline metric is how often answered calls became correctly booked jobs. Grounding qualification in each business's real rules and closing gaps found in production review moved booking conversion from roughly 85% to 90% — a change measured against recorded call outcomes, not estimated from demos.
Every call resolves to booked, callback, or human handoff, and each is recorded with its transcript. That gives a ground-truth outcome for every interaction to evaluate against, instead of sampling opinions about whether a call 'went well.'
Beyond conversion, calls were reviewed for whether the agent captured the right job type, honored service-area and availability constraints, and escalated exactly the calls that should not proceed autonomously. Booking a job is only correct if it's the right job on a valid slot.
Conversational turn-taking degrades if responses lag, so response and speech-synthesis timing were monitored as a first-class quality signal — a slow turn is a defect, not just a slow response.
Business rules, prompts, and integrations change constantly. Prior call scenarios were re-checked after changes so a fix in one area — a new pricing rule, a tightened escalation boundary — didn't silently degrade qualification or booking elsewhere.
Review findings feed rule, prompt, and configuration changes, which are then re-measured against the same recorded outcomes. Improvement is a scheduled discipline against real traffic, not a one-time launch.
This is the difference between a demo and production infrastructure: the system earns wider autonomy because its behavior is observable, measurable, and defended against regression — not because it sounded convincing once.
Results
The deployment is judged by what lands on the schedule and what the schedule turns into. These outcomes come from two related views of the same production system — the operational dashboard the agent writes to, and the downstream ServiceTitan reconciliation — reported separately, because they answer different questions and do not share one denominator.
606 calls handled — inbound customer calls answered end-to-end by the production voice agent.
83 appointments booked end-to-end — calls where the agent completed the booking workflow directly — including 71 after-hours appointments captured while the business was closed.
~$51K in attributed booked job value, of which ~$25K was after-hours — the value of jobs tied to AI-created appointments in the operational dashboard.
Downstream in ServiceTitan: 128 jobs booked, 66 completed, and $50,283 in completed revenue reconciled back to jobs the AI booked — an average completed job value of $762.
Booked jobs land directly in the CRM and dispatch workflow with structured details, replacing manual record creation; calls the agent should not handle autonomously reach humans as clean handoffs with context, not cold transfers.
Two things matter about these numbers. First, the chain is explicit end to end — customer call → AI conversation → appointment created → job created in ServiceTitan → job completed → revenue reconciled back to the original booking — so revenue is traced, not modeled. Second, this is attribution, not incrementality: the system can prove the AI handled the call and booked the job, but not that every dollar was revenue the business would otherwise have lost. Building the instrumentation that makes that distinction honest is itself part of the work.
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.