SQLphone developer site home page
Detecting answer-phone pickup
Why detect answer-phones?
When building a SQLphone dial-out system (a system that makes calls, rather than answers calls), it is usually important to detect when a human has picked-up the call, and when an answer-phone or voice-mail has picked-up the call. Typically:
- On answer-phone pickup, you want SQLphone to leave a message and hang-up.
- On human pickup, you want SQLphone to interact with the person in the normal way, by playing prompts and handling keyed-in digits.
Automatically detecting answer-phone pickup is difficult. The Dialogic driver software contains complex sound analysis logic to detect answer-phone pickup. We tested this extensively and found it to be unreliable, having less that 50% success rate. On a more positive note, it does not give false positives (human answering has been incorrectly identified as an answering machine).
We have successfully used the following simple technique to manually detect answer-phones.
- On successful pickup, immediately play a short prompt to request a digit press.
- Keep the message as short as possible, for example "This is XYZ Inc. Press 1 if you can take this call".
- Ask for a specific key. Don't ask, "press any key" because this can confuse people.
- If any key is pressed (not just the key asked for), then a real person has picked-up the call. Your flowchart can proceed to interact with the person.
- If no key is pressed, assume an answer-phone has picked-up the call. Your flowchart should leave a message and hang-up.
After detecting answer-phone pickup, the next step is to detect when the answer-phone message has completed, so that your flowchart can speak its message. This is necessary because Dialogic answer-phone detection does not wait for the message to complete.
To implement silence detection, add a Record box to your flowchart and setup as follows:
- Play voice prompt = none
- Record to memory = Message
- Max recording = 30 seconds
- Min recording = 1 second
- Stop after silence = 1 second
- Beep before recording = no
- Stop recording when digit pressed = yes
- Press the Record box Conditions tab, and delete conditions HangUpMsg and NoMessage
- Join the Record box NextBox condition to the rest of your flowchart that speaks a message for an answering machine
The Record box will record (and discard) the answer phone's message, but importantly will wait for a 1 second period of silence after this message, before proceeding to deliver your message.
Dial box conditions
Recap of conditions that can result from a SQLphone flowchart Dial box:
- NoPhone: Line is disconnected. You may want to join this condition to a SQL box, to log the fact that the number could not be dialed.
- NoReply: Line is busy. You may want to join this condition to a SQL box, to log the fact that the number is busy. You may want to re-dial later.
- VoiceMail: Call is successfully picked-up. Indicates voice-mail or answer-phone detected.
- NextBox: Call is successfully picked-up. It could be a human, or it could be an answer-phone.
- Use a combination of automatic (Dialogic) and manual answer-phone detection.
- Start the call with a short "press 1 now" message. If no response, assume an answer-phone.
- Implement silence detection when leaving a message for an answer-phone.