Appointment reminder calls
Call customers the day before their appointment from a scheduled automation, and know what a Voice (IVR) project can and cannot do for outbound calls today.
In this guide you build an automation that runs every morning, finds tomorrow's appointments in a data store, and phones each customer with a spoken reminder.
A schedule cannot start a Voice (IVR) flow yet
An IVR project's Outbound Call node is where calls the project places begin, but today nothing on a schedule can place them: automations have no node that starts an IVR project, and the public API does not accept Voice (IVR) projects. The only way an Outbound Call flow runs today is an agent's Call and speak it reply from the Inbox; see Outbound calls.
This guide therefore places the call from an automation through the Twilio integration. The call plays a fixed spoken message. It does not run an IVR flow, so there are no key presses and no separate voicemail or no-answer paths.
The finished workflow:
Trigger (Schedule, every day at 08:00)
→ Function "Tomorrow's date"
→ Data Store (GET appointments where date = tomorrow)
→ Loop
body → Integration (Twilio, Make Call)
done → (end)Before you start, you need:
- A Twilio account with a voice-capable phone number, its Account SID and its Auth Token.
- A data store of appointments with at least a customer name, a phone number in international format (for example
+233555000111) and a date stored as text inYYYY-MM-DDform. - Permission to create projects.
Create an automation project
Go to Projects, select New project, set Channel to Automation and create the project.
Run it every morning
- Open the Trigger node and go to Trigger Settings.
- Select the Schedule card.
- Set Timezone to your business's time zone.
- Set Trigger Event to Every Day and Time to
08:00. - Save.
You can also drag Schedule Trigger from the palette's Triggers group instead; the settings are the same. See Automation triggers.
Work out tomorrow's date
Add a Function node after the trigger, set its Output variable to tomorrow, and use this code:
(input) => {
const d = new Date();
d.setUTCDate(d.getUTCDate() + 1);
return d.toISOString().slice(0, 10); // for example 2026-09-25
}The runtime clock is UTC. If your business is far from UTC, schedule the run at a time when the UTC date and your local date agree.
Find tomorrow's appointments
- Add a Data Store node after the Function node.
- Set Action to GET and choose your appointments store under Data Store.
- Under Which records, add a rule: your date field, the equals operator, and the value
{{state.tomorrow}}. - Set Output variable to
appointments. - Save.
Loop over the appointments
- Add a Loop node after the Data Store node.
- Set Items expression to the list of records the Data Store node returned. It must evaluate to an array. Select Run in the project header once and check the run in the Activity tab to see where the records sit in the result before you set it.
- Keep Max iterations above the number of appointments you expect in a day.
Nodes on the body handle run once per appointment and read the current record as input.item. done runs after the last one.
Place the call
- Add an Integration node on the Loop's body handle.
- Search for Twilio and choose Make Call.
- If the node shows Not Connected, select Connect and save your Twilio Account SID, Auth Token and phone number.
- Select Configure Tool and fill in the input variables:
| Input variable | Value |
|---|---|
to | The customer's number from the current record, for example {{input.item.phone}} |
from | Your Twilio number. Leave it empty to use the number saved with the connection. |
twiml | The spoken message, as TwiML (below) |
<Response>
<Say>Hello {{input.item.name}}. This is Kijani Clinic reminding you of your appointment tomorrow at {{input.item.time}}. To change it, please call us on 0302 000 000.</Say>
</Response>- Turn on Retry if you want a failed request to Twilio retried, and connect the failure handle to whatever should record the problem, such as a Data Store node that marks the appointment. See Error handling.
- Save.
Test, then publish
- Put one test appointment for tomorrow in the data store, with your own phone number.
- Select Run in the project header and answer the call.
- Publish the project. The schedule runs the published version, so publish again after every change.
Check that it worked
- Your phone rings once for the test appointment and plays the message with the name and time filled in.
- The run appears in the project's Activity tab with the Integration node marked as successful. See Runs and logs.
- A success means Twilio accepted the call. It does not tell you whether the customer answered.
Troubleshooting
Before you place real calls
Calling people is regulated, and the rules differ by country: consent, the hours you may call, do-not-call lists and the number you appear to call from. Say who is calling at the start of the message and honour opt-outs. If a written reminder is enough, send an SMS with the Messaging node instead; it is cheaper and the customer can read it later.