2

我是 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)提示:您输入的字母是(INPUT)。这个对吗?按 1 是,按 2 重试。
4)重试或继续下一个字母。等等等等。

如果有人有资源,那么我可以自己偶然发现这个问题的答案,那就太好了!如果有人想要赏金……这也是一种选择!感谢您的阅读!

4

3 回答 3

0

解决此问题的典型方法是只接受两倍于您预期的音调或使用以英镑结尾的输入。然后使用 ECMAscript 或服务器端代码将音调字符串翻译成所需的字母。

于 2011-01-23T03:04:29.140 回答
0

有几种方法可以解决这个问题:

1)您可以只接受语法中的所有 2 位数字并在服务器端进行所有验证/计算。

和/或

2)<filled>在服务器端的部分和字母解码数字中进行一些验证(然后返回结果并与用户检查这是否是预期的字母)。

对于两位数语法,您可以将内置数字语法参数化如下(请注意,URI 方案是特定于平台的,因此您可能需要参考您的语音浏览器的用户手册以确保准确使用的方案)

<field type="digits?length=2">
   <prompt>Please enter the code of the first letter</prompt>
</field>

还有其他方法,例如您也可以使用同一页面上的脚本在客户端进行字母解码,但希望以上内容可以根据您的要求提供一些关于选择什么的想法。

(实际上,经过这么长时间,OP 可能不会寻找这个问题的答案,但希望它可以帮助其他登陆此页面的人寻找类似问题的解决方案)

于 2016-12-26T16:41:26.093 回答
0

最好的方法可能是定义一个将每个值链接到结果字母的语法:

  <grammar mode="dtmf" root="letter">
    <rule id="letter">
      <one-of>
        <item>32<tag>E</tag></item>
        ...
      </one-of>
    </rule>
  </grammar>

另一种方法是让用户输入 2 个字母并使用 EcmaScript 函数对其进行处理,或者使用 tag 。

我打算在 Voximal 中为 Asterisk 的 VoiceXML 解释器添加这样的功能。但是您确定用户可以理解并使用这种方法输入字母吗?

于 2016-12-30T01:51:31.543 回答