我的 VXML/GRXML IVR 应用程序的一部分播放 2-3 分钟的音频,然后通过 a 运行 customcontext Nuance OSDM <subdialog>
,然后作为菜单。
这会导致识别器出现超时错误,因为 OSDM 正在侦听 2-3 分钟的提示,而不是在提示结束后才开始侦听。
我记得很久以前修复了一个类似的问题,但不记得我是如何修复它的。
是否有用于获取或超时的 VXML 或 OSDM 属性,我可以使用它来“强制”识别器等到 OSDM 提示自己开始播放?
我的 VXML/GRXML IVR 应用程序的一部分播放 2-3 分钟的音频,然后通过 a 运行 customcontext Nuance OSDM <subdialog>
,然后作为菜单。
这会导致识别器出现超时错误,因为 OSDM 正在侦听 2-3 分钟的提示,而不是在提示结束后才开始侦听。
我记得很久以前修复了一个类似的问题,但不记得我是如何修复它的。
是否有用于获取或超时的 VXML 或 OSDM 属性,我可以使用它来“强制”识别器等到 OSDM 提示自己开始播放?
在 VoiceXML 中,提示元素执行时并没有真正播放提示,它们是排队的。
仅播放队列中的提示
VoiceXML 2.0 规范中的更多详细信息,4.1.8 Prompt Queuing and Input Collection
如您所见,没有可用于显式刷新提示队列的 VoiceXML 指令。诀窍是在某处指定一个 fetchaudio 以满足#2。
所以我建议你通过在元素上指定一个fetchaudio
属性来强制播放提示队列。subdialog
由于您真的不想听到 fetchaudio,它可以是一个 10 毫秒的静音音频文件。
<block>
<prompt>
<audio src="audio/very_long_message.wav">
</prompt>
</block>
<subdialog src="osdm/custom" fetchaudio="audio/10ms_silence.wav"/>
...
</subdialog>
请注意,用户将无法在长前缀提示期间进行强插,但可以在 OSDM 子对话框中这样做。
鉴于您已声明您正在使用 Nuance 和 OSDM,我将回答 Nuance Recognizer 9 和 Nuance Speech Server。
这通常会发生,因为当识别器在一段时间内没有收到任何请求时,它认为呼叫结束并删除会话。
NSSserver.cfg 中有配置(Nuance Speech Server 配置):
server.mrcp1.rtsp.sessionTimeout VXIInteger 60000
或
server.mrcp2.rtsp.sessionTimeout VXIInteger 60000
我相信会有一个权衡。虽然您可以将此值加倍或三倍,但这可能意味着您的语音许可证在通话结束后将被占用更长的时间。我猜你选择的值取决于你的负载、提示的长度以及你看到这个的频率。
虽然我们仍然偶尔会遇到这种情况,但通常当调用者使用 DTMF 时,我们已经显着减少了这些实例。