Asterisk学习手记:双机E1卡互通实验(转)

asterisk E1卡问题总汇:http://wiki.openvox.cn/index.php/Troubleshooting_of_PRI_cards_Chinese

 

转自:http://blog.csdn.net/zblue78/archive/2007/11/30/1908694.aspx

所需软硬件环境及连接方式

 

所需软硬件环境
这次测试用了两块E1卡,分别是TE110P和TE210P,按卡上的说明跳成E1模式。
两台机器,操作系统CentOS4.X,安装好zaptel,libpri及Asterisk。
安装过程简述如下:
rpm -q kernel-source zlib zlib-devel openssl openssl-devel
;检测上述软件包均已安装,如有缺失不能继续下步工作
# cd zaptel 进入解压后的Zaptel源码目录
# make clean ; make install
# cd ../libpri 进入解压后的libpri源码目录
# make clean ; make install
# cd ../asterisk 进入解压后的asterisk源码目录
# make clean ; make install
# make samples
;生成默认配置文件

(*注意,如果是CentOS4.3系统,由于系统BUG,编译zaptel时会有错误需打内核补丁)
E1卡连接线
E1卡可以用两种连接线连接,分别是75Ω和120Ω的线。本次测试由于没有找到标准的E1连接线,所以只能用100M的网线代替,只要线不要做得太长,应该问题不大。
E1 卡的接口是Rj-48接口。RJ48是用于T1/E1等串行线路的接口,和以太网的RJ45是一样的。对于接不同的传输,信号定义不一样,本次测试我是按 T1/E1 Trunk and Digital Voice Port (RJ-48)方式做的。以下是各个针脚的信号:Pin1 Signal 1 RX + (input) 2 RX - (input) 3 - 4 TX + (output) 5 TX - (output) 6 - 7 - 8 -
做线时需注意,把RJ48口呈 "凸" 这个形状,线序从左往右为87654321。两边做线时需交叉,1<->4,2<->5交换。
线做好后直接连接到两块E1卡便可。
E1卡驱动加载及配置
Zapdata安装好之后,需手动加载E1卡的驱动才行,可将其加入到/etc/rc.local内开机时自动加载。加载方法为:
Modprobe zaptel
Modprobe wct4xxp(TE210P) 或 wcte11xp(TE110P)

配置相关参数需编辑/etc/zaptel.conf (使用TE110P卡时"[]"内容不需要)
span=1,1,0,ccs,hdb3,crc4
[span=2,2,0,ccs,hdb3,yellow]
bchan=1-15,17-31[,32-46,48-62]
dchan=16[,47]
loadzone=cn
defaultzone=cn

配置/etc/asterisk/zapata.conf:
1) 屏蔽中间下面这行的配置
;signalling=fxo_ls
2) 取消文件末尾处下列几行注释符号;
switchtype = euroisdn
signalling = pri_net (或pri_cpe,两台必须配置不同以便实现双机直接互联)
group = 1
channel => 1-15,17-31[,32-46,47-62] (TE110P卡不用配置"[]"内的内容)
配好后可用ztcfg -vvv看看有没有什么错误。
Asterisk简要配置
在配置之前需要先规化一下,两块E1卡需先各设定一个号码,因条件有限,没有分机,所以我们只能用sip终端做为分机去做测试,这样每台机器需配一个sip帐号。我们规化如下:
机器 Sip帐号 E1卡号码
A (TE210P) 00000000 02100000000
B (TE110P) 11111111
11111112 051011111111
051011111112
下面需对Sip和拨号计划分别进行配置。
配置Sip模块并增加sip帐号
在B服务器上的/etc/asterisk/sip.conf文件内,[general]内的bindport=5058可更改监听端口。

在文件最后,加上:
[11111111]
type=friend
username=11111111
secret=11111111
host=dynamic
context=default
nat=yes
canreinvite=no
disallow=all
allow=ulaw
allow=alaw

同样添加11111112账号。

friend表示该帐号可以呼入呼出,username表示帐号,secret表示密码,host表示帐户所在域名或者地址,nat表示是 否进行媒体代理,disallow=all表示禁止主叫的所有媒体类型,allow=ulaw表示允许g711的U律编码,disallow和allow 是或的关系。
   
   在A服务器上建00000000的帐号,其它配置都一样。
