An AI answering service picks up your business line, works out what the caller needs, answers from your own documents, books through your scheduling system and passes calls that need judgement to staff. Dograh, the open-source AI voice agent platform we build, runs each step of that call, and you can self-host it or run it on Dograh Cloud.
Key Takeaways
- Most calls end as an answer, a booking, a message or a transfer.
- Transfer Call rings your staff first and connects the caller only on answer.
- Decide the no-answer branch before launch, then test it on a real call.
This post is part of our guide to AI receptionists, which judges every receptionist by its handover to a person. Here we follow one call from first ring to goodbye in Dograh: what the agent answers, what it books, when it transfers and what happens when nobody answers.
How the call reaches the agent
The call reaches the agent before anyone at the business touches it. Most owners keep their published number and forward it to the number the agent answers, so customers dial the same digits as before. Several numbers can also point at one agent, each through its own inbound workflow setting, which suits a business with separate sales and service lines.
That first ring is where an answering service earns its place. In a CallRail survey of 1,000 US consumers, only 42% said they leave a voicemail, so a missed call usually means you never learn why the person rang. An agent that picks up hears the reason on every call.
The agent opens with the Greeting Text on the Start Call node, which plays word for word. Use it to name the business and to tell callers they can ask for a person at any point. Callers can talk over the greeting by default, so switch off Allow Greeting Interruption on the same node if that line must always play in full.
What the agent answers on its own
Routine questions end on the call, answered from documents you upload. Prices, opening hours, service areas and what to bring to an appointment all fit in a short file. In Dograh you upload them under Files and attach them to a step, and the agent searches only the documents on its current step, so the booking step never wanders into the price list.
The gain is consistency. The agent gives the same answer to the same question on the hundredth call as on the first, because it reads from the same file. When the answer is not in the documents, the prompt should tell it to say so and take a message instead of guessing.
Medical front offices are moving the same way. In an MGMA Stat poll of medical practices, 27% named phone calls as the first place they would apply AI and automation for patient access, second only to scheduling at 31%.
Booking an appointment during the call
Bookings run through an HTTP API tool that talks to your scheduling system. The agent asks for the service and a preferred time, the tool checks open slots, and the agent offers what comes back. Once the caller picks a slot, a second request books it and the agent reads the time back. The tool points at whatever system already holds your diary, directly or through an automation tool such as n8n.
A lookup can take a few seconds, so give the caller something to hear. The tool's Messages panel has a line for when the tool starts, such as "Let me check the calendar", and lines that play while it is still running, after a delay you set. A failed request is not retried. The agent hears the error after the tool's timeout, 5 seconds by default, and should offer to take the booking as a message.
Existing bookings need one more step. A phone number finds a record but does not prove who is calling, so the agent confirms identity with an approved check, such as date of birth, before it reads out or changes an appointment.
Open Source Alternative to Vapi / Retell
Self-hosted voice agent platform — no per-minute fees
dograh-hq/dograh
Star on GitHub
Handing the call to a person
Some calls should leave the agent: a complaint, a judgement call, a large quote, or any caller who asks for someone. Dograh's Transfer Call tool handles them. It dials the person first while the caller hears hold music, and it connects the two only once the destination answers, so nobody is put through to a desk phone that just keeps ringing.
The wait is 30 seconds by default, and you can set it anywhere from 5 to 120 seconds. Transfer Call works on Twilio, Telnyx, Plivo, Cloudonix and Asterisk ARI. The destination can be one fixed number, or rules can pick it from what the call collected, for example the service desk for repairs or tonight's on-call phone after hours.
Staff usually want to know who is coming through. Before the transfer, an HTTP API tool can write the caller's name and reason into your own system, where the person picking up can see it. The line the agent says before transferring can be a recorded clip in a real voice. On Twilio you can also switch on a short spoken introduction that both sides hear before they are joined. It is off by default.
When nobody picks up
An unanswered transfer is the call most answering services never describe, so design it first. If the destination does not answer, is busy, fails or runs past the timeout, the agent gets the result back as transfer_failed with the reason, and the call carries on with the agent. The call does not end on its own.

What the agent says next comes from its prompt. A sound default is to apologise once, take a message with the best number and a callback window, and write that request into your system through an HTTP API tool. Make the callback from the business's own number. Hiya's State of the Call 2026 found that 86% of people will not answer a call from an unidentified number.
Night calls follow the same branch with a smaller staff list, and our post on the AI after-hours answering service covers messages the morning team can act on. Test the branch over a real phone call before launch. A browser web call cannot transfer to a phone number, so the no-answer path stays untested until a customer finds it.
Checking the path on real calls
Once the agent is live, read a sample of calls to see whether each one took the right path. Each call's View Trace button opens its trace in Langfuse, with the speech-to-text, AI and voice time for every turn, so you can see why the agent booked a caller who wanted a person.
QA runs on test calls and live calls and scores each step separately, with its own tags, a score from 1 to 10 and a summary. Set its Sample Rate below 100 to grade a random share of live calls. Calls that should have reached a person and did not are the first ones to fix.
Building the agent itself, from the greeting to a test over a real phone line, is covered step by step in How to Build an AI Receptionist. Self-hosted Dograh has no per-minute platform fee, but servers, model keys and phone minutes still cost money. Dograh Cloud charges a 1¢-a-minute platform fee. Both run the same call flow.
Start with the branches before the voice. Sort a week of real calls into answered, booked, messaged and transferred, write down who takes each transfer and what the agent does when they do not pick up, and most of the prompt is already written.
Join the Dograh Community
Dograh is an OSS alternative to Vapi. Join our Slack community for queries, releases, best practices & community interactions.
Glossary
- Greeting Text
- The fixed opening line on Dograh's Start Call node, spoken word for word when the call connects. It is the place for anything every caller must hear, such as the business name and how to reach a person.
- HTTP API tool
- A tool the agent calls during the conversation to read from or write to another system, such as a scheduling system. It does not retry a failed request, so the prompt says what to do when one fails.
- Transfer Call
- Dograh's tool for handing a call to a person. It rings the destination first, plays hold music to the caller, and joins the two only when someone answers, waiting 30 seconds by default.
- transfer_failed
- The result the agent receives when a transfer is not answered, is busy, fails or times out. The call stays with the agent, which follows its prompt, for example by taking a message.

