Hello Plum,
We've been trying to resolve an issue for months now whereby we can not record for longer than about 2 minutes. All of the troubleshooting has narrowed down to what appears to be the fact that the Plum system in combination with our web server (IIS 6) is persisting the initial TCP connection.
That is, when the XML script which starts the call is requested (by Plum requesting it from our server), it seems that this is causing the connection to stay alive. Then, four mintes later, when the call is terminated (caller hangs up), the Plum system makes another request for a second XML file. But a bad fetch happens and it seems that it is due to the fact that some time limit has been exceeded between the first request and the second request. I would think that the two requests would be totally stateless but it appears that there is some "timer" being maintained somewhere (IIS maybe) that "cares" about the length of the call for some reason and causes the process to error out for calls over two minutes or so. Shorter calls go through flawlessly.
IIS has something called "Keep-Alives" but there doesn't appear to be any way to turn them off for an HTTP 1.1 connection (and I believe your system is HTTP 1.1).
The botom line is that we can't get a recording to go through successfully if it exceeds two minutes or so and we've been troubleshooting this, off an on, for over two months now and we can't figure out what is causing the problem. We've tried changing many settings in IIS.
We are otherwise ready to sign up with Plum but can not until this is resolved. We don't want to renew with our current IVR provider but we are running out of time before we have to give them notice of termination.
Are there any software engineers there that may be savvy in communications with IIS and may be able to spend some time with us to try an help us resolve this? We would greatly appreciate it and please keep in mind that the end result of this would be a new customer for Plum.
Thank you for your time,
Charlie Pasquine
President, MetroScript, Inc.
We've Moved! Please visit our new and improved forum over at our new portal: https://portal.plumvoice.com/hc/en-us/community/topics
IIS persisting connection and timing out on long calls
-
- Posts: 78
- Joined: Mon Sep 25, 2006 6:52 am
- Contact:
IVR code needed to replicate problem
Hi,
Could you provide us with a snippet of IVR code for us to replicate this IVR problem? This would help us greatly in debugging the IVR issue.
Regards,
Plum Support
Could you provide us with a snippet of IVR code for us to replicate this IVR problem? This would help us greatly in debugging the IVR issue.
Regards,
Plum Support
Last edited by support on Fri Feb 19, 2010 4:53 pm, edited 2 times in total.
Plum Support
http://www.plumvoice.com
http://www.plumvoice.com
-
- Posts: 78
- Joined: Mon Sep 25, 2006 6:52 am
- Contact:
Good afternoon,
The error occurs when the process_record_start.xml page calls process_record_savevox.xml. Attached are both those xml pages, along with the error we are experiencing.
Also, in order to verify that our upload component (Persists) can handle a large(8MB) file, we created a two page test in which upload.asp calls save2.asp. This test successfully uploaded an 8MB file to our server. I attached this code as well, in case you were interested.
Thanks,
Charlie
process_record_start.xml
process_record_savevox.xml
Error Log
upload.asp
save2.asp
The error occurs when the process_record_start.xml page calls process_record_savevox.xml. Attached are both those xml pages, along with the error we are experiencing.
Also, in order to verify that our upload component (Persists) can handle a large(8MB) file, we created a two page test in which upload.asp calls save2.asp. This test successfully uploaded an 8MB file to our server. I attached this code as well, in case you were interested.
Thanks,
Charlie
process_record_start.xml
Code: Select all
<?xml version="1.0"?>
<vxml version="2.1" application="root.xml">
<!--#include file="clsXMLConstants.asp"-->
<!--#include file="clsXMLDatabase.asp"-->
<!--#include file="clsXMLSessionManager.asp"-->
<!--#include file="clsXMLUtilities.asp"-->
<!--#include file="clsXMLVariables.asp"-->
<%
Server.ScriptTimeout = 3600
On Error Resume Next
GetSessionValues
strFileCount = cint(strFileCount) + 1
SaveSessionValues
%>
<form id="record">
<grammar>1|2|3|4|5|6|7|8|9|0|"*"|"#"</grammar>
<record name="phone_file_1vox" beep="true" dtmfterm="true" maxtime="840s" finalsilence="300s" type="audio/basic">
<prompt bargein="false">
<% if ( cint(strFileCount) <= 1 ) then
'Log the dictation
'stored procedure: sp_insert_phone_in_log_record
'tables: phone_log
set conDatabase = Server.CreateObject("ADODB.Connection")
conDatabase.Open strConnection
objXMLUtilities.SetDictationStarted2 "L", strUserID, strFolderNumber, strCallID, 0
conDatabase.Close
%>
<voice>Reecord at the beep.</voice>
<% else %>
<voice>Continue at the beep.</voice>
<% end if %>
</prompt>
<catch event="nomatch noinput">
<prompt>Goodbye.</prompt>
<exit/>
</catch>
<filled>
<assign name="nextkey" expr="phone_file_1vox$.termchar"/>
<assign name="myphone_file_1vox" expr="phone_file_1vox"/>
<if cond="nextkey=='1'">
<goto next="#instantsaveandrecordnormal"/>
<elseif cond="nextkey=='2'"/>
<goto next="#instantsaveandrecordstat"/>
<elseif cond="nextkey=='3'"/>
<prompt>Please use the rewind functionality before using the reecord from here function</prompt>
<goto next="#pauserecording"/>
<elseif cond="nextkey=='4'"/>
<goto next="#rewindrecording"/>
<elseif cond="nextkey=='5'"/>
<goto next="#pauserecording"/>
<elseif cond="nextkey=='6'"/>
<prompt>Please use the rewind functionality before using the fast forward function</prompt>
<goto next="#pauserecording"/>
<elseif cond="nextkey=='7'"/>
<goto next="#rewindbeginning"/>
<elseif cond="nextkey=='8'"/>
<goto next="#cancelrecording"/>
<elseif cond="nextkey=='9'"/>
<goto next="#rewindend"/>
<elseif cond="nextkey=='*'"/>
<goto next="#saveandhangup"/>
<elseif cond="nextkey=='0'"/>
<submit next="http://stage.metroscript.com/voicexml/process_record_help_maxtime.xml?next=help" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
<elseif cond="nextkey=='#'"/>
<goto next="#saveandreprompt"/>
</if>
<if cond="phone_file_1vox$.maxtime==true">
<prompt>You have reached the maximum time limit of 14 minutes</prompt>
<submit next="http://stage.metroscript.com/voicexml/process_record_help_maxtime.xml?next=maxtime" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</if>
</filled>
<catch event="nomatch noinput">
<assign name="myphone_file_1vox" expr="phone_file_1vox"/>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=hangup" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</catch>
<catch event="connection.disconnect">
<assign name="myphone_file_1vox" expr="phone_file_1vox"/>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=hangup" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</catch>
</record>
</form>
<form id="instantsaveandrecordnormal">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=saveandrecordnormal" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</block>
</form>
<form id="instantsaveandrecordstat">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=saveandrecordstat" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</block>
</form>
<form id="rewindrecording">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=reviewrewind" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</block>
</form>
<form id="pauserecording">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=pause" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</block>
</form>
<form id="rewindbeginning">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=reviewbeginning" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</block>
</form>
<form id="rewindend">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=reviewend" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</block>
</form>
<form id="cancelrecording">
<block>
<% if (cstr(strCancelFlag) = "1") then %>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=cancel" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
<% else %>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=badcancel" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
<% end if %>
</block>
</form>
<form id="saveandreprompt">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=saveandreprompt" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</block>
</form>
<form id="saveandhangup">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=hangup" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</block>
</form>
<form id="silentpause">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=silentpause" method="post" namelist="myphone_file_1vox" enctype="multipart/form-data"/>
</block>
</form>
</vxml>
Code: Select all
<?xml version="1.0"?>
<vxml version="2.1" application="root.xml">
<!--#include file="clsXMLConstants.asp"-->
<!--#include file="clsXMLDatabase.asp"-->
<!--#include file="clsXMLSaveRecording.asp"-->
<!--#include file="clsXMLSessionManager.asp"-->
<!--#include file="clsXMLUtilities.asp"-->
<!--#include file="clsXMLVariables.asp"-->
<%
Server.ScriptTimeout = 3600
Response.Buffer = False
dim strNext
strNext = Request("next")
GetSessionValues
strFileCount = trim(strFileCount)
if strFileCount = "" then
strFileCount = "1"
end if
dim strTempSaveFolder
'strTempSaveFolder = "m:\WebSites\metroscript_stage\tempupload\tempvoicefiles\" & session("foldernumber") & "\"
strTempSaveFolder = "m:\WebSites\metroscript_stage\tempupload\tempvoicefiles\9310\"
dim strFileName
strFileName = strTempSaveFolder & "phone_file" & "_" & strFileCount & ".vox"
dim Upload
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.LogonUser "","DGFP964","2e5ADCTUEPZSpXWjzMF3"
Upload.SetMaxSize 10000000
Upload.Save strTempSaveFolder
Upload.MoveFile strTempSaveFolder & "myphone_file_1vox", strFileName
Set Upload = nothing
SaveSessionValues
%>
<% if ( strNext = "pause" ) then %>
<menu id="pausemenu">
<property name="inputmodes" value="dtmf"/>
<prompt>
<voice>
Enter
<enumerate><value expr="_dtmf"/> <value expr="_prompt"/>,
<break size="large"/><break size="large"/>
<break size="large"/><break size="large"/>
<break size="large"/><break size="large"/>
<break size="large"/><break size="large"/>
<break size="large"/><break size="large"/>
<break size="large"/><break size="large"/>
</enumerate>
</voice>
</prompt>
<choice dtmf="5" next="http://stage.metroscript.com/voicexml/process_record_start.xml">to continue</choice>
<noinput count="1">
<reprompt/>
</noinput>
<nomatch count="1">
Sorry, that is not one of the selections. Please try again.
<reprompt/>
</nomatch>
<catch event="nomatch noinput" count="4">
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup" method="post"/>
</catch>
<catch event="connection.disconnect">
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup" method="post"/>
</catch>
</menu>
<% elseif ( strNext = "silentpause" ) then %>
<menu id="silentpausemenu">
<property name="inputmodes" value="dtmf"/>
<prompt>
<voice>
Are you still there.
Enter
<enumerate><value expr="_dtmf"/> <value expr="_prompt"/>, <break size="small"/></enumerate>
</voice>
</prompt>
<choice dtmf="5" next="http://stage.metroscript.com/voicexml/process_record_start.xml">to continue</choice>
<noinput count="1">
Sorry, I did not hear you. Please try again.
<reprompt/>
</noinput>
<nomatch count="1">
Sorry, that is not one of the selections. Please try again.
<reprompt/>
</nomatch>
<noinput count="2">
Sorry, I still did not hear you. Please try again.
<reprompt/>
</noinput>
<catch event="nomatch noinput" count="3">
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup" method="post"/>
</catch>
<catch event="connection.disconnect">
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup" method="post"/>
</catch>
</menu>
<% elseif ( strNext = "cancel" ) then %>
<menu id="cancelmenu">
<property name="inputmodes" value="dtmf"/>
<prompt>
<voice>
Enter
<enumerate><value expr="_dtmf"/> <value expr="_prompt"/>, <break size="small"/></enumerate>
</voice>
</prompt>
<choice dtmf="8" next="http://stage.metroscript.com/voicexml/process_record_cancel.xml">to verify the cancellation</choice>
<choice dtmf="1" next="http://stage.metroscript.com/voicexml/process_record_start.xml">to continue recording</choice>
<choice dtmf="2" next="http://stage.metroscript.com/voicexml/process_record_start.xml">to continue recording</choice>
<choice dtmf="4" next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=reviewrewind">to rewind ten seconds and review dictation</choice>
<choice dtmf="6" next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=reviewforward">to forward ten seconds and review dictation</choice>
<choice dtmf="7" next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=reviewbeginning">to rewind to the beginning and review dictation</choice>
<choice dtmf="*" next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup">to save and hangup</choice>
<choice dtmf="#" next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=saveandreprompt">to save and record another dictation</choice>
<noinput count="1">
Sorry, I did not hear you. Please try again.
<reprompt/>
</noinput>
<nomatch count="1">
Sorry, that is not one of the selections. Please try again.
<reprompt/>
</nomatch>
<noinput count="2">
Sorry, I still did not hear you. Please try again.
<reprompt/>
</noinput>
<catch event="nomatch noinput" count="3">
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup" method="post"/>
</catch>
<catch event="connection.disconnect">
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup" method="post"/>
</catch>
</menu>
<% elseif ( strNext = "badcancel" ) then %>
<menu id="badcancelmenu">
<property name="inputmodes" value="dtmf"/>
<prompt>
<voice>The cancel feature is not activated for your account. Please contact your system administrator</voice>
<voice>
Enter
<enumerate><value expr="_dtmf"/> <value expr="_prompt"/>, <break size="small"/></enumerate>
</voice>
</prompt>
<choice dtmf="1" next="http://stage.metroscript.com/voicexml/process_record_start.xml">to continue recording</choice>
<choice dtmf="2" next="http://stage.metroscript.com/voicexml/process_record_start.xml">to continue recording</choice>
<choice dtmf="4" next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=reviewrewind">to rewind ten seconds and review dictation</choice>
<choice dtmf="6" next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=reviewforward">to forward ten seconds and review dictation</choice>
<choice dtmf="7" next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=reviewbeginning">to rewind to the beginning and review dictation</choice>
<choice dtmf="*" next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup">to save and hangup</choice>
<choice dtmf="#" next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=saveandreprompt">to save and record another dictation</choice>
<noinput count="1">
Sorry, I did not hear you. Please try again.
<reprompt/>
</noinput>
<nomatch count="1">
Sorry, that is not one of the selections. Please try again.
<reprompt/>
</nomatch>
<noinput count="2">
Sorry, I still did not hear you. Please try again.
<reprompt/>
</noinput>
<catch event="nomatch noinput" count="3">
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup" method="post"/>
</catch>
<catch event="connection.disconnect">
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup" method="post"/>
</catch>
</menu>
<% elseif ( strNext = "reviewrewind" ) then %>
<form id="rewind">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=reviewrewind" method="post"/>
</block>
</form>
<% elseif ( strNext = "reviewbeginning" ) then %>
<form id="beginning">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=reviewbeginning" method="post"/>
</block>
</form>
<% elseif ( strNext = "reviewend" ) then %>
<form id="beginning">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=reviewend" method="post"/>
</block>
</form>
<% elseif ( strNext = "saveandrecordnormal" ) then %>
<form id="save">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=saveandrecordnormal" method="post"/>
</block>
</form>
<% elseif ( strNext = "saveandrecordstat" ) then %>
<form id="save">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=saveandrecordstat" method="post"/>
</block>
</form>
<% elseif ( strNext = "saveandreprompt" ) then %>
<form id="save">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=saveandreprompt" method="post"/>
</block>
</form>
<% elseif ( strNext = "hangup" ) then %>
<form id="finish">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=hangup" method="post"/>
</block>
</form>
<% elseif ( strNext = "help" ) then %>
<form id="help">
<block>
<submit next="http://stage.metroscript.com/voicexml/process_combine_voxs.xml?next=help" method="post"/>
</block>
</form>
<% end if %>
</vxml>
Code: Select all
Mon 03 Sep 2007 06:19:27 PM EDT:
Call Start Event: ANII 6109485025 DNIS 3975 VURL http://hosting.plumgroup.com/plumvp/director.vxml
DocumentParser::FetchDocument()
DocumentParser::FetchDocument(http://hosting.plumgroup.com/plumvp/director.vxml)
Cache Hit: http://hosting.plumgroup.com/plumvp/director.vxml
VXI::var_element(name="dnis" expr = "session.telephone.dnis")
DocumentParser::FetchDocument(director.php)
Posted form data is URL encoded
Attempting to fetch http://hosting.plumgroup.com/plumvp/director.php
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(http://stage.metroscript.com/voicexml/default.xml)
Cache Miss: http://stage.metroscript.com/voicexml/default.xml
Attempting to fetch http://stage.metroscript.com/voicexml/default.xml
Mon 03 Sep 2007 06:19:28 PM EDT:
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(root.xml)
Cache Miss: http://stage.metroscript.com/voicexml/root.xml
Attempting to fetch http://stage.metroscript.com/voicexml/root.xml
Click here to view saved VoiceXML script
Loading Builtin grammar: builtin:grammar/digits?maxlength=6
Loading Builtin grammar: builtin:dtmf/digits?maxlength=6
VXI::var_element(name="voxfilenum" expr = "0")
VXI::var_element(name="StartDateTimeMonth" expr = "'9'")
VXI::var_element(name="StartDateTimeDay" expr = "'3'")
VXI::var_element(name="StartDateTimeYear" expr = "'2007'")
VXI::var_element(name="StartDateTimeHour" expr = "'18'")
VXI::var_element(name="StartDateTimeMinute" expr = "'19'")
VXI::var_element(name="StartDateTimeSecond" expr = "'28'")
VXI::queue_prompts()
bargein set to true
INPUTMODES set to "DTMF"
Audio segment added to prompt queue from TTS application/synthesis+ssml for:
---------
<?xml version='1.0'?><speak><voice><speak> Please enter your i <break size="medium" time="10ms"/> d followed by the pound key.
</speak></voice></speak>
---------
VXI::field_element - activating grammars for form = 'getuserid' formitem = 'username'
VXI::do_recognition()
PromptManager::Play()
Newly queued prompts are now being played
Mon 03 Sep 2007 06:19:34 PM EDT:
dtmf input: 425532
Found grammar match
hypothesis #0: 425532 (0.9990)
DocumentParser::FetchDocument(http://stage.metroscript.com/voicexml/check_user_id.xml)
Posted form data is URL encoded
Attempting to fetch http://stage.metroscript.com/voicexml/check_user_id.xml
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(root.xml)
Cache Miss: http://stage.metroscript.com/voicexml/root.xml
Attempting to fetch http://stage.metroscript.com/voicexml/root.xml
Click here to view saved VoiceXML script
Loading Builtin grammar: builtin:dtmf/digits?length=4
VXI::var_element(name="confirmflag" expr = "'N'")
VXI::var_element(name="userid" expr = "660")
VXI::var_element(name="username" expr = "425532")
VXI::var_element(name="password" expr = "4165")
VXI::var_element(name="fullname" expr = "'John Locke'")
VXI::var_element(name="statallowflag" expr = "'N'")
VXI::var_element(name="userlevel" expr = "'6'")
VXI::var_element(name="StartDateTimeMonth" expr = "'9'")
VXI::var_element(name="StartDateTimeDay" expr = "'3'")
VXI::var_element(name="StartDateTimeYear" expr = "'2007'")
VXI::var_element(name="StartDateTimeHour" expr = "'18'")
VXI::var_element(name="StartDateTimeMinute" expr = "'19'")
VXI::var_element(name="StartDateTimeSecond" expr = "'28'")
VXI::queue_prompts()
bargein set to true
INPUTMODES set to "DTMF"
Audio segment added to prompt queue from TTS application/synthesis+ssml for:
---------
<?xml version='1.0'?><speak><voice><speak> Please enter your passcode followed by the pound key.</speak></voice></speak>
---------
VXI::field_element - activating grammars for form = 'getpassword' formitem = 'newpassword'
VXI::do_recognition()
PromptManager::Play()
Newly queued prompts are now being played
Mon 03 Sep 2007 06:19:38 PM EDT:
dtmf input: 4165#
Found grammar match
hypothesis #0: 4165 (0.9990)
DocumentParser::FetchDocument(http://stage.metroscript.com/voicexml/check_password.xml)
Posted form data is URL encoded
Attempting to fetch http://stage.metroscript.com/voicexml/check_password.xml
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(root.xml)
Cache Miss: http://stage.metroscript.com/voicexml/root.xml
Attempting to fetch http://stage.metroscript.com/voicexml/root.xml
Click here to view saved VoiceXML script
VXI::var_element(name="callid" expr = "1598")
VXI::var_element(name="cancelflag" expr = "0")
VXI::var_element(name="confirmnum" expr = "1805")
VXI::var_element(name="folderlist" expr = "'0'")
VXI::var_element(name="password" expr = "4165")
VXI::var_element(name="statallowflag" expr = "'N'")
VXI::var_element(name="userid" expr = "660")
VXI::var_element(name="username" expr = "425532")
VXI::var_element(name="userlevel" expr = "6")
DocumentParser::FetchDocument(http://stage.metroscript.com/voicexml/main_menu_setup.xml)
Posted form data is URL encoded
Attempting to fetch http://stage.metroscript.com/voicexml/main_menu_setup.xml
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(root.xml)
Cache Miss: http://stage.metroscript.com/voicexml/root.xml
Attempting to fetch http://stage.metroscript.com/voicexml/root.xml
Click here to view saved VoiceXML script
VXI::var_element(name="statallowflag" expr = "'N'")
DocumentParser::FetchDocument(http://stage.metroscript.com/voicexml/main_menu.xml)
Posted form data is URL encoded
Attempting to fetch http://stage.metroscript.com/voicexml/main_menu.xml
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(root.xml)
Cache Miss: http://stage.metroscript.com/voicexml/root.xml
Attempting to fetch http://stage.metroscript.com/voicexml/root.xml
Click here to view saved VoiceXML script
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(to begin normal recording)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(1)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(to end the call)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
("*")
</grammar>
---------
Mon 03 Sep 2007 06:19:39 PM EDT:
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(for help)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(0)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(to begin normal recording)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(1)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(to begin stat recording)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(2)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(to end the call)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
("*")
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(to listen to the help menu again)
</grammar>
---------
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
(0)
</grammar>
---------
VXI::queue_prompts()
bargein set to true
INPUTMODES set to "DTMF"
Audio segment added to prompt queue from TTS application/synthesis+ssml for:
---------
<?xml version='1.0'?><speak><voice><speak>
Enter
1 to begin normal recording , <break size="small"/> * to end the call , <break size="small"/> 0 for help , <break size="small"/></speak></voice></speak>
---------
VXI::do_recognition()
PromptManager::Play()
Newly queued prompts are now being played
Mon 03 Sep 2007 06:19:42 PM EDT:
dtmf input: 1
Found grammar match
hypothesis #0: 1 (0.9990)
VXI::var_element(name="statlevel" expr = "0")
DocumentParser::FetchDocument(http://stage.metroscript.com/voicexml/process_record_new.xml)
Posted form data is URL encoded
Attempting to fetch http://stage.metroscript.com/voicexml/process_record_new.xml
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(root.xml)
Cache Miss: http://stage.metroscript.com/voicexml/root.xml
Attempting to fetch http://stage.metroscript.com/voicexml/root.xml
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(http://stage.metroscript.com/voicexml/process_record_start.xml)
Cache Miss: http://stage.metroscript.com/voicexml/process_record_start.xml
Attempting to fetch http://stage.metroscript.com/voicexml/process_record_start.xml
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(root.xml)
Cache Miss: http://stage.metroscript.com/voicexml/root.xml
Attempting to fetch http://stage.metroscript.com/voicexml/root.xml
Click here to view saved VoiceXML script
GrammarManager::CreateGrammarFromString():
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="voice">
1|2|3|4|5|6|7|8|9|0|"*"|"#"
</grammar>
---------
GrammarManager::CreateGrammarFromString():
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
1|2|3|4|5|6|7|8|9|0|"*"|"#"
</grammar>
---------
VXI::queue_prompts()
bargein set to false
INPUTMODES set to "DTMF VOICE"
Audio segment added to prompt queue from TTS application/synthesis+ssml for:
---------
<?xml version='1.0'?><speak><voice><speak> Reecord at the beep.</speak></voice></speak>
---------
Newly queued prompts are now being played
bargein set to true
Cache Miss: file:///usr/local/plumvp/resources/beep.ulaw
Attempting to fetch file:///usr/local/plumvp/resources/beep.ulaw
Audio segment from the URL resources/beep.ulaw added to prompt queue
PromptManager::Play()
Mon 03 Sep 2007 06:19:44 PM EDT:
Newly queued prompts are now being played
Mon 03 Sep 2007 06:22:51 PM EDT:
received event: connection.disconnect.hangup
Disconnect
Disconnecting On Channel 13
Mon 03 Sep 2007 06:22:52 PM EDT:
VXI::assign_element(name="myphone_file_1vox" expr = "phone_file_1vox"
DocumentParser::FetchDocument(http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=hangup)
Posting binary content "myphone_file_1vox" of size 1500288 and type "audio/basic"
Posted form data is multipart encoded
Attempting to fetch http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=hangup
Mon 03 Sep 2007 06:23:23 PM EDT:
Error fetching document http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=hangup due to Operation timed out with 0 out of -1 bytes received
DocumentParser::FetchBuffer - could not open URL: http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=hangup
DocumentParser::FetchDocument - exiting with error result 2
errno: 203 uri http://stage.metroscript.com/voicexml/process_record_savevox.xml?next=hangup
Can not queue audio -- line disconnected
Max Disconnect Count Exceeded
Call End Event
Ending session
Ending Session On Channel 13
Code: Select all
<HTML>
<form action="save2.asp" enctype="multipart/form-data" method="post">
<input type="file" name="phone_file_1vox" />
<input type="submit"/>
</form>
</HTML>
Code: Select all
<%
Server.ScriptTimeout = 3600
dim strFileCount
if strFileCount = "" then
strFileCount = "1"
end if
dim strTempSaveFolder
strTempSaveFolder = "m:\WebSites\metroscript_stage\tempupload\tempvoicefiles\9310\"
dim strFileName
strFileName = strTempSaveFolder & "phone_file" & "_" & strFileCount & ".vox"
dim Upload
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.SetMaxSize 10000000
Upload.Save strTempSaveFolder
For Each File in Upload.Files
Response.Write File.Name & "= " & File.Path & " (" & File.Size & " bytes)"
Next
Set Upload = nothing
%>
suggestions for fixing IVR problem
Hi,
To fix this IVR problem, you could try:
1) Using a different domain name. Using the domain name "stage.metroscript.com" tells the IVR to use currently open socket. By referring to your web server by its IP address, for instance, the IVR will open a new connection to your backend rather than reusing an existing HTTP connection.
2) Checking the IIS configuration. You might have to change the settings for your IIS configuration to allow for longer persistent connections or, alternatively, no persistent connections at all.
3) Checking the firewall settings. If you use a firewall between your web server and the Internet, the firewall might be keeping the persistent connection open to the IVR even though IIS has already closed its server-side connection.
4) Setting up a catch error handler for error.badfetch and then doing a resubmission. This would allow you to re-attempt sending data to "stage.metroscript.com" even when the error.badfetch occurs.
Regards,
Plum Support
To fix this IVR problem, you could try:
1) Using a different domain name. Using the domain name "stage.metroscript.com" tells the IVR to use currently open socket. By referring to your web server by its IP address, for instance, the IVR will open a new connection to your backend rather than reusing an existing HTTP connection.
2) Checking the IIS configuration. You might have to change the settings for your IIS configuration to allow for longer persistent connections or, alternatively, no persistent connections at all.
3) Checking the firewall settings. If you use a firewall between your web server and the Internet, the firewall might be keeping the persistent connection open to the IVR even though IIS has already closed its server-side connection.
4) Setting up a catch error handler for error.badfetch and then doing a resubmission. This would allow you to re-attempt sending data to "stage.metroscript.com" even when the error.badfetch occurs.
Regards,
Plum Support
Last edited by support on Wed Jan 13, 2010 1:01 pm, edited 2 times in total.
Plum Support
http://www.plumvoice.com
http://www.plumvoice.com
-
- Posts: 78
- Joined: Mon Sep 25, 2006 6:52 am
- Contact:
IIS persisting connection and timing out on long calls
Some solid ideas in there. We'll test them out and see what happens. Thanks for the suggestions.
Charlie P.
Charlie P.
-
- Posts: 78
- Joined: Mon Sep 25, 2006 6:52 am
- Contact:
Finally resolved this issue
We finally have this licked after months of ripping our hair out! I thought I'd post the solution here so that other will not suffer as we did.
What ultimately solved this was turning off the Keep-Alives for the web site in question inside Microsoft IIS. Apparently IIS was trying to maintain (persist) the TCP connection that was initially opened by the first request from Plum system. Then, four minutes later when Plum was making another request to save the audio (post the VOX file), IIS was trying to respond via the same persisted connection. Problem was that connection had been terminated (probably by the Plum client, as we had already set IIS connection timeout to one hour).
As a side note -- we had already tried disabling Keep-Alives before but it didn't solve the problem. That remains a mystery, but we are writing that off as our app being in a state where something else may have been casuing the problem. We had been meddling in our code for some time trying to solve the issue. Once we started with a "clean slate" and then disabled the Keep-Alives, it worked as intended.
Since this same IIS web site is also serving up browser-based screens, and Keep-Alives are really needed for performance reasons, we ended up actually leaving Keep-Alives on but lowered the connection timeout to 10 seconds. This still works fine. We did this so that Keep-Alives could be used as intended for normal browser-based web traffic, but would get ignored for this wacky VoiceXML stuff. So, this configuration seems to do the trick for us now, and we can record lengthy dictations.
So, here you have it. I hope this helps someone down the line that runs into this same problem.
What ultimately solved this was turning off the Keep-Alives for the web site in question inside Microsoft IIS. Apparently IIS was trying to maintain (persist) the TCP connection that was initially opened by the first request from Plum system. Then, four minutes later when Plum was making another request to save the audio (post the VOX file), IIS was trying to respond via the same persisted connection. Problem was that connection had been terminated (probably by the Plum client, as we had already set IIS connection timeout to one hour).
As a side note -- we had already tried disabling Keep-Alives before but it didn't solve the problem. That remains a mystery, but we are writing that off as our app being in a state where something else may have been casuing the problem. We had been meddling in our code for some time trying to solve the issue. Once we started with a "clean slate" and then disabled the Keep-Alives, it worked as intended.
Since this same IIS web site is also serving up browser-based screens, and Keep-Alives are really needed for performance reasons, we ended up actually leaving Keep-Alives on but lowered the connection timeout to 10 seconds. This still works fine. We did this so that Keep-Alives could be used as intended for normal browser-based web traffic, but would get ignored for this wacky VoiceXML stuff. So, this configuration seems to do the trick for us now, and we can record lengthy dictations.
So, here you have it. I hope this helps someone down the line that runs into this same problem.