AI voice agentPortfolio project
ServiceFlow VoiceOps
AI voice receptionist for HVAC and plumbing that triages emergencies and books real appointments.
Problem
An inbound service line has to tell an emergency from a routine booking in the first seconds of a call, and a booking agent that confidently confirms an appointment it never created is the worst failure it can have.
What I built
- Inbound voice agent on Vapi with GPT-4o for intent and tool calls, Deepgram nova-3 speech-to-text and ElevenLabs flash v2.5 text-to-speech.
- Intent triage: emergencies, requests for a human, or two failures route to a live transfer to an on-call technician. Service requests collect issue, address, name and phone, then move to booking.
- Live availability pulled from the Cal.com v2 API at call time. The server validates every startTime against live slots before creating the booking, so the model never invents an appointment time.
- Node/Express webhook on Vercel. Serverless cold starts re-fetch slots instead of skipping validation, API failures surface as an apology plus a transfer offer, and 23 offline tests run without credentials.
Stack
VapiGPT-4oDeepgramElevenLabsCal.com APINode.jsExpressVercel