Dialer Abandoned-Call Safe Harbor
When a predictive dialer abandons an answered call — the recipient picked up but no agent was connected within two seconds of the completed greeting — the FCC grants a safe harbor only if the call gets a prerecorded identification message before it is disconnected. This page shows you how to configure that message: per campaign, with an organization-level fallback, as text-to-speech or a pre-recorded audio file.What the FCC requires
Under 47 C.F.R. § 64.1200(a)(7), a call placed by a predictive dialer counts as compliant only when all of the following hold:- Abandonment stays at or below 3 % per campaign, measured per day over a 30-day window (a one-day allowance is built in for an unavoidable spike).
- The abandoned call is disconnected within two seconds of the called person’s completed greeting. An answered call that sits unanswered for two seconds is “abandoned” for the rule’s purposes — it does not require a live hang-up.
- Each abandoned call plays a prerecorded identification message
before disconnection that:
- states the name of the business or entity on whose behalf the call was placed (§ 64.1200(a)(7)(i)(B)), and
- provides a telephone number the called party can use to make a do-not-call request — for the automated mechanism this must be a toll-free number (§ 64.1200(a)(7)(ii)).
max_abandon_rate on a
campaign cannot be set above 0.03, and pacing throttles when the
ceiling trips. The identification message, though, is your
configuration. If you set nothing, an abandoned call receives a bare
hang-up — the safe harbor is unavailable, and every abandoned call is a
statutory TCPA/FCC exposure of 1,500 per call.
Where to configure
The message is configured per campaign on thedialer_campaigns.metadata.safe_harbor object. Set it on create or
update via the campaign endpoints
(POST /api/v1/dialer/campaigns or
PATCH /api/v1/dialer/campaigns/:id) in the metadata field — no
schema migration or platform flag is involved:
- When the
safe_harborobject is present,enableddefaults to true — having configured it is the opt-in. An explicit"enabled": falsesuppresses the message for that campaign. - When no
safe_harborobject exists, the campaign behaves exactly as before: no disclosure is played, and the abandoned leg simply hangs up. business_name,opt_out_number,message, andaudio_urlmay each be set or omitted; the field semantics are in the next section.- Configuration lookups are read-only and best-effort: if the campaign or organization record cannot be read, the call still completes — with no disclosure — rather than failing.
Organization-level fallback
To avoid repeating the shared business identity on every campaign, two fields fall back to your organization settings. Add these to your org profile and leave them off individual campaigns:business_name,legal_business_name, orcompany_name— checked in that order — supply the identification name.dnc_opt_out_numberoropt_out_number— checked in that order — supply the do-not-call line.
Message template fields
Two rules decide what actually plays:
- Precedence. An
audio_urlbeats themessageoverride, which beats the composed template. In audio mode both the name and the opt-out line are whatever your recording states — the system won’t inject them. - Completeness. The composed template is emitted only when both a business name and an opt-out number resolve. If either is missing and no override or audio URL supplies a full message, no partial disclosure plays — the leg falls back to a bare hang-up. A partial message would consume two seconds of greeting time without closing the (a)(7)(i)(B) elements.
“This call was made on behalf of . We are sorry we are unable to connect you with a representative at this time. To be placed on our do-not-call list, please call .”
Audit trail
Every abandoned call produces a structured event you can query, plus a counter. Filter your logs on theevent field:
For the safe-harbor audit you want
dialer_safe_harbor_message: it
records the resolved business name and opt-out number the recipient
heard, alongside the attempt and call identifiers. A rising
dialer_safe_harbor_unconfigured count means campaigns are abandoning
calls with no disclosure — treat that as an exposure until fixed.
Worked example: one campaign, one org fallback
-
Set the org fallback once. On your organization settings, add a
business identity and a toll-free do-not-call line, e.g.
business_name: "Acme Home Services"anddnc_opt_out_number: "+18005551212". Campaigns that omit both fields inherit this pair. -
Enable safe harbor on one campaign. Update the campaign with the
disclosure config:
The explicit
messageremoves any dependency on template fields resolving. -
Verify configuration took effect. The next time the campaign
abandons an answered call, the recipient hears your override before
disconnect, and your logs gain a
dialer_safe_harbor_messageentry withmode: tts. Before any abandonment occurs, you can also sanity- check pacing: with configuration in place yourdialer_safe_harbor_unconfiguredevent count stops climbing.
Troubleshooting
The 3 % abandonment ceiling is a separate, always-on guard. It
throttles pacing, but it does not substitute for the identification
message — both halves of (a)(7) must hold for the safe harbor to be
available.
See also
- TCPA federal voice guard — the one platform-global dialing-window check, distinct from every tenant-owned control
- Voice Guard: the federal dialing-window check — the dispatch-time enforcement of that window
- RND scrub — a different FCC safe harbor, for reassigned numbers
- Opt-out suppression — where the do-not-call line feeds into your suppression lists