Asterisk译为星号(*)在很多应用中被用做通配符,Astrisk做为PBX系统的完美名称,原因之一是Asterisk可以连接数目庞大的接口类型,包括:
1模拟接接口,如你的电话线或模拟电话. 2数字线路,如T-1和E-1线路 3Voip协议,如SIP和IAX 目前正式版本是IAX2,但是IAX1的所有格式都已经停掉.所以当说到IAX都是特拽IAX2 使用接口配置文件 1.Zaptel.conf:硬件接口基层配置,我们将建立一个FX0和一个FXS通道. 2.zapata.conf:硬件配置Asterisk的接口. 3.extension.conf:拨号方案文件. 4.sip.conf:配置SIP协议的文件 5.iax.conf:配置呼入和呼出IAX通道的文件 FXO与FXS通信 区别:区别简单,就在于连接的那端提供拨号音.FXO不生成拨号音,而是接收.FXS端口提供拨号音和震铃电压,在有呼叫的时候提醒用户.两者接口都提供双向通讯(同时双方向的通讯传输). 如果Asterisk有个兼容FXO端口,就可以把电话线接入这端口,可以使用这根电话线呼叫和接收电话呼叫.同理,如果有个FXS端口,可以连接一部模拟电话,Asterisk就可以呼叫这部电话,可能也可以呼叫.(端口:通过配置使用的信令进行定义) FXS卡必须像中心局(CO)进行运转,使用FXO信令.同理,FXO卡连接CO,就意味着它需要像终端进行运转,使用FXS信令. Zaptel配置(FXO) 在/etc/zaptel.conf文件,用于配置硬件,可以定义FXS端口与FXO信令的配置
信令协议:Loop start(ls),ground start(gs),kewlstart(ks),使用ks外信令协议,把fxoks中的ks替换ls或gs,Asterisk的模拟电路推荐ks信令协议.
******编辑完zaptel.conf文件,需要使用/sbin/ztcfg -vv装载配置到硬件(不须要详细输出可以省略-vv);修改信令方法需要重启.在编辑sip.conf和iax.conf文档后,分别需要装载chan_iax2.so和chan_sip.so Zapata配置
允许zaptel和其它设备通过PCI硬件安装到系统中,编辑udev
Dialplan配置 基本的拨号方案,使用Echo()校验工作通道双向通讯;
SIP
SIP(会话初始协议),通常用于VOIP电话,进行呼叫建立,呼叫协商,呼叫结束.它帮助两个端互相通认,但它不处理媒体;当呼叫建立后,他通过实时传输协议(RTP)在电话A到电话B直接传输媒体. SIP和RTP SIP是一个应用层的信令协议.他使用的端口是5060(通常)进行通信.SIP可以通过UDP和TCP传输层协议进行传输.Asterisk目前没有TCP用于传输SIP信息. RTP用于端点间传输媒体(语音),Asterisk中RTP使用大数字的无特权端口(默认10,000到20,000) SIP优点:普通的被接受和结构灵活.其它的VOIP协议还有H.323,IAX,MGCP. SIP配置 /etc/asterisk/sip.conf文件中:
用户户类型是用于认证呼入呼叫;端类型用于呼出呼叫;朋友类型两种都用.(这个常用在sip.conf与iax.conf中用到)
IAX IAX(Inter Aasterisk eXchange)协议通常用于服务器间通信.IAX和SIP协议最大区别在于媒体(语音)在端点之间传输的方式不同. Asterisk默认情况是在5060端口接收SIP信令,在10000-20000端口接收RTP(媒体)流.而IAX所有的信令和媒体流都通过一个端口4569进行传输.这种方式的好处是IAX协议能更适合在NAT相关拓扑的应用. IAX用户习惯对进入PBX系统的呼叫进行鉴权和处理.对从PBX系统呼出的呼叫,Asterisk应用IAX的iax.conf文件的端点进入(条目)对远端进行鉴权) 通过iax.conf设置进行呼叫的鉴权和处理:
--------以上是IAX入局配置,下面配置出局IAX连接-------- 在iax.conf设置呼出条目
在extensions.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由三部分组成:
应用(或者命令),针对呼叫完成一些动作 这三个部分用英文逗号分开,如:
priorities:每个extension都可以有几个步骤,称作priorities。如:
必须确保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.可以同时拨打多个通道如:
第二个是:超时,单位"秒".给定超时参量Dial会一直对被叫地进行呼叫,直到超时后才放弃,如果没有给定,将直到接听或主叫挂机,如果呼叫在超时前接听,通道就被桥接,拨号完成 补充:如果超时后被叫地没有应答,则会继续Dial()的extension下一个priority.如果被叫地通道忙,Dial()将转到 priority n+101(n是Dial()被调用的priority),如果存在的话,将能够处理被叫地忙的方式接叫未接电话. 第三个是:可选择参量,它会可以影响到Dial()的行为,如:
其中T表示允许主叫用户按"#"转接呼叫;t表示允许被叫用户按"#"转接呼叫;r表示为被叫用户产生振铃声;w用户按"*"键开始录音. 最后一个是:URL参量.如:
任何参量都可以为空如:
综合上面举个例子:
Extension,不能多于80个字符,也不能少于1个字符(601/602) ------2007-01-05-修改 变量 在拨号方案中使用变量可以减少打字、增加清晰度,也有助于在拨号方案中加入逻辑. 这里的变量有全局变量,通道变量和环境变量. 全局变量: 全局变量应该在extensions.conf文件的开始利用[globals]这个context定义或利用 SetGlobalVar()应用.如:
通道变量 通道变量与特定的呼叫相关的变量,通道变量只能在当前呼叫存在其间定义,并只能用于参与该呼叫的通道.通道变量使用 Set()应用来设置.如:
环境变量 环境变量是一种在 Asterisk 中访问操作系统环境变量的方法.这些变量以${ENV(var)}形式引用,其中的 var 是所要引用的操作系统环境变量. 综合上面举例:
模式匹配 模式匹配 使用模式及匹配是用不同的字母和符号来代表可能要匹配的数字.模式总是用一个下划线 (_) 开始,它告诉Asterisk 要做模式匹配,这不是一个 extension 名字.(这意味着不能使用下划线作为 extension 名字的开始字符.) 模式匹配语法 在下划线之后,可以使用一个或者多个下面列出来的字符:
使用${EXTEN}通道变量:Asterisk会把通道变量${EXTEN}设置为所拨的数字.通过sayDigits()检测拨到号码内容如:
去话拨号(PSTN) 举例:按"9"后拨打外线,去电时,去除"9";加放"ignorepat => 9"是为了使按完"9"后还可以听到拨号音;加入"Congestion()"应用是挂机或忙的时候播放快忙音(拥挤声音).
Includes Asterisk通过Includes实现在一个context中使用另一个context.格式:includes => context
表达式和可变操作 表达式 表达式是变量,运算符和数值的联合,当你把它们组合到一起就会得到一个表达式结果.在Asterisk 中,表达式总是以$符合作为开始,以方括号“[]”来扩住表达式.如:
运算符 布尔型运算符 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).如果要引用函数的值,和引用变量的值一样,用美元符号“ $” 加上花括号“{}” 括起函数表达式.如:
函数也可以嵌套封装其他的函数,如:
函数常常用来连接set()应用,来取得或者赋值一个变量的值.举个例子,计算一下一个字符串的长度,并读出这个长度;
如果我们要设置一个动态通道的超时,应该用TIMEOUT()函数.这个函数可以接受以下三个中的一个做为自变量,分别是absolute,digit 和response.他们对应的应用是AbsoluteTimeout(),DigitTimeout()和ResponseTimeout().用 timeout()函数,设置数字的超时,我们可以set()函数, 如:
***这个函数中没有${}.它和给一个自变量赋值一样,我们就赋值给一个函数,是不使用${}封装的. |
|