Pre-launch readiness for fallback chains
A campaign’s fallback chain — thechannels[] ladder that moves a send to the next channel when one hop fails — is only as safe as its weakest step. Before this surface existed, the pre-launch preview checked provider and connection readiness on the primary channel only. A chain like WhatsApp → SMS with no SMS sending number connected still reported the green “ready to launch,” because nothing ever probed the SMS fallback step.
The dry-run preview now probes the whole chain, and the dashboard shows each step’s readiness. This page explains what the preview checks per step, how to read the response, and where the same chain appears in the campaign UI.
Configure the chain itself first — the fallback chains guide covers the channels[] shape, ordering rules, and trigger semantics.
1. Which steps the preview reads: order 0 vs order >= 1
The fallback chain lives in the campaign’schannels array. Each entry
carries a channel and an order:
order: 0is the primary channel — the same value as the campaign’s top-levelchannelfield. Readiness for the primary is checked exactly as before; it is excluded from the fallback-step probe so it is never probed twice.order >= 1entries are the fallback steps — the only entries the fallback-chain probe extracts. Gaps and non-contiguous orders are fine; only relative ascending order matters.
order >= 1 entry) have no fallback steps, so
every fallback surface below stays empty — the same behaviour the campaign
review step shows.
Example — a WhatsApp → SMS chain as the preview reads it:
2. What the dry-run preview checks per fallback step
Run the read-only preview against the campaign:- Provider registered — a provider class exists on the platform for that channel. Missing provider → the step is flagged in the waterfall and a warning is added.
- Channel connected — the tenant actually has a working sender for that channel. For SMS and MMS this means a dedicated sending number; for RCS it means a verified brand agent. This is the check that was previously skipped for fallback steps: an SMS fallback with no sending number is no longer a silent green.
- Not unverifiable — channels with no probeable connection signal at all
(for example WhatsApp or email, whose connection is gated by separate
flows) are reported as
null, not as a pass. A fallback SMS/MMS probe that cannot run (for example a transient error) also fails closed: the preview adds an advisory warning instead of reporting green.
ready_to_launch only returns
true when the warnings list is empty and the provider-readiness
aggregate reads pass.
3. Reading the preview response
Two blocks carry the fallback-step verdicts. Warnings (plain-language, one per finding):Fallback channel <CHANNEL>: … prefix for connection
findings (SMS/MMS numbers, RCS verified agents, or an unverifiable probe), or
the Cross-channel fallback configured for […]… shape when a provider class
is missing entirely.
Channel waterfall (structured, one entry per step):
channel_connected per step:
true— the step can send from a tenant-connected sender.false— flagged; the step ships nothing you verified.null— the preview cannot verify this channel’s connection (WhatsApp, email, and similar). It makes no claim either way.
provider_readiness block aggregates the same dimensions into
three-state values (pass / fail / unknown per check, pass / blocked
/ unverified overall), so “could not verify” never collapses into a green.
4. Where the dashboard shows the same chain
The campaign detail page renders the chain in a fallback-chain panel: eachorder >= 1 step with its advance trigger (delivery failed /
not delivered / no engagement) and waiting window, alongside the
campaign’s per-campaign credit cap. Single-channel campaigns show no panel —
the deliberate “stay quiet” behaviour for campaigns with nothing to read.
Open the preview from the campaign composer or detail page before launch and
confirm every step reads connected; on the API, do the same against the
channel_waterfall above before pressing send.
5. Delivery-based fallback vs budget-downgrade fallback
Everything above concerns delivery-based hop-by-hop fallback: the chain advances because a hop failed to deliver or engage, at send time. Orbit also supports a distinct budget-downgrade fallback: spend-triggered channel downgrade, where a campaign steps delivery down to a cheaper channel to stay efficient within its per-campaign credit cap. The two chains are separate configurations — readiness for a delivery chain does not validate a budget-downgrade chain, and a budget cap never arms a delivery hop on its own.Wire-up summary
- Build the ladder: Fallback chains guide.
- Advance triggers and windows: Campaign end-to-end guide, step 6.
- Other pre-launch gates (wallet, suppression, quiet hours, caps): Outbound compliance pre-flight checklist.
- Delivery vs budget-downgrade shapes: Fallback and cascade planes.