We've Moved! Please visit our new and improved forum over at our new portal: https://portal.plumvoice.com/hc/en-us/community/topics

Pause Response

Questions and answers about IVR programming for Plum DEV

Moderators: admin, support

cgomez@hpsglobal.net
Posts: 16
Joined: Tue Dec 06, 2016 4:13 pm

Pause Response

Post by cgomez@hpsglobal.net »

We have a long pause between prompts. How can we trouble shoot the issue? I am not finding an issue with the speed of pulling in the code. The issue occurs in each sub dialog call.

support
Posts: 3632
Joined: Mon Jun 02, 2003 3:47 pm
Location: Boston, MA
Contact:

Re: Pause Response

Post by support »

Are you calling a webservice at the beginning of your subdialogs? Your subdialog prompts play after the webservice call is complete, so that may be causing delays.

Otherwise, are your prompts in TTS or with pre-recorded audio? If you are using pre-recorded audio, make sure there is minimal silence included before and after your prompt.

If none of these suggestions help, please post or PM us a snippet of your code so we can investigate further.

cgomez@hpsglobal.net
Posts: 16
Joined: Tue Dec 06, 2016 4:13 pm

Re: Pause Response

Post by cgomez@hpsglobal.net »

the call occurs after the pre-recorded audio plays, the retrieval of the sub dialog has already occurred. On the pre-recorded audio there is no silence noise after. If for example the audio plays and gives options to press 1, 2, or 3. Once I press 1 there is a dead silence for about 10 seconds before going to the next sub dialog or hearing the next dialog.

Bargein and termmaxdigits are on the forms, if that helps.

support
Posts: 3632
Joined: Mon Jun 02, 2003 3:47 pm
Location: Boston, MA
Contact:

Re: Pause Response

Post by support »

Does your grammar specify that it expects only 1 digits as input? If not, it sounds like your IVR is waiting for additional input before moving on.

To better assist you, please post an example of your code.

cgomez@hpsglobal.net
Posts: 16
Joined: Tue Dec 06, 2016 4:13 pm

Re: Pause Response

Post by cgomez@hpsglobal.net »

The prompt expects only one input.

support
Posts: 3632
Joined: Mon Jun 02, 2003 3:47 pm
Location: Boston, MA
Contact:

Re: Pause Response

Post by support »

Please post an example of your code where you collect the input and the move onto the next subdialog. Feel free to blank out any sensitive data like specific URLs, etc. We can't help if we can't see the problem!

cgomez@hpsglobal.net
Posts: 16
Joined: Tue Dec 06, 2016 4:13 pm

Re: Pause Response

Post by cgomez@hpsglobal.net »

Below is the code after pressing 1 there is dead silence for 10 seconds.
=========================================
<?xml version="1.0"?>
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml" application="ivr.vxml">
<meta name="maintainer" content="cgomez"/>
<property name="termmaxdigits" value="true"/>
<property name="inputmodes" value="dtmf"/>
<var name="main"/>
<var name="result"/>
<var name="providertype" expr="'G'"/>
<var name="dbaction" />
<var name="CallStep" expr="20"/>
<var name="CallAction"/>
<var name="OptionMap" expr="000000" />
<var name="CallActionCount" expr="'0'"/>
<var name="CompanyID" expr="'xxx'" />
<var name="CurrentSessionID" expr="'1'" />
<var name="NoMatchCount" expr="0" />




<form id="Main">

<field name="main" type="digits?length=1">
<option dtmf="*"/>
<prompt bargein="true" count="1">

<audio src="voicefiles/ivr_press_027.wav">Press one for member verification.</audio>

<audio src="voicefiles/ivr_press_032.wav">Press two for status information.</audio>

</prompt>

<noinput count="9">
<assign name="CallAction" expr="'96'"/>
<assign name="dbaction" expr="'No Input - Disconnect'"/>
<goto next="#TooManyAttempts"/>
</noinput>

<noinput count="1">
<audio src="voicefiles/IVR_Press_023.wav">Press Eight to replay this message.</audio>
<reprompt/>
</noinput>

<filled>

<if cond="main == 9">
<assign name="result" expr="9"/>
<goto next="#Exit" />

<elseif cond="main == 8"/>
<goto next="#Main" />

<elseif cond="main == '*'"/>
<goto next="#StarExit" />


<elseif cond="main == 1"/>


