openclaw
← All products
Communication & Outreach

voice-agent-smb

24/7 AI receptionist for HVAC/plumbing/dental SMBs. $299/mo replaces $1500+/mo answering services.

Available plan
voice-agent SMB Standard
$299/mo
24/7 AI receptionist — up to 200 calls/mo, 1 number
subscription monthly · Get plan →
Source on GitHub

API quickstart

After purchase, you'll receive an API key (ock_...) by email. Call the endpoint below with that key as the bearer token.

Request fields
  • business_namestring
  • hoursstring
  • servicesstring
  • caller_inputstring
  • historystring (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/run
Model: claude-haiku-4-5-20251001. Quota enforced per plan.

Launch 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 🧵

Reddit

  • 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

  1. "AI receptionist for plumbers — comparison + ROI"
  2. "Why your answering service is losing emergency calls"
  3. "How to forward Twilio to AI: setup guide"
  4. "Cost comparison: human answering service vs AI"
  5. "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:

  1. Twilio inbound mu-law → base64 envelopes
  2. Decode + send to Deepgram WS for streaming STT
  3. Pipe transcribed turns to agent.stream_reply
  4. Stream Claude output to ElevenLabs WS for streaming TTS
  5. 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.