大家好,欢迎来到IT知识分享网。
vim ~/.bashrc
运行调试asterisk
1. 运行调试常用命令
./asterisk & 在后台启动asterisk
./asterisk –vvvc 启动asterisk并尽量多的在控制台显示调试信息
./asterisk –r 连接asterisk控制台
set verbose 9999 设置打印详细信息
2.asterisk控制台下常用命令CLI
sip reload 重新加载sip配置信息
sip set debug 设置显示更多的sip信息
sip set debug off关闭显示更多的sip信息
sip show channels 显示所有活动的SIP通道
sip show peers 显示所有已定义的SIP peer
dialplan show 显示拨号方案
dialplan reload重新加载拨打方案
stop gracefully 优雅地停止asterisk
stop now 立即停止运行asterisk
module show 显示所有已加载模块
module loadcdr_radius.so 加载模块cdr_radius.so
module reload cdr_radius.so 重新加载模块cdr_radius.so
module unload cdr_radius.so 卸载模块cdr_radius.so
core show applications 显示所有的应用,比如Dial, Radius, Hangup,Answer等
core show channels 显示所有的通话频道
core show codecs 显示所有支持的编解码器
core show functions 显示所有的功能函数
在asterisk源码目录下运行makemenuselect可以进入模块选择页面,在里面可以选择和去除一些模块。
看完这些目录之后,对其大体的功能也可能会有点认识,还是从启动服务器还是聊起。启动服务器方法很多,我们按照手册中的描述选取一种
Asterisk –cvvvv 具体参数含义请参考手册
也可以通过运行 /usr/sbin/safe_asterisk 来运行。
我们下文的描述就会基于这个简单的拓扑展开讨论,这儿的tel都是sip电话,我们假定tel1号码为808,tel2号码为830,现在的简单需求就是我808能够打通830,实现双向通话。开始配置前,先了解主要配置文件的作用。
/etc/asterisk/asterisk.conf 主要配置文件,
/etc/zaptel.conf 硬件接口的基本层. 修改这个配置文件要用modprobe装载LinuxKernel使用模块.
/etc/asterisk/zapata.conf 为硬件配置Asterisk的接口.
/etc/asterisk/extensions.conf 拨号方案.
/etc/asterisk/sip.conf SIP协议配置文件
/etc/asterisk/iax.conf 呼入和呼出IAX通道
/etc/asterisk/extensions.conf 拨号方案配置文件
/etc/asterisk/moduprobe.conf 加载模块配置文件
拨号方案语法
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()
|
priorities:每个extension都可以有几个步骤,称作priorities。如:
exten=>50001,1,Answer() #编号为1的priority,执行接听电话
exten=>50001,2,Hangup() #编号为2的priority,然后挂电话
|
必须确保priority从1开始并且连续的编号
application:动作,比如:播放声音,接受音频拨号输入或者挂断电话等.
Application
Answer(),Playback()和Hangup()应用
Answer()应用于接听正在响铃通道,它不需要任何参数.
Playback()应用在通道上播放事先录制好的语音文件.指定一个文件名(不带扩展名),可以使用绝对路径与相对路径.
Hangup()应用在于挂断一个正在活动的通道.
Background(),Goto()应用
Background()它也播放事先录制好的语音文件,但它等待按键,然后执行对应extension.
防止Background()后超出按键范围,使用i来解决问题.
防止Background长时间没有选择,使用t来决解问题.
Goto()应用使得在拨号方案的不同部分有序的转移非常容易.
Goto()应用有三个参量分别是context,extension,和priority.即Goto(context,extension,priority)
Dial()应用
Dial()有4个参量,
第一个是:呼叫的被叫地(传输技术/远地资源)如:SIP/50000或Zap/1.可以同时拨打多个通道如:
exten => 601,1,Dial(Zap/1&SIP/50000&IAX/60000)
|
第二个是:超时,单位”秒”.给定超时参量Dial会一直对被叫地进行呼叫,直到超时后才放弃,如果没有给定,将直到接听或主叫挂机,如果呼叫在超时前接听,通道就被桥接,拨号完成
补充:如果超时后被叫地没有应答,则会继续Dial()的extension下一个priority.如果被叫地通道忙,Dial()将转到priority n+101(n是Dial()被调用的priority),如果存在的话,将能够处理被叫地忙的方式接叫未接电话.
第三个是:可选择参量,它会可以影响到Dial()的行为,如:
exten => 601,1,Dial(SIP/50000,30,Ttwr)
|
其中T表示允许主叫用户按”#”转接呼叫;t表示允许被叫用户按”#”转接呼叫;r表示为被叫用户产生振铃声;w用户按”*”键开始录音.
最后一个是:URL参量.如:
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()
|
Extension,不能多于80个字符,也不能少于1个字符(601/602)
——2007-01-05-修改
变量
在拨号方案中使用变量可以减少打字、增加清晰度,也有助于在拨号方案中加入逻辑.
这里的变量有全局变量,通道变量和环境变量.
全局变量:
全局变量应该在extensions.conf文件的开始利用[globals]这个context定义或利用 SetGlobalVar()应用.如:
[globals]
80000=Zap/1
或
[internal]
exten => 123,1,SetGlobalVar(80000=Zap/1)
|
通道变量
通道变量与特定的呼叫相关的变量,通道变量只能在当前呼叫存在其间定义,并只能用于参与该呼叫的通道.通道变量使用 Set()应用来设置.如:
exten => 601,1,Set(80000=Zap/1)
|
环境变量
环境变量是一种在 Asterisk 中访问操作系统环境变量的方法.这些变量以${ENV(var)}形式引用,其中的 var 是所要引用的操作系统环境变量.
综合上面举例:
[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)
|
模式匹配
模式匹配
使用模式及匹配是用不同的字母和符号来代表可能要匹配的数字.模式总是用一个下划线 (_) 开始,它告诉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″后拨打外线,去电时,去除”9″;加放”ignorepat => 9″是为了使按完”9″后还可以听到拨号音;加入”Congestion()”应用是挂机或忙的时候播放快忙音(拥挤声音).
—本地去话拨号—
[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()
|
Includes
Asterisk通过Includes实现在一个context中使用另一个context.格式:includes => context
[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()
|
表达式和可变操作
表达式
表达式是变量,运算符和数值的联合,当你把它们组合到一起就会得到一个表达式结果.在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(argument)}
|
函数也可以嵌套封装其他的函数,如:
${FUNCTION_NAME(${FUNCTION_NAME(argument)})}
|
拨号方案函数
函数常常用来连接set()应用,来取得或者赋值一个变量的值.举个例子,计算一下一个字符串的长度,并读出这个长度;
exten=>123,1,set(TEST=example) ;赋值example变量给TEST
exten=>123,2,saynumber(${LEN(${TEST})}) ;计算出变量TEST长度,并读出长度数
结果是:7
|
如果我们要设置一个动态通道的超时,应该用TIMEOUT()函数.这个函数可以接受以下三个中的一个做为自变量,分别是absolute,digit和response.他们对应的应用是AbsoluteTimeout(),DigitTimeout()和ResponseTimeout().用 timeout()函数,设置数字的超时,我们可以set()函数, 如:
exten=>s,1,set(TIMEOUT(digit)=30)
|
***这个函数中没有${}.它和给一个自变量赋值一样,我们就赋值给一个函数,是不使用${}封装的.
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33305.html