<assign name="result" expr="1"/>
<goto next="#Exit" />

<elseif cond="main == 2"/>
<assign name="result" expr="2"/>
<goto next="#Exit" />



<else/>
<assign name="NoMatchCount" expr="NoMatchCount+1"/>
<if cond="NoMatchCount == 9">
<assign name="CallAction" expr="'97'"/>
<assign name="dbaction" expr="'No Match - Disconnect'"/>
<goto next="#TooManyAttempts"/>
</if>
<audio src="voicefiles/ivr_error_018.wav">I'm sorry, that is not a valid entry. Please try again.</audio>

<goto next="#Main"/>
</if>
</filled>
</field>

</form>
<form id="ProviderTypeMenu">
<field name="ProviderTypeMenu" type="digits?length=1">
<option dtmf="*"/>
<prompt bargein="true" count="1">

</prompt>

<noinput count="9">
<assign name="CallAction" expr="'96'"/>
<assign name="dbaction" expr="'No Input - Disconnect'"/>
<goto next="#TooManyAttempts"/>
</noinput>

<noinput count="1">
<audio src="voicefiles/IVR_Press_023.wav">Press Eight to replay this message.</audio>
<reprompt/>
</noinput>

<filled>

<if cond="ProviderTypeMenu == 9">
<assign name="result" expr="9"/>
<goto next="#Exit" />

<elseif cond="ProviderTypeMenu == 8"/>
<goto next="#Main" />

<elseif cond="ProviderTypeMenu == '*'"/>
<goto next="#StarExit" />


<else/>

<assign name="NoMatchCount" expr="NoMatchCount+1"/>
<if cond="NoMatchCount == 9">
<assign name="CallAction" expr="'97'"/>
<assign name="dbaction" expr="'No Match - Disconnect'"/>
<goto next="#TooManyAttempts"/>
</if>
<audio src="voicefiles/ivr_error_018.wav">I'm sorry, that is not a valid entry. Please try again.</audio>

<goto next="#Main"/>
</if>
</filled>
</field>
</form>

<form id="Exit">
<block>
<return namelist="result providertype" />
</block>
</form>

<form id="TooManyAttempts">
<block>
<assign name="CallActionCount" expr="'0'"/>
<audio src="voicefiles/IVR_Error_019.wav">I'm sorry, that is too many attempts. Please try again later. Good bye.</audio>


<submit next="ivrfb_LogUpdate.asp" namelist="CompanyID dbaction CurrentSessionID CallStep CallAction CallActionCount"/>
</block>
</form>
<form id="StarExit">
<block>
<assign name="dbaction" expr="'Star Hangup - Disconnect'"/>
<assign name="CallAction" expr="'98'"/>
<assign name="CallActionCount" expr="'0'"/>
<audio src="voicefiles/IVR_Thank_035.wav">Thank you. Good bye.</audio>
<submit next="ivrfb_LogUpdate.asp" namelist="CompanyID dbaction CurrentSessionID CallStep CallAction CallActionCount"/>
</block>
</form>
<form id="CallTransfer">
<block>
<submit next="ivrfb_CallTransfer.asp" namelist="CompanyID dbaction CurrentSessionID CallStep CallAction CallActionCount OptionMap"/>
</block>
</form>
<catch event="telephone.disconnect.hangup" count="1">
<assign name="dbaction" expr="'User Hangup - Disconnect'"/>
<assign name="CallAction" expr="'99'"/>
<assign name="CallActionCount" expr="'0'"/>
<submit next="ivrfb_LogUpdate.asp" namelist="CompanyID dbaction CurrentSessionID CallStep CallAction CallActionCount"/>
</catch>

</vxml>

cgomez@hpsglobal.net
Posts: 16
Joined: Tue Dec 06, 2016 4:13 pm

Re: Pause Response

Post by cgomez@hpsglobal.net »

