voicexml输出外部语法并重新填充字段元素

时间:2011-01-10 17:39:43

标签: field voicexml

我想,如果用户说“帮助”,以下字段没有填写,并且用户获得了所有可能的选项。

<form id="test">    
    <field name="var1">


<prompt bargein="true" bargeintype="hotword" >say xy </prompt>

<grammar src = "grammar.grxml" type="application/srgs+xml"  />



    <filled>
    <assign name="myProdukt" expr="var1" />
    you said <value expr="myProdukt"/>
    </filled>

</field>

(假设外部语法是“p1”,“p2”和“p3”,用户说“帮助”,系统说“p1”,“p2”,“p3”,用户可以选择再次 - 因此“帮助”一词也必须在外部语法中,不是吗?)

提前致谢

1 个答案:

答案 0 :(得分:2)

是的,活动语法必须包含一个“帮助”话语,它返回值“帮助”。然后,您使用help标记来捕获该事件:

<?xml version="1.0" encoding="UTF-8"?>
<vxml xmlns="http://www.w3.org/2001/vxml" version="2.0"
    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="test">    
        <field name="var1">
            <prompt bargein="true" bargeintype="hotword" >say xy </prompt>
            <grammar src = "grammar.grxml" type="application/srgs+xml"  />
            <filled>
                <assign name="myProdukt" expr="var1" />
                you said <value expr="myProdukt"/>
            </filled>
            <help>
                To choose a product, say, 
                <!-- whatever the product choices are -->
                frobinator, submarine, curling iron, .. 
                <reprompt/>
            </help>
        </field>
    </form>
</vxml>

或者,在DRY principle之后,使用包含link元素的应用程序根文档,可以为您的应用程序全局完成此效果。在下面的示例app-root.vxml文档中,link绑定了help事件的全局语法“帮助”话语:

<?xml version="1.0"?>
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml">
   <link event="help">
      <grammar mode="voice" root="root_rule" tag-format="semantics/1.0"
               type="application/srgs+xml" version="1.0" xml:lang="en-US">
            <rule id="root_rule" scope="public">
                  <one-of>
                        <item weight="1.0">
                              help
                        </item>
                  </one-of>
            </rule>
      </grammar>
   </link>
</vxml>

这个语法在任何地方都是活跃的 - 有效地与每个活动字段语法合并。如果您需要有关应用程序根文档的更多信息,请参阅VoiceXML规范Executing a Multi-Document Application部分。另请参阅 Tellme Studio 文档

中的Handling Events

然后,在应用程序的页面中,通过application元素的vxml属性引用应用程序根文档,并在help catch块中正确说出:

<?xml version="1.0" encoding="UTF-8"?>
<vxml xmlns="http://www.w3.org/2001/vxml" version="2.0"
    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"
    application="app-root.vxml">
    <form id="test">    
        <field name="var1">
            <prompt bargein="true" bargeintype="hotword" >say xy </prompt>
            <grammar src = "grammar.grxml" type="application/srgs+xml"  />
            <filled>
                <assign name="myProdukt" expr="var1" />
                you said <value expr="myProdukt"/>
            </filled>
            <help>
                To choose a product, say, 
                <!-- whatever the product choices are -->
                frobinator, submarine, curling iron, .. 
                <reprompt/>
            </help>
        </field>
    </form>
</vxml>

当然,您可以将link代码放在与您的表单相同的页面中,但除非与某些内容发生冲突,否则您可能希望help对应用程序的每个字段都有效在特定领域的语法。