Voice Receptionist

Answer every inbound call, book appointments, and take messages around the clock so a local business never sends a caller to voicemail.

Answer every inbound call, book appointments, and take messages around the clock so a local business never sends a caller to voicemail. The average local business misses roughly 30% of its calls, and a front-desk hire still costs 40+ hours of coverage a week. This answers every call, day or night.

This is the whole blueprint, nothing held back: the model, the tools, the exact prompt, the source on disk, and the setup. Everything you need to run Voice Receptionist yourself is on this page, and it deploys in an afternoon.

See it running

Agents like Voice Receptionist run behind a live voice console you can watch it take calls in. Here is that pattern, live: every action stays visible and reviewable. Click into it.

crescendo.51ultron.com/kits/voice-agent

What it does

Voice Receptionist handles the work end to end:

  • Answer every call in one ring, day or night, in a warm human voice
  • Book confirmed appointments straight into your calendar over the phone
  • Take a name and callback number on every message, no more lost leads
  • Warm-transfer real emergencies to a person on call

The anatomy

An agent is a composition, not a prompt: a model, the tools it is allowed to call, the integrations that give those tools reach, and the rules that keep it honest. Here is Voice Receptionist on one card.

Voice Receptionistblueprint
Model
claude-sonnet-4-6
Tools
check_availabilitybook_appointmenttake_messagetransfer_to_human
Integrations
TwilioCal.com
Guardrails
/workspace/business.md: hours, services, prices, address, policies; /workspace/calendar: live availability via cal.com

The instructions

Every run is governed by this prompt. It is short on purpose: enough to make Voice Receptionist reliable, not so much that it can misread itself. Copy it as a starting point for any agent you build.

Voice Receptionist
You are the front-desk voice receptionist for a local business. You answer every call in one ring, sound warm and human, and get the caller what they need in as few words as possible. CONTEXT loaded per business: - /workspace/business.md: hours, services, prices, address, policies - /workspace/calendar: live availability via Cal.com CALL FLOW: 1. Greet with the business name and ask how you can help. 2. Answer questions from business.md only. Never guess a price or a policy. 3. If the caller wants an appointment, check availability and call book_appointment. 4. If the caller needs a human or the request is out of scope, call take_message and tell them the owner will call back. 5. Confirm every booking and message back to the caller before ending. RULES: - Keep replies to one or two sentences. This is a phone call, not an essay. - Never invent hours, prices, or availability. If it is not in context, say you will have someone confirm. - Always capture a name and a callback number before ending a non-trivial call. - Escalate emergencies immediately with transfer_to_human.

The source, on disk

Three files carry the whole agent: the definition with its tools, the environment it expects, and the setup. Walk them.

voice-receptionist/voice-receptionist.ts1.5 KB
1import { agent, tool } from "@agent-sdk"
2import { z } from "zod"
3
4export default agent({
5 model: "claude-sonnet-4-6",
6 runtime: "voice",
7 permissionMode: "bypassPermissions",
8 maxTurns: 20,
9 systemPrompt, // prompt.md, verbatim
10 voice: {
11 provider: "twilio",
12 transport: "phone",
13 barge_in: true,
14 },
15 tools: {
16 check_availability: tool({
17 description: "Check open appointment slots",
18 inputSchema: z.object({
19 service: z.string(),
20 window: z.string().optional(),
21 }),
22 execute: async ({ service, window }) => {
23 // GET Cal.com availability
24 },
25 }),
26 book_appointment: tool({
27 description: "Book a confirmed appointment",
28 inputSchema: z.object({
29 name: z.string(),
30 phone: z.string(),
31 service: z.string(),
32 startsAt: z.string(),
33 }),
34 execute: async ({ name, phone, service, startsAt }) => {
35 // POST Cal.com booking, SMS confirmation
36 },
37 }),
38 take_message: tool({
39 description: "Capture a message for the owner",
40 inputSchema: z.object({
41 name: z.string(),
42 phone: z.string(),
43 reason: z.string(),
44 }),
45 execute: async ({ name, phone, reason }) => {
46 // push to owner inbox + SMS
47 },
48 }),
49 transfer_to_human: tool({
50 description: "Warm-transfer the live call to a person",
51 inputSchema: z.object({ reason: z.string() }),
52 execute: async ({ reason }) => {
53 // Twilio dial to on-call number
54 },
55 }),
56 },
57})

The business case

If you run an agency, Voice Receptionist is also a product. It sells into dental, salons, home services, clinics, restaurants, and the numbers work at very small scale.

$2,500

setup you can charge

$600/mo

monthly retainer

40+

hours saved weekly

Ship it

The whole install is a handful of commands and the keys from the env file. Run the list, then point Voice Receptionist at real work.

Deploy checklist

0 of 6

That is the entire blueprint: one model, 4 tools, and a prompt. Built by hand it costs you an afternoon. Inside Ultron it costs you a sentence, because you can build this exact agent in the workforce and watch it run before you commit to anything.

Build Voice Receptionist in Ultron

1
Describe what you want

Start from this blueprint or your own words. Ultron reads the intent and picks the tools.

2
It builds the agent

The model, the tools, the prompt, the console. Assembled in front of you, nothing to wire.

3
Watch it run

Test it live in the chat, then put it to work. You review what it does, it does the rest.

Keep reading