我目前正在开发一个将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匹配。”
所以,我认为数字语法有“*”作为烘焙终止字符,并且它覆盖了我的明确声明,只有“#”可以是终止字符:
我坚持使用OSDM,因为它的操作对于我们的应用程序执行事件记录的方式至关重要。但是,我可以通过回复星号来获得创意。
是否有其他方法可以将星号计为有效输入,并使其达到我的自定义命令语法,或者绕过调用OSDM并自行处理?
答案 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"/>
中提琴!它有效。