我在下面有一个星号拨号计划示例。它只是主要的(没有扩展或开始),它有 3 个优先级。在分机的第一优先级中,我们将应答呼叫。在第二个中,我们将播放一个名为hello-world.gsm的声音文件,在第三个中,我们将挂断电话。
网络上的一个例子似乎建议以下格式
[incoming]
exten => s,1,Answer()
exten => s,n,Playback(hello-world)
exten => s,n,Hangup()
而不是
[incoming]
exten => s,1,Answer()
exten => s,2,Playback(hello-world)
exten => s,3,Hangup()
为什么会这样?究竟什么是优先级?'n'代表什么
的最佳方法如下
exten => s,1,Answer() ;answer the call
same => n,playback(youfilename) ;understand that Asterisk will pick the best format to play
same => n,Hangup()
使用相同的关键字时,不需要在拨号计划中使用"s"。
Asterisk按数字顺序执行每个优先级,就像在 BASIC 中一样,您可以使用 Goto
跳转到那些优先级。
从Asterisk 1.2开始,您可以使用n
优先级。
n
优先级将上一个优先级加 1。
这使您更加灵活,您可以添加一条线,而无需关心优先级。
n
优先级的另一个好处是,您可以将n
优先级与可选标签一起使用并跳转到该标签,而不是弄乱优先级计数器。
[incoming]
exten => s,1,Answer()
exten => s,n(Start),Background(hello-world)
exten => s,n,Goto(Start)
exten => s,n,Hangup()
有关更多示例,请参阅 GotoIf。
您还可以在Asterisk 1.6+上使用"same"结构节省一些键入:
[incoming]
exten => s,1,Answer()
same => n(Start),Background(hello-world)
same => n,Goto(Start)
same => n,Hangup()
。如果您正在执行大型拨号计划,并且在不同部分(例如IVR)之间进行一些剪切-粘贴-调整,则使用"相同"可以避免分机号码出错。
延伸阅读: https://wiki.asterisk.org/wiki/display/AST/Contexts,+Extensions,+and+Priorities
n
代表下一个优先级。
代替写数字的优先级,我们可以用"n
"来表示下一个节点。
我们也可以使用带有"n
"的标签,例如 exten => s,n(dosomething)
如果我们在dialplan
中使用goto
或gotoif
条件,那么这个标签可以帮助我们导航到不同的"n
"优先级。