Outbound Reminder Campaign
What you build: a campaign that dials (or texts) a list of recipients, plays a confirmation message, retries no-answers on a schedule, and reports how many succeeded. The outbound orchestrator does the pacing, retries, and per-recipient tracking for you.
Who it’s for: clinics reducing no-shows, lenders confirming repayments, schools and event organisers confirming attendance.
Prerequisites
- An agent to run the conversation (for voice campaigns).
- A webhook receiver for
call.completed(voice) ormessage.delivered/message.failed(SMS). ENABLE_OUTBOUND_VOICE/ENABLE_OUTBOUND_MESSAGESenabled on your workspace (they are, on managed accounts).
Step 1 — Create the campaign
Only channel is required. Channel-specific execution settings (caller-ID, call window, webhook) go in the free-form config block, which the orchestrator owns; retries go in retry_policy:
The campaign starts in draft so you can add targets before any dialing happens.
Step 2 — Add recipients (targets)
Add targets in batches. Each target has a to_address and its own params — arbitrary per-recipient values the agent references (name, appointment time), so every call is personalised:
Reference the params in the agent’s system_prompt / greeting_text, e.g. “Hello {{name}}, this is a reminder about your appointment at {{time}}. Press 1 to confirm.”
Step 3 — Start it
The orchestrator now dials at its pacing, inside the call window, retrying failures per your retry_policy. Lifecycle controls:
Step 4 — Tally results from webhooks
Each finished call fires call.completed. There is no per-call “confirmed” flag — status is completed and the outcome you tally comes from the target’s disposition (voice: completed/failed/no_answer/busy) and, if you need intent, Voicebip’s AI resolution classification (resolved/unresolved). List targets to read their disposition:
For SMS campaigns, watch message.delivered and message.failed; the SMS dispositions are sent/delivered/undeliv/opted_out.
Poll live counters any time:
SMS variant
For a text-only reminder, set channel: "sms" and drop the agent — put the message body (with per-target params) in the campaign config. Everything else (targets, retries, lifecycle) is identical.
Test it (sandbox)
Run the whole campaign against pk_test_ with targets in the test range (+234800000xxxx) — the orchestrator paces and “dials” synthetically, ₦0 billing. Then simulate a completion:
Troubleshooting
Next steps
- The full lifecycle, counters, and retry semantics → Campaigns deep-dive.
- Fall back across channels when voice doesn’t connect → Multi-channel cascade.
- Have the agent record structured responses via a tool → Tool-calling.