在星号拨号计划中,为什么当 dtmf 输入是两个或多个数字并且如果在播放提示时按下一个数字,它会进入 i 分机(无效分机),就像单个数字 dtmf 输入的情况一样,如果按数字作为提示正在播放它移动到正确的扩展?谢谢
3 回答
这是另一个示例,其中用户必须输入 4 位 PIN 才能继续拨号方案:
[Login]
exten = s,1,Playback(/var/lib/asterisk/sounds/custom/login)
exten = s,n,Set(rightPIN=1234)
exten = s,n,Read(inPIN,/var/lib/asterisk/sounds/custom/enterPIN,4)
exten = s,n,GotoIf($["${inPIN}" = "${rightPIN}"]?pin-accepted,1)
; Didn't go to pin-accepted, so play badPIN and hangup
exten = s,n,Playback(/var/lib/asterisk/sounds/custom/badPINgoodbye)
exten = s,n,Hangup()
; correct pin, play something
exten = pin-accepted,1,Playback(/var/lib/asterisk/sounds/custom/something)
...
Read() 应用程序的第三个参数是等待多少位数。有关阅读的更多信息,请参阅Asterisk Wiki:阅读
编辑:还有一个名为Authenticate的拨号方案应用程序做得很好。
我建议您从阅读以下内容开始:
http://astbook.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/asterisk-CHP-5-SECT-1.html
或 ORelly 的书“Asterisk the future of telephony”。
这将取决于您的 diaplan 是如何配置的,但听起来您正在使用 background() 应用程序。Background() 将侦听 DTMF,然后在第一次明确匹配时路由到当前上下文中的扩展。
例如,如果您在上下文中有 1、2 和 100,那么按 2 将直接路由到 2(因为它是明确的。)按 1 将等待超时,因为 background() 不知道您是要去 1 还是 100 . 超时后,它将路由到 1。按 3 将转到 i 特殊扩展,因为当前上下文中没有以 3 开头的扩展。
如果所需的行为是从您的 IVR 上下文路由到您的一部内部电话,那么您需要在 IVR 上下文中包含电话上下文:
[phones]
exten => 100,1,Dial(SIP/phone1)
exten => 101,1,Dial(SIP/phone2)
...
[IVR]
exten => s,1,Background(message)
exten => 1,1,Queue(Sales)
exten => 2,1,Queue(Support)
exten => i,1,Playback(pbx-invalid)
include => phones
官方文档中的更多信息: https ://wiki.asterisk.org/wiki/display/AST/Application_BackGround