Jump to content


< Back to Forum


 

Outbound Dialer - Dtmf Detection


  • Please log in to reply

#1 miva 02 August 2016 - 11:10 AM

Some of our outbound calls do not detect callers on the other end when they speak. Sometimes the person answering will try and say hello and wait 20 times in a row without detection. Most calls work, but some take around 10 seconds to react to someone speaking. Not sure if this is background noise, VM detection etc.

 

As these calls are going to people that are expecting them, is it possible after the call is answered and where normally they would say hello, instead they press a DTMF key to trigger connection, vs talking and waiting to see if it gets detected?



#2 SupportTeam 02 August 2016 - 11:24 AM

We would need to see the trace that captures the outgoing call.

 

Please post the vgEngine traces and we would then be able to comment on what has happened during that call.

 

Please .ZIP up any traces before posting.



#3 SupportTeam 02 August 2016 - 11:28 AM

It is possible to set up the system to just get call recipient to press a DTMF tone to confirm that a live person has answered the call.

 

Would you like to use that in conjunction with the usual answering machine detection? Or would you like the system to just play "Press 1 to accept call"  straight after the outgoing call gets answered ?



#4 miva 03 August 2016 - 08:41 AM

Yes we would like to use it in conjunction with live answer detection.

 

Thanks for your reply.



#5 SupportTeam 03 August 2016 - 10:59 AM

Are the calls going out on analog lines or over VoIP or ISDN trunks ?

 

If VoIP or ISDN is used then VoiceGuide will be advised the exact moment at which the handset was picked up - and it can then then immediately start a script that starts by playing a message "press1 to accept the call".

Then, after playing that message once, the VoiceGuide script should go to a record module. This is in case call was answered by an answering machine or voicemail system. If the record module completes recording due to silence then you can assume that the call was answered by an answering machine or voicemail system - and the script can then play a message that you would like to leave.

 

The "on {silence}" path is taken if the recording completes due to silence. Please see: http://www.voiceguid...l/modrecord.htm



#6 miva 03 August 2016 - 04:35 PM

Please find trace attached. The call at 14:07 to 0477359 (last three digits left off for privacy) is an example, the called party said they waited around 40 seconds for it to detect their voice saying "hello" multiple times. They did pause for silence to see if it worked each time.

 

Re the on silence detection, the problem is getting to the script. Can we do <OnSilence> in the XML file that initiates the dial out?

 

Yes the system is running on ISDN lines.



#7 SupportTeam 03 August 2016 - 05:01 PM

This is an E1 ISDN system and the provided trace captures 57 outgoing calls that were answered.

 

 

Trace shows that at 14:07 the call to 0477359XXX was answered and Dialogic card recognized it as a Human answer.

 

The script WilsarOut.vgs was started, playing the "WelfareCheck.wav,month08.wav,place03.wav,12.wav,0.wav, ... etc" sound files.

 

Call recipient hung up 2 seconds after the sound files commenced playing (4 seconds after call was answered).

 

Here is the summary of events on that call:

    Line 16690: 140708.513  6  16   5 state Dialing 0477359XXX...
    Line 16868: 140713.205 20  16   5 state Dialing 0477359XXX... Ringing...
    Line 17040: 140717.336 20  16   5 ev    CallState GCEV_CONNECTED, crn=6020010,
    Line 17054: 140717.337  6  16   5 state Dialing 0477359XXX... Ringing..., doing answer detection... (DX_PAMDOPTEN)
    Line 17254: 140719.286 20  16   5 ev    Dialogic 133,TDX_CALLP, crn=6020010, 10,3,0,CR_CNCT,CON_PVD,
    Line 17285: 140719.288  6  16   5 state Human answer. Start [d:\Dialler\Wilsar\WilsarOut.vgs]
    Line 17332: 140719.295  6  16   5 state [HTTP-WilsarOut] Say Numbers: 08031205 as Date & Time - MMDDHHNN
    Line 17365: 140721.141 20  16   5 ev    CallState GCEV_DISCONNECTED, crn=6020010,
    Line 17374: 140721.141  6  16   5 state Hanging up... [LINECALLSTATE_DISCONNECTED]
    Line 17394: 140721.206 20  16   5 ev    CallState GCEV_DROPCALL, crn=6020010,
    Line 17468: 140721.217  6  16   5 state [DetailsHangup] DB Query
    Line 17515: 140721.226 20  16   5 ev    CallState GCEV_RELEASECALL, crn=6020010,

