Dialplan Fundamentals(拨号方案基本纲要)之--Contexts, Extensions, and Priorities
Dialplan是任何成功的Asterisk系统运作必不可少的. 在这个模块中,我们将会协助你学习Asterisk拨号方案的基本组件,以及如何将他们联合在一起来编写你自己的拨号方案.我们也会在拨号方案中添加语音信箱和一个通过姓名拨号的目录功能.
Contexts, Extensions, and Priorities
被组织在拨号方案中的每个部分我们称它为context(上下文). Context是拨号方案的最基本的组织单位,正因为如此,这些context在拨号方案中不同的部分中都保持着相互独立.在拨号方案的每个不同部分之间,我们将会利用context来加强安全边界,也给组群用户提供不同类别的服务.
Context的语法和之前的其他章节提到的配置文件一样,将Context的名字设置在一个方括号内部.例如:
[users]
在每个context内部,我们可以定义一个或多个extensions. 正如前面模块所描述的那样, 一个extension只不过是一个执行动作的命名.当extensions号码被拨打的时候, Asterisk会依次执行每个动作.extension的语法如下:
exten => number,priority,application([parameter[,parameter2...]])
作为一个例子,我们回顾一下之前提到的分机6001. 类似如:
exten => 6001,1,Dial(SIP/demo-alice,20)
在这个案例中, 分机号码是6001,执行优先顺序是1,执行的应用就是Dial(),另外两个在应用里面的参数是SIP/demo-alice和20. 在每个extension内,必须有一个或多个priority. 一个priority 仅仅是一个次序的号码。在一个extension被执行完毕时,将会执行第二个,以此类推。
执行优先号码:
执行优先号码必须以1开始,而且必须按顺序递增。如果Asterisk不能找到下一个优先号码,那么它将会终止这一路呼叫。我们称这个为自动落空。
假定有如下一个例子:
exten =>6123,1,do something
exten =>6123,2,do something else
exten =>6123,4,do something different
在这个案例中,Asterisk将执行优先顺序1和2,但此后将会终止这路呼叫,因为它找不到优先顺序3.
当然优先号码也可以简单的用字母n来代替一个比它前面的优先顺序大的数字。因为n表示next的意思。它总是在前面优先号码的基础上再加1. 需要注意的是:你依然必须明确声明优先顺序1.
exten => 6123,1,do something
exten =>6123,n,do something else
exten =>6123,n,do something different
你也可以在优先顺序后面的圆括号内分配一个标签(或别名) ,正如下面的例子中,标签使得在往后的extension内跳到特定的位置更加容易。
exten =>6123,1,do something
exten =>6123,n(repeat),do something elase
exten =>6123,n,do something different
在这个例子中,我们给第二个优先级分配了一个名为repeat的标签。
包括Asterisk 1.6.2(或往后的)在内的分支版本,利用same=>prefix方法可以用避免重复extension名字/号码 或匹配模式。
exten =>_1NXXNXXXXXX,1,do something
same =>n(repeat),do something else
same =>n, do something different
Cheers!
Joe.Yeung
www.voipevents.com