性格决定命运 气度左右格局 拼搏方能取胜 谦虚才会进步
IVR-2 [Voice XML规范详细描述11]
上一篇 / 下一篇 2008-03-25 10:14:40 / 个人分类:做着
| 第二节 Basic Prompts | |
| 在前面的例子中你已经见过<prompt>元素了: | |
<prompt>Please say your city.</prompt> | |
| 你可以使用<prompt> ... </prompt>这种形式,如果: | |
| ·不需要指定该<prompt>元素的属性; | |
| ·该<prompt>元素的内容完全由PCDATA组成,或是由<audio>元素和<value>元素组成。 | |
| 例如,<prompt>元素可以包含如下内容: | |
Please say your city. <audio src="say_your_city.wav"/> | |
| 但是,在下面的例子中,<prompt>元素的内容需要嵌入语音标记: | |
<prompt>Please <emphasis>say</emphasis> your city.</prompt> | |
| 第三节 Audio Prompting | |||||||||||
| 提示语可以是预先录音的文件,音频流和合成语音这三种方式的任意组合: | |||||||||||
<prompt> Welcome to the Bird Seed Emporium. <audio src="rtsp://www.birdsounds.example.com/thrush.wav"/> We have 250 kilogram drums of thistle seed for <say-as interpret-as="currency">$299.95</say-as> plus shipping and handling this month. <audio src="http://www.birdsounds.example.com/mourningdove.wav"/> </prompt> | |||||||||||
| 在任何提示中都可以播放音频。音频的内容可以通过URI指定;在VoiceXML中,它也可以是先前录音的一个音频变量(audio variable): | |||||||||||
<prompt> Your recorded greeting is <audio expr="greeting"/> To rerecord, press 1. To keep it, press pound. To return to the main menu press star M. To exit press star, star X. </prompt> | |||||||||||
| 当声音文件或音频流不可用时,<audio>元素可以有备用的内容: | |||||||||||
<prompt> <audio src="welcome.wav"> <emphasis>Welcome</emphasis> to the Voice Portal. </audio> </prompt> | |||||||||||
| 如果声音文件不能播放(例如,“src”指向的或“expr”求得的值为一个无效的URI,或者声音文件的格式是平台不支持的格式等),该<audio>的内容就会被播放。这些内容可以是文本、语音标记或者另外的<audio>元素。如果声音文件不能播放,且该<audio>元素的内容为空,则不会有任何声音,也不会抛出error事件。 | |||||||||||
| 如果<audio>元素包含有“expr”属性,该属性求得的值为ECMAScript的undefined,则该元素,包括它的备用内容,被忽略。这样,开发者就可以动态的指定<audio>元素的内容,如果不需要播放该元素,就可以给它的“expr”属性赋一个null值来忽略它。下面的例子展示了该技巧怎样用在回放由几个音频片断组成的一组卡的信息: | |||||||||||
<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form> <!-- script. contains the function sayCard(type,position) which takes as input the type of card description (audio or text) and its position in an array, and returns the selected card description in the specified array position; if there is no description in the requested array position, then returns EMCAScript. undefined --> <script. src="cardgame.js"/> <field name="takecard"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt> <audio src="you_have.wav">You have the following cards: </audio> <!-- maximum of hand of 5 cards is described --> <audio expr="sayCard(audio,1)"><value expr="sayCard(text,1)"/></audio> <audio expr="sayCard(audio,2)"><value expr="sayCard(text,2)"/></audio> <audio expr="sayCard(audio,3)"><value expr="sayCard(text,3)"/></audio> <audio expr="sayCard(audio,4)"><value expr="sayCard(text,4)"/></audio> <audio expr="sayCard(audio,5)"><value expr="sayCard(text,5)"/></audio> <audio src="another.wav">Would you like another card?</audio> </prompt> <filled> <if cond="takecard"> <script>takeAnotherCard()</script> <clear/> <else/> <goto next="./make_bid.html"/> </if> </filled> </field> </form> </vxml> | |||||||||||
| SSML中定义的<audio>的属性有: | |||||||||||
| |||||||||||
| 表35:<audio> 从SSML继承的属性 | |||||||||||
| VoiceXML中定义的<audio>元素的属性: | |||||||||||
| |||||||||||
| 表36:<audio> VoiceXML中加入的属性 | |||||||||||
| 必须指定属性“src”和“expr”其中的一个,否则会抛出error.badfetch事件。 | |||||||||||
| 注意:音频流是平台播放的最佳选择:即当获得一部分音频的内容时,平台就可以开始播放,而不用等到完全获得音频。如果fetchhint的值为"prefetch",则必须预先获得完整的音频才可以进行回放。 | |||||||||||
| 第四节 <value> Element | |||
| <value>元素用于把表达式的值插入到提示语中。它的属性有: | |||
| |||
| 表37:<value>元素的属性 | |||
| 例如,如果n为12,该<prompt>元素 | |||
<prompt> <value expr="n*n"/> is the square of <value expr="n"/>. </prompt> | |||
| 把字符串“144 is the square of 12”传给语音合成引擎。 | |||
| 播放<value>元素值的方式由它两端的语音合成标记控制。例如,下面的例子把<value>元素的值读成日期形式: | |||
<var name="date" expr="'2000/1/20'"/> <prompt> <say-as interpret-as="date"> <value expr="date"/> </say-as>. </prompt> | |||
| 被<value>元素插入的文本不会受到任何特别的解释。特别的,它不会作为一个SSML文档或文档段被解释。XML特定的字符(&,<和>)不会被特别对待,也不需要避开。<value>元素在CDATA部分求得的值插入一段文本也是一样的结果。例如,下面赋值的变量 | |||
<script> <![CDATA[ e1 = 'AT&T'; ]]> </script> | |||
| 在一个<prompt>元素中被引用时 | |||
<prompt>The price of<value expr="e1"/> is $1.</prompt> | |||
| 输出如下结果: | |||
The price of AT&T is $1. | |||
| 第五节 Bargein | |||||
| 如果执行平台支持bargein,则开发者就能够指定用户是否可以使用DTMF或语音打断正在播放的提示语。这样可以加快交互的速度,但并不是所有的情况我们都希望用户可以打断提示语。如果要求用户必须听完所有的警告,合法的通知或广告,则应该让bargein失效,可通过设置bargein属性达到。如下: | |||||
<prompt bargein="false"><audio src="legalese.wav"/></prompt> | |||||
| 如果一个<prompt>元素的bargein属性值为true,则用户可以打断该提示语;反之,如果bargein属性值为false,则用户必须听完该<prompt>元素的提示语。如果有几个<prompt>元素排队,则遵循正在播放的那个<prompt>元素的bargein属性值。如果在该序列中的某个<prompt>元素出现bargein,则其后的<prompt>元素都不会被播放(即使其中有的<prompt>元素的bargein属性值为false)。如果没有指定bargein属性,则使用bargein propery的值。 | |||||
| 当bargein属性值为false,则在播放<prompt>元素提示语时,输入是不会被缓冲的,且在跳转状态中,所有的DTMF输入缓冲均被删除(4.1.8描述了在跳转状态时输入的收集)。 | |||||
| 注意,不是所有的语音识别引擎或执行平台都支持bargein。一个支持bargein的平台必须支持下一节中描述的bargeintype中的一种。 | |||||
| Bargein type | |||||
| 当bargein为激活时,bargeintype用于表示平台要响应的语音或DTMF输入的bargein的类型。该属性允许的值为: | |||||
| |||||
| 表38:bargeintype 的值 | |||||
| 如果没有指定bargeintype属性,则使用bargeintype property的值。支持bargein的执行平台必须至少支持上述两种bargein类型中的一种。在一个<prompt>元素序中,混合使用这两种类型可能导致不可预知的行为,我们不鼓励这种做法。 | |||||
| 当bargeintype为speech时,由于语音识别技术的复杂性,语音输入的精确定义是依赖于执行平台的。我们期望一旦平台能够可靠的确定输入为语音时,就要立刻停止播放提示语。尽快停止播放提示语可避免"stutter"效应,免得用户以为系统没有听到语音而停止说了一半的话,并且从头开始说。 | |||||
| 第六节 Prompt Selection | |
| 分级提示即每次播放的提示语都可以不一样。当用户对服务更熟悉时,提示语可变得更简短;而用户需要更多的帮助时,提示语可变得更详细;或者提示语不停的改变只是为了使交互更有趣。 | |
| 每个input item、<initial>元素和<menu>元素都有一个内部的提示语计数器,当进入该<form>元素或<menu>元素时,这些计数器被置为1。无论系统何时播放一个提示语,它相应的计数器都会增加1。这就是支持分级提示的机制。 | |
| 例如,下面的例子的form中有一个form级的<prompt>元素和几个filled级的<prompt>元素: | |
<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form. id="tapered"> <block> <prompt bargein="false"> Welcome to the ice cream survey. </prompt> </block> <field name="flavor"> <grammar mode="voice" version="1.0" root="root"> <rule id="root" scope="public"> <one-of> <item>vanilla </item> <item>chocolate </item> <item>strawberry </item> </one-of> </rule> </grammar> <prompt count="1">What is your favorite flavor?</prompt> <prompt count="3">Say chocolate, vanilla, or strawberry.</prompt> <help>Sorry, no help is available.</help> </field> </form> </vxml> | |
| 一个可能的对话流程: | |
C: Welcome to the ice cream survey. C: What is your favorite flavor? (the "flavor" field's prompt counter is 1) H: Pecan praline. C: I do not understand. C: What is your favorite flavor? (the prompt counter is now 2) H: Pecan praline. C: I do not understand. C: Say chocolate, vanilla, or strawberry. (prompt counter is 3) H: What if I hate those? C: I do not understand. C: Say chocolate, vanilla, or strawberry. (prompt counter is 4) H: ... | |
| 当FIA选定提示语时,会检查它的计数器。小于或等于当前计数器值的<prompt>元素中,count属性值最高的被FIA选定并播放。如果没有指定count属性,则该属性的默认值为1。 | |
| 条件提示是指当条件满足时才播放该提示语。如下: | |
<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form. id="another_joke"> <var name="r" expr="Math.random()"/> <field name="another"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt cond="r < .50"> Would you like to hear another elephant joke? </prompt> <prompt cond="r >= .50"> For another joke say yes. To exit say no. </prompt> <filled> <if cond="another"> <goto next="#pick_joke"/> </if> </filled> </field> </form> </vxml> | |
| 当必须选择一个<prompt>元素时,根据下面的算法选择一组<prompt>元素进行排队。 | |
| 1、将该元素包含的所有<prompt>元素按照文档顺序形成一个有序的列表; | |
| 2、将该列表中cond属性值为false的<prompt>元素删除; | |
| 3、找出“正确的计数”:该列表中小于或等于当前计数器值,且count属性值最高的<prompt>元素; | |
| 4、将该列表中所有不符合“正确的计数”的<prompt>元素删除,该列表中剩下的<prompt>元素排队进行播放。 | |
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG: