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

Voice and answering machine issues.

Questions and answers about IVR programming for Plum DEV

Moderators: admin, support

Post Reply
lfortnam
Posts: 16
Joined: Thu Mar 15, 2007 10:46 am
Location: Birmingham
Contact:

Voice and answering machine issues.

Post by lfortnam »

Hi Support,

I have a couple of queries regarding the following script.

1. If the user enters no response in the menu elements, the voice reverts back from the UK Female voice of Millie to the american male voice, can this be changed in anyway. I have tried a number of different options but they either error out or just use the male voice anyway.

2. A large number of calls that are answered by humans (as opposed to answering machines) end at the point where the date and time is first read out and they are not given the option to enter anything at the menu. The line just disconnects. As you can imagine, without the option to confirm attendance or cancellation the service is not working as it should be right now.

3. Currently I post information remotely to a server to tell me where a call is up to so taht ew can report information back to the surgery accordingly. Our web server does have the odd blip and I would like to know how to capture the bad.fetch error and retry the submission possibly with a message to the user to say 'please wait whilst we try again' or something like that.

4. The delay in detecting an answering machine sometimes leads to patients putting the phone down before the message is read out. Is there anyway to change this? Or would it be better to have the detection removed completely and just go straight into the call with a 'You have an information message from Hobs moat surgery, please press 1 to pick up the message' at which point the call waits for the number 1 to be pressed, if nothing is pressed the answering machine beep script is called and the appropriate message is played after the beep or as soon as the 1 button is pressed.


<?xml version="1.0"?>
<vxml version="2.0">
<var name="amt" expr="'0.00'" />
<form id="welcome">
<block>
<prompt bargein="false">
<voice name="millie">
Hello
<!--- <break time="1s"/> --->
This is an information call from the hobs moat appointment reminder service.
</voice>
</prompt>
</block>
<block>
<assign name="status" expr="'welcome'"/>
<assign name="callID" expr="1234"/>
</block>
<subdialog
name="postStatus"
src="http://www.appointmentm8.com/index.cfm? ... atusUpdate"
namelist="status callID"
method="post"
fetchtimeout="10s">
</subdialog>
<block>
<goto next="#purpose"/>
</block>
</form>

<form id="purpose">
<block>
<prompt bargein="false">
<voice name="millie">
Don't forget a member of your household has a medical appointment at
</voice>
</prompt>
</block>
<!--- <block>
<assign name="status" expr="'purpose'"/>
<assign name="callID" expr="1234"/>
</block>
<subdialog
name="postStatus"
src="http://www.appointmentm8.com/index.cfm? ... atusUpdate"
namelist="status callID"
method="post"
fetchtimeout="10s">
</subdialog>
<block>
</block> --->
<subdialog name="result" src="#appdatetime"></subdialog>
</form>

<form id="appdatetime">
<block>
<prompt bargein="false">
<voice name="millie">
<say-as type="time">4:35 pm</say-as> on Monday the <say-as type="number">27</say-as> of June 2007
</voice>
</prompt>
</block>
<block>
<assign name="status" expr="'date and time'"/>
<assign name="callID" expr="1234"/>
</block>
<subdialog
name="postStatus"
src="http://www.appointmentm8.com/index.cfm? ... atusUpdate"
namelist="status callID"
method="post"
fetchtimeout="10s">
</subdialog>
<block>
<goto next="#menuoptions"/>
</block>
</form>

<menu id="menuoptions" dtmf="true">
<property name="inputmodes" value="dtmf"/>
<prompt bargein="true">
<voice name="millie">
You may now perform one of the following options.
<break time="1s"/>
Press 1 to confirm you will be attending the appointment.
<break time="1s"/>
Press 2 to cancel your appointment, you will be asked to confirm your cancellation so do not hang up until the end of the call.
<break time="1s"/>
or Press 3 to repeat the date and time of the appointment.
</voice>
</prompt>
<choice next="#attending">
</choice>
<choice next="#cancel">
</choice>
<choice next="#repeat">
</choice>
<nomatch>
You must choose from:
Press 1 to confirm you will be attending the appointment.
Press 2 to cancel your appointment.
or, Press 3 to repeat the date and time of the appointment.
</nomatch>
</menu>

<form id="attending">
<block>
<prompt bargein="false">
<voice name="millie">
Thank you for confirming you will be attending your appointment.
</voice>
<!--- <break time="1s"/> --->
</prompt>
</block>
<block>
<assign name="status" expr="'attending'"/>
<assign name="callID" expr="1234"/>
</block>
<subdialog
name="postStatus"
src="http://www.appointmentm8.com/index.cfm? ... atusUpdate"
namelist="status callID"
method="post"
fetchtimeout="10s">
</subdialog>
<block>
<goto next="#goodbye"/>
</block>
</form>