配置拨号计划
编辑B服务器上/etc/asterisk/extensions.conf文件,在最后加入:
exten => _021.,1,SetCallerID(051011111111)
exten => _021.,n,Dial(Zap/g1/${EXTEN:0})
exten => _021.,n,Hangup
模 拟环境假设B服务器本地号码为0510开头,A服务器本地号码为021开头,当B服务器上的本地账号拨打021开头号码时,由于不是本地号码,通过E1出 局,转呼叫到A服务器,并送主叫号码为本地051011111111号码方便回拨(当然该号码并不实际存在,下面会对号码处理)
exten => _0510.,1,Dial(SIP/${EXTEN:4},20,rt)
exten => _0510.,n,Hangup
当被叫号为0510开头时,为本地号码,去除0510前缀直转本地SIP账号(条件限制,无直接物理分机,使用软电话模拟)

例如当A服务器转0510开头的出局呼叫到B服务器时,来电打到051011111111时,就自动转到sip帐号11111111上。然后是挂断动作。
而 当从B服务器上呼叫021开头号码如02100000000时,设置透传号码为051011111111,并通过Zap模块的g1拨出去(也就是从E1卡 出局)。g1(group 1,见Zapata.conf配置),$(EXTEN)表示被叫号码,呼叫A服务器上的02100000000号码。

A服务器上对应的,则配置为:
exten => _021.,1,Dial(SIP/${EXTEN:3},20,rt)
exten => _021.,n,Hangup
即上面B服务器送来021开头号码的出局呼叫时(同时也处理本地呼叫,A服务器相同),去除021前缀呼叫本地SIP账号。
exten => _0510.,1,SetCallerID(02100000000)
exten => _0510.,n,Dial(Zap/g1/${EXTEN:0})
exten => _0510.,n,Hangup
同上,A服务器上呼叫0510开头号码时,需出局转给B服务器处理,设置一个021开头的本地账号后通过E1送出呼叫。

Asterisk双机E1简单互通测试
用asterisk -cvvvvvvv在A,B两台服务器上分别启动asterisk,如果没有什么问题将出现&CLI>形式的提示符,可以进行调试和指令发 送(可以通过调整vvv字母的多少表示调试信息显示的多少,用Tab键可以自动补全提示行命令)。
使用软电话以11111111,11111112和00000000账号分别登录到B和A服务器上,下面进行测试。
1111111[1|2]拨打05101111111[2|1],1111111[2|1]软电话振铃,可以通话,模拟本地通话。
1111111[1|2]拨打02100000000,00000000软电话振铃,可以通话,模拟E1拨出(对于11111111账号,B服务器)和呼入(对于00000000账号,A服务器)。
Asterisk拨号计划高级配置
上文作为一个简单的模拟环境,号码的拨号计划配置相对简单,在实际应用环境中可能并不能满足需求,我们有必要对Asterisk在拨号计划配置中对号码和拨号流程的逻辑处理方式有深入了解,以便配置满足实际需求的灵活的拨号计划。
下面列举一个例子,即从B通过E1出局的呼叫时,不是固定送出一个主叫号码,例如本例中可以让发起呼叫的SIP账号的末位是奇数时设置一个主叫号送出,如为偶数,则送出另一个主叫号。
B服务器的配置文件可改为:
exten => _0510.,1,Dial(SIP/${EXTEN:4},20,rt)
exten => _0510.,n,Hangup

exten => _021.,1,Set(lastnum=${CALLERID(num):-1})
exten => _021.,2,GotoIf($[${lastnum} % 2]?5)
exten => _021.,3,SetCallerID(051011111112)
exten => _021.,4,Goto(6)
exten => _021.,5,SetCallerID(051011111111)
exten => _021.,6,Dial(Zap/g1/${EXTEN:0})
exten => _021.,n,Hangup

