1

我正在使用由类似于 TellMe 的引擎驱动的 vxml。我将语音识别添加到语音邮件系统的电话提示中。新菜单将首先提示用户进行口头输入,如果没有找到匹配项,或者没有给出输入,则再次提示用户使用按键音选项。

原始菜单如下所示:

<menu id="msgedit">
        <prompt><enumerate><value expr="_prompt"/>press <value expr="_dtmf"/>.</enumerate></prompt>
        <choice dtmf="9" next="#checkurgent">To deliver your message </choice>
        <choice dtmf="7" next="#playmsg">To play your message </choice> 
        <choice dtmf="3" next="#rerecord">To discard your message and record over </choice>
        <choice dtmf="2" next="#addtomsg">To add to your message </choice>
        <choice dtmf="6" next="#testnumber">To enter a phone number where you may be reached </choice>
        <choice dtmf="1" next="#cancel">To cancel making a message </choice>
        <!-- handle no input/no match -->   
</menu>

新菜单如下所示:

<form id="msgedit">
      <field name="choice">
         <prompt>
         <if count == 0">
            Please choose one of the following. 
            deliver, play back, rerecord, add to, 
            enter a callback number, or cancel.
            <else/>
            Please choose one of the following. 
            To deliver your message, press 9. 
            To play back your message, press 7. 
            To discard your message and rerecord, press 3. 
            To add to your message, press 2. 
            To enter a callback number, press 6. 
            To cancel your message, press 1.
         </if>
         </prompt>
      </field>
      <filled>
         <if cond="choice == 'deliver' || choice == '9'">
            <goto next="#checkurgent"/>
            <elseif cond="choice == 'play' || choice == '7'"/>
            <goto next="#playmsg"/>
            <elseif cond="choice == 'rerecord' || choice == '3'"/>
            <goto next="#rerecord"/>
            <elseif cond="choice == 'add' || choice == 'add to' || choice == '2'"/>
            <goto next="#addtomsg"/>
            <elseif cond="choice == 'enter callback number' || choice == 'callback number' || choice =='6'"/>
            <goto next="#testnumber"/>
            <elseif cond="choice == 'cancel' || choice =='1'"/>
            <goto next="#cancel"/>
            <else/>
            <throw event="nomatch"/>
         </if>
      </filled>
      <!-- handle no input/no match -->
   </form>

但是,我想使用原始菜单中的<enumerate>and<choice>行为来重新提示,而不是长文本(太长并导致错误)。

这是问题:有没有办法在第二种提示风格中使用第一种提示风格?我可以放在一个字段里面吗?我该怎么做?

4

1 回答 1

0

选择元素特定于菜单。虽然可以在一般提示中使用 enumerate,但它在第一个示例中的使用方式是将提示与允许的输入联系起来。对于一个字段,您正在从定义的语法中获取可用的输入。

关于后一点,您的代码段没有提到语法,也没有表示该字段的类型。语法是在 VoiceXML 文档中的更高级别定义的还是内置语法?如果不是,那可能是您的错误的根源。

您可以将语音识别与菜单和选项一起使用,但选项的方式是通过枚举定义的:

这是来自 VoiceXML 2.0 规范的修改示例:

<menu>
  <choice dtmf="1" next="http://www.sports.example.com/vxml/start.vxml">
    <grammar src="sports.grxml" type="application/srgs+xml"/>
    Press 1 or say Sports for sports scores
  </choice>
  <choice dtmf="2" next="http://www.weather.example.com/intro.vxml">
   <grammar src="weather.grxml" type="application/srgs+xml"/>
   Press 2 or say weather for weather
  </choice>
  <choice dtmf="3" next="http://www.stargazer.example.com/voice/astronews.vxml">
   <grammar src="astronews.grxml" type="application/srgs+xml"/>
   press 3 or say Stargazer astrophysics for ?
  </choice>
</menu>

如果您将提示放入 ECMAScript 数组中,您也可以使用枚举。

一般来说,我会推荐现场方法。您在提供丰富的提示和错误处理方面获得了更多的灵活性。menu/choice 是一种快捷机制,适用于简单、有限的情况。

于 2010-06-30T12:11:13.753 回答