What This Actually Is
A receptionist that never misses a call, for less than a lunch
Most people know Fish Audio as the cheap voice cloner. A few weeks ago they quietly shipped something bigger: a full voice agent builder. No-code console, a knowledge base you upload your own docs into, real phone numbers, call transfers to a human, and automatic summaries after every call. All of it under the same login you'd use to clone your voice.
I built a "talk with me" page on my site with their voice clone (one reel + a few 10-second recordings, about 2 minutes of audio total). That was the fun demo. This guide is the practical version: a phone receptionist for a real business, built entirely inside the Fish Audio app.
Here's what it does when someone calls: greets them, answers questions from a doc you wrote (hours, services, pricing, location), takes a message with name and callback number, transfers to your cell when a human is needed (and briefs you first), and writes a summary plus structured notes when the call ends. Optionally, it books appointments straight onto your calendar.
No Twilio account. No n8n. No Retell or Vapi. Fish handles the phone line, the speech-to-text, the AI, and the voice. You handle the prompt and the doc, and Claude writes both of those for you.
Before You Start
The only 2 tools you need
Fish Audio, Plus plan
Voice clone, agent builder, phone number, transfers, summaries. The whole thing. $15/mo through August 31 (their anniversary sale is 50% off), $30/mo after. The free tier is personal-use only, so a receptionist on a business line needs Plus. Sign up at fish.audio.
Claude (or ChatGPT, or Codex, whatever you already use)
It writes the receptionist's instructions and the knowledge doc from a 10-question interview. Both prompts are below with copy buttons. Claude Code only comes in at the very last step, and only if you want the agent to book appointments on its own.
Step 1
Sign up for Fish Audio and grab Plus
Go to fish.audio, click Sign Up Free, then Pricing → Plus. The 50% off is already baked into the price at checkout through August 31, no code needed.
Why not free? The free tier says "personal use only" right on the pricing page. The second your receptionist picks up a customer's call, that's commercial use. Plus is the floor.
Step 2 (optional, but it's the fun part)
Clone your voice
Click Create Voice → Instant Voice Clone. Upload any clean recording of you talking (a reel works, video files are accepted). When it prompts you, record about 10 seconds on top of it. Hit save. Training takes about a minute, and you have a voice model that will show up under "My Voices" in the agent builder later.
Don't want your own voice on the line? Skip this. In Step 5 you can pick from their library, or use Voice Design to describe one in a sentence ("a friendly woman in her 30s, light Midwest accent, warm, unhurried") and get an original voice nobody else is using.
Want a better clone long-term?
Professional Voice Clone is included with Plus (1 slot). It wants 10+ minutes of clean audio, a live ownership check where you read a passage aloud, and 1 to 2 hours of training. It can't be deleted once finished, so only start it for a voice you mean to keep.
Only clone a voice you own
Yours, or someone who's given you written permission. The instant clone doesn't verify ownership, which means the responsibility is on you.
Step 3
Have Claude write the receptionist's brain
Open Claude (or ChatGPT) and paste this. It interviews you about your business, then hands back two things: the system prompt (the agent's instructions) and a knowledge doc (every fact it should know). You don't write either one yourself.
Copy-paste prompt: the receptionist interview
I'm building an AI phone receptionist for my business using Fish Audio Agents. First, ask me 10 questions about my business, one at a time, and wait for each answer before asking the next: 1. What the business is and what we do 2. Our hours, including holidays 3. Every service we offer, with prices (or price ranges) 4. Our address, parking, and how to find us 5. Our service area (if we travel to customers) 6. How customers book with us today 7. What the receptionist should say to sales calls and solicitors 8. What questions come up on the phone most often, and the answers 9. What it should do if it doesn't know the answer 10. When it should hand the call to a real person, and what to say while doing it When you have my answers, write me two things: THING 1: A SYSTEM PROMPT for the receptionist, under 500 words. This is a voice agent, so every reply is spoken out loud. Rules for the prompt: - Keep every answer to one or two sentences, conversational, no lists, no markdown - State who the agent is (give it a name) and the business name - State what it can do and what it can't - How to take a message: always get the caller's name, callback number, and reason for calling, then repeat them back - When to transfer to a human, using the answers I gave you - Never make up prices, availability, or policies it doesn't have. If unsure, take a message - Be warm and quick. Callers are busy THING 2: A KNOWLEDGE DOC as plain text I can save as a .txt file. Include every fact the agent should know: hours, services with prices, address and directions, parking, payment methods, the FAQs and answers, and booking rules. Use simple headings and short lines. No markdown tables. Give me THING 1 in one code block and THING 2 in a second code block so I can copy each one.
Answer the questions honestly. When it's done, save the knowledge doc as knowledge.txt on your desktop and copy the system prompt. Fish Audio's limits, so you know: the system prompt maxes at 4,000 tokens (keep it under 2,000, roughly 1,500 words, for speed). Knowledge files must be .txt or .md, 1MB max. No PDFs.
Step 4
Create the agent
Go to fish.audio/app/agents (it's in the left sidebar as "Agents"). Click New agent, give it a name, and you land in the Builder. Everything from here on happens in the Builder's tabs.
Step 5
Give it a brain and a voice
You're on the Configuration page. Fill in these five things. There's no save button, it autosaves (watch for "Saved" at the bottom left).
System prompt: paste what Claude wrote in Step 3.
First message: set it to "Fixed" and type your greeting. Something like "Thanks for calling Region Family Dental, this is Sarah. How can I help you today?"
Voice: open the voice card, click "More voices," then "My Voices" for your clone from Step 2, or browse the library. Leave Speaking language on English (it also does Spanish, French, German, Japanese, Chinese, Korean).
Expressive mode: on. It adds natural pauses, emphasis, and tone on its own, so you don't have to write delivery rules into the prompt. Bump Speaking speed to 1.1 or 1.2, English sounds more natural slightly faster.
Conversation settings: leave the defaults. Callers can interrupt (they should), turn-taking is "Balanced," and calls cap at 30 minutes.
Step 6
Upload the knowledge doc
Click the Knowledge base tab → New private file → upload knowledge.txt. Now it answers hours, pricing, and FAQ questions from your actual info instead of making things up.
"Private" means it belongs to this one agent. If you end up running a second agent off the same info (say, a voice widget on your website too), upload it to the workspace Knowledge base instead and attach it to both. Edit it once, both agents update.
Step 7
Turn on call transfer
Click the Phone page. Under Inbound calls, turn on Call transfer. Give it a name ("Owner cell"), enter your cell number in full format (+1 219 555 0123), and pick a mode:
Warm (pick this one)
The caller goes on hold with music. The agent rings your cell on a private line and briefs you in a sentence or two: "Mike is calling about a quote for a roof replacement at 4th and Main." Then it connects you. Your caller ID shows your business number, so you know it's the agent. Set "Warm connect" to Confirm so you say yes before the merge.
Cold
The agent says "let me transfer you" and drops off. Simpler, but you pick up blind with no idea who's calling or why.
Then add one line to the bottom of your system prompt so it knows when to hand off. By default it only transfers when the caller asks for a person or it clearly can't help. Sharpen that: "Transfer to a human whenever the caller asks for a person, has a complaint, or mentions a refund."
If you can't be reached (you're on another call, it hits voicemail), the caller comes off hold and the agent apologizes and takes a message instead. One transfer destination per agent for now.
Step 8
Test it like a customer
Top bar → Test call → Start call. Allow the mic. Now talk to it like five different callers:
Ask something in the doc. "What time do you close on Saturdays?"
Ask something NOT in the doc. Does it admit it doesn't know and take a message, or does it make something up?
Ask for a human. Does it transfer?
Cut it off mid-sentence. "Actually, never mind." Does it stop and listen?
Be a solicitor. "Hi, I'm calling about your Google listing." Does it shut that down the way you told it to?
Every miss, edit the prompt, hang up, call again. Test calls always run your latest draft, so the fix is live the second you redial. They're capped at 10 minutes and never show up in your call history, so test as much as you want.
Step 9
Set up the post-call summary
Click the Analysis page. Summary is already on. Add a few Data fields so every call gets logged with structure, not just a paragraph:
Data fields to add (name, type, description)
caller_name text "The caller's name"
callback_number text "The best number to reach the caller"
reason_for_call text "One sentence on why they called"
wants_appointment boolean "Did the caller ask to book or reschedule?"
urgency enum low / normal / urgent
Then add one Success criterion: "The agent either answered the caller's question, booked them, took a complete message, or transferred them to a human." Every call gets a pass / fail / unknown verdict with a reason. That's how you audit the receptionist without listening to every recording.
Step 10
Get a phone number
Buy a fresh number (do this first, it's 30 seconds)
Go to the Phone numbers page → Buy number → pick US or Canada and your area code → confirm. Bind it to your agent right there. Local numbers only (no toll-free yet), billed monthly in daily slices, price shown before you buy. These numbers support transfers out of the box.
Import the number you already have (later, if you want)
Phone numbers → Import number. Your number stays with your carrier, which routes calls to Fish over something called a SIP trunk. No rental fee, no phone charges on the Fish side. It's the only way to use a non-US/CA number. It's also the one technical step in this whole guide (you or your phone provider set up the trunk), which is why I'd start with a fresh number and import later.
Step 11
Publish
Top bar → Publish. This is the step people forget. Phone calls run the published version, never the draft. Nothing goes live until you click this.
Each publish creates a numbered version you can restore later. Keep editing the draft as much as you want, callers won't hear a thing until you publish again.
Step 12
Call it, then roll it out the safe way
Call the new number from your own phone. For real. Have a full conversation. Then pick how you want to roll it out:
Missed-call catcher (start here)
Keep your main number exactly as it is. Set it to forward to the agent's number only when you don't answer after about 4 rings. Every carrier supports this, it's called conditional call forwarding (on iPhone it's under Settings → Phone → Call Forwarding on some carriers, otherwise it's a short star code from your carrier). The agent only catches the calls you were already missing. Zero risk to the calls you already answer.
After-hours only
Forward to the agent outside business hours. It takes messages and books overnight, you follow up in the morning.
Full receptionist
Put the new number everywhere, or import your existing one (Step 10) so nothing changes for customers.
Every call lands in Conversation history with the transcript, a recording of each side, and the summary and data fields from Step 9. Recording is on by default. Tell callers they're being recorded where your state requires it (Indiana is one-party consent, but callers from two-party states like Illinois are a different story, so a quick "this call may be recorded" in the greeting covers you).
Step 13 (optional)
Let it actually book
Everything above is done entirely inside the Fish Audio app. Without this step, the agent collects the booking details (name, number, preferred time) and puts them in the summary for you to book by hand. That's already a huge win. This step is for having it put the appointment on your calendar itself, and it's the one place Claude Code comes in.
In the Builder, click Tools → Add tool → Webhook. A webhook tool is just "when the agent decides to book, send the details to this web address." Fill it in:
Webhook tool settings
Name: book_appointment
Description: "Book an appointment. Use only after the caller has confirmed a specific day and time and given their name and phone number."
Arguments: name ("Caller's full name")
phone ("Caller's phone number")
requested_time ("The agreed date and time, in the caller's words")
service ("What the appointment is for")
Method: POST
URL + headers: (Claude Code gives you these below)
Execution: Blocking (the agent waits, then reads the confirmation back)
Now the URL. Open Claude Code and paste this. It builds and deploys a tiny endpoint that turns "Tuesday at 2pm" into a real calendar booking, then hands you the URL and header to paste into the tool above.
Copy-paste prompt for Claude Code: the booking endpoint
I have an AI phone receptionist on Fish Audio Agents. I want it to book appointments onto my calendar through a webhook tool.
Build me a small endpoint that:
- Accepts a JSON POST with these fields: name, phone, requested_time, service
- Converts requested_time (which arrives as natural language, like "Tuesday at 2pm") into a real datetime in the America/Chicago timezone
- Creates a booking on my [Cal.com / Google Calendar / Calendly, pick the one I use and ask me for any keys you need]
- Returns a short JSON confirmation the agent can read out loud, like {"confirmed": "Tuesday, September 2 at 2:00 PM"}
- Returns a clear error message if the slot is taken or the time couldn't be understood, so the agent can ask the caller for a different time
Deploy it (Vercel is fine) and then give me:
1. The endpoint URL
2. The exact header name and value I should paste into the Fish Audio webhook tool for authentication
3. The JSON body template using {{name}}, {{phone}}, {{requested_time}}, and {{service}} placeholders, which is the format Fish Audio expects
Ask me questions before you start if anything is unclear. Keep it as simple as possible. Paste the URL and header into the webhook tool. Use the tool's Test tab to fire a real request before going live. Then add one line to your system prompt: "When the caller agrees on a time, confirm their name and number, call book_appointment, and read the confirmation back to them." Publish again. Your receptionist books.
The Honest Part
What it actually costs
Fish Audio Plus — $15/mo through August 31, $30/mo after
Covers the voice clone, the agent builder, transfers, summaries, and 200 minutes of voice generation. Grab it at fish.audio while the anniversary sale is still running.
Phone number rental — a few dollars a month
Billed daily, exact price shown before you buy. $0 if you import a number you already own.
Call minutes — per minute, shown in your account
Fish bills agent call time per minute. The rate isn't on their public pricing page, it's inside your account under Phone numbers, so check it there before you plan around it. For a reference point, the competing platforms land around 7 to 25 cents a minute all-in. Transfer minutes (after your cell picks up) are metered at their own rate.
The booking endpoint (Step 13) — $0
Vercel's free tier handles it.
For comparison: a part-time receptionist runs $1,500 to $3,000 a month, and the industry number for a single human-answered inbound call is about $7. Even at the high end of per-minute pricing, a 3-minute call is under a dollar.
Before You Get Stuck
The gotchas, all in one place
Free tier is personal-use only. Plus is the floor for a business line.
Publish after every change you want callers to hear. The draft is invisible to them.
US and Canada local numbers only from the buy menu. No toll-free. Other countries need the import route.
One transfer destination per agent. Pick the person who actually answers.
Knowledge base takes .txt and .md only, 1MB each. Convert PDFs to text first.
Keep the system prompt under 2,000 tokens. Shorter prompts respond faster and follow instructions better.
Recording is on by default. Add "this call may be recorded" to your greeting.
Professional Voice Clones can't be deleted once finished. Instant clones can. Start with instant.
The Whole Thing
Quick recap
Fish Audio Plus. $15/mo through August 31.
Clone your voice from a reel, or pick one from the library.
Paste the interview prompt into Claude. Get the system prompt and knowledge doc back.
Build the agent: prompt, greeting, voice, knowledge doc, call transfer, summary fields.
Test call until it's right, then buy a number, bind it, publish.
Forward missed calls to it. Add booking with Claude Code whenever you're ready.
Work with Me
Want me on your problem for an hour?
Book a 1:1 call and we build the fix live — the workflow you want automated, the tool you can’t crack, whatever’s stuck. Direct, hands-on, no pitch waiting at the end.