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