1

在星号拨号计划中,为什么当 dtmf 输入是两个或多个数字并且如果在播放提示时按下一个数字,它会进入 i 分机(无效分机),就像单个数字 dtmf 输入的情况一样,如果按数字作为提示正在播放它移动到正确的扩展?谢谢

4

3 回答 3

4

这是另一个示例,其中用户必须输入 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的拨号方案应用程序做得很好。

于 2013-03-12T17:56:15.723 回答
0

我建议您从阅读以下内容开始:

http://astbook.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/asterisk-CHP-5-SECT-1.html

或 ORelly 的书“Asterisk the future of telephony”。

于 2013-03-13T06:52:36.197 回答
0

这将取决于您的 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

于 2013-03-12T14:58:08.953 回答