Trixbox下使用x100p卡做FXO通道外呼的实现

项目背景:
    最近朋友介绍一个小项目,其中涉及到网络电话,要实现pc2phone的拨号通话,自然用到了VOIP相关的技术。今天先把文章的整体信息写出来,后面再完善,对于Asterisk我了解还很少,不准确之处大家多多提点。
概要介绍:
    在这之前没接触过这方面的东西,google一番之后认识了Asterisk,以及在其基础上集成封装的Trixbox。通过了解,Trixbox自动安装了Asterisk以及其所需的软件包、硬件驱动等,同时集成了FreePBX,包括web管理界面,另外还有CDR记录在mysql中。
    要实现pc2phone有多种方式,一种是用SIP接入语音网关,一种是用IAX接入提供商的Asterisk,一种是申请电信运营商的IP电话通道(如公用电话、IC电话等,这些有特别的计费反极信号,在后面会提到),还有一种就是用自家的电话线(这种就不能按IP资费计费了,走的是家用电话资费)。因为一期主要是做功能演示,为了坚决的贯彻节约成本的原则,买了一块Wildcard X100P 卡(在淘宝上花了98大洋),插上电话线就开工了。
实现过程:
    第一步,安装Trixbox 。网上有Trixbox的ISO下载,刻成光盘,从光驱启动即可。在这个地方我遇到郁闷了我两天的问题。我当时贪心,下载的是最新版本trixbox- 2.6.0.18-i386.iso。安装过程没有问题,但启动过程中出现找不到引导区的问题。后来一步一步降版本,终于找到trixbox- 2.4.2.0.iso 才完成安装。同时要注意的是,这是基于CentOS 5 Linux Kernel 2.6.18-53.1.4.e15内核的安装版本,安装过程中会自动全部格式化掉硬盘。切记切记。
    第二步,配置。Trixbox在安装过程中就对Asterisk进行了默认的配置,新增两个SIP类型的extension就可实现pc2pc的通话了,终端使用的是xlite。(具体的配置过程后面补上来,网上也有很多的)
    第三步,开发自己的软终端电话。对于Asterisk来说,SIP、IAX以及ZAP IP电话等都可以与之通信。我使用的是IAX,原因有两个,一是在网上找到了开源的库,二是IAX对于NAT的穿透比SIP容易,因为其信令和数据都用的同一端口4569。当然,Trixbox已经实现了NAT的穿透,总之各有优缺点。
    第四步,FXO外呼的实现。由于刚接触星号,很多底层以及细节的东西都不是很了解,所以在这个地方遇到很多问题。按照我解决的过程来描述。Trixbox自带安装了zap的驱动,所以在PCI插上x100p之后,即可检测到该卡了。
    在CLI控制台输入 zap show status可看到:
    trixbox1*CLI> zap show status
    Description                              Alarms     IRQ        bpviol     CRC4     
    Wildcard X100P Board 1                   OK         0          0          0        

    说明检测到了X100P,同时电话线也是正常连接的。Trixbox默认了9开头的外呼规则(outbound routes),名为 9_outside,可在web管理UI上看到,trunk sequence默认的是走的ZAP。于是一时振奋不已,连忙9加上自己的手机号,多次测试,却都不能接通。现象就是在xlite上看到接通了,但是手机并没有响。。。论坛帖子如下:
    http://www.trixbox.com.cn/viewthread.php?tid=2372&extra=page%3D1
    在群里也问了很多朋友,都没能解决。网上说的都是默认的就可以打出去了,怎么我偏偏遇着就打不出去呢,让我还一阵心酸啊。最后在一个日文网站上发现这几句(无意中搜到的,虽然对日本有成见,但这次着实很感激):
    原文地址是:http://ttanimu.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=amonth%3D7%26ayear%3D2007

X100Pというアナログモデムカードを利用するとAsteriskPSTNと接続できます。

これのセットアップを行います。

genzaptelconf

を実行します。これで

ztcfg -vv