可以在B的 sip.conf中再增加几个账号,测试可知,当SIP账号末位是奇数时,呼叫02100000000时,在02100000000上可以看到主叫号码是 051011111111,而末位是偶数时,则为051011111112,下面,将对上例中的配置进行分析,分简要介绍Asterisk的命令,函数, 变量和表达式语法等相关知识。
配置文件中的,_0510.等用来匹配被叫号码,可以是一个直接号码,也可以用通配符进行匹配,其通配符格式可查看其官方文档。
匹配号码之后的数字则表示前述号码匹配成功后的处理步骤,按数字编号依次一条一条执行,但也可以通过Goto等跳转命令进行跳转执行,数字不可重复和编号 错误,否则会导致拨号计划逻辑错误,如未使用Goto等跳转命令(跳转命令需要真实的编号值),可以从编号2起用n代替(或在Goto用到的实际编号之后 使用),系统自动递增序号免除手工管理麻烦。
最后一项则是Asterisk拨号计划的处理命令字段,在命令字段中可以使用命令、函数、变量和表 达式,可以简单的只有一个命令,如Hangup(不带参数的命令),挂断电话,也可以是Dial(Zap/g1/${EXTEN:0}) (带参数的命令),拨打Zap通道通过E1呼出电话,参数中又有变量${EXTEN},还可以有表达式,如GotoIf($[${lastnum} % 2]?5)中的$[${lastnum}%2],用"$[...]"包含起来的字段即表达式。

全部的函数说明资料可以查看:
http://www.voip-info.org/wiki/index.php?page=Functions
常用的函数有:
CALLERID 设置或读取主叫信息(主叫号码,描述,ANI,DNIS,RDNIS等)
CHANNEL 设置或读取通话通道的参数(如某条ZAP通道的状态)
CUT 类似SUBSTR的函数,一般用于号码的截取(号码连接不需使用函数)
ENV 设置或读取系统环境变量值
IF 判断表达式的真假
LEN 计算字符串长度(一般用于判断是否为0检测有无主叫号码)
MATH 进行数学表达式的计算
MD5 计算MD5
REGEX 正则匹配,格式("<reg ex>" <data>)
SET 最常用的,自定义变量的设置

全部模块的命令说明资料可以查看:
http://www.voip-info.org/wiki/index.php?page=Asterisk+-+documentation+of+application+commands
常用模块常用命令有:
普通呼叫处理
Wait 等待一定时间
WaitExten 等待用户按键直到超时时间
Answer 在主叫方表现为,电话已接通
Busy 在主叫方表现为,忙
ChanIsAvail 检测某个通道是否可用
Dial 拔打某个通道
Hangup 在主叫方表现为,电话已挂断
Ringing 在主叫方表现为,听到振铃

流程控制
Goto 直接跳转到某个拨号计划的某个数字编号(默认为当前拨号计划)
GotoIf 配置条件判断,如果为真才跳转到指定的数字编号
GotoIfTime 在指定时间条件满足时跳转到指定的数字编号
GotoSub 跳转到指定的Sub(子计划),可以在数字后增加计划名,与普通使用数字编号跳转不同的是在Sub中可以用Return返回主干
GotoSubIf 同上,进行条件判断后跳转到Sub
Return Sub中返回主干

声音控制
Background 播放背景音乐
Playback 播放声音,与背景音乐不同的是,用户需听完播放后方能继续拨号计划的执行
SayUnixTime 播报时间
SayAlpha 读字符
SayDigits 读数字,一个数字一个数字读
SayNumber 读数值,与前一个不同的是,本命令能识别数值单位
Record 录音

其它
MeetMe 参加会议
VoiceMail 语音信箱

系统预定义的变量可以参考:
http://www.voip-info.org/wiki/index.php?page=Asterisk+variables
${CALLERID} 主叫信息 ,取号码${CALLERID(num)}
${DATETIME} 当前时间信息
${EXTEN} 被叫号码

表达式语法逻辑可参考:
http://www.voip-info.org/wiki/view/Asterisk+Expressions
基本格式:$[expr1 operator expr2]
逻辑操作:
"|","&","!"

比较操作:
"=","!=","<",">","<=",">="

算术操作
"+","-","*","/","%"

正则操作:
"expr1 : regex","expr1 =~ expr2"

其它:
"expr1 ? expr2 :: expr3 "

 

Rj-48线序:http://hi.baidu.com/zizizhe/blog/item/0e86313efd7bd13071cf6c75.html

Powered by Zoundry Raven

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值