Detecting Outgoing Call Answer
How VoiceGuide detects that an outgoing call has been answered depends on what telephone lines/trunks are used.
Analog
Dialogic cards can detect when a call has been answered and can distinguish if a call has been answered by a live person or by an answering machine. When the recipient of call starts saying something the Dialogic card can determine whether the call has been answered by a human or by a machine/voicemail. VoiceGuide will then run the appropriate callflow/script.
If answering machine detection is disabled then the Dialogic card will just wait for any spoken sounds (live or machine), and once it hears anything (or ringback has gone away) then the call will be reported as answered. The ringback tone for which the Dialogic card is to listen out for needs to be correctly specified. The default value will work for most ringbacks, but sometimes it will be necessary to set the ringback tone definition in ConfigLine.xml file.
If recipient of call does not say anything after answering the call (or there is just silence on the line) then the Dialogic card will deduce that the call has been answered only when it realizes that the 'ringback' signal has gone away.
If the Dialogic card does not correctly detect the ringback tone on the line, then after a timeout (about 8 seconds) it will report the outgoing call as connected even though the outgoing line is still ringing.
Digital T1/E1 ISDN, VoIP (SIP)
On T1/E1 and VoIP connections VoiceGuide will know the instant the call recipient picks up the handset or presses the 'answer call' button.
VoiceGuide callflow/script will be immediately started if Dialogic's answering machine detection is not enabled.
If Dialogic's answering machine detection is enabled, then Dialogic will wait to hear what is said on the line by the call recipient, and then based on what it hears Dialogic will determine whether the call has been answered by a human or by a machine. VoiceGuide will then run the appropriate script.
If answering machine detection is enabled and recipient of call does not say anything after answering the call, then the Dialogic card will timeout out after a few seconds and report the call as connected.
Similarly, an indication that the destination telephone is busy or disconnected is sent back to the digital card from the network immediately - allowing for quick abandoning of those calls and dialing of another number if needed.
The sound quality of VoIP connections is sometimes not as good as when Analog or Digital trunks are used, and hence the precision with which answering machines vs. live persons are detected is sometimes worse then on Analog or Digital systems.
Detecting Answering Machines
Dialogic can distinguish if a call has been answered by an answering machine or by a human. No other telephony cards/drivers can do that as well as Dialogic and that is why Dialogic platform is the best choice for systems which do outbound dialing.
VoiceGuide uses Dialogic's answering machine detection mechanism to distinguish whether a person or an answering machine has answered the call. Dialogic's answering machine detection uses frequency based analysis and detection of whether the speech is coming from live person or answering machine is made in about 1 second. If Dialogic informs VoiceGuide that it has detected an answering machine / voicemail, then VoiceGuide will wait for the sound prompt on the line to finish before playing the answering machine message or starting the script.
Answering Machine detection is enabled by default. The following keywords can be used in the "Answering Machine" text field to modify this behaviour:
RETRY | VoiceGuide will hang up and dial again (up to the maximum number of redials allowed). |
IGNORE | VoiceGuide will start the "Live Person Answer" script if answering machine detected. |
DISABLE | Answering Machine detection is disabled. VoiceGuide will start the "Live Person Answer" script immediately when call is picked up. |
If Answering Machine was detected, the $RV[AmWelcMsg]) will store the length of the Answering Machine message (in 100ms units).
False reports of an Answering Machine answer when a Live Peron actually answered the call:
On poor quality lines (usually low quality VoIP and mobile phone connections) Dialogic will sometimes mistakenly report that an answering machine/voicemail answered the call when in fact the call was answered by a real person.
The reason for this is that the low quality of the connection makes the voice of the person answering the call sound very similar to the sound quality usually expected from an answering machine.
Background noise can also play a factor in false detection of answering machines (eg: radio playing in background, machine noise, etc).
False reports of a Live Person answer when an Answering Machine actually answered the call:
Traditional analog based answering machines are usually correctly detected by Dialogic.
Many voicemail systems are also correctly detected.
If however the answering machine or voicemail welcoming message played is high quality, without the usual 'pre-recorded message' type distortions, then it is possible for Dialogic to mistake it for a real person answering the call.
Suggested approach:
One approach on VoIP and ISDN systems is to disable Dialogic's Answering Machine detection, and just use the "Live Answer" script.
The "Live Answer" script will then start as soon as the call is answered, without waiting for any speech on the line.
The "Live Answer" script can then be set to play a short message first, that says for example: "This is a call from XYZ" and then use a Record type module to start recording, with silence length that ends the recording set beforehand to be short - about one second or even half a second.
ie: in the record module itself use a "on {silence} goto... " path, and point that path to the module that starts the rest of the script.
When the recording finishes due to silence and the actual script starts, then the next message played will then be recorded on the answering machine/voicemail, or heard by the caller.
This approach will result in system waiting till answering machine welcome finishes playing before leaving the message, and in case of live answer the people answering the call will only hear a short pause of 1-2 seconds between the first and second sound file being played.
And in cases where the voicemail system only plays a short beep with no welcome message, then both the "This is a call from XYZ" and sound files that follow will be recorded by the voicemail system.
Fine tuning Dialogic Answer Detection Parameters
With VoiceGuide configuration files it is possible to set all entries in the Dialogic DX_CAP structure, which includes Dialogic's low level settings that affect the Answering Machine / Live Answer detection parameters:
ca_cnosig
ca_noanswer
ca_pamd_failtime
etc.
There are about 30-40 settings in the DX_CAP structure, all of which are accessible, allowing total control (on a per-call basis) over how Dialogic performs the detection.
For more information on the fields in the DX_CAP structure please refer to Dialogic's documentation - the "Voice API" section.
To change settings from the default values used by VoiceGuide an XML style expression needs to be specified in the "Call Options" field.
Example of the expression used is show below:
<DX_CAP><ca_cnosig>500</ca_cnosig><ca_pamd_failtime>200</ca_pamd_failtime></DX_CAP>
Detecting end of Answering Machine message:
Silence detection is used to detect end of answering machine messages.
The level and length of the silence that will trigger 'end-of-message' event is set in VG.IN in section [VGDialer], settings: AM_SilenceDetectLength and AM_SilenceDetectLevel.
This silence detection length and level can also be set on a per-call basis, using Result Variables: $RV[SilenceDetectLvl] and $RV[SilenceDetectLen].
eg: adding this to the "ResultVariables" field of the outgoing call:
[SilenceDetectLvl]{5}[SilenceDetectLen]{30}
will set the detect level to 5 (level can be between 1 and 100, 0 to turn off detection), and SilenceDetectLen's "30" setting represents 3 seconds (SilenceDetectLen is in 100ms units)
Recording of Answering Machine messages:
The latest answering machine message for call made on each port is saved as a "rec_am_*.wav" sound file in VoiceGuide's \temp\ subdirectory.
To have every answering machine message saved in \temp\ subdirectory, set: AM_RecUnique=1 in VG.INI, in section [VGDialer]