Troubleshooting: outbound campaign blocked at the pre-send gate chain
An outbound campaign that ships clean passes a short chain of pre-send checks before the first message or call goes out. When the chain finds something it reports a verdict instead of shipping: either the send is blocked outright (the pre-flight error codes name the gate class, so they show asGATE_BLOCKED-style refusals) or it ships with a
warning (GATE_WARN-style advisories you acknowledge and proceed
past). This page maps those verdicts back to the specific gate that
fired and the tenant-owned fix for each.
The gates themselves — their exact evaluation order, the specific error
code each one returns, and which ones carry no opt-out — are the
concept page Voice pre-send gate chain.
This page is the runbook: it starts from the symptom (campaign will not
launch, or launched with warnings) and ends at the control you own.
1. What pre-send screening does
Pre-send screening is a built-in chain of safety checks that runs on every outbound campaign before launch, and per recipient before the send goes out. A launch, a batch send, and a dialer campaign all take the chain; nothing ships until the chain evaluates. The chain stages, in the order they evaluate on the outbound voice path:- Emergency short-code reject — platform-global, no toggle.
- TCPA federal dialing window for US voice, and your tenant opt-in quiet-hours gate for sent-hours you configured yourself.
- FCC AI-voice written-consent gate — synthetic or cloned voices need prior express written consent on record.
- Fraud-velocity guard and DNO caller-id reject — premium-rate prefixes, spend and rate caps, and Do-Not-Originate caller IDs.
- Trunk caller-id reject — the presented caller ID must sit in the trunk allow-list or your organization’s DID list.
- Per-country rate window — a sliding-window cap per destination country.
- STIR/SHAKEN attestation — resolved and stamped, never a blocking gate.
/outbound/approvals) render as a blocked or warned
launch. That queue exists for orgs whose campaign settings require
supervisor approval before recipients are messaged — your supervisor
(and an owner/admin) sees the same gate verdict there before approving.
2. Why a check hard-fails vs warns
Every verdict falls into one of two classes, and the class decides what you can do about it:- Blocked (
GATE_BLOCKEDclass) — the hard fail. The send does not go out. Resolution is one of two shapes: fix the underlying condition the gate names (a caller ID that is not in the trunk allow-list, AI voice without written consent, a list aimed outside the federal window), or — for the gates that are tenant-owned — adjust or retract the tenant control that fired (your quiet-hours window, your per-country limits, your DNO override). Platform-owned gates at a statutory floor — the TCPA federal window, the FCC AI-voice consent gate, the BAA send gate, the emergency short-code reject — are hard-fail by design and carry no skip toggle. The page will not let a supervisor “approve past” a platform-owned block; the approval surface exists to sign off on tenant-owned gates, not to commute federal ones. - Warn (
GATE_WARNclass) — the advisory. The chain found a condition you should see before shipping — a policy-scan finding on your message body, a destination that historically converts poorly, a sender pool concentration. Warn-gated sends ship after you explicitly acknowledge the warning on the review step (or, for approval-required orgs, after a supervisor approves the launch in the approvals queue). A persistent warn on a gate you configured to warn-only is your own setting working as configured; a warn on a gate you configured to block moves into the blocked class above.
3. How the chain interacts with dedupe and the silent-unsubscriber sweep
Two stages of the chain are about who stays on the list, and they run as part of the same pre-send evaluation — so a blocked verdict on a list issue is often one of these, not a compliance gate. Retroactive dedupe. The chain de-duplicates the recipient list before any send goes out: case- and format-normalized numbers that appear twice (an uploaded list overlapping your own updated contacts, a re-imported CSV with stale rows) collapse to one attempt. The dedupe is retroactive in the sense that it applies to records you already ingested — a launch after an import uses the resolved recipient set, not the raw uploaded one. When the review step reports fewer recipients than your upload carried, the difference is largely this stage; it is a warn-class reduction you acknowledge, not a blocked verdict. Silent-unsubscriber sweep. Contacts that unsubscribed without a keyword reply — carrier-reported opt-outs, suppression-list additions, imported unsubscribe files — are swept by the same chain stage before any send. A send to such a contact is not merely warned; the contact is removed from the recipient set, and if the sweep empties the list the launch blocks with nothing addressable. The fix is list-side, and both the dedupe check and the sweep use the same suppression and consent stores as the consent and suppression model. A blocked verdict that survives fixing the compliance gates therefore usually means no recipient remains addressable after these two stages. Check the campaign’s resolved-recipient count on the review step before reworking your caller-ID or consent records. If you want the same chain stages spelled out per recipient before you launch, run a dialer preview — the preview claims walk the same per-recipient predicates the full campaign will (Troubleshooting: dialer preview, power, and predictive modes). The wizard-slide fallback for that preview (what each gate verdict means before you commit the full list) is the same runbook this page works.4. Unblock the send — the decision path
Work these in order; every one moves a blocked verdict toward a launch, or resolves a warn to a clean pass.- Read the verdict code on the review step (or the approvals queue). The pre-flight code names the gate class. Match it to the precedence table on Voice pre-send gate chain — the same code the API returns is the code the queue shows.
- If the code is a platform-owned gate, fix the underlying condition. Federal window — retime the send into 8 AM–9 PM recipient-local or shift recipients outside US ranges. FCC AI-voice consent — record prior express written consent before launch. DNO or trunk caller-ID — use a caller ID in the allow-list. There is no toggle; re-submit after the fix.
- If the gate is tenant-owned, adjust or retract your own control. Quiet-hours, per-country limits, DNO overrides, warn/block split — open the send-gates settings, change the toggle, and re-run the review; the verdict flips class on the next pre-send pass.
- If the sweep left no addressable recipients, re-import a clean list (dedupe collapses duplicates; suppression removals are terminal) and re-run the review.
- For approval-required orgs, have an owner/admin approve in Outbound → Campaign approvals after steps 1–4 pass; the queue rejects at the UI the same gates the API rejects, so approve only resolves tenant-owned warns and tenant-toggled blocks.
5. When to escalate
Escalate to support with:- Your organization ID — Settings → Organization, or
organizationIdfromGET /api/v1/me. - The campaign ID, the mode (batch, dialer, drip), and the current
status (
draft,pending approval,active,aborted). - The exact pre-send verdict — the blocked or warn code verbatim, and the resolved-recipient count from the review step (for dedupe / sweep verdicts).
- The gate you believe is tenant-owned vs platform-owned — if you disagree with the ownership split, that is a configuration question, not an outage.
See also
- Voice pre-send gate chain — the concept this page operationalizes: evaluation order, error codes, fail-open vs fail-closed posture.
- Troubleshooting: dialer preview, power, and predictive modes — the same per-recipient gate chain seen through preview claims.
- Consent and suppression model — how the silent-unsubscriber sweep resolves recipients.
- Send gates — the tenant-owned toggles (quiet hours, per-country limits, DNO overrides, warn/block split).