使用Nuance OSDM在日期条目上“按*取消”?

时间:2011-06-23 14:41:46

标签: ivr vxml voicexml

我目前正在开发一个将Nuance OSDM与GRXML语法结合使用的VXML 2.0应用程序。

我们的一个提示要求来电者输入出生日期,但如果他们没有方便,他们可以说“取消”或按星号。这是一个Date OSDM,我已经添加了一个额外的命令语法来分别处理语音和DTMF条目的“取消”或星号。

说“取消”有效;绕过Date语法,命令语法激活,代码运行正如我所期望的那样。然而,星号是一个不同的故事。当我运行调试呼叫并按下电话上的星号键时,它被视为无匹配。通过OSDM手册,似乎Nuance Date OSDM上的DTMF条目是通过内置的DTMF数字语法运行的,范围为2-8位。

该手册还说明了以下内容: “如果指定了parallelgrammar,则OSDM将DTMF输入与DTMF集合语法和parallelgrammar匹配。如果DTMF字符与两个语法匹配,则返回parallelgrammar匹配。”

所以,我认为数字语法有“*”作为烘焙终止字符,并且它覆盖了我的明确声明,只有“#”可以是终止字符:

  1. 我按下星号。
  2. DTMF数字语法被激活。
  3. DTMF数字语法结果为空白,因为星号是一个术语字符,没有其他输入。
  4. 空白是OOG,因为长度为2-8位。
  5. 返回Nomatch。
  6. 我坚持使用OSDM,因为它的操作对于我们的应用程序执行事件记录的方式至关重要。但是,我可以通过回复星号来获得创意。

    是否有其他方法可以将星号计为有效输入,并使其达到我的自定义命令语法,或者绕过调用OSDM并自行处理?

1 个答案:

答案 0 :(得分:1)

解决方案是使用自定义命令语法,与现有的全局命令语法分开。

OSDM以“COMMAND”响应,代替“SUCCESS”,这需要在后期处理中有点愚蠢,但它并不太难看。

此:
<date-osdm name="ClaimDate">
<dmname value="ClaimDate"/>
<collection_commandgrammar name="Generic_command.grxml"/>
<collection_dtmfcommandgrammar name="Generic_command_dtmf.grxml"/>

代替这个(语法的名称不是代码重要的,它只是有不同的内容):
<date-osdm name="ClaimDate">
<dmname value="ClaimDate"/>
<collection_parallelgrammar1 name="Generic_inputs.grxml"/>
<collection_dtmfparallelgrammar1 name="Generic_inputs_dtmf.grxml"/>

中提琴!它有效。