<menu id="cancel" dtmf="true">
<property name="inputmodes" value="dtmf"/>
<prompt bargein="true">
<voice name="millie">
You have indicated that you wish to cancel your appointment.
<break time="1s"/>
Please press 1 to confirm that you do wish to cancel your appointment or
press 2 to return to the main menu and reselect your option.
</voice>
</prompt>
<choice next="#confirmcancel">
</choice>
<choice next="#confirmnonecancel">
</choice>
<nomatch>
You have indicated that you wish to cancel your appointment.
Please press 1 to confirm that you do wish to cancel your appointment or
press 2 to return to the main menu and reselect your option.
</nomatch>
</menu>

<form id="confirmcancel">
<block>
<prompt bargein="false">
<voice name="millie">
Thank you for confirming that you wish to cancel your appointment. We are contacting the surgery now to pass the cancellation on.
<!--- <break time="1s"/> --->
</voice>
</prompt>
</block>
<block>
<assign name="status" expr="'cancelling'"/>
<assign name="callID" expr="1234"/>
</block>
<subdialog
name="postStatus"
src="http://www.appointmentm8.com/index.cfm? ... atusUpdate"
namelist="status callID"
method="post"
fetchtimeout="10s">
</subdialog>
<block>
<prompt bargein="false">
<voice name="millie">
Your cancellation has been accepted by the surgery.
<break time="1s"/>
</voice>
</prompt>
</block>
<block>
<goto next="#goodbye"/>
</block>
</form>

<form id="confirmnonecancel">
<block>
<prompt bargein="false">
<voice name="millie">
Your appointment has not, we repeat, not been cancelled and is still in place at the surgery.
</voice>
</prompt>
<goto next="#menuoptions"/>
</block>
</form>

<form id="repeat">
<block>
<prompt bargein="false">
<voice name="millie">
The date and time of the appointment is
</voice>
</prompt>
</block>
<subdialog name="result" src="#appdatetime"></subdialog>
</form>

<form id="goodbye">
<block>
<prompt bargein="false">
<voice name="millie">
Thank you for your time, goodbye.
</voice>
</prompt>
</block>
<block>
<assign name="status" expr="'goodbye'"/>
<assign name="callID" expr="1234"/>
</block>
<subdialog
name="postStatus"
src="http://www.appointmentm8.com/index.cfm? ... atusUpdate"
namelist="status callID"
method="post"
fetchtimeout="10s">
</subdialog>
<block>
</block>
</form>
</vxml>

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

IVR Voice and answering machine issues

Post by support »

Hi,

In regards to your first query, you would have to add a <prompt> tag and <voice> tag whereever a <noinput> or <nomatch> tag is. For IVR example, in you "menuoptions" section, you would add in your <nomatch> section:

Code: Select all

<nomatch>
     <prompt>
     <voice name="millie">
          You must choose from:
          Press 1 to confirm you will be attending the appointment.
          Press 2 to cancel your appointment.
          or, Press 3 to repeat the date and time of the appointment.
     </voice>
     </prompt>
</nomatch> 
In regards to your third query, you could add to the top of your IVR script:

Code: Select all

<catch event="error">
  <!-- do something -->
</catch>
This will allow you to catch the IVR error and retry the submission with a message to the user.

As for your other queries, you would want to disable your callee-type detection for IVR outbound calling to avoid the confusion of detecting either a human or answering machine. If you have a support contract with us, you can send an e-mail to support@plumvoice.com with your ID in the subject line and we will disable this for you or you could contact your sales representative to disable the callee-type detection.

Regards,
Plum Support
Last edited by support on Fri Feb 19, 2010 5:33 pm, edited 4 times in total.

lfortnam
Posts: 16
Joined: Thu Mar 15, 2007 10:46 am
Location: Birmingham
Contact:

Post by lfortnam »

With regards the error catching, if I wanted to have a different action performed depending on where the error occurred within the script, would I simply add additional error catch statements in and if so, where in the structure would they go. Effectively it is only when I post an update to the remote server with a status message.

Thanks,

Lee

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

IVR Voice and answering machine issues

Post by support »

Hi,

With regards to using <catch>, you have to use them within their corresponding parent IVR tag to have them perform different actions. So, you can't have two separate catch events in the same <form> tag unless they both have different parent tags. The different parent tags for <catch> are <field>, <form>, <initial>, <menu>, <object>, <record>, <subdialog>, <transfer>, and <vxml> .

For an IVR example, you can have a catch event within your <form> tag and a separate catch event within a <field> tag that's also inside of that <form> tag.

Hope this IVR tutorial helps.

Regards,
Plum Support

Post Reply