Below is the second page of code after you press 1. Between the first page and second page is the long pause. I have validated both pages as good.
================================
<?xml version="1.0"?>
<!DOCTYPE vxml PUBLIC "-//The Plum Group//DTD VOICEXML 2.1//EN" "/usr/local/plumvp/vxml.dtd">
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml" application="ivrfaxback.vxml">
<meta name="maintainer" content="cgomez"/>
<property name="termmaxdigits" value="true"/>
<property name="inputmodes" value="dtmf"/>
<var name="main"/>
<var name="result"/>
<var name="dbaction" />
<var name="CallStep" expr="50"/>
<var name="CallAction"/>
<var name="CallActionCount" expr="'0'"/>
<var name="CompanyID" expr="'xxx'" />
<var name="CurrentSessionID" expr="'2017'" />
<var name="NoMatchCount" expr="0" />
<var name="ProviderID" expr="" />
<var name="ProviderType" expr="'G'" />
<var name="CompanyDbConnectString" expr="'data'" />
<form id="Main">
<property name="termchar" value="#"/>
<field name="ProviderNumber" type="digits">

<prompt bargein="true" count="1">

<audio src="voicefiles/ivr_enter_013.wav">Enter your Provider Number. Press the Pound key when finished.</audio>

</prompt>

<noinput count="9">
<assign name="CallAction" expr="'96'"/>
<assign name="dbaction" expr="'No Input - Disconnect'"/>
<goto next="#TooManyAttempts"/>
</noinput>

<noinput count="1">
<audio src="voicefiles/IVR_Press_023.wav">Press Eight to replay this message.</audio>
<reprompt/>
</noinput>

<filled>

<if cond="ProviderNumber.length == 0">
<goto next="#Main"/>
<elseif cond="ProviderNumber == 9"/>
<assign name="result" expr="9"/>
<goto next="#Exit" />

<elseif cond="ProviderNumber == 8"/>
<goto next="#Main" />

<else/>
<assign name="ProviderID" expr="ProviderNumber" />
<goto next="#FindProvider" />

</if>

</filled>

</field>
</form>

<form id="FindProvider">

<var name="dbaction" expr="'Get Record ID'" />
<subdialog name="ivrfb_FindProviderRecordID" src="ivrfb_FindProviderRecordID.asp" namelist="CompanyDbConnectString dbaction ProviderID CurrentSessionID ProviderType"/>
<filled>
<if cond="ivrfb_FindProviderRecordID.dbresult == '4'">

<assign name="RecordID" expr="ivrfb_FindProviderRecordID.RecordID" />
<assign name="result" expr="'OK'" />
<goto next="#Exit" />


<else />
<assign name="RecordID" expr="ivrfb_FindProviderRecordID.RecordID" />
<assign name="result" expr="'OK'" />
<goto next="#Exit" />
</if>
</filled>
</form>

<form id="Exit">
<block>
<return namelist="result RecordID ProviderID" />
</block>
</form>

<form id="TooManyAttempts">
<block>
<assign name="CallActionCount" expr="'0'"/>
<audio src="voicefiles/IVR_Error_019.wav">I'm sorry, that is too many attempts. Please try again later. Good bye.</audio>


<submit next="ivrfb_LogUpdate.asp" namelist="CompanyID dbaction CurrentSessionID CallStep CallAction CallActionCount"/>
</block>
</form>
<form id="StarExit">
<block>
<assign name="dbaction" expr="'Star Hangup - Disconnect'"/>
<assign name="CallAction" expr="'98'"/>
<assign name="CallActionCount" expr="'0'"/>
<audio src="voicefiles/IVR_Thank_035.wav">Thank you. Good bye.</audio>
<submit next="ivrfb_LogUpdate.asp" namelist="CompanyID dbaction CurrentSessionID CallStep CallAction CallActionCount"/>
</block>
</form>
<form id="CallTransfer">
<block>
<submit next="ivrfb_CallTransfer.asp" namelist="CompanyID dbaction CurrentSessionID CallStep CallAction CallActionCount OptionMap"/>
</block>
</form>
<catch event="telephone.disconnect.hangup" count="1">
<assign name="dbaction" expr="'User Hangup - Disconnect'"/>
<assign name="CallAction" expr="'99'"/>
<assign name="CallActionCount" expr="'0'"/>
<submit next="ivrfb_LogUpdate.asp" namelist="CompanyID dbaction CurrentSessionID CallStep CallAction CallActionCount"/>
</catch>

</vxml>

support
Posts: 3632
Joined: Mon Jun 02, 2003 3:47 pm
Location: Boston, MA
Contact:

Re: Pause Response

Post by support »

From your first page of code:

Code: Select all

<form id="Exit">
  <block>
    <return namelist="result providertype" />
  </block>
</form>
You are using the return tag, which means this first page of code should be a subdialog. We are assuming it is the subdialog called on your second page of code:

