cd /news/ai-agents/build-an-ai-receptionist-with-whispe… · home › topics › ai-agents › article
[ARTICLE · art-160307] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=· neutral

Build an AI Receptionist With Whisper, Claude, Chatterbox and LiveKit: Architecture, Latency Budget and Starter Code

A developer has published a reference architecture for an AI phone receptionist built on LiveKit Agents for telephony and turn-taking, Whisper for speech-to-text, Claude for reasoning and tool calls, and Resemble AI's Chatterbox for streamed text-to-speech. The writeup lays out a per-stage latency budget from end-of-turn detection to first TTS audio, plus starter Python code defining function tools for checking slots, booking appointments and taking messages. It cites Patient Prism data that 31% of callers to 8,280 dental locations hung up before reaching anyone.

by read4 min views6 publishedOct 29, 2026

This post is AI-assisted.

Most "AI receptionist" tutorials stop at a chatbot that talks. A receptionist a dental clinic will actually pay for has to pick up a real phone line, understand messy speech, follow the clinic's rules, book into a real calendar and do all of it fast enough that the caller never notices a gap.

This is the architecture we use as a starting point, built from four pieces you can run yourself:

Job Tool License
Phone line, streaming, turn taking LiveKit Agents Apache 2.0 (turn detector model under the LiveKit Model License)
Speech to text Whisper MIT
Reasoning and tool calls Claude (Anthropic API) Paid API
Text to speech, voice cloning Chatterbox by Resemble AI MIT

Patient Prism's analysis of 11.5 million calls to 8,280 dental locations found 31% of callers hung up before reaching anyone (report). Only 42% of consumers say they leave a voicemail (CallRail survey). Missed calls are lost bookings, which makes "answer every call" an easy thing to sell.

The business math people quote is 100 clinics × $300 a month = $30,000 MRR. The engineering below is what makes that number survivable.

PSTN caller
   │  SIP trunk
   ▼
LiveKit server (room per call)
   │  audio frames
   ▼
Agent worker (Python, LiveKit Agents)
   ├─ VAD + turn detector  → decides "caller finished"
   ├─ STT adapter          → faster-whisper on GPU (streaming chunks)
   ├─ LLM                  → Claude with tools: check_slots, book, take_message, transfer
   └─ TTS adapter          → Chatterbox (clinic's consented voice), streamed sentence by sentence
   │
   ▼
Clinic systems: calendar / practice software / CRM / SMS

Key design choices:

book_appointment, your code books it, and the result goes back to the model. Callers start feeling awkward somewhere past a second of silence. Rough budget from "caller stops talking" to "agent audio starts":

Stage Target
End of turn detection 200 to 400 ms
Final transcript chunk 100 to 300 ms
Claude first tokens (short system prompt, cached rules) 300 to 700 ms
First sentence of TTS audio 150 to 400 ms

These are targets to measure against, not guarantees. Measure each stage per call and log it. The biggest wins usually come from shorter prompts, streaming TTS by sentence and keeping the GPU workers warm.

LiveKit's starter template (lk agent init my-agent --template agent-starter-python) gives you a working agent with hosted models. The API evolves quickly, so treat the snippet below as the shape of the code and check the current voice AI quickstart for exact signatures.

from livekit import agents
from livekit.agents import Agent, AgentServer, AgentSession, function_tool

from adapters import WhisperSTT, ClaudeLLM, ChatterboxTTS  # your thin adapters

CLINIC_RULES = """You are the receptionist for Bright Smile Dental.
Hours: Mon to Sat, 9am to 6pm. Book cleanings, checkups and consultations only.
Never give medical advice. Transfer emergencies, billing disputes and upset callers to a human.
Keep answers under two sentences."""

class Receptionist(Agent):
    def __init__(self):
        super().__init__(instructions=CLINIC_RULES)

    @function_tool
    async def check_slots(self, date: str) -> list[str]:
        """Return free appointment slots for a date (YYYY-MM-DD)."""
        return await calendar.free_slots(date)

    @function_tool
    async def book_appointment(self, name: str, phone: str, slot: str, reason: str) -> str:
        """Book a slot and send an SMS confirmation."""
        booking = await calendar.book(name, phone, slot, reason)
        await sms.send(phone, f"Confirmed: {slot} at Bright Smile Dental")
        return booking.id

server = AgentServer()

@server.rtc_session(agent_name="receptionist")
async def entrypoint(ctx: agents.JobContext):
    session = AgentSession(
        stt=WhisperSTT(model="large-v3", device="cuda"),
        llm=ClaudeLLM(),
        tts=ChatterboxTTS(voice_ref="voices/clinic_consented.wav"),
    )
    await session.start(room=ctx.room, agent=Receptionist())
    await session.generate_reply(instructions="Greet the caller and ask how you can help.")

if __name__ == "__main__":
    agents.cli.run_app(server)

The adapters are small classes that implement LiveKit's STT, LLM and TTS interfaces around faster-whisper, the Anthropic SDK and the Chatterbox Python package. Writing them yourself keeps every model swappable.

The models are commodities now. The value is in the boring parts: integrations with each niche's software, reliable transfers, and reporting that shows the owner how many calls were saved. Pick one niche, nail those three, and the $30K MRR math stops being a slide.

Axionry is an AI product development studio that builds production voice agents. See the AI receptionist build, our voice AI development service, or price your setup with the voice AI cost calculator at axionry.com.

── more in #ai-agents 4 stories · sorted by recency
── more on @livekit 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/build-an-ai-receptio…] indexed:0 read:4min 2026-10-29 · —