also see attached except for that call.



#8 SupportTeam 03 August 2016 - 05:16 PM

A call to the same number at 14:13 was categorized as an answering machine. Is that the call that you are referring to?

 

VoiceGuide records what happens on the line while it waits for the answering machine message to complete.

 

The recording for that call was saved in file:

 

C:\Program Files\VoiceGuide\temp\RecAm_10.wav

 

Looking at that file would help establish what happened.

 

Note that this file would be overwritten if any future calls on that line that detected the answering machine / voicemail, and the trace shows that this file was overwritten multiple times afterwards:

150619.595  6  10   3       RecSoundStart [C:\Program Files\VoiceGuide\temp\RecAm_10.wav] ok
154233.183  6  10   3       RecSoundStart [C:\Program Files\VoiceGuide\temp\RecAm_10.wav] ok
160828.753  6  10   3       RecSoundStart [C:\Program Files\VoiceGuide\temp\RecAm_10.wav] ok

Current version of VoiceGuide can be made to save these recordings into uniquely named individual files, so that they are not overwritten.

This feature would help in debugging the issue here.

 

In the version of software that is now installed on your system those recordings are always overwritten.

141316.640  6  10   3 state Dialing 0477359XXX... Ringing..., doing answer detection... (DX_PAMDOPTEN)
141316.640  6  10   3       CDRCallOutcomeSet setting CallData.dateCallAnswerTime
141322.849 20  10   3 ev    Dialogic 133,TDX_CALLP, crn=608000a, 10,4,0,CR_CNCT,CON_PAMD,
141322.849 20  10   3       q scr add   evScriptEvent 133 CON_PAMD
141322.849 20  10   3       q scr add   evScriptEvent 133 TDX_CALLP
141322.849  6  10   3       q scr run   evScriptEvent sCode=[CON_PAMD] iActionID=0, crn=608000a[10|4|0|0|0][CR_CNCT|CON_PAMD||||]
141322.849  6  10   3       scriptevent CON_PAMD  10|4|0  CR_CNCT|CON_PAMD|
141322.849  6  10   3       LsWaitAfterDialingOut : 133,608000a,CON_PAMD,10,4,0,CR_CNCT,CON_PAMD,
141322.849  6  10   3       q scr run   evScriptEvent sCode=[TDX_CALLP] iActionID=0, crn=608000a[10|4|0|0|0][CR_CNCT|CON_PAMD||||]
141322.849  6  10   3       scriptevent TDX_CALLP  10|4|0  CR_CNCT|CON_PAMD|
141322.849  6  10   3       LsWaitAfterDialingOut : 133,608000a,TDX_CALLP,10,4,0,CR_CNCT,CON_PAMD,
141322.849  6  10   3       ScriptWorkingMode set Running_Normal, (called from CR_CNCT on outbound call)
141322.849  6  10   3       CDRCallOutcomeSet setting CallData.dateCallAnswerTime
141322.849  6  10   3       OnOutboundCallAnswered_Start_AnsweringMachine_Option 10,4,0
141322.850  6  10   3       rv    add   [$RV_STARTTIME]{2016-08-03 14:13:22}
141322.850  6  10   3       rv    add   [$RV_DEVICEID]{10}
141322.850  6  10   3       rv    add   [DlgcVoice]{dxxxB1C3}
141322.850  6  10   3       rv    add   [DlgcNetwork]{dtiB1T3}
141322.851  6  10   3       rv    ScriptsPath could not be set as LineState[iLineId].iVgsIdx = 0 in InitSeedRvs
141322.851  6  10   3       rv    add   [$RV_DIALEDNUMBER]{0477359XXX}
141322.851  6  10   3       CDRCallOutcomeSet setting CallData.dateCallAnswerTime
141322.851  6  10   3       dial  DeleteFromOutDialQue ID=412541
141322.851  6  10   3 state Machine Answer. Wait for end of welcome message...
141322.851  6  10   3       dial  awaiting end of answering machine message (lvl:10 for 20)
141322.851  6  10   3       q tel add   cmd_SilenceDetectSet [20,10,0,0,0][||||]
141322.851  6  10   3       q tel add   cmd_RecordFileStart [6,0,0,0,0][||||]
141322.851  6  10   3       RecSoundStart [C:\Program Files\VoiceGuide\temp\RecAm_10.wav] ok
141322.851  7  10   3       q tel run   cmd_SilenceDetectSet
141322.851  6  10   3 t     timer set   120 sec : EV_TIMEOUT_HANGUP
141322.852  7  10   3       q tel run   cmd_RecordFileStart
141355.848 20  10   3       q scr add   evScriptEvent 9300 EV_SILENCE_DETECTED
141355.848 20  10   3 ev    Dialogic 130,TDX_RECORD, crn=608000a, 0,0,0,TM_MAXSIL,,
141355.848  6  10   3       q scr run   evScriptEvent sCode=[EV_SILENCE_DETECTED] iActionID=0, crn=0[0|0|0|0|0][|||||]
141355.848 20  10   3       q scr add   evScriptEvent 130 TDX_RECORD
141355.848  6  10   3       scriptevent EV_SILENCE_DETECTED  0|0|0  ||
141355.848  6  10   3       LsDialoutRecAnswerMachineWelcMsg EV_SILENCE_DETECTED, EV_SILENCE_DETECTED
141355.848  6  10   3       RecSoundStop begin trunc100ms=0, sCaller=LsDialoutRecAnswerMachineWelcMsg
141355.848  6  10   3       q tel add   cmd_RecordStop [0,0,0,0,0][||||]
141355.848  6  10   3       rv    rec length: AmWelcMsg_RecLen100ms = 329
141355.848  6  10   3       rv    add   [AmWelcMsg_RecLen100ms]{329}
141355.848  7  10   3       q tel run   cmd_RecordStop
141355.849  6  10   3 t     timer set   1 sec : EV_REC_FINISHED
141355.849  6  10   3       q scr run   evScriptEvent sCode=[TDX_RECORD] iActionID=0, crn=608000a[0|0|0|0|0][TM_MAXSIL|||||]
141355.849 20  10   3       q scr add   evScriptEvent 8003 EV_REC_FINISHED
141355.849  6  10   3       scriptevent TDX_RECORD  0|0|0  TM_MAXSIL||
141355.849  6  10   3       LsDialoutRecAnswerMachineWelcMsg EV_UNKNOWN_130, TDX_RECORD
141355.849  6  10   3       q scr run   evScriptEvent sCode=[EV_REC_FINISHED] iActionID=0, crn=0[0|0|0|0|0][|||||]
141355.849  6  10   3       scriptevent EV_REC_FINISHED  0|0|0  ||
141355.849  6  10   3       LsDialoutRecAnswerMachineWelcMsg EV_REC_FINISHED, EV_REC_FINISHED
141355.849  6  10   3       iRecLen=329 (3/08/2016 2:13:22 PM)
141355.849  6  10   3       rv    add   [AmWelcMsg_RecLen100ms]{329}
141355.849  6  10   3 state Run Answer Machine script [d:\Dialler\Wilsar\WilsarOut.vgs]


