性格决定命运 气度左右格局 拼搏方能取胜 谦虚才会进步

IVR-2 [Voice XML规范详细描述2]

上一篇 / 下一篇  2008-03-25 09:25:27 / 个人分类:做着

三、DTMF in Menus
    menu可以只有语音语法,也可以只有DTMF语法,也可以在<menu>中包含一个<property>元素同时指定DTMF和语音语法。下面的例子中的menu只有DTMF语法,并且使用<choice>元素的dtmf属性给每个<choice>元素显式的指定了DTMF序列:
<?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">
<menu>
<property name="inputmodes" value="dtmf"/>
<prompt>
For sports press 1, For weather press 2, For Stargazer astrophysics press 3.
</prompt>
<choice dtmf="1" next="http://www.sports.example.com/vxml/start.vxml"/>
<choice dtmf="2" next="http://www.weather.example.com/intro.vxml"/>
<choice dtmf="3" next="http://www.stargazer.example.com/astronews.vxml"/>
</menu>
</vxml>
    另外,也可以把<menu>元素的dtmf属性置为true,自动的为前九个没有指定DTMF序列的<choice>元素指定一个DTMF序列,第一个为“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">
<menu dtmf="true">
<property name="inputmodes" value="dtmf"/>
<prompt>
For sports press 1, For weather press 2, For Stargazer astrophysics press 3.
</prompt>
<choice next="http://www.sports.example.com/vxml/start.vxml"/>
<choice next="http://www.weather.example.com/intro.vxml"/>
<choice dtmf="0" next="#operator"/>
<choice next="http://www.stargazer.example.com/voice/astronews.vxml"/>
</menu>
</vxml>
 
四、ENUMERATE
    <enumerate>元素用于为用户自动产生<choice>元素的描述,它指定了一个模板,该模板根据<choice>元素在<menu>元素中的顺序,依次应用于每个<choice>。如果<enumerate>中没有内容,则使用默认的模板,列出所有的<choice>。该默认的模板取决于解释器环境。如果<enumerate>中有内容,这些内容就是模板的样式,它可以引用两个专有变量,“_prompt”和“_dtmf”,前者表示<choice>元素的提示语,后者表示<choice>元素的DTMF序列。如下面的例子:
<?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">
<menu dtmf="true">
<prompt>
Welcome home.
<enumerate>
For <value expr="_prompt"/>, press <value expr="_dtmf"/>.
</enumerate>
</prompt>
<choice next="http://www.sports.example.com/vxml/start.vxml">
sports </choice>
<choice next="http://www.weather.example.com/intro.vxml">
weather </choice>
<choice next="http://www.stargazer.example.com/voice/astronews.vxml">
Stargazer astrophysics news </choice>
</menu>
</vxml>
    该menu的提示语为:
C: Welcome home. For sports, press 1. For weather, press 2. For Stargazer astrophysics news, press 3.
    <enumerate>元素可用于<menu>元素中的<promppt>和<catch>元素,也可以用于包含有<option>元素的<field>元素。如果<enumerate>用于其他的地方,平台会抛出error.semantic事件(例如<enumerate>元素中包含有<enumerate>元素)。
 
五、Grammar Generations
    每个选项的文本(choice phrase)都指定了一组要监听的词或短语。一个选项的文本由直接或间接包含在<menu>元素中的<choice>元素中的元素的PCDATA组成,或由<field>元素中的<option>元素的PCDATA组成。
    如果accept的属性值为“exact”,则用户必须匹配选项文本中的整个短语,且顺序也要相同。
    如果accept的属性值为“approximate”,则用户可以匹配选项文本中的短语的子短语。例如,对于响应选项文本“Stargazer astrophysics news”,用户可以说“Stargazer”, “astrophysics”, “Stargazer news”, “astrophysics news”等。产生的语法是依赖语语言和平台的。
    如下面的例子,在不同的选项中分别使用“exact”和“approximate”。
<?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">
<menu accept="approximate">
<choice next="http://www.stargazer.example.com/voice/astronews.vxml">
Stargazer Astrophysics News </choice>
<choice accept="exact" next="http://www.physicsweekly.com/voice/example.vxml">
Physics Weekly </choice>
<choice accept="exact" next="http://www.particlephysics.com/voice/example.vxml">
Particle Physics Update </choice>
<choice next="http://www.astronomytoday.com/voice/example.vxml">
Astronomy Today </choice>
</menu>
</vxml>
    由于第一个选项的accept属性值为“approximate”,因此要匹配这个选项,用户可以只说出子短语;例如“Stargazer”或“Astrophysics News”。然而,由于第二个和第三个选项的accept属性值为“exact”,因此只有说出整个短语“Physics Weekly”和“Particle Physics Update”才能匹配语法。
    在下面的例子中,在<choice>元素中使用了PCDATA:
<choice accept="exact" next="http://www.stargazer.example.com/voice/astronews.vxml">
<audio src="http://www.stargazer.example.com/space.wav">
Stargazer <emphasis>astrophysics</emphasis> news
</audio>
</choice>
    该<choice>元素的选项文本由音频文件播放,如果该音频文件不能被播放,则会以语音合成的方式播放“Stargazer Astrophysics News”。该<choice>元素的语法的精确匹配短语“Stargazer astrophysics news”来自<choice>元素的PCDATA。
 
六、Interpretation Model
    <menu>和只包含一个简单的<field>的<form>的工作机制类似。Menu的事件处理相应的对应于<field>的事件处理。<menu>的语法相应的对应于<form>的语法。和在<form>中一样,<menu>中的语法匹配也会更新数组application.lastresult$。这些变量在5.1.5节中由详细描述。
    一旦进入<menu>,它的语法就被自动生成并激活,然后播放提示语。当用户的输入匹配了一个<choice>控制该<choice>的next, expr, event或eventexpr属性值跳转。这四个属性中,同时只可以指定一个。如果指定了一个event属性,而该事件的事件处理没有让解释器退出或把控制跳转到其他dialog,则FIA会将该<menu>的anonymous field清零,再次执行该<menu>。
ITPUB个人空间_ X5cU"y.h
ITPUB个人空间&WLc1z2\+n |.C
第三节 Form. Items
 
 
    form. item就是一个<form>中的元素,该元素在form解释期间可以被访问。这些元素包括<field>、<block>、<initial>、<subdialog>、<object>、<record>和<transfer>元素。
    所有的form. item都有下面的特点:
      ·它们都有一个变量,由name属性指定。该变量可以通过expr属性获得初始值。
      ·它们都有一个警戒条件,由cond指定。如果一个form. item没有被填充,且它的警戒条件没有指定或值为true,则该form. item可以被访问。
    Form. item可再细分为input item和control item,前者定义了该form的input item变量,后者用于帮助控制该form的input item的收集。Input item(<field>、<subdialog>、<object>、<record>和<transfer>)一般来说包含下面几个元素:
      ·<filled>元素,它包含了一些在相应的input item被填充后要执行的操作。
      ·<property>元素,用于指定作用于该input item(<initial>元素也可以包含<property>元素)的property。
      ·<prompt>元素,用于指定相应的元素被访问时要播放的提示语。
      ·<grammar>元素,用于指定该input item(<subdialog>不能包含<grammar>元素)允许输入的语音或DTMF按键。
      ·<catch>元素及它的一些简写形式,用于指定作用于该input item(<initial>元素不能包含<catch>元素)的事件处理。
    每个input item都有相应的一组影子变量。影子变量用于返回一个input item执行后的结果。而不是返回要存储于name属性的值。例如,在<field>的语法识别结果中有这次识别的confidence level(它是一个影子变量),获得这个值对我们可能有很大的帮助。影子变量的引用可以使用如下这种形式:name$.shadowvar,name就是该input item的name属性的值,shadowvar就是指定的影子变量名。影子变量是可写的,它的值可以被应用更改。例如,<field>返回的影子变量,confidence。下面的例子展示了怎样访问这个影子变量。
<?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="get_state">
<field name="state">
<prompt>Please say the name of a state. </prompt>
<grammar src="http://mygrammars.example.com/states.gram" type="application/srgs"/>
<filled>
<if cond="state$.confidence < 0.4">
<throw event="nomatch"/>
</if>
</filled>
</field>
</form>
</vxml>
    在这个例子中,识别结果的confidence要经过检查,confidence值太低的结果不会被接受。
 
一、FIELD
    <field>是一个form. item,用于收集用户输入,它的属性有:
name该form. item的form. item变量,它的作用域为dialog,它保存了识别的结果,在所在的form的form. item中,该form. item变量名必须是唯一的,如果该变量名不是唯一的,在获取文档时会抛出error.badfetch事件,该变量名必须符合变量的命名规则,详见5.1节。
expr该form. item变量的初始值,默认为ECMAScript. 的undefined。如果给它一个初始值,该form. item 将不会被访问,除非它被清零。
cond一个表达式,当它的结果值为true时,该form. item才被访问。如果没有指定该属性值,也能被访问。
type该<field>的类型,即内置语法类型的名称(详见附录P)。平台对内置语法类型的支持是可选的。如果不支持一个指定的内置语法类型,要抛出一个error.unsupported.builtin 事件。
slot语法槽名,用于存放变量(如果没有指定,默认值为该变量名)。当所用的语法格式支持返回一组成对的槽/值(slot/value)的机制,且槽名与该form. item变量名不同时,该属性就很有用。
modal如果它的值为false(默认值),在该field的收集阶段所有激活的语法都可以匹配;如果它的值为true,则只有该field的语法是允许匹配的,其它的都暂时失效。
表9:<field>元素的属性
    下表是<field>元素的影子变量(shadow variables),该<field>的form. item 变量名为name。影子变量utterance、 inputmode 和 interpretation的值必须和application.lastresult$ (详见5.1.5节)中相应变量的值一样。
name$.utterance被识别的词的原始串。正确的标记和拼写是依赖于平台的(例如“five hundred thirty”或“5 hundred 30”或只是“530”)。如果是DTMF语法,该变量将包含匹配的数字串。
name$.inputmode用户输入的模式,值为dtmf或voice。
name$.interpretation一个ECMAscript变量,它包含了用户输入的语义解释,详见3.1.5。
name$.confidence该<field>的confidence级别,它的取值范围为0.0-1.0,0.0表示最小的confidence,1.0表示最大的confidence。平台可以用utterance的confidence (application.lastresult$.confidence的值)作为name$.confidence 的值 ,<field>和utterance 级别的confidence之间的差别是依赖于平台的。 Confidence值更详细的解释是依赖于平台的,因为它的计算方法很可能每个平台不一样。
表10:<field>元素的影子变量
 
    <一>、使用显式语法的<field>
    显示语法可以通过绝对的或相对的URI指定:
<field name="flavor">
<prompt>What is your favorite ice cream?</prompt>
<grammar src="../grammars/ice_cream.grxml" type="application/srgs+xml"/>
</field>
    也可以指定一个联机(inline)语法,下面的例子使用了W3C ABNF格式的语法。
<field name="flavor">
<prompt>What is your favorite flavor?</prompt>
<help>Say one of vanilla, chocolate, or strawberry.</help>
<grammar mode="voice" type="application/srgs">
#ABNF 1.0;
$options = vanilla | chocolate | strawberry
</grammar>
</field>
    如果同时指定<grammar>元素的src属性和联机语法,平台会抛出error.badfetch事件。
 
    <二>、使用依赖于平台的内置的显式语法
    平台对内置资源的支持是可选的,如语音语法、DTMF语法和音频文件。这些资源使用平台特有的URI访问,例如http://localhost:5000/grammar/boolean,或者使用平台特有的方案(scheme),例如通常使用的“builtin”方案,“builtin:grammar/boolean”。如果平台支持访问内置资源,它应该支持访问基本的内置语法(见附录P)。例如:
<grammar src="builtin:grammar/boolean"/>
<grammar src="builtin:dtmf/boolean"/>
    上面的例子中,第一个<grammar>引用了内置的boolean语音语法,第二个<grammar>引用了内置的boolean的DTMF语法。
    下面的<field>:
<field type="sample">
<prompt>Prompt for builtin grammar</prompt>
</field>
    和下面这个使用平台特有的内置语法的<field>,效果是一样的。
<field>
<grammar src="builtin:grammar/sample"/>
<grammar src="builtin:dtmf/sample"/>
<prompt>Prompt for builtin grammar</prompt>
</field>
    sample是基本的内置<field>的type之一(如,boolean、date等)。
    另外,依赖于平台的内置语法的URI可用来访问特定解释器环境支持的语法,我们建议平台特有的内置语法以“x-”开头命名,因为在将来的正式版本中不会使用该命名空间。如下:
<grammar src="builtin:grammar/x-sample"/>
<grammar src="builtin:dtmf/x-sample"/>
 
    <三>、使用<option>列表的<field>
    当要为<field>指定一组简单的可选项时,用<option>列表比用一个语法方便。<option>列表由包含于<field>元素中的一组<option>元素组成,每个<option>元素包含了用来产生语音语法的PCDATA,<option>的语法产生规则和2.2.5节中的<choice>一样。<option>有一个属性用于为每个<option>指定一个DTMF序列,还有一个属性用于控制要赋给该<field>元素的form. item变量的值。当一个<option>元素被选定时,它的属性value的值决定了该<field>的影子变量和application.lastresult$的语义解释值。
    下面的例子中的<field>元素给用户提供了三个选项,把被选定的application.lastresult$元素的value属性值赋给变量maincource:
<field name="maincourse">
<prompt>
Please select an entree. Today, we are featuring <enumerate/>
</prompt>
<option dtmf="1" value="fish"> swordfish </option>
<option dtmf="2" value="beef"> roast beef </option>
<option dtmf="3" value="chicken"> frog legs </option>
<filled>
<submit next="/cgi-bin/maincourse.cgi" method="post" namelist="maincourse"/>
</filled>
</field>
    该例子可能的流程:
C: Please select an entree. Today, we're featuring swordfish; roast beef; frog legs.
H: frog legs.
C: (assigns "chicken" to "maincourse", then submits "maincourse=chicken" to /maincourse.cgi)
    下面的例子展示了在一个form的<catch>元素中的<enumerate>元素的正确用法和错误用法,该form有几个<field>元素包含有<option>元素。
<?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>
<block>
We need a few more details to complete your order.
</block>
<field name="color">
<prompt>Which color?</prompt>
<option>red</option>
<option>blue</option>
<option>green</option>
</field>
<field name="size">
<prompt>Which size?</prompt>
<option>small</option>
<option>medium</option>
<option>large</option>
</field>
<field name="quantity">
<grammar type="application/srgs+xml" src="/grammars/number.grxml"/>
<prompt>How many?</prompt>
</field>
<block>
Thank you.  Your order is being processed.
<submit next="details.cgi" namelist="color size quantity"/>
</block>
<catch event="help nomatch">
Your options are <enumerate/>.
</catch>
</form>
</vxml>
    该例子可能的流程:
C: We need a few more details to complete your order. Which color?
H: help. (throws "help" event caught by form-level <catch>)
C: Your options are red, blue, green.
H: red.
C: Which size?
H: H: 7 (throws "nomatch" event caught by form-level <catch>)
C: Your options are small, medium, large.
H: small.
    在上面的步骤,form级别的<catch>元素中的<enumerate>元素可以列举一些内容:“color”和“size”<field>中的<option>元素。然而,下一个<field>就不一样了:
C: How many?
H: a lot. (throws "nomatch" event caught by form-level <catch>)
    Form级别的<catch>元素中使用<enumerate>,导致平台抛出error.semantic事件。因为“quantity”<field>中没有包含任何可以列举的<option>元素。
    有一种办法可以解决,就是在“quantity”<field>元素中加一个field级别的<catch>元素,如下:
<catch event="help nomatch">
Please say the number of items to be ordered.
</catch
    这样,“nomatch”事件被<field>中的<catch>捕获,下面是一个可能的流程:
C: Please say the number of items to be ordered.
H: 50.
C: Thank you. Your order is being processed.
    <enumerate>元素在2.2.4节中也有详细描述。
    <option>元素的属性有:
dtmf该<option>元素的DTMF序列,它的作用等同于一个简单的DTMF语法,和应用于该序列识别的DTMF<property>。它和DTMF语法不同的是,它的空格是不起作用的:dtmf=“123#”跟dtmf=“1 2 3 #”的效果是一样的。
accept值为exact (默认)或approximate。当其值为exact时,语音识别时需完全匹配该元素定义的文本;当其值为approximate,语音识别只需大概匹配该元素定义的文本(详见2.2.5节)。
value当用户选择该<option>时,赋给该<field>元素的form. item变量的字符串,无论用户是使用语音输入还是DTMF按键输入。默认是使用<option>元素的CDATA内容赋值,这些CDATA开头和结尾的空格都被去掉了。如果<option>没有内容,就用DTMF序列代替。
表11:<option>元素的属性
    使用<option>元素不排除同时使用<grammar>元素,结果将是这两个"语法"中的任一个的匹配。而在同一个<field>中同时出现两个<grammar>元素则意味着选项的逻辑或,即两个语法中只能匹配一个。

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar