voice-agent-smb
24/7 AI receptionist for HVAC/plumbing/dental SMBs. $299/mo replaces $1500+/mo answering services.
API quickstart
After purchase, you'll receive an API key (ock_...) by email. Call the endpoint below with that key as the bearer token.
business_name— stringhours— stringservices— stringcaller_input— stringhistory— string (optional)
curl -X POST -H 'Authorization: Bearer ock_xxx' \
-H 'Content-Type: application/json' \
-d '{"business_name": "Joe's Plumbing", "hours": "Mon-Fri 8am-6pm", "services": "Drain cleaning, water heater install, leak repair", "caller_input": "Hi, my water heater is leaking, can someone come today?"}' \
https://openclawapi.vercel.app/v1/voice-agent-smb/runLaunch kit
voice-agent-smb — launch kit
1-liner
24/7 AI receptionist for HVAC/plumbing/dental SMBs. $299/mo replaces $1500+/mo answering services.
Tweet hook
One missed $1,500 emergency-plumbing job pays for our service 5x over.
AnswerConnect is $389/mo. Smith.ai is $370+. Both human-staffed.
AI receptionist running on Twilio + Claude + ElevenLabs: $299/mo. Books appointments, escalates emergencies, logs everything.
Demo + setup 🧵
- r/smallbusiness: "Tested an AI receptionist for 60 days. Here's the data."
- r/HVAC: "Anyone using AI to answer after-hours calls?"
- r/Plumbing: same
Cold-email ICP
HVAC / plumbing / electrical / locksmith / dental / garage-door — owner-operated, 1-15 trucks, $500K-5M revenue. Pull from Yelp / Angie / Google Business. Filter for "open 24 hours" or "emergency service" claims.
Cold-email template
Subject: missed an emergency call last weekend?
Hi {first} — quick offer for {business name}.
Most {plumbing/HVAC} shops lose 30-50% of after-hours emergency calls
because the answering service either drops them or quotes wrong. We
built an AI receptionist that:
- Answers 24/7 (no missed calls)
- Books standard service via your booking link
- Recognizes emergency keywords ("burst", "flood") and transfers to
your emergency line
- Costs $299/mo instead of $1500+ for a human service
ROI: one missed $1,500 emergency = 5 months covered.
Free 30-day pilot on a separate forwarded number. Reply for setup.
SEO content
- "AI receptionist for plumbers — comparison + ROI"
- "Why your answering service is losing emergency calls"
- "How to forward Twilio to AI: setup guide"
- "Cost comparison: human answering service vs AI"
- "Privacy + HIPAA: when does the receptionist need a BAA?"
Documentation
voice-agent-smb
24/7 AI phone receptionist for SMB service businesses (HVAC, plumbing, dental, locksmith, garage door). Books appointments, takes messages, flags emergencies for transfer. Twilio + Claude + ElevenLabs.
Pricing
- $299/mo per business — up to 200 calls/mo, 1 number, business hours
- $599/mo — up to 800 calls/mo, 24/7, after-hours voicemail-to-text
- $999/mo — multi-location, custom integrations (Jobber, ServiceTitan, Housecall Pro), CRM push
Compare:
- AnswerConnect: $179-389/mo (human receptionists, English only)
- Smith.ai: $370-3,250/mo
- Goodcall: $59-149/mo (limited AI capabilities, no service-business focus)
Architecture
Caller dials business number
│
▼
┌──────────────────────┐
│ Twilio routes to │
│ /twilio/voice │
└──────────┬───────────┘
│ TwiML <Connect><Stream>
▼
┌──────────────────────┐ ┌─────────────────┐
│ /twilio/stream WS │◄──►│ Twilio Media │
│ (mu-law 8kHz audio) │ │ Stream │
└──────────┬───────────┘ └─────────────────┘
│
▼
┌──────────────────────┐
│ STT: Deepgram WS │ (or Whisper local)
│ → text transcription │
└──────────┬───────────┘
│ text
▼
┌──────────────────────┐
│ agent.py │
│ Claude Haiku 4.5 │
│ streaming reply │
└──────────┬───────────┘
│ text chunks
▼
┌──────────────────────┐
│ TTS: ElevenLabs WS │ (streaming)
│ → mu-law audio │
└──────────┬───────────┘
│ frames
▼
back to Twilio
What's shipped in v0
- ✅ Persona configuration (per-business YAML)
- ✅ Dialog state machine + slot extraction (callback#, ZIP)
- ✅ Emergency-keyword escalation flag
- ✅ Claude reply generation (
agent.py— single-shot + streaming) - ✅ FastAPI Twilio webhook scaffold (TwiML + WS endpoint)
- ⚠️ Audio codec wiring is STUB — operator wires Deepgram + ElevenLabs
v1 wiring TODO
The hot-path audio pipeline:
- Twilio inbound mu-law → base64 envelopes
- Decode + send to Deepgram WS for streaming STT
- Pipe transcribed turns to
agent.stream_reply - Stream Claude output to ElevenLabs WS for streaming TTS
- Receive ElevenLabs PCM, encode mu-law, base64, send back to Twilio
This is ~300 lines of glue code. References:
- Twilio Media Streams docs: twilio.com/docs/voice/twiml/stream
- Deepgram streaming: developers.deepgram.com/docs/streaming
- ElevenLabs streaming: elevenlabs.io/docs/api-reference/text-to-speech-stream
Run locally
cd C:\openclaw-products\voice-agent-smb
python -m venv .venv
.\.venv\Scripts\activate
pip install -e ".[dev]"
$env:ANTHROPIC_API_KEY="sk-ant-..."
$env:PERSONA_FILE="examples/plumbing-persona.yaml"
uvicorn src.twilio_app:app --port 8090
# Expose via ngrok / cloudflared so Twilio can reach it
# Configure your Twilio number's Voice webhook to https://<tunnel>/twilio/voice
Test
pytest tests/ -v
Sales pitch (for the cold-outreach playbook)
Target: HVAC, plumbing, electrical, locksmith, dental, garage-door, landscaping. Owner-operated, 1-15 trucks, $500K-5M revenue.
Hook: "You're losing 30-50% of after-hours calls. We answer them all for $299/mo. Books a slot if it's routine, transfers to you if it's an emergency."
The ROI math: One missed $1,500 emergency job/mo pays for the service ~5x over.