Code: Select all

<form id="FindProvider">
  <var name="dbaction" expr="'Get Record ID'" />
  <subdialog name="ivrfb_FindProviderRecordID" src="ivrfb_FindProviderRecordID.asp" namelist="CompanyDbConnectString dbaction ProviderID CurrentSessionID ProviderType"/>
  
  <filled>
    <if cond="ivrfb_FindProviderRecordID.dbresult == '4'">
      <assign name="RecordID" expr="ivrfb_FindProviderRecordID.RecordID" />
      <assign name="result" expr="'OK'" />
      <goto next="#Exit" />

    <else />
      <assign name="RecordID" expr="ivrfb_FindProviderRecordID.RecordID" />
      <assign name="result" expr="'OK'" />
      <goto next="#Exit" />
    </if>
  </filled>
</form>
Note that your <subdialog> tag has the slash at the end. This means you will never reach side the <filled> tag. However, we noticed that that in your second page of code, you also use <return> tags. Are you trying to nest subdialogs inside each other? We need to see the "top level" of your code in order to debug why prompts are playing slowly immediately after your subdialog. We need to see context for the subdialog, and not just the subdialog code.

cgomez@hpsglobal.net
Posts: 16
Joined: Tue Dec 06, 2016 4:13 pm

Re: Pause Response

Post by cgomez@hpsglobal.net »

The return tag is returning the providertype to the main page, which we haven't reach that in this issue. My issue is way before we get the return tag. On the slash, if removed it causes a parsing error. I thought it was a common to put a slash at the end when there isn't a ending tag for XML, plus in a lot of your examples it shows the same way we coding. The top level code is very large for this comment area, can we discuss outside of this forum?

I do see a lot of Cache Miss in the call log, could the caching of the page cause the delay since it didn't exist. All of our pages aren't cache because each sub dialog will be unique on each call, and really should not be cached.

This code is being used with our current vendor right now with none of these issues. Is there a way to turn off caching for everything.

support
Posts: 3632
Joined: Mon Jun 02, 2003 3:47 pm
Location: Boston, MA
Contact:

Re: Pause Response

Post by support »

You should use a closing </subdialog> tag like this:

Code: Select all

<form id="FindProvider">
  <var name="dbaction" expr="'Get Record ID'" />
  
  <subdialog name="ivrfb_FindProviderRecordID" src="ivrfb_FindProviderRecordID.asp" namelist="CompanyDbConnectString dbaction ProviderID CurrentSessionID ProviderType">
    <filled>
      <if cond="ivrfb_FindProviderRecordID.dbresult == '4'">
        <assign name="RecordID" expr="ivrfb_FindProviderRecordID.RecordID" />
        <assign name="result" expr="'OK'" />
        <goto next="#Exit" />

      <else/>
        <assign name="RecordID" expr="ivrfb_FindProviderRecordID.RecordID" />
        <assign name="result" expr="'OK'" />
        <goto next="#Exit" />
      </if>
    </filled>
  </subdialog>
</form>
But I think we're misunderstanding the issue. So according to your code, the user will hear:

"Please one for member verification. Press two for status information."

When the user hits 1, you are saying it takes a very long time before the next prompt plays. However, in your code example, we don't see what the next prompt is. When the user hits 1, the app goes to the "Exit" form, then it returns to the page that called this subdialog.

Please post the snippet of code that is calling this subdialog. You do not need to include the entire page, just the small part that is calling the subdialog and handling the result, up to when the next prompt plays.

If your files are being cached, the pages should be loading even faster than if they were not cached. Checking if a page is cached or not will not delay fetching the script. You can read more about how caching works here: http://www.plumvoice.com/docs/dev/devel ... ?s[]=cache

cgomez@hpsglobal.net
Posts: 16
Joined: Tue Dec 06, 2016 4:13 pm

Re: Pause Response

Post by cgomez@hpsglobal.net »

I changed the subdialog with no affect.

I found the issue but don't know why. On this form I removed this tag <option dtmf="*"/> and work as it should. I figured that out from looking at the call log. For some reason the option tag is causing the log pause. Now that I removed that tab we can press * to exit. The response is I don't understand from the system. We want the user to press * to go to form StarExit. How can we do that?