の実行結果が

1 channels configured.

なら成功です。

 

X100Pからプッシュ契約していないアナログ回線で外線発信する場合は

"/etc/asterisk/zapata-auto.conf"

channel => 1

の行の直前に

pulsedial=true

を入れておけば発信できるようになります。

 

    红色的部分非常重要!!!是添加在/etc/asterisk/zapata-auto.conf文件中的,全部的文件内容如下:

; Autogenerated by /usr/sbin/genzaptelconf -- do not hand edit
; Zaptel Channels Configurations (zapata.conf)
;
; This is not intended to be a complete zapata.conf. Rather, it is intended
; to be #include-d by /etc/zapata.conf that will include the global settings
;

; Span 1: WCFXO/0 "Wildcard X100P Board 1"
;;; line="1 WCFXO/0/0"
signalling=fxs_ks
callerid=asreceived
group=1
;context=from-pstn
pulsedial=true
context=default
channel => 1

       不认识日文,但估计应该就是那个所谓的判断反极信号的配置了,否则无法在x100p上实现外呼。另外,绿色部分是默认的context,跟zap show chennels里面的pseudocontext不一致,换成红色的才能呼出去,这个我还没有明白为什么。于是外呼问题解决。然后同时另一个问题又出来了,手机是ring了,但是接听没有声音。网上搜索出来无声音的情况,都是SIP在NAT后的问题,也就是 RTP穿越NAT的问题。而我的问题是终端与服务器在同一内网,Asterisk通过电话线外呼,所以与NAT并没有关系。问题集中在zap相关的配置上了。

    /etc/zaptel.conf是自动更新的,主要是配置硬件信息,我只有一个FXO口,所以其中包含以下内容:

# Autogenerated by /usr/sbin/genzaptelconf -- do not hand edit
# Zaptel Configuration File
#
# This file is parsed by the Zaptel Configurator, ztcfg
#

# It must be in the module loading order


# Span 1: WCFXO/0 "Wildcard X100P Board 1"
fxsks=1

# Global data

loadzone        = cn
defaultzone     = cn


    其中的 两个 = cn 是我手动改的,默认是us 。

    /etc/asterisk/zapata.conf 是配置硬件口和通道映射,以及相关通道属性的。

;
; Zapata telephony interface
;
; Configuration file

[trunkgroups]

[channels]

language=cn
context=from-zaptel
signalling=fxs_ks

rxwink=300              ; Atlas seems to use long (250ms) winks
;
; Whether or not to do distinctive ring detection on FXO lines
;
;usedistinctiveringdetection=yes

usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
cancallforward=yes
callreturn=yes
callprogress=yes
echocancel=yes
echocancelwhenbridged=no
;echotraining=800
hanguponpolarityswitch=yes
rxgain=0.0
txgain=0.0
group=1
callgroup=1
pickupgroup=1
immediate=no
busydetect=yes
busycount=5
toneduration=100


;faxdetect=both
faxdetect=incoming
;faxdetect=outgoing
;faxdetect=no

;Include genzaptelconf configs
#include zapata-auto.conf

;channel => 1

group=1

;Include AMP configs
#include zapata_additional.conf


    这个问题也是查了很多,都没能解决,结果在不是该问题的帖子里面找到了解决方法。以上红色的是参考http://www.voipuser.org/forum_topic_10148.html进行添加的,默认的是没有的


     再进入到CLI控制台,

trixbox1*CLI> zap restart
 Destroying channels and reloading zaptel configuration.
  == Parsing '/etc/asterisk/zapata.conf': Found
  == Parsing '/etc/asterisk/zapata-auto.conf': Found
  == Parsing '/etc/asterisk/zapata_additional.conf': Found
    -- Registered channel 1, FXS Kewlstart signalling
    -- Automatically generated pseudo channel

     至此,外呼通话实现。初次呼出的接通时间比较长,在10秒以上。。。。这个还待解决。今天先写到这里,后面再来完善。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值