#9 miva 03 August 2016 - 05:53 PM

Sorry, yes that is the call, around 40 seconds, answer machine script was run. I suspect it may be background noise causing the issue. 

 

I think I recall the timeout can also be reduced so this 40 seconds is greatly reduced? Perhaps we could just remove the voicemail detection altogether?



#10 SupportTeam 03 August 2016 - 06:17 PM

The timeout is actually 120 seconds on that record. Changing timeout would result in longer voicemail/machine messages not being given the opportunity to finish - so that would break correct system operation in those cases. So advise not changing the timeout.

 

On this call the 'end of message' was triggered and script was started and call recipient did press a key in response to the prompt (see below)

 

If there is significant background noise interfering with the call then the better approach may be to just play once a short "Press 1 to accept call" message at beginning of call - right after call being answered/connected, and then follow approach outlined here: http://voiceguide.co...2279#entry41622

 

To disable the Answering Machine detection please specify:

 

disable

 

as the 'Answering Machine Script'. Please see: http://www.voiceguid...tcallanswer.htm

 

(uppercase or lowercase is fine)

141322.851  6  10   3 state Machine Answer. Wait for end of welcome message...
141322.851  6  10   3       dial  awaiting end of answering machine message (lvl:10 for 20)
141322.851  6  10   3       q tel add   cmd_SilenceDetectSet [20,10,0,0,0][||||]
141322.851  6  10   3       q tel add   cmd_RecordFileStart [6,0,0,0,0][||||]
141322.851  6  10   3       RecSoundStart [C:\Program Files\VoiceGuide\temp\RecAm_10.wav] ok
141322.851  7  10   3       q tel run   cmd_SilenceDetectSet
141322.851  6  10   3 t     timer set   120 sec : EV_TIMEOUT_HANGUP
141322.852  7  10   3       q tel run   cmd_RecordFileStart
141355.848 20  10   3       q scr add   evScriptEvent 9300 EV_SILENCE_DETECTED
141355.848 20  10   3 ev    Dialogic 130,TDX_RECORD, crn=608000a, 0,0,0,TM_MAXSIL,,
141355.848  6  10   3       q scr run   evScriptEvent sCode=[EV_SILENCE_DETECTED] iActionID=0, crn=0[0|0|0|0|0][|||||]
141355.848 20  10   3       q scr add   evScriptEvent 130 TDX_RECORD
141355.848  6  10   3       scriptevent EV_SILENCE_DETECTED  0|0|0  ||
141355.848  6  10   3       LsDialoutRecAnswerMachineWelcMsg EV_SILENCE_DETECTED, EV_SILENCE_DETECTED
141355.848  6  10   3       RecSoundStop begin trunc100ms=0, sCaller=LsDialoutRecAnswerMachineWelcMsg
141355.848  6  10   3       q tel add   cmd_RecordStop [0,0,0,0,0][||||]
141355.848  6  10   3       rv    rec length: AmWelcMsg_RecLen100ms = 329
141355.848  6  10   3       rv    add   [AmWelcMsg_RecLen100ms]{329}
141355.848  7  10   3       q tel run   cmd_RecordStop
141355.849  6  10   3 t     timer set   1 sec : EV_REC_FINISHED
141355.849  6  10   3       q scr run   evScriptEvent sCode=[TDX_RECORD] iActionID=0, crn=608000a[0|0|0|0|0][TM_MAXSIL|||||]
141355.849 20  10   3       q scr add   evScriptEvent 8003 EV_REC_FINISHED
141355.849  6  10   3       scriptevent TDX_RECORD  0|0|0  TM_MAXSIL||
141355.849  6  10   3       LsDialoutRecAnswerMachineWelcMsg EV_UNKNOWN_130, TDX_RECORD
141355.849  6  10   3       q scr run   evScriptEvent sCode=[EV_REC_FINISHED] iActionID=0, crn=0[0|0|0|0|0][|||||]
141355.849  6  10   3       scriptevent EV_REC_FINISHED  0|0|0  ||
141355.849  6  10   3       LsDialoutRecAnswerMachineWelcMsg EV_REC_FINISHED, EV_REC_FINISHED
141355.849  6  10   3       iRecLen=329 (3/08/2016 2:13:22 PM)
141355.849  6  10   3       rv    add   [AmWelcMsg_RecLen100ms]{329}
141355.849  6  10   3 state Run Answer Machine script [d:\Dialler\Wilsar\WilsarOut.vgs]
141355.849  6  10   3       NewVgsVgm_Goto d:\Dialler\Wilsar\WilsarOut.vgs,,,,,0
141355.849  6  10   3       NewVgsVgm_Goto_Setup  dest=d:\Dialler\Wilsar\WilsarOut.vgs|, return=|, lSaveSourceOnCallStack=0
141355.849  6  10   3       rv    add   [ScriptEnd_Time]{2016-08-03 14:13:55}
141355.850  6  10   3       rv    add   [ScriptEnd_Goto_Script]{d:\Dialler\Wilsar\WilsarOut.vgs}
141355.850  6  10   3       rv    add   [ScriptEnd_Goto_Module]{}
141355.850  6  10   3       WriteToLogFiles_CurrScriptOnly begin
141355.850  6  10   3       WriteToLogFiles_CurrScriptOnly : LineState.iVgsIdx<=0
141355.850  6  10   3       rv    add   [ScriptStart_Time]{2016-08-03 14:13:55}
141355.851  6  10   3       rv    add   [ScriptStart_CalledFrom_Module]{EndCall}
141355.851  6  10   3       FindFullPathToScript_VgsOrVgp start [d:\Dialler\Wilsar\WilsarOut.vgs]
141355.851  6  10   3       ScriptToRunOnHangup=[HTTPNotify.vgs] in NewVgsVgm_SetVgsVgm 1
141355.851  6  10   3       StartModuleDefault=[SetType]
141355.851  6  10   3       ScriptToRunOnHangup=[HTTPNotify.vgs] in NewVgsVgm_SetVgsVgm NewVgsVgm_SetActualVgsVgm
141355.851  6  10   3 t     timer clear (force=False)
141355.851  6  10   3       RunModule start Evaluate, [SetType], iModuleIdx=9, previous: vgm=9, vgs=2:2
141355.851  6  10   3 state [SetType] Evaluate [0]
141355.851  6  10   3       eval[0]
141355.853  6  10   3       CreateInstance ScriptControl objSC is: [System.__ComObject]
141355.855  6  10   3       creating new (non-global) rv : Status
141355.855  6  10   3       Eval Expr result:[0] stored in RV[Status]
141355.855  6  10   3       path {0} not found
141355.855  6  10   3       matching path not found [0], try boolean paths.
141355.855  6  10   3       FindNextVgmTitleInPathList: next module title is=[HTTP-WilsarOut]
141355.855  6  10   3       matching path found (Boolean False)
141355.855  6  10   3 t     timer clear (force=False)
141355.855  6  10   3       RunModule start Say Numbers, [HTTP-WilsarOut], iModuleIdx=17, previous: vgm=9, vgs=2:2
141355.855  6  10   3       rv    replace start [$RV[OnTime]]
141355.855  6  10   3       rv    replace end   [08031211]
141355.855  6  10   3 state [HTTP-WilsarOut] Say Numbers: 08031211 as Date & Time - MMDDHHNN
141355.855  6  10   3       CheckForAnyPlayActionsAndSetkeysIfNecessary no PlayActions, vgmidx=17, strPaths=on {1} goto [WelfareCheck]
141355.855  6  10   3       PlaySoundStartNumbers WelfareCheck.wav, WilsarOptions.wav, 08031211, Date & Time - MMDDHHNN
141355.856  6  10   3       playing [08031211] as [Date & Time - MMDDHHNN] using DLL : [WelfareCheck.wav,month08.wav,place03.wav,12.wav,11.wav,pm.wav,WilsarOptions.wav]
141355.856  6  10   3 t     timer clear (force=False)
141355.856  6  10   3       q tel add   cmd_PlayStart [0,0,0,0,0][||||]
141355.856  6  10   3       play  start ok, playId=869394
141355.856  6  10   3       PlaySoundStartNumbers returned
141355.856  7  10   3       q tel run   cmd_PlayStart
141400.163 20  10   3 ev    dtmf 1   (101187594,49,0)


#11 SupportTeam 03 August 2016 - 07:36 PM

An approach that can be used is to first make a call as usual - with answering machine / voicemail detection enabled - and then in cases where:

 

1. the answering machine was detected but the wait for welcome message to finish was too long,

 

or

 

2. the call disconnected while VoiceGuide was waiting for the answering machine / voicemail message to finish

 

then another call is made to the same number - but this time the am/voicemail detection is disabled - and VoiceGuide plays the 'press 1 to accept call' message straight after the recipients handset is picked up.

 

This way most calls will use the normal detection approach which works fine for most calls, but the 'problem' calls - where the called person was not successfully contacted - would get a second call with a different approach used (the 'press1 to accept call' approach).

 

That should result in people who had problems on the first call being able to accept the call on the second attempt.

 

$RV[AmWelcMsg_RecLen100ms] stores the length of the answering machine/voicemail welcome message (in 100ms units. eg: value of 200 = 20 seconds)

 

 

Also, the answering machine scripts should first play a message intended to be left on AM/Voicemail, but then should give the option of letting a selection of some sort to be made. This would allow a live person to indicate to the VoiceGuide system that there is an actual live person on the line, and not a machine. The script can then act accordingly if required.