拨号方案基础
Application
exten => 601,1,Dial(Zap/1&SIP/50000&IAX/60000)
第二个是:超时,单位"秒".给定超时参量Dial会一直对被叫地进行呼叫,直到超时后才放弃,如果没有给定,将直到接听或主叫exten => 601,1,Dial(SIP/50000,30,Ttwr)
其中T表示允许主叫用户按"#"转接呼叫;t表示允许被叫用户按"#"转接呼叫;r表示为被叫用户产生振铃声;w用户按"*"键开始录音.
最后一个是:URL参量.如:
exten => 601,1,Dial(SIP/60000@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()
Extension,不能多于80个字符,也不能少于1个字符(601/602)
------2007-01-05-修改
[globals]80000=Zap/1或[internal]exten => 123,1,SetGlobalVar(80000=Zap/1)
通道变量
通道变量与特定的呼叫相关的变量,通道变量只能在当前呼叫存在其间定义,并只能用于参与该呼叫的通道.通道变量使用 Set()应用来exten => 601,1,Set(80000=Zap/1)
环境变量
环境变量是一种在 [globals]PSTN=Zap/1TEST=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)
模式匹配
模式匹配
使用模式及匹配是用不同的字母和符号来代表可能要匹配的数字.模式总是用一个下划线 (_) 开始,它告诉Asterisk 要做模式匹配,这不是一个 extension 名字.(这意味着不能使用下划线作为 extension 名字的开始字符.)
模式匹配语法
在下划线之后,可以使用一个或者多个下面列出来的字符:
X:匹配 0-9 的任何数字;Z:匹配 1-9 的任何数字;N:匹配 2-9 的任何数字;.(句号)通配符,匹配一个或多个字符;[15-7]:匹配1,5,6,7;
使用${EXTEN}通道变量:Asterisk会把通道变量${EXTEN}设置为所拨的数字.通过sayDigits()检测拨到号码内容如:
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位数
去话拨号(PSTN)
举例:按"9"后拨打---本地去话拨号---[outbound-local]ignorepat => 9exten => _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()
Includes
Asterisk通过Includes实现在一个context中使用另一个context.格式:includes => context
[internal]include => outbound-localinclude => outbound-longexten => _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()
表达式和可变操作
表达式
表达式是变量,运算符和数值的联合,当你把它们组合到一起就会得到一个表达式结果.在Asterisk 中,表达式总是以$符合作为开始,以方括号“[]”来扩住表达式.如:
$[expression]$[${COUNT} + 1]$[${COUNT} / 2];引用变量,必须把这个变量名用花括号"{}"括起来,而且在前面加上美元符号"$" 标示出来
运算符
布尔型运算符
expr1 | expr2("|"或运算):如果expr1的值是真值,那么运算符将赋expr1的值,否则将赋expr2的值.
expr1 & expr2("&"与运算):如果两个表达式的值都为true,运算符将赋值为expr1,否则赋值为0.
expr1{=,>,>=,<,<=,|=}expr2:如果自变量都是整数,这些运算符将得到一个整数的比较结果;否则,它们将得到字符串的结果.如果给定的关系是正确地,这个结果是1,否则就是0.
数学运算符
expr1{+, -}expr2:运算符能得到整数自变量的加法或者减法地结果.
expr1{*,/,%}expr2:运算符能分别得到整数自变量的乘法,除法或是余数的结果.
正则表达式运算符
expr1:expr2:运算符匹配 expr2到expr1,这里的expr2必须是一个正则表达式.
***Asterisk 的分析程序非常简单,因此在你输入时,在运算符和其他数值之间至少需要一个空格.
拨号方案函数
拨号方案函数可以使你增加更多的${FUNCTION_NAME(argument)}
函数也可以嵌套封装其他的函数,如:
${FUNCTION_NAME(${FUNCTION_NAME(argument)})}拨号方案函数
函数常常用来连接set()应用,来取得或者赋值一个变量的值.举个例子,计算一下一个字符串的长度,并读出这个长度;
exten=>123,1,set(TEST=example) ;赋值example变量给TESTexten=>123,2,saynumber(${LEN(${TEST})}) ;计算出变量TEST长度,并读出长度数结果是:7
如果我们要设置一个动态通道的超时,应该用TIMEOUT()函数.这个函数可以接受以下三个中的一个做为自变量,分别是absolute,digit和response.他们对应的应用是AbsoluteTimeout(),DigitTimeout()和ResponseTimeout().用 timeout()函数,设置数字的超时,我们可以set()函数, 如:
exten=>s,1,set(TIMEOUT(digit)=30)
***这个函数中没有${}.它和给一个自变量赋值一样,我们就赋值给一个函数,是不使用${}封装的.