Your AI voice agent just booked an appointment. The caller hung up happy. But at the front desk, nobody knows yet — the patient's name, number, preferred date and the reason for the visit are sitting inside a call transcript that no one will read until the end of the day.
The fix is simple to describe: when a call ends with a booking, email the booking details to the people who need to act on them. And only then — your front desk does not want an email for every enquiry, wrong number and dropped call.
This guide shows how to set that up on Edesy in about 15 minutes, entirely from the dashboard, using two building blocks: post-call extraction and a workflow. We'll use a hospital OPD (outpatient) desk as the running example, because that's where we built it first — but the same setup works for clinics, salons, test drives, site visits, demo bookings and service appointments.
Quick verdict (TL;DR)
- Step 1 — Capture: add a Post-Call Extraction template to your agent with a
booking_statusfield (booked/not_booked/ …) plus the booking details you want (name, phone, date, time, reason). - Step 2 — Route: create a Workflow with the Data Extracted trigger, filtered to your agent.
- Step 3 — Decide: a Condition step:
booking_statusEqualsbooked→ otherwise End workflow. - Step 4 — Send: a Send Email step using the standard call-summary email, Platform provider, your team's address(es), transcript off.
- Step 5 — Activate and place one test call.
- Cost: no extra email account needed; extraction runs on every call of the agent.
The full reference with every field and label is in the docs: Email Booking Details After a Call.
Why "email after every call" isn't enough
Edesy already has a one-switch option — Email call details under the agent's Tools → Messaging — that emails a call summary after each call. It's great for a manager who wants to skim everything.
For bookings it falls short in two ways:
- It fires on every call. A clinic taking 200 calls a day might book 40. Two hundred emails trains the front desk to ignore all of them.
- It sends at hang-up. The structured booking fields come from the post-call AI extraction, which finishes a little after the call ends. An email sent at hang-up can't reliably include them.
The workflow route fixes both: it starts after extraction finishes, and a Condition step lets only real bookings through.
The setup at a glance
Call ends
→ Post-call extraction reads the transcript
→ "Data Extracted" trigger fires
→ Condition: booking_status equals "booked"?
yes → Send Email to the front desk
no → End workflow (nothing sent)Step 1: Turn the conversation into booking data
A voice agent "books" an appointment by talking: it asks for the name, age, phone number, preferred date and time, reads them back, and says "your appointment request is noted". That's natural for the caller — but it isn't data yet.
Post-call extraction turns it into data. After each call, an AI reads the transcript and fills in the fields you define.
Open your agent → Behavior tab → Post-Call Extraction (under Capture & outcomes) → New Template. (Or click Preset and start from Appointment Booking or Healthcare Appointment, then add the fields below.)
Turn on Default Template so it runs on every call, then Add these fields:
| Field Key | Data Type | What to put in the AI Description |
|---|---|---|
booking_status |
Single Choice (Enum) — booked, not_booked, callback_requested, not_reached |
booked = the caller agreed to an appointment AND gave at least their name and a preferred date or time |
patient_name |
Text | Name of the patient — not the caller, if a relative is calling |
patient_age |
Text | Age as stated |
mobile_number |
Text | Contact number for the booking, digits only |
city |
Text | City or area |
main_concern |
Text | The health concern in a few plain words, with duration. No diagnosis. |
preferred_date |
Text | The confirmed date, e.g. "14 Oct 2026" |
preferred_time |
Text | The confirmed time, e.g. "10:30 AM" |
urgency |
Single Choice (Enum) — urgent, routine, unknown |
What counts as urgent for your specialty |
call_summary |
Text | Two or three sentences for the front desk |
Click Create Template, then open a past call and press Extract data to see the result on a real conversation.
Three lessons from real calls
We built this first for a hospital whose agent takes OPD bookings in several Indian languages. Testing the template on real calls taught us three things worth copying:
1. Make "booked" a strict enum with a definition. The workflow will compare the value exactly. Free text gives you "Booked", "yes", "appointment fixed" — and a Condition that never matches. Also define it: "the caller agreed to come" without a date isn't a booking your desk can act on.
2. Never let the model invent a weekday. Our first version wrote dates like "Saturday 14 Jun 2026". The date was right; the weekday was wrong — 14 June 2026 was a Sunday. Language models are unreliable at calendar arithmetic, and a wrong weekday in a front-desk email can send a patient in on the wrong day. The fix is one sentence in the description: "Do NOT add a weekday name unless the caller said one." After that change, the same calls came back as plain "14 Jun 2026".
3. Ask for English output from Indian-language calls. Callers mix languages mid-sentence. In Additional AI Instructions, write: "The transcript may be in Kannada, Hindi, Tamil, Telugu or English, often mixed. Write free-text fields in English; write names and places in Roman letters as pronounced." Every email then reads the same, whichever language the patient spoke.
Tip: name your summary field
call_summary. The standard email template uses it as the Summary at the top of the email.
Step 2: Create the workflow
Go to Workflows (sidebar → Automation) → Create Workflow:
- Workflow Name:
OPD Booking Email - Trigger Type: Data Extracted — trigger after post-call AI extraction completes
- Agent: your booking agent
If the agent has no extraction template, the trigger panel warns "This agent has no extraction template yet" — that's your cue to finish Step 1 first.
Click Create Workflow to open the builder.
Step 3: Add the Send Email step
Add the email step before the condition — the condition's "Then go to step" list only shows steps that already exist.
Click Add → Send Email:
- Email content: Call summary (standard template)
- Email Provider: Platform (Vani default) — sent by the platform, no SMTP or email account needed
- Recipient:
[email protected], [email protected] - Include transcript: off
The standard email has the summary, caller phone, call time and duration, a recording link, and a Collected Information table with every field from Step 1.
Why transcript off? In healthcare, the transcript is the patient describing symptoms. The front desk needs who, when and why — not the whole conversation — and inboxes get forwarded. Keep the transcript in the dashboard, where access is controlled, and send only what the desk needs.
Want a subject line the desk can scan? Choose Custom instead and use Insert a variable — the booking fields appear under From the call (after extraction):
Subject: New OPD request — {{patient_name}}, {{preferred_date}} {{preferred_time}}Use Send a test email to confirm each address receives mail (and check spam the first time).
Step 4: Add the Condition step
Click Add → Condition → Add Condition:
| Field name | Operator | Value | Then go to step |
|---|---|---|---|
booking_status |
Equals | booked |
Send Email |
Leave Default Step (if no conditions match) as End workflow.
That empty default is the whole point: a call where booking_status is not_booked, callback_requested or not_reached simply ends — no email.
On the canvas, check the shape: trigger → Condition → (matched) Send Email, then click Save.
Want callbacks too? Add a second condition row,
booking_statusEqualscallback_requested, pointing at a second Send Email step addressed to whoever returns calls.
Step 5: Test and activate
- Click Test run — it previews the flow with sample data. No call is placed and nothing is sent.
- Click Activate. The status changes from Draft to Active.
- Call your agent and book an appointment.
- Open Executions for the workflow. The run should show the Condition taking the
bookedbranch and Send Email completed.
To catch up on bookings made before you activated, use ⋯ → Run on past calls.
What the front desk receives
For a booking call, the email looks like this (an illustrative example — fields come from your template, in the order the extraction returns them):
| Summary | Caller's father has had acidity and bloating for three weeks. OPD appointment booked for 16 Oct 2026 at 10:30 AM. |
| Caller | +91 98xxx xxxxx |
| booking_status | booked |
| main_concern | acidity and bloating for three weeks |
| preferred_date | 16 Oct 2026 |
| preferred_time | 10:30 AM |
| urgency | routine |
| Recording | Listen link |
An enquiry call about parking or consultation fees produces no email at all.
Beyond email
The same trigger and condition can drive other actions — add steps after the Condition instead of, or as well as, the email:
- Google Sheets — append each booking as a row for a shared appointment register.
- WhatsApp — send the patient a confirmation template with the date, time and address.
- Webhook — push the booking into your HIS, CRM or practice-management system.
- Calendar — let the agent book directly into Google Calendar during the call.
Common mistakes
| Mistake | Symptom | Fix |
|---|---|---|
booking_status as free text |
Workflow runs, never emails | Single Choice (Enum) with exactly booked |
| Default Step set to Send Email | Every call emails | Default Step = End workflow |
| Send Email wired straight to the trigger | Every call emails | trigger → Condition → Send Email |
| No booking flow in the agent's prompt | Fields empty | Make the prompt collect and read back each detail before ending |
| Extraction template not marked Default | Workflow never triggers | Turn on Default Template |
FAQ
Can the email go out only when an appointment was booked, not after every call?
Yes. The extraction template records a booking_status for every call, and the workflow's Condition step sends the email only when it equals booked. Enquiries, wrong numbers and unfinished calls end the workflow without sending anything.
Do I need my own email account or SMTP server? No. Choose Platform (Vani default) as the email provider and the platform sends the email for you. To send from your own domain, connect Mailgun, SendGrid, Resend or Postmark and pick it as the provider.
Can I send the details to more than one person? Yes. Put several addresses in Recipient, separated by commas. Each recipient gets the same email.
Will the email include the full call transcript? Only if you want it to. The call-summary email has an Include transcript switch. For healthcare and other sensitive conversations, turn it off: the email still has the summary, the booking fields and a recording link.
Does this work for calls in Hindi, Kannada, Tamil, Telugu or other Indian languages? Yes. The extraction model reads the transcript in the language spoken, including code-mixed speech. Instruct it to write free-text fields in English and names in Roman letters so every booking reads the same.
Can I email the booking to the patient or customer as well?
You can, if the agent collects their email — Recipient accepts a variable like {{customer_email}}. Spelling an email address over the phone is error-prone, though, so most clinics send the patient a WhatsApp or SMS confirmation and keep email for the internal team.
What about bookings made before I set this up? Once the workflow is active, use Run on past calls from the workflow's menu. Calls from before the extraction template existed can be extracted first with the call's Extract data button.
Get started
Already using an AI voice agent for bookings? Open the agent's Post-Call Extraction, add a booking_status field, and your front desk can be getting booking emails within the hour. Full field-by-field reference: Email Booking Details After a Call.
New to Edesy? Start free and build an AI appointment booking agent that answers in your patients' languages — or see post-call email notifications for everything you can send after a call.