Call Log:
--------
<?xml version='1.0'?>
<grammar xml:lang="en-us" type="application/srgs+xml" root="OPTION" mode="dtmf">
<rule id="OPTION">
<one-of>
<item>
*
<tag>retry='*';</tag>
</item>
</one-of>
</rule>
</grammar>
---------
Form:
=========================
<?xml version="1.0"?>
<!DOCTYPE vxml PUBLIC "-//The Plum Group//DTD VOICEXML 2.1//EN" "/usr/local/plumvp/vxml.dtd">
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml" application="ivrfaxback.vxml">
<meta name="maintainer" content="cgomez"/>
<property name="termmaxdigits" value="true"/>
<property name="inputmodes" value="dtmf"/>
<var name="main"/>
<var name="result"/>
<var name="providertype" expr="'G'"/>
<var name="dbaction" />
<var name="CallStep" expr="20"/>
<var name="CallAction"/>
<var name="OptionMap" expr="0000" />
<var name="CallActionCount" expr="'0'"/>
<var name="CompanyID" expr="'XXX'" />
<var name="CurrentSessionID" expr="'2017'" />
<var name="NoMatchCount" expr="0" />




<form id="Main">

<field name="main" type="digits?length=1">
<option dtmf="*"/>
<prompt bargein="true" count="1">

<audio src="voicefiles/ivr_press_027.wav">Press one for member verification.</audio>

<audio src="voicefiles/ivr_press_032.wav">Press two for status information.</audio>

</prompt>

<noinput count="9">
<assign name="CallAction" expr="'96'"/>
<assign name="dbaction" expr="'No Input - Disconnect'"/>
<goto next="#TooManyAttempts"/>
</noinput>

<noinput count="1">
<audio src="voicefiles/IVR_Press_023.wav">Press Eight to replay this message.</audio>
<reprompt/>
</noinput>

<filled>

<if cond="main == 9">
<assign name="result" expr="9"/>
<goto next="#Exit" />

<elseif cond="main == 8"/>
<goto next="#Main" />

<elseif cond="main == '*'"/>
<goto next="#StarExit" />


<elseif cond="main == 1"/>


<assign name="result" expr="1"/>
<goto next="#Exit" />

<elseif cond="main == 2"/>
<assign name="result" expr="2"/>
<goto next="#Exit" />



<else/>
<assign name="NoMatchCount" expr="NoMatchCount+1"/>
<if cond="NoMatchCount == 9">
<assign name="CallAction" expr="'97'"/>
<assign name="dbaction" expr="'No Match - Disconnect'"/>
<goto next="#TooManyAttempts"/>
</if>
<audio src="voicefiles/ivr_error_018.wav">I'm sorry, that is not a valid entry. Please try again.</audio>

<goto next="#Main"/>
</if>
</filled>
</field>

</form>

support
Posts: 3632
Joined: Mon Jun 02, 2003 3:47 pm
Location: Boston, MA
Contact:

Re: Pause Response

Post by support »

Based only on the code you posted, you should be able to press the * key to go to the StarExit form. Do you have any global grammars in your root document ivrfaxback.vxml that may be interfering?

cgomez@hpsglobal.net
Posts: 16
Joined: Tue Dec 06, 2016 4:13 pm

Re: Pause Response

Post by cgomez@hpsglobal.net »

I don't see any global grammars. Below is the property tags of the ivrfaxback.vxml

<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml" >
<meta name="copyright" content="2009 Inc."/>
<meta name="MAINTAINER" content="cgomez"/>
<property name="documentmaxage" value="0s"/>
<property name="com.genesyslab.maintainer.sendwhen" value="on_message"/>
<property name="com.genesyslab.loglevel" value="2"/>
<property name="inputmodes" value="dtmf"/>
<property name="fetchtimeout" value="60s"/>
<property name="interdigittimeout" value="30s"/>
<property name="termchar" value="#"/>
<property name="timeout" value="20s"/>
<property name="termmaxdigits" value="true"/>


After the property tags are the variables and then the form calls.

support
Posts: 3632
Joined: Mon Jun 02, 2003 3:47 pm
Location: Boston, MA
Contact:

Re: Pause Response

Post by support »

You should not have any <form> elements in your root document. Your root document should only have global variables, properties, grammars, event handlers, etc. The <form> elements in your root document may be interfering with the rest of your application. To learn more about root documents, please take a look at this: http://www.plumvoice.com/docs/dev/devel ... =documents

Post Reply