我对VXML(以及一般的编码)是全新的,显然我正在尝试做的是......不正常,但希望可以做到。
我理解使用VXML的DTMF输入的原理概念:
<grammar mode="dtmf"><![CDATA[ (*|0|1|2|3|4|5|6|7|8|9)<2-31> ]]></grammar>
<prompt>something here</prompt>
<noinput-nomatch-filled>conditions</noinput-nomatch-filled>
我要做的是采取多项措施,允许DTMF根据其在拨号盘上的位置输入字母。您可以通过首先拨打信件所在的号码(2-9)以及该信件的位置(1-4)来实现此目的。
例如:拨号盘上的“E”为3和2。
我完全不知道这在VXML中是如何工作的。我想做的是:
1)提示:请输入您的三个字母代码。请输入你的第一个字母
2)期望两个DTMF输入第一个数字在2和9之间,第二个数字在1和4之间。基于此逻辑(33 = F,94 = Z),字母被设置。
3)提示:您输入的字母是(输入)。它是否正确?按1表示是,2表示重试
4)重试或转到下一个字母。等等。
如果有人有资源,我可以自己偶然发现答案,那就太好了!如果有人想要赏金......这也是一个选择!谢谢你的阅读!
答案 0 :(得分:0)
解决此问题的典型方法是接受两倍于您期望的音调数量或使用磅接收输入。然后使用ECMAscript或服务器端代码将音调字符串转换为所需的字母。
答案 1 :(得分:0)
有几种方法可以解决这个问题:
1)您可以接受语法中的所有2位数字,并在服务器端进行所有验证/计算。
和/或
2)在<filled>
部分进行一些验证,在服务器端进行字母解码(然后返回结果,并与用户核对,如果这是预期的字母)。
对于两位数语法,您可以按如下方式对内置数字语法进行参数化(请注意,URI方案是特定于平台的,因此您可能需要参考语音浏览器的用户手册以确保要使用的确切方案)
<field type="digits?length=2">
<prompt>Please enter the code of the first letter</prompt>
</field>
还有其他方法,比如您也可以在同一页面上使用脚本在客户端进行字母解码,但希望上面根据您的要求提供了一些选择。
(实际上,OP可能不会在这么长时间内寻找这个问题的答案,但希望它可以帮助那些登陆此页面的其他人寻找类似问题的解决方案)
答案 2 :(得分:0)
最好的方法是定义一个将每个值链接到结果字母的语法:
<grammar mode="dtmf" root="letter">
<rule id="letter">
<one-of>
<item>32<tag>E</tag></item>
...
</one-of>
</rule>
</grammar>
另一种方法是让用户输入2个字母并使用EcmaScript函数处理它,或使用标记。
我计划在Asterisk的Voximal the VoiceXML解释器中添加这样的功能。 但是你确定用户能够理解并使用这种方法输入字母吗?