Recommended Baselines
- Greeting length threshold: 1.6–2.4s (longer → voicemail likelihood)
- Beep detection: enable with 500–1200Hz band emphasis and -28dB threshold
- Silence window: 600–900ms before first agent utterance
- DTMF presence: deprioritize voicemail if early DTMF detected
- Twilio AMD: use DetectMessageEnd with 2.0s max greeting
Hybrid Heuristic
// Pseudocode combining AMD + custom VAD/beep
const decision = (amd, vad, beep, dtmf, tGreeting) => {
if (beep.detected && tGreeting > 1.7) return 'VOICEMAIL';
if (amd.result === 'MACHINE' && vad.noHumanSpeech && tGreeting > 1.8) return 'VOICEMAIL';
if (dtmf.early) return 'HUMAN';
if (vad.humanSpeechStart < 1200) return 'HUMAN';
return amd.result === 'MACHINE' ? 'VOICEMAIL' : 'HUMAN';
};
QA Checklist
- Measure FP/FN rates against 100+ labeled calls; track per-carrier
- Record features (greeting length, beep time, VAD events) for audits
- A/B AMD settings monthly; carriers change cadence
- Fail-safe: if uncertain → short intro + re-check before full pitch
Good / Bad / Ugly
- Good: Beep detection + AMD + VAD fusion; measurable thresholds.
- Bad: Relying on one signal (AMD only) → drift over time.
- Ugly: Double beeps, carrier ringback fakeouts; use cooldown + retry strategy.