拨号方案语法
Asterisk的拨号方案在文件extensions.conf中定义(/etc/asterisk/extensions.con) extensions.conf(四部分:context,extension,priorities,application) context:用于对extensions组命名,把拨号方案的不同部分进行分离,免得交织在一起. 表示方法是把名字放在[]的中间,名字只能用a~z,A~Z,0~9,以及连字号和下划线组成(空格不在允许的字符里面,context中不要使用空格).如:[context1],[incoming],[default];所有放在context定义的之后的指令都是这个context一部分,直到下一个context定义的开始. context的一个重要用途就是加强安全性.如果没有仔细设计拨号方案,可能会造成别人盗用你的系统的不良后果. extensions:extensions是asterisk要执行的指令,由来电或通道上所拨数字来触发.可以定义电话分机 extension的语法是单词exten后面跟着一个由等号和大于号组成的箭头,如:exten => extension的名字 一个完整的extension由三部分组成:extensions的名字或号码 priority(每个extension可以有多个步骤,步骤的编号称作priority) |
exten => name,priority,application() |
exten=>50001,1,Answer() #编号为1的priority,执行接听电话 exten=>50001,2,Hangup() #编号为2的priority,然后挂电话 |
exten => 601,1,Dial(Zap/1&SIP/50000&IAX/60000) |
exten => 601,1,Dial(SIP/50000,30,Ttwr) |
exten => 601,1,Dial() exten => 602,1,Dial(Zap/1/5732381) |
exten => 601,1,Dial(SIP/60000,,T) 或 exten => 601,1,Dial(SIP/60000) |
[test]exten => s,1,Answer()exten => s,2,Background(enter-ext-of-person)exten => 601,1,Dial(Zap/1,30,Ttrw)exten => 601,2,Playback(vm-nobodyavail)exten => 601,3,Hangup()exten => 601,102,Playback(tt-allbusy)exten => 601,103,Hangup()exten => 602,1,Dial(SIP/50000,30,Ttrw)exten => 602,2,Playback(vm-nobodyavail)exten => 602,3,Hangup()exten => 602,102,Playback(tt-allbusy)exten => 602,103,Hangup( )exten => i,1,Playback(pbx-invalid)exten => i,2,Goto(test,s,1)exten => t,1,Playback(vm-goodbye)exten => t,2,Hangup() |
[globals] 80000=Zap/1 或 [internal] exten => 123,1,SetGlobalVar(80000=Zap/1) |
exten => 601,1,Set(80000=Zap/1) |
[globals] PSTN=Zap/1 TEST=SIP/80000 [test] exten => s,1,Answer() exten => s,2,Background(enter-ext-of-person) exten => 101,1,Dial(${PSTN},10) exten => 101,2,Playback(vm-nobodyavail) exten => 101,3,Hangup() exten => 101,102,Playback(tt-allbusy) exten => 101,103,Hangup() exten => 102,1,Dial(${TEST},10) exten => 102,2,Playback(vm-nobodyavail) exten => 102,3,Hangup() exten => 102,102,Playback(tt-allbusy) exten => 102,103,Hangup() exten => i,1,Playback(pbx-invalid) exten => i,2,Goto(incoming,s,1) exten => t,1,Playback(vm-goodbye) exten => t,2,Hangup() [default] exten => 101,1,Dial(${PSTN},,r) exten => 102,1,Dial(${TEST},,r) |
X:匹配 0-9 的任何数字; Z:匹配 1-9 的任何数字; N:匹配 2-9 的任何数字; .(句号)通配符,匹配一个或多个字符; [15-7]:匹配1,5,6,7; |
exten => _9XXXXXXX,1,SayDigits(${EXTEN}) ;SayDigits()应用会把所拨的8位extension读出来 exten => _9XXXXXXX,1,SayDigits(${EXTEN:1}) ;只读出来后7位数,其中"1"表示不拨前面1位数 exten => _9XXXXXXX,1,SayDigits(${EXTEN:-1}) ;只读出来最后1位,其中"1"表示只拨出最后1位数 |
---本地去话拨号--- [outbound-local] ignorepat => 9 exten => _9NXXXXXX,1,Dial(Zap/1/${EXTEN:1}) exten => _9NXXXXXX,2,Congestion() exten => _9NXXXXXX,102,Congestion() ---再加入紧急电话拨号--- exten => 9119,1,Dial(Zap/1/119) exten => 119,1,Dial(Zap/1/119) exten => 9110,1,Dial(Zap/1/110) exten => 110,1,Dial(Zap/1/110) ---长途电话拨号--- [outbound-long] exten => _90NXXNXXXXXX,1,Dial(Zap/1/${EXTEN:1}) exten => _90NXXNXXXXXX,2,Congestion() exten => _90NXXNXXXXXX,102,Congestion() |
[internal] include => outbound-local include => outbound-long exten => _80XXX,1,Dial(SIP/${EXTEN},30,r) exten => _80XXX,2,Playback(vm-nobodyavail) exten => _80XXX,3,Hangup() exten => _80XXX,102,Playback(tt-allbusy) exten => _80XXX,103,Hangup() |
$[expression] $[${COUNT} + 1] $[${COUNT} / 2] ;引用变量,必须把这个变量名用花括号"{}"括起来,而且在前面加上美元符号"$" 标示出来 |
${FUNCTION_NAME(argument)} |
${FUNCTION_NAME(${FUNCTION_NAME(argument)})} |
exten=>123,1,set(TEST=example) ;赋值example变量给TEST exten=>123,2,saynumber(${LEN(${TEST})}) ;计算出变量TEST长度,并读出长度数 结果是:7 |
exten=>s,1,set(TIMEOUT(digit)=30) |