No answer, busy, or voicemail → WhatsApp
You need a connected WhatsApp number, an approved template, and an OpenCX contact with a phone number.1
Filter the finished call
Create a workflow with Call Finished. Add conditions requiring Direction = Outbound and Disposition equal to
no_answer, busy, or voicemail. Keep unknown, failed, declined, and canceled on separate branches so their handling is deliberate.2
Send the template
Add Send WhatsApp Template. Set Contact ID from
trigger.call.ticket.contact.id, choose your sending Phone Number and WhatsApp Template, and fill Template Variables in placeholder order: header, body, then buttons. Route a missing contact ID to review instead of sending.3
Check the action result
Branch on the action’s Sent output. If false, record or surface Error for follow-up. Expected send failures can return
sent: false without failing the whole workflow, so a completed run alone does not prove a message was sent. A successful send returns a WhatsApp Message ID; it does not prove delivery or that the recipient read it.4
Test and activate
Test each branch with a contact you control. Confirm the recipient, template variables, message in the session, and action result. Check other active workflows and sequences so they do not also send the same follow-up for that attempt.
Schedule one callback at a chosen time
For an individually configured callback, combine Cron Trigger with Make phone call:- Create a separate workflow for the callback and choose Cron Trigger.
- Set Cron Expression for the intended date and time. Set Run Limit to
1so the workflow deactivates after its one scheduled fire. - Add Make phone call. Set AI Agent, the customer’s Contact Number in international format, and Extra Instructions explaining the callback purpose.
- Confirm the next occurrence before activation, then activate the workflow. Configure result handling in a separate Call Finished workflow.
30 14 25 9 * means September 25 at 14:30 in the schedule’s timezone. Cron configuration without an explicit timezone uses UTC; do not assume the browser or customer’s local timezone. Convert the agreed customer time before entering the expression. This expression has no year: if the date has passed, its next occurrence is the following year. Always confirm the upcoming occurrence is the one intended.
Run Limit counts scheduled fires, not successful answers. A failed or unanswered call does not automatically re-arm this one-time workflow. Choose an explicit retry policy based on the finished call.
To cancel a callback before it fires, deactivate its workflow. To reschedule a pending callback, deactivate it, change the schedule, then reactivate it after checking the new time. Deactivation does not stop a call that has already started. For another callback after the one-shot workflow has fired, create a new workflow; editing the old schedule does not reset its fired count.
For many customers with changing appointment times, keep the schedule and cancellation state in your CRM or scheduling system and invoke the Make Outbound Call API when each callback is due. Store the returned session reference with the appointment. This is a configured integration; OpenCX does not infer a callback appointment from call feedback alone.
Delays and session follow-ups
A Wait step pauses a workflow for an elapsed duration and supports up to 30 days per step. It is useful for a relative delay, but has no customer appointment date/time field. A session’s scheduled AI follow-up resumes session handling; scheduling one does not itself guarantee an outbound phone dial. Add an explicit Make phone call step in the flow that should dial. Avoid sending every failed callback straight back into the same call-starting flow. Store attempt limits and stop conditions in the system managing the journey so a no-answer result cannot create an endless retry loop.Log the result in your CRM
Use Call Finished to send the call ID, session ID, contact reference, outcome, disposition, and end time to your CRM automation. Configure the task or note creation explicitly. Connecting a CRM alone does not create a callback task for every call. For Send Webhook, set the receiver URL, HTTP method, required authentication headers, and body fields. Check its Is Success and Status Code outputs. Your receiving integration must match the CRM contact and handle repeated delivery. See HubSpot phone tasks and notes for field mapping and verification.Verify the journey
Skip a sequence call after a reply
A contact’s reply exits them from a sequence. Use Skip Sequence Step before Continue Sequence for Contact to omit their next pending call while retaining their remaining WhatsApp and email outreach. The action works across sequences and supports all three channels. You need permission to edit and activate workflows. API and MCP callers needsequences:write. Start with a Sequence Replied trigger and a condition that identifies “cannot talk now” replies.
- Add Skip Sequence Step. Set Sequence to
{{trigger.sequence.id}}and Contact ID to{{trigger.contact.id}}. - Set Skip mode to Next pending step of a channel, Channel to Phone, and Reason to
Customer cannot talk now. - Continue only when its Outcome is
skippedoralready_skipped. Fordispatch_in_progress, wait for that attempt’s outcome before retrying. Other outcomes identify why nothing was skipped. - Add Continue Sequence for Contact, using the same sequence and contact references. Check its Resumed output;
nothing_to_continuemeans no pending outreach remains.
skipPhone: