An AI agent that answers, reschedules and confirms installs in two languages

A Phoenix solar and HVAC installer was losing rescheduling calls to voicemail while crews were on roofs. We put an inbound voice agent on their main line that verifies the caller, detects Spanish and translates live, offers real crew openings from the dispatch calendar, rebooks the job, texts a confirmation and writes every action back to the CRM, while dispatchers watch the call unfold in a live console.

82%
Calls resolved by AI
< 1s
Response latency
2
Languages on the line

What they came with

Calls that came in after the office closed went to voicemail, and so did the overflow when the phones were busiest. In home services a missed call is usually a booked install, and the callback the next morning arrives after the customer has already found someone else. Inbound came in both English and Spanish, which narrowed who on the rota could take any given call. On the calls that were answered, what was agreed lived in the head of whoever answered.

What the engagement covered

  • Live transcript with automatic Spanish to English translation for dispatchers
  • Real crew availability pulled from the dispatch calendar and booked during the call
  • Every action logged to the CRM, with one-click hand off to a human when needed

Technical detail

Streaming audio, not turn taking

Twilio media streams feed Deepgram continuously and partial transcripts reach the model before the caller has finished speaking. The agent starts forming a response mid-utterance, which is what keeps the gap between turns short; a fast round trip on its own would not.

Availability checked at confirm time

The agent reads installer availability when it offers a slot and reads it again before it writes the booking, so two calls in flight cannot both take the same window. A slot that has gone in between is re-offered rather than double booked.

Language handled per call

Recognition runs bilingual and the prompt and voice follow whichever language the caller opens in, including mid-call switches. There is no separate Spanish number and no routing decision to get wrong before the call is answered.

Escalation carries the transcript

When intent stays unresolved or the caller asks for a person, the call warm-transfers with the running transcript and captured details attached, so the human does not restart the conversation. Transcript and disposition are written back to the CRM whether or not a human ever joined.

The stack

Telephony

Twilio Programmable VoiceTwilio Media Streams

Speech and AI

DeepgramGPT-4o

Backend

FastAPIPythonPostgreSQLRedis

Infrastructure

DockerAWS
Practice
Live Voice Agent
Sector
Home Services
Shape
Client engagement
Stack
OpenAI Realtime, Twilio, ServiceTitan API