Insurance billing, supplier follow-ups, government filings, if you've ever lived in B2B, you know the pain of phone trees. Floo's Navigate IVR feature lets an agent dial a number, work the menu, wait on hold, and bridge to your team only when a human picks up.
Three problems we had to solve
- Recognising you're in an IVR (vs talking to a human)
- Reliable DTMF detection in noisy audio
- Knowing when to bail without burning minutes on hold
DTMF detection in messy audio
Phone-tree audio is wildly variable, SIP encoding, mobile carriers, music-on-hold bleed-through. Standard Goertzel-filter DTMF detectors miss 8-12% of touch tones on noisy lines. We layered a small CNN on top of the Goertzel output that pushes detection to 99.4% on our test set.
We open-sourced the training data (5,000 labeled IVR recordings) on Hugging Face. Search 'floo-ivr-dtmf-set'.
Hold-music recognition
When the menu says 'please hold,' the agent goes silent. But how does it know the human picked up? We trained a tiny audio classifier on 12k hours of phone-call audio, hold music vs human speech vs ringtones. Latency is 280ms; accuracy is 97.1%.
We tried to do this with VAD alone. It worked maybe 70% of the time. Music classifiers are the answer.
Safety rails
We never press a key without the model being >0.9 confident on the menu option. If it dips below, the call halts and pages your team. We also cap any single hold at 30 minutes, configurable per agent.