1

我目前正在开发一个使用带有 GRXML 语法的 Nuance OSDM 的 VXML 2.0 应用程序。

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

说“取消”有效;绕过了 Date 语法,激活了命令语法,代码按我的预期运行。然而,星号是另一回事。当我运行调试调用并按下电话上的星号键时,它被视为不匹配。梳理 OSDM 手册,Nuance Date OSDM 上的 DTMF 条目似乎是通过内置的 DTMF 数字语法运行的,范围为 2-8 位。

该手册还指出:“如果指定了并行文法,OSDM 将 DTMF 输入与 DTMF 集合文法和并行文法相匹配。如果 DTMF 字符与两种文法都匹配,则返回并行文法匹配。”

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

  1. 我按下星号。
  2. DTMF 数字语法被激活。
  3. DTMF 数字语法导致空白,因为星号是术语字符,并且没有进行其他输入。
  4. 空白是OOG,因为长度是2-8位。
  5. 返回不匹配。

我坚持使用 OSDM,因为它的操作对于我们的应用程序执行事件记录的方式至关重要。但是,我可以通过回复星号来获得创意。

是否有另一种方法可以将星号计为有效输入,或者让它达到我的自定义命令语法,或者绕过对 OSDM 的调用并自己处理它?

4

1 回答 1

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"/>

还有中提琴!有用。

于 2011-06-28T14:43:21.190 回答