Page 1 of 1

prompt not being played after noinput is detected

Posted: Thu Sep 09, 2010 9:11 am
by magicsoft
I've got the following VXML file, which is verified as valid according to your site. The idea here is that when we call someone, it will always assume it has reached an answering machine, and ask someone to press a number to determine if it is indeed a person. If no input is detected after 5 seconds (the timeout is set in a root file), it will play the prompt at the bottom (leave a message) and then hang up. If a number is pressed, it knows there is a person on the line and it will transfer to another file to actually gather data. The latter part works--when I take the call, if I press a number, it begin to play the messages from the external file. But, if I do nothing, it doesn't seem to transfer control to the "machine" part at the bottom, it just disconnects. The log file indicates that no input was detected, but doesn't say anything about getting to the "machine" form tag. The VXML is below, and the log file is below that.

Thanks,

Andrew

<?xml version="1.0"?>
<vxml version="2.0" application="test_rootorder.vxml">

<form id="patienttest">
<field name="answer">
<property name="inputmodes" value="dtmf"/>
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt>
This is Continuing Care calling with an important message. Please press one.
</prompt>
<filled>
<goto next="#person"/>
</filled>
<noinput>
<goto next="#machine"/>
</noinput>
</field>
</form>

<form id="person">
<block>
<goto next="test_order_intro.vxml"/>
</block>
</form>

<form id="machine">
<block>
<prompt bargein="false">
Hello, this is Continuing Care. I’m calling to check on the sleep therapy patient at this address.
Please call our patient management service at <say-as type="acronym"> 1 877 618 3574 </say-as>
when you have a minute so we can track how you are doing.
The call should only take two minutes of your time and is designed to help us better care for you.
The number again is <say-as type="acronym"> 1 877 618 3574 </say-as> and you can call anytime day or night.
Thanks, and have a great day.
</prompt>
<disconnect/>
</block>
</form>

</vxml>


Thu 09 Sep 2010 09:39:08 AM EDT:
Call Start Event: ANII 13522741199 DNIS outbound VURL http://us.popproxy.plumgroup.com/plumvp/startpage.php
DocumentParser::FetchDocument()
DocumentParser::FetchDocument(http://us.popproxy.plumgroup.com/plumvp/startpage.php)
Cache Miss: http://us.popproxy.plumgroup.com/plumvp/startpage.php
Attempting to fetch http://us.popproxy.plumgroup.com/plumvp/startpage.php
Click here to view saved VoiceXML script
VXI::var_element(name="sessionID" expr = "session.id")
DocumentParser::FetchDocument(startpage.php)
Cache Miss: http://us.popproxy.plumgroup.com/plumvp ... 1284038593
Attempting to fetch http://us.popproxy.plumgroup.com/plumvp ... 1284038593
Click here to view saved VoiceXML script
VXI::var_element(name="callee_type" expr = "'voice'")
VXI::var_element(name="phone_number" expr = "'XXXXXXXXXXX'")
VXI::var_element(name="call_id" expr = "'2138572'")
VXI::var_element(name="message_reference" expr = "''")
VXI::var_element(name="call_parameters" expr = "''")
VXI::var_element(name="campaign_parameters" expr = "''")
DocumentParser::FetchDocument(http://login.sleepcarecenter.com/autocalls/order.ashx)
Posted form data is URL encoded
Attempting to fetch http://login.sleepcarecenter.com/autocalls/order.ashx

Thu 09 Sep 2010 09:39:09 AM EDT:
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(test_rootorder.vxml)
Cache Miss: http://login.sleepcarecenter.com/autoca ... order.vxml
Attempting to fetch http://login.sleepcarecenter.com/autoca ... order.vxml
Click here to view saved VoiceXML script
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
---------
VXI::var_element(name="varDOB" expr = "")
VXI::var_element(name="varIncomingNumber" expr = "")
VXI::var_element(name="varOutgoingNumber" expr = "")
VXI::var_element(name="varResponseType" expr = "")
VXI::var_element(name="varQuestion" expr = "")
VXI::var_element(name="varReturnAnswer" expr = "")
VXI::var_element(name="varReturnQuestion" expr = "")
VXI::var_element(name="varOrderSomething" expr = "")
VXI::var_element(name="varCallID" expr = "")
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 name="mike" gender="male">
This is Continuing Care calling with an important message. Please press one.
</voice></speak>
---------
VXI::field_element - activating grammars for form = 'patienttest' formitem = 'answer'
VXI::do_recognition()
PromptManager::Play()
starting playback: bargein=true, inputmodes="dtmf"
Newly queued prompts are now being played

Thu 09 Sep 2010 09:39:19 AM EDT:
received event: noinput:
bargein set to false
INPUTMODES set to "DTMF VOICE"
Audio segment added to prompt queue from TTS application/synthesis+ssml for:
---------
VXI::disconnect_element()
Disconnect
Disconnecting On Channel 1
received event: connection.disconnect.hangup:
VXI::exit_element()
Call End Event
Ending session
Ending Session On Channel 1

Re: prompt not being played after noinput is detected

Posted: Thu Sep 09, 2010 9:43 am
by support
Hi Andrew,

We tested your application and found that it worked correctly in that when a number was pressed, it jumped to the "person" form, and when nothing was pressed, it jumped to the "machine" form. The only change we made to your application code was removing the

Code: Select all

application="test_rootorder.vxml"
line from your <vxml> tag, since we did not have access to that file. This means that the problem in the code is most likely in your root document. If you could please post some of that code here, we can troubleshoot your issue.

Regards,
Plum Support

Re: prompt not being played after noinput is detected

Posted: Thu Sep 09, 2010 10:01 am
by magicsoft
Here is the root file. I have also slightly change the VXML file (shown further below) to try to make sure that I wait until the answering machine message is finished before leaving my message. What's happening now is that it's acting as though it's waiting for input AFTER it gets to the "machine" form part, so when I don't say anything, it plays the default "I didn't understand you", instead of just playing my prompt and hanging up.

<?xml version="1.0"?>
<vxml version="2.0">

<var name="varDOB"/>
<var name="varIncomingNumber"/>
<var name="varOutgoingNumber"/>
<var name="varResponseType"/>
<var name="varQuestion"/>
<var name="varReturnAnswer"/>
<var name="varReturnQuestion"/>
<var name="varOrderSomething"/>
<var name="varCallID"/>

<property name="voicename" value="mike"/>
<property name="voicegender" value="male"/>
<property name="timeout" value="5s"/>
<property name="sensitivity" value="0.3"/>
<property name="confidencelevel" value="0.9"/>

</vxml>


<?xml version="1.0"?>
<vxml version="2.0" application="test_rootorder.vxml">

<form id="patienttest">
<field name="answer">
<property name="inputmodes" value="dtmf"/>
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt>
This is Continuing Care calling with an important message. Please press one.
</prompt>
<filled>
<goto next="#person"/>
</filled>
<noinput>
<goto next="#machine"/>
</noinput>
</field>
</form>

<form id="person">
<block>
<goto next="test_order_intro.vxml"/>
</block>
</form>

<form id="machine">
<record finalsilence="3000ms"/>
<block>
<prompt bargein="false">
Hello, this is Continuing Care. I’m calling to check on the sleep therapy patient at this address.
Please call our patient management service at <say-as type="acronym"> 1 877 618 3574 </say-as>
when you have a minute so we can track how you are doing.
The call should only take two minutes of your time and is designed to help us better care for you.
The number again is <say-as type="acronym"> 1 877 618 3574 </say-as> and you can call anytime day or night.
Thanks, and have a great day.
</prompt>
</block>
<block>
<disconnect/>
</block>
</form>

</vxml>

Re: prompt not being played after noinput is detected

Posted: Thu Sep 09, 2010 1:09 pm
by support
Hi Andrew,

The reason why you are hearing the default, "I didn't understand you" dialog when testing your application is because that is the default behavior on a noinput for your <record> tag. When an actual answering machine picks up, it will be playing some message while you are recording, so this noinput behavior would not happen. However, for testing purposes, you can add an explicit <noinput> tag as shown below, that will simply jump to your machine prompt after a noinput event.

Code: Select all

<form id="machine">
<record finalsilence="3000ms">
<noinput>
<goto next="#machinemsg" />
</noinput>
</record>
</form>
<form id="machinemsg">
<block>
<prompt bargein="false">
Hello, this is Continuing Care. I’m calling to check on the sleep therapy patient at this address.
Please call our patient management service at <say-as type="acronym"> 1 877 618 3574 </say-as> 
when you have a minute so we can track how you are doing.
The call should only take two minutes of your time and is designed to help us better care for you.
The number again is <say-as type="acronym"> 1 877 618 3574 </say-as> and you can call anytime day or night. 
Thanks, and have a great day.	
</prompt>
<disconnect/>
</block>
</form>
Regards,
Plum Support

Re: prompt not being played after noinput is detected

Posted: Thu Sep 09, 2010 1:48 pm
by magicsoft
Well, your suggestion made perfect sense to me, but it still didn't work. Here's the new file as it is with your fix:

Code: Select all


<?xml version="1.0"?>
<vxml version="2.0" application="test_rootorder.vxml">

	<form id="patienttest">
		<field name="answer">
			<property name="inputmodes" value="dtmf"/> 
			<grammar type="application/x-jsgf" mode="dtmf">
				( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
			</grammar>
			<prompt>
				This is Continuing Care calling with an important message.  Please press one.
			</prompt>
			<filled>
				<goto next="#person"/>
			</filled>
			<noinput>
				<goto next="#machine"/>
			</noinput>
		</field>
	</form>

	<form id="person">
		<block>
			<goto next="test_order_intro.vxml"/>
		</block>
	</form>

	<form id="machine">
		<record finalsilence="3000ms">
			<noinput>
				<goto next="#machinemessage" />
			</noinput>
		</record>
	</form>

	<form id="machinemessage">
		<block>
			<prompt bargein="false">
				Hello, this is Continuing Care. I’m calling to check on the sleep therapy patient at this address.
				Please call our patient management service at <say-as type="acronym"> 1 877 618 3574 </say-as> 
				when you have a minute so we can track how you are doing.
				The call should only take two minutes of your time and is designed to help us better care for you.
				The number again is <say-as type="acronym"> 1 877 618 3574 </say-as> and you can call anytime day or night.  
				Thanks, and have a great day.				
			</prompt>
			<disconnect/>
		</block>
	</form>

</vxml>

The log (shown below) indicates that it made it to the "machine" form, but never went to the "machinemessage" form after the final silence would have elapsed. The prompt at the end is never played, it simply hangs up.

Code: Select all


Thu 09 Sep 2010 02:42:07 PM EDT:
Call Start Event: ANII 13522741199 DNIS outbound VURL http://us.popproxy.plumgroup.com/plumvp/startpage.php
DocumentParser::FetchDocument()
DocumentParser::FetchDocument(http://us.popproxy.plumgroup.com/plumvp/startpage.php)
Cache Miss: http://us.popproxy.plumgroup.com/plumvp/startpage.php
Attempting to fetch http://us.popproxy.plumgroup.com/plumvp/startpage.php
Click here to view saved VoiceXML script
VXI::var_element(name="sessionID" expr = "session.id")
DocumentParser::FetchDocument(startpage.php)
Cache Miss: http://us.popproxy.plumgroup.com/plumvp/startpage.php?sessionID=000023%3b003%3b1284057693
Attempting to fetch http://us.popproxy.plumgroup.com/plumvp/startpage.php?sessionID=000023%3b003%3b1284057693
Click here to view saved VoiceXML script
VXI::var_element(name="callee_type" expr = "'answeringmachine'")
VXI::var_element(name="phone_number" expr = "'13522741199'")
VXI::var_element(name="call_id" expr = "'2143973'")
VXI::var_element(name="message_reference" expr = "''")
VXI::var_element(name="call_parameters" expr = "''")
VXI::var_element(name="campaign_parameters" expr = "''")
DocumentParser::FetchDocument(http://login.sleepcarecenter.com/autocalls/order.ashx)
Posted form data is URL encoded
Attempting to fetch http://login.sleepcarecenter.com/autocalls/order.ashx
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(test_rootorder.vxml)
Cache Miss: http://login.sleepcarecenter.com/autocalls/test_rootorder.vxml
Attempting to fetch http://login.sleepcarecenter.com/autocalls/test_rootorder.vxml
Click here to view saved VoiceXML script
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
---------
VXI::var_element(name="varDOB" expr = "")
VXI::var_element(name="varIncomingNumber" expr = "")
VXI::var_element(name="varOutgoingNumber" expr = "")
VXI::var_element(name="varResponseType" expr = "")
VXI::var_element(name="varQuestion" expr = "")
VXI::var_element(name="varReturnAnswer" expr = "")
VXI::var_element(name="varReturnQuestion" expr = "")
VXI::var_element(name="varOrderSomething" expr = "")
VXI::var_element(name="varCallID" expr = "")
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 name="mike" gender="male">
This is Continuing Care calling with an important message. Please press one.
</voice></speak>
---------
VXI::field_element - activating grammars for form = 'patienttest' formitem = 'answer'
VXI::do_recognition()
PromptManager::Play()
starting playback: bargein=true, inputmodes="dtmf"
Newly queued prompts are now being played

Thu 09 Sep 2010 02:42:17 PM EDT:
received event: noinput:
VXI::queue_prompts()
VXI::record_element - activating grammars for form = 'machine' formitem = '$_internalName_681855'
PromptManager::Play()

Thu 09 Sep 2010 02:42:22 PM EDT:
received event: noinput:
bargein set to false
INPUTMODES set to "DTMF VOICE"
Audio segment added to prompt queue from TTS application/synthesis+ssml for:
---------
VXI::disconnect_element()
Disconnect
Disconnecting On Channel 3

Thu 09 Sep 2010 02:42:24 PM EDT:
received event: connection.disconnect.hangup:
VXI::exit_element()
Call End Event
Ending session
Ending Session On Channel 3

Re: prompt not being played after noinput is detected

Posted: Thu Sep 09, 2010 1:56 pm
by magicsoft
For what it's worth, even if I actually let the call go to voicemail, it still does the same thing. It just hangs up and doesn't actually leave a message.

Re: prompt not being played after noinput is detected

Posted: Thu Sep 09, 2010 2:50 pm
by magicsoft
I'm gathering the problem is with the "record" part somehow. For the hell of it, I moved that part to the top, and the call log simply indicates "noinput" and then hangs up, without doing the "goto" statement at all.

Thu 09 Sep 2010 03:48:07 PM EDT:
Call Start Event: ANII 13522741199 DNIS outbound VURL http://us.popproxy.plumgroup.com/plumvp/startpage.php
DocumentParser::FetchDocument()
DocumentParser::FetchDocument(http://us.popproxy.plumgroup.com/plumvp/startpage.php)
Cache Miss: http://us.popproxy.plumgroup.com/plumvp/startpage.php
Attempting to fetch http://us.popproxy.plumgroup.com/plumvp/startpage.php
Click here to view saved VoiceXML script
VXI::var_element(name="sessionID" expr = "session.id")
DocumentParser::FetchDocument(startpage.php)
Cache Miss: http://us.popproxy.plumgroup.com/plumvp ... 1284061565
Attempting to fetch http://us.popproxy.plumgroup.com/plumvp ... 1284061565
Click here to view saved VoiceXML script
VXI::var_element(name="callee_type" expr = "'voice'")
VXI::var_element(name="phone_number" expr = "'13522741199'")
VXI::var_element(name="call_id" expr = "'2144491'")
VXI::var_element(name="message_reference" expr = "''")
VXI::var_element(name="call_parameters" expr = "''")
VXI::var_element(name="campaign_parameters" expr = "''")
DocumentParser::FetchDocument(http://login.sleepcarecenter.com/autocalls/order.ashx)
Posted form data is URL encoded
Attempting to fetch http://login.sleepcarecenter.com/autocalls/order.ashx
Click here to view saved VoiceXML script
DocumentParser::FetchDocument(test_rootorder.vxml)
Cache Miss: http://login.sleepcarecenter.com/autoca ... order.vxml
Attempting to fetch http://login.sleepcarecenter.com/autoca ... order.vxml
Click here to view saved VoiceXML script
GrammarManager::CreateGrammarFromString(application/x-jsgf):
---------
<?xml version='1.0'?>
<grammar xml:lang="en-us" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
---------
VXI::var_element(name="varDOB" expr = "")
VXI::var_element(name="varIncomingNumber" expr = "")
VXI::var_element(name="varOutgoingNumber" expr = "")
VXI::var_element(name="varResponseType" expr = "")
VXI::var_element(name="varQuestion" expr = "")
VXI::var_element(name="varReturnAnswer" expr = "")
VXI::var_element(name="varReturnQuestion" expr = "")
VXI::var_element(name="varOrderSomething" expr = "")
VXI::var_element(name="varCallID" expr = "")
VXI::queue_prompts()
VXI::record_element - activating grammars for form = 'machine' formitem = '$_internalName_695090'
PromptManager::Play()

Thu 09 Sep 2010 03:48:13 PM EDT:
received event: noinput:
bargein set to false
INPUTMODES set to "DTMF VOICE"
Audio segment added to prompt queue from TTS application/synthesis+ssml for:
---------
VXI::disconnect_element()
Disconnect
Disconnecting On Channel 1
received event: connection.disconnect.hangup:
VXI::exit_element()
Call End Event
Ending session
Ending Session On Channel 1

Re: prompt not being played after noinput is detected

Posted: Thu Sep 09, 2010 3:53 pm
by support
Hi Andrew,

We've been able to get your application working, and it turns out the error in the code was actually pretty obscure. The only change that needed to be made to your code to make it work correctly was deleting the apostrophe in the word "I'm" in your machine prompt, and then re-typing that apostrophe in an editor that uses UTF-8 character encoding. All VoiceXML code should be written using a UTF-8 capable text editor. For example, if you copy and paste out of Microsoft Word, some special characters like the apostrophe may not be stored as UTF-8, which will cause the application to behave erratically. Below is the working IVR code exactly as we've saved it:

Code: Select all

<?php
header("Content-type: text/xml");
echo("<?xml version=\"1.0\"?>\n");
?>
<vxml version="2.0" application="test_rootorder.vxml">

   <form id="patienttest">
      <field name="answer">
         <property name="inputmodes" value="dtmf"/> 
         <grammar type="application/x-jsgf" mode="dtmf">
            ( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
         </grammar>
         <prompt>
            This is Continuing Care calling with an important message.  Please press one.
         </prompt>
         <filled>
            <goto next="#person"/>
         </filled>
         <noinput>
            <goto next="#machine"/>
         </noinput>
      </field>
   </form>

   <form id="person">
      <block>
         <prompt>You are now in the person form.</prompt>
      </block>
   </form>

   <form id="machine">
      <record finalsilence="3000ms">
         <noinput>
            <goto next="#machinemessage" />
         </noinput>
      </record>
   </form>

   <form id="machinemessage">
      <block>
         <prompt bargein="false">
            Hello, this is Continuing Care. I'm calling to check on the sleep therapy patient at this address.
            Please call our patient management service at <say-as type="acronym"> 1 877 618 3574 </say-as> 
            when you have a minute so we can track how you are doing.
            The call should only take two minutes of your time and is designed to help us better care for you.
            The number again is <say-as type="acronym"> 1 877 618 3574 </say-as> and you can call anytime day or night.  
            Thanks, and have a great day.            
         </prompt>
         <disconnect/>
      </block>
   </form>

</vxml>

Regards,
Plum Support

Re: prompt not being played after noinput is detected

Posted: Fri Sep 10, 2010 7:26 am
by magicsoft
Well, that did turn out to be the problem. It's funny, because I actually had been using the correct syntax for the apostrophe somewhere else (in another file), but hadn't noticed it here. However, I do have a regular apostrophe in all of my "nomatch" handlers (in the another file) and it works fine there. So I assume that it handles that differently in a prompt for some reason. In any case, I got it working, thanks.

Andrew