When your voice agent books an appointment, your front desk needs the details — patient or customer name, phone, preferred date and time, the reason for the visit — in their inbox, not buried in a call transcript.
This page is the canonical reference for sending those details by email only for calls where a booking was made. It takes about 15 minutes in the dashboard and needs no code.
Want the narrative walkthrough with a full hospital OPD example and tips for Indian-language calls? See the tutorial: How to Email Appointment Booking Details After Every AI Voice Call.
Two ways to send post-call email#
| Option | Where | Sends | Best for |
|---|---|---|---|
| Email call details | Agent → Tools → Messaging | After every call, or only on a matching disposition / outcome | A summary of every call to a manager |
| Workflow + extraction (this page) | Agent → Behavior → Post-Call Extraction, then Workflows | Only when the extracted data says a booking was made | Booking details to a front desk, sales desk or ops inbox |
Use the workflow route when the email must contain structured booking fields and must not be sent for enquiries, wrong numbers or unfinished calls. It runs after the post-call AI extraction has finished, so the booking fields are always in the email.
How it works#
Call ends → Post-call extraction reads the transcript → "Data Extracted" trigger
→ Condition: booking_status equals "booked"
→ yes: Send Email (to your team)
→ no: end workflow (nothing is sent)
Step 1: Capture the booking as structured data#
Open your agent → Behavior tab → Post-Call Extraction (under Capture & outcomes).
- Click New Template (or Preset → Appointment Booking / Healthcare Appointment to start from a template, then edit it).
- Give it a Template Name, e.g.
Booking Details. - Turn on Default Template so it runs on every call of this agent.
- Under Extraction Fields, click Add for each field:
| Field Key | Data Type | Allowed Values / 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 a name and a preferred date or time" |
customer_name |
Text (free-form) | Name of the person the booking is for |
mobile_number |
Text (free-form) | Contact number given for the booking, digits only |
preferred_date |
Text (free-form) | Date confirmed on the call, e.g. "14 Oct 2026". Don't add a weekday unless the caller said one. |
preferred_time |
Text (free-form) | Time or part of day confirmed |
reason |
Text (free-form) | Reason for the visit in a few words |
call_summary |
Text (free-form) | Two or three sentences for the front desk |
- Click Create Template.
Check it on a real call: open any past call → Extract data (or Re-extract data). You should see booking_status and the booking fields filled in.
Tips for reliable fields#
- Make
booking_statusan enum, not free text — the workflow matches it exactly. - Describe what counts as booked in the AI Description. "Agreed to come" without a date is usually not a booking.
- For Indian-language calls, add in Additional AI Instructions: "Write free-text fields in English; write names and places in Roman letters as pronounced."
- Ask the model not to invent weekdays. A computed "Saturday 14 Jun" can be wrong; a wrong weekday sends a patient on the wrong day.
- Name the summary field
call_summary— the standard email shows it as the Summary.
Step 2: Create the workflow#
Go to Workflows (sidebar → Automation) → Create Workflow.
- Workflow Name:
Booking Details Email. - Trigger Type: Data Extracted — trigger after post-call AI extraction completes.
- Agent: pick your booking agent (leave empty to run for all agents).
- Click Create Workflow.
Add the Send Email step first#
Click Add → Send Email:
| Setting | Value |
|---|---|
| Email content | Call summary (standard template) |
| Email Provider | Platform (Vani default) — no email account needed |
| Recipient | [email protected], [email protected] (comma-separated) |
| Include transcript | Off — keeps the conversation itself out of the email |
The standard email contains the summary, caller phone, duration, a recording link and a Collected Information table with every extracted field.
Prefer your own wording? Choose Custom and use Insert a variable to drop in fields from the group From the call (after extraction), e.g. subject New appointment — {{customer_name}}, {{preferred_date}} {{preferred_time}}.
Use Send a test email to check delivery to each inbox.
Then 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 is what stops emails for calls with no booking.
Make sure the Condition is the first step (on the canvas, the trigger connects to the Condition, and the Condition's matched branch connects to Send Email). Click Save.
Step 3: Test, then activate#
- Test run — previews the whole flow with sample data. No call is placed, nothing is sent.
- Click Activate. Status changes from Draft to Active.
- Place a real test call and book an appointment.
- Open Executions → the run → confirm the Condition took the
bookedbranch and Send Email completed.
Bookings made before activation can be emailed with ⋯ → Run on past calls.
Troubleshooting#
| Symptom | Cause | Fix |
|---|---|---|
| Workflow never runs | Agent has no default extraction template | Trigger panel warns "This agent has no extraction template yet" — complete Step 1 |
| Runs but never emails | booking_status value differs (e.g. Booked, yes) |
Use an enum with exactly booked, and the same value in the Condition |
| Emails sent for every call | Condition has a default step, or Send Email is connected straight to the trigger | Default Step = End workflow; trigger → Condition → Send Email |
| Booking fields empty | The agent's prompt never asks for them | Add a booking flow to the prompt that collects and confirms each detail |
| Email not received | Spam folder or a typo in Recipient | Send a test email; add the sender to safe senders |
Related#
- Webhooks — send the same data to your CRM or HIS
- Variables — dynamic content in prompts
- Appointment booking agent example
- Transcripts