Voicemail Drop
Voicemail drop is the outbound pattern where an agent (or automated dialer) places a call, detects the answering machine, plays a pre-recorded message, and hangs up. The recipient gets a voicemail; the agent never speaks live, saving time on cold outbound where most calls go to voicemail anyway.
Often conflated with ringless voicemail (RVM) — which is a different and far more legally treacherous technique. See the section below.
How it works
- Outbound call placed via SignalWire REST API.
- AMD (Answering Machine Detection) runs during ringing — listens to the answer audio and classifies: human, machine, fax, unknown.
- If machine detected, wait for the beep ("machine_end_beep" event).
- After the beep, play the pre-recorded message via SWML
play. - Hang up.
- If human detected, the dialer can either (a) play a different message, (b) hand off to a live agent, or (c) hang up to avoid abandoned-call concerns.
SignalWire AMD integration
Compatibility API (LaML)
client.calls.create(
to="+13105551234",
from_="+12125551111",
url="https://your.api/voicemail-drop.xml",
machine_detection="DetectMessageEnd",
machine_detection_timeout=10,
machine_detection_speech_threshold=2400,
machine_detection_speech_end_threshold=1200,
machine_detection_silence_timeout=5000,
)
machine_detection="DetectMessageEnd" tells SignalWire to wait through the voicemail greeting and only fire the callback after the beep — so the recording starts in the actual message slot, not over the outgoing greeting.
The webhook URL receives a AnsweredBy parameter:
| AnsweredBy value | Meaning |
|---|---|
| human | A person answered |
| machine_start | Voicemail/IVR started (early detection) |
| machine_end_beep | Voicemail beep detected, message slot open |
| machine_end_silence | Machine ended without a clear beep |
| machine_end_other | Machine ended via tone or hang-up |
| fax | Fax tone detected |
| unknown | Detection inconclusive |
Response XML for voicemail drop
<Response>
<Play>https://cdn.example.com/voicemail-drop-v3.mp3</Play>
<Hangup />
</Response>
SWML version
version: 1.0.0
sections:
main:
- answer:
answer_on: machine_end_beep
- play:
url: https://cdn.example.com/voicemail-drop-v3.mp3
- hangup: {}
AMD tuning parameters
| Parameter | Default | Description |
|---|---|---|
| machine_detection_timeout | 30 sec | Max time to make a detection decision |
| machine_detection_speech_threshold | 2400 ms | Min duration of initial speech to consider it a machine greeting |
| machine_detection_speech_end_threshold | 1200 ms | Silence after greeting to call it "ended" |
| machine_detection_silence_timeout | 5000 ms | Silence period that indicates a human pause vs. machine end |
Tune for your audience: business phones with long voicemail greetings need longer thresholds; personal mobile voicemails are shorter.
AMD accuracy and the cost of being wrong
AMD is not perfect. Industry-typical accuracy: 90-95% on human/machine distinction. Failure modes:
| Failure | Consequence | |---|---| | Human classified as machine | Pre-recorded plays over a live person's "hello" — embarrassing, annoying, possibly TCPA violation | | Machine classified as human | Voicemail drop didn't fire, no message left | | Beep missed | Message plays mid-greeting, partially recorded |
Production callbacks should handle the ambiguity:
if answered_by == "human":
return live_message_response() # different copy, or hand to agent
elif answered_by in ("machine_end_beep", "machine_end_silence"):
return voicemail_drop_response()
elif answered_by == "machine_start":
# too early — voicemail greeting still playing
return hold_response() # wait, or call back
else:
return hangup_response() # don't risk it
Voicemail drop vs ringless voicemail (RVM)
Critical distinction. Both deliver pre-recorded messages but the mechanism is different.
| Attribute | Voicemail drop | Ringless voicemail (RVM) | |---|---|---| | Mechanism | Standard outbound call, AMD-triggered drop | Direct insertion to voicemail server, bypassing the phone ring | | Recipient experience | Phone rings, may show missed call | No ring, voicemail appears | | Carrier interaction | Standard PSTN call setup | Server-side voicemail injection (often deemed not a "call" by vendors) | | TCPA status | Treated as an outbound call → subject to TCPA full | Vendor argument: not a call, not subject to TCPA. FCC and most courts disagree. | | Risk | Manageable with consent | High legal risk |
SignalWire does not offer RVM as a product. Voicemail drop via AMD is the supported, legally safer path.
TCPA compliance
The 1991 Telephone Consumer Protection Act regulates auto-dialed and pre-recorded calls. Voicemail drop is unambiguously a pre-recorded call.
Required consent
| Call type | Required consent | |---|---| | Pure transactional (appointment reminder, delivery notification) | Implied or express consent (relationship establishes it) | | Service notification (account changes, security alerts) | Express consent (opted into the relationship) | | Telemarketing / promotional | Prior express written consent (PEWC) — signed disclosure with TCPA-compliant language |
PEWC is the strict standard. Requires:
- Signature (electronic OK)
- Clear and conspicuous disclosure of marketing nature
- Identifies the seller
- Specifies the called party's phone number
- Acknowledges that consent is not a condition of purchase
Penalties
TCPA private right of action: $500-$1500 per violation. Class actions over voicemail drop campaigns regularly settle for tens of millions.
Time of day restrictions
Federal rule: telemarketing calls only between 8 AM and 9 PM local time of the called party. Voicemail drop counts.
Do-Not-Call registry
Telemarketing voicemail drops to numbers on the National DNC list = $1,500/violation. Scrub the call list against DNC weekly minimum, ideally daily.
State-by-state additional rules
| State | Additional rule | |---|---| | California | Mini-TCPA (CIPA) — adds wiretap-style claims for unconsented recordings | | Florida | FTSA — explicit written consent for autodialed calls; stricter than TCPA | | Washington | Mini-TCPA — robocall restrictions | | Oklahoma | TCPA OK — similar to Florida |
A Florida FTSA voicemail drop without compliant consent is $500 per call minimum, with class action exposure.
Production patterns
Pattern 1: Transactional reminders
Appointment reminders, delivery confirmations, account alerts.
- Consent: established by the prior business relationship
- Time: still observe 8 AM - 9 PM local
- DNC scrub: not required (transactional exemption)
- Sample: "This is a reminder that your appointment with Dr. Smith is tomorrow at 2 PM. Reply HELP or call us back to change."
Pattern 2: Two-stage outbound (live attempt → voicemail drop)
Live agent dials. If human answers, agent talks. If machine answers, agent triggers the drop button — pre-recorded plays, agent moves to next call.
def agent_drop_voicemail(call_sid, message_url):
client.calls(call_sid).update(
twiml=f"""
<Response>
<Play>{message_url}</Play>
<Hangup />
</Response>
"""
)
This is the most defensible pattern because a human is attempting live conversation first — the drop is just a polite "leave a message" move.
Pattern 3: Pure automated voicemail-drop campaign
Dialer auto-runs through a list, AMD-triggers drop on every voicemail. Highest TCPA risk. Only acceptable with iron-clad PEWC, DNC scrubbing, and recording.
Carrier-level filtering
Even with consent, carriers may filter:
- STIR/SHAKEN unverified outbound calls get "Spam Likely" tag → answer rate drops
- High-volume short-duration calls trigger carrier robocall mitigation → blocked or rate-limited
- Same caller ID dialing many numbers per minute flags as robodialer → blocked
Mitigation: see STIR/SHAKEN, use multiple numbers, pace the dial rate (5-15 calls per minute per number).
Quality and content
Recorded message best practices:
- Identify yourself within 3 seconds
- State the purpose immediately
- Provide a call-back number
- Provide opt-out instructions (per TCPA)
- Keep under 30 seconds
Required opt-out language (TCPA 47 CFR 64.1200(a)(7)):
"If you do not wish to receive future calls from us, you can request to be added to our internal do-not-call list by pressing 9 now, or by calling [number]."
For pre-recorded marketing calls, the opt-out mechanism must be activated within 2 seconds of the message ending. Press-9 to opt out is the standard implementation.
Common pitfalls
- AMD misclassifying human as machine — embarrassing UX, possible TCPA hit. Tune thresholds, test with diverse voicemail systems.
- Playing the message over the greeting — use
DetectMessageEndnotEnablefor AMD mode. - No opt-out mechanism — TCPA violation by default, even for compliant consent.
- Dialing outside permitted hours — caller's local time, not the dialer's.
- DNC violations on stale lists — scrub recently.
- Calling RVM "voicemail drop" — different products, different risk profiles. Don't conflate.
Related patterns
- Missed call workflows — inbound recovery (different direction)
- Call quality metrics — diagnosing why drops aren't delivering
- STIR/SHAKEN — caller-ID attestation impact on outbound
References
- TCPA 47 USC §227 — Telephone Consumer Protection Act
- 47 CFR §64.1200 — TCPA implementing rules including opt-out requirements
- FCC Declaratory Ruling on Ringless Voicemail (2017)
- Florida FTSA Fla. Stat. §501.059
- SignalWire docs — AMD (Answering Machine Detection) parameters