Skip to main content

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:
    1. states the name of the business or entity on whose behalf the call was placed (§ 64.1200(a)(7)(i)(B)), and
    2. 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)).
Devotel Orbit enforces the 3 % ceiling for you: 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 500500–1,500 per call.
This page documents tenant-owned configuration. It is not legal advice, and Devotel Orbit does not guarantee your compliance — the controls are tenant-owned, and whether your operations stay inside the safe harbor is your responsibility. Confirm your posture with qualified counsel.

Where to configure

The message is configured per campaign on the dialer_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:
Behaviour of the resolver:
  • When the safe_harbor object is present, enabled defaults to true — having configured it is the opt-in. An explicit "enabled": false suppresses the message for that campaign.
  • When no safe_harbor object exists, the campaign behaves exactly as before: no disclosure is played, and the abandoned leg simply hangs up.
  • business_name, opt_out_number, message, and audio_url may 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, or company_name — checked in that order — supply the identification name.
  • dnc_opt_out_number or opt_out_number — checked in that order — supply the do-not-call line.
Campaign-level values take precedence; the org fallback fills only what the campaign does not set.

Message template fields

Two rules decide what actually plays:
  1. Precedence. An audio_url beats the message override, 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.
  2. 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.
The default template text reads:
“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 the event 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

  1. 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" and dnc_opt_out_number: "+18005551212". Campaigns that omit both fields inherit this pair.
  2. Enable safe harbor on one campaign. Update the campaign with the disclosure config:
    The explicit message removes any dependency on template fields resolving.
  3. 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_message entry with mode: tts. Before any abandonment occurs, you can also sanity- check pacing: with configuration in place your dialer_safe_harbor_unconfigured event 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