A-A+

SIP、IAX内外网与PSTN线路及手机互相通讯的实例

2010年05月05日 学习随笔 暂无评论 阅读 1 次

为各位还在摸索中的同仁们贴上一例相对比较完整的实验:
(2.0beta的实验有些问题,因此我以最稳定的1.2.3示范)
在此次试验中,并没有讨论不安装板卡,直接由SIP Trunk连接其他SIP服务器来使得SIP用户拨打外部电话的问题。
本篇仅用于讨论使用FXO卡测试内外线进出的相关问题。

一、实验环境
1. Trixbox服务器硬件
(1) 奔腾III500MHz / 192MB SDRAM / 13G HardDisk / BX主板 with 4PCI插槽
(2) 在两个PCI插槽中各安装一片X100P FXO克隆卡
2. 电话线路及话机
(1) 两路普通PSTN市话线路分别接入两片FXO卡的Line口
(2) 若干路其他PSTN线路及模拟话机(可选项)
(3) IAX及SIP Softphone软件,例如X-Lite及KIAX等
(4) 手机两部(可选项 )
3. 宽带网络ADSL环境
Linux代理及防火墙服务器外网卡接了Linksys宽带路由器,内网卡与Trixbox服务器相连,拓扑结构如下:
Switch-----Linux NAT Server-----Linksys ADSL Router-----Internet   ~- ~- ~- ~- ~- ~   PC with IAX/SIP softphone (remote)
|
|---------------Trixbox Server===============2 PSTN Line=====
|---------------PC with SIP softphone (local)
|---------------PC with IAX softphone (local)
|......

二、安装过程
1. Trixbox1.2.3.iso镜像文件、刻录光盘、启动、回车自动安装,清除所有原硬盘数据
千万不可接上其他有资料的硬盘,这种方式所有硬盘的数据都会丢失,即便你在BIOS中屏蔽了你的其他硬盘!!!

(如果你没有多的硬盘来做实验,例如在已经装有Windows的硬盘上加装Trixbox系统,光盘启动后就敲expert回车吧,自定义分区安装的方式与直接回车的最后结果对于Trixbox系统来讲,除了留住原有数据及Windows外没有什么区别。不过需要更长时间而已。 选择安装所有包,重启后解压光盘上的trixbox1.2.3.tar.gz到/var/trixbox_load,然后运行/var/trixbox_load/install_all.sh即可,这种手动模式有的机器运气不好,在munin模块安装时可能需要多等待1-2个小时,需要耐性,呵呵)
2. 定义时区、root密码后,一切按照默认选项,机器第一次重启后取出光盘,第二次重启后完成安装,停在登陆模式

三、调试配置各参数
1. 需要升级 FreePBX及清除Kernel Panic错误隐患的朋友们,可以参考dynaguy兄弟相应的帖子进行第一步动作,我的实例没有对FreePBX升级,但是由于机器会发生重启死机,于是首先修改/etc/rc.d/rc6.d/K92zaptel解决隐患!
2. 由于安装了两片FXO卡,则修改/etc/zaptel.conf,加入两行蓝色语句如下:
fxsks=1
fxsks=2
loadzone        = us
defaultzone     = us
3. 修改/etc/asterisk/zapata.conf,加入三行蓝色语句如下:
[trunkgroups]
[channels]
busydetect=yes
language=en
context=from-zaptel
signalling=fxs_ks
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=no
echotraining=800
rxgain=0.0
txgain=0.0
group=0
channel=1
callgroup=1
pickupgroup=1
immediate=no
faxdetect=incoming
group=1
channel=2
到此为止,需要手动修改配置文件的部分已经全面完成!

四、通话试验
下面的操作全部由FreePBX图形化操作完成,非常方便:

1. PC软电话之间互相通话
(1) FreePBX --> Tools --> Module Admin --> 选择全部模块 --> Enable --> Submit
(2) FreePBX --> Setup --> Extensions 添加四个分机号用于PC软电话测试 (SIP分机号2201、2202; IAX2分机号2101、2102)
(3) 为外网用户拨入做好SIP及IAX的防火墙端口映射
此时内外网软电话之间完全可以正常通话

2. 由内部分机或任意地方的软电话分机拨打其他PSTN电话或手机,即内线拨打外线:
(1) 系统已经默认设置了9作为outside拨号规则,如果你只装了一片FXO卡,这时系统无需作调整,应该已经可以拨打外线电话及手机了。
例如使用X-Lite登陆系统,注册2201分机后,先拨9再直拨外线号或手机即可成功。
注意: 如果你接在FXO卡上用来测试的线路是电信汇线通,那么就要拨2个9再拨外线号了。第一个9是Trixbox要求的,第二个9是电信汇线通呼叫外线要求的。其他类型的线路原理相同。一般来说使用家用电话线路测试则只需拨第一个9。
(2)我使用两片FXO卡以解决呼叫转移的测试,此时我们最好定义一下呼出路由使用的Trunk顺序
先修正两个ZAP Trunk的设置:
在FreePBX中修改系统默认的Trunk Zap/g0的名称为1,即:FreePBX --> Setup --> Trunks --> Trunk Zap/g0 --> Zap Identifier (trunk name)的值由g0改为1
然后再添加一个Zap Trunk,将Zap Identifier (trunk name)的值设定为2
最后在Outbound Routes中修改0号路由9_outside的设置:将Trunk Sequence的值定为ZAP/2,即:我们固定由2号线路/FXO卡做呼叫转移(呼出)的动作,那么我们拨打1号线路/FXO卡时,如果设置了呼叫转移,Trixbox就能把拨到1号线路的电话由2号线路转移出去了!
至少到现在为止,我还不能将拨到1号线路的电话还是由1号线路转移出去。我个人觉得PSTN信号的单FXO卡是无法完成的!

3. 由外部PSTN线路或手机呼叫Trixbox所连接的两个PSTN电话号码
此时呼叫,系统不会正确处理,不信你用软电话拨打7777或直接用手机拨打Trixbox的两条线路看看。

我们现在来进行最精彩的实验部分:
实验目标:外线呼叫,首先由一级IVR处理,给出语音提示(欢迎致电xxxx,请直拨分机号,或请拨0由总机为您服务。联系小张,请按1;联系小王,请按2;客服座席排队测试,请按3;试听背景音乐,请按4;返回,请按5)
按0,来电转移至某个固定电话或手机A;
按1,由二级IVR处理,给出语音提示(办公电话请按1;手机请按2;返回请按0)
按2,由二级IVR处理,给出语音提示(办公电话请按1;手机请按2;返回请按0)
按3,由自定义的Quere处理
按4,播放一段音乐(播放音乐过程中,按0重新播放、按1返回一级IVR)
按5,回至一级IVR

各位,先准备wav格式的语音提示文件吧,最简单的方法就是直接反复使用X-Lite拨打*77录音,然后拨打*99测试,满意则将/tmp/unmamedivrrecording.wav通过scp拷贝出来改名保存吧。这样你可以很快的制作出一系列的语音文件留以后用。

具体步骤:
先添加System Recordings:强烈建议你直接使用upload with .wav format方式,然后给这些录音在系统中命名,例如Main IVR Menu, Layer2 Menu等

然后通过Digital Receptionist添加IVR
注意Enable Direct Dial很重要,允许用户直接拨打分机号

再建立一个Queue用于排队测试,例如让这些分机加入排队
2101
2102
2201
2202
2804
提交后系统会自动将格式修正:
2101,0
2102,0
2201,0
2202,0
2804,0

以上操作,还有多层IVR菜单应用,通过FreePBX操作,应该没有什么难度,我再次就不细述了。如果需要,我另外再补充。
注意别忘了最后设置Inbound Route,将所有来电设置到第一级IVR上,即首层欢迎菜单上。这样才能使外线拨入后首先听到语音提示。

下面看看重点难题:如何将外线呼叫转移到另外的外线(或手机)上?
有两种方法:
1. 建立Queue,然后在Queue中的static agents中输入需要转接的目的外线号,记得前面加9,然后将这个Queue放至IVR中处理。
例如将前台的号码前面加9后定义为QueueQT,然后把QueueQT做为Welcome IVR的按0动作

2. 建立一个无用户使用的SIP或IAX分机号,然后为该号码设置Follow Me, 在Follow Me中的Extension List中输入9加外线号再加#结束,然后把这个Follow Me项目提供给IVR处理。
例如将前台的号码前面加9后面加#后定义为FollowQT,然后把FollowQT做为Welcome IVR的按0动作

有没有更直接、更简便的方法?我不知道。

如何将外线呼叫转移到另外的外线(或手机)上?
我是这样做的:
FreePBX-->Setup-->Extensions-->Custom

QUOTE:
Extension Number: 188
dial: SIP/DigiVoice/6042222188
Submit-->red bar Save

上面,DigiVoice是一个SIP Trunk ,6042222188则是手机号,我取其后3位作为分机号。(当然,你已可以干脆建一个6042222188分机!)

如果从内部分机拨打188,TrixBox则接通此手机。

这样,外线打进来的电话,你就可转到188,于是TrixBox就会拨转到手机。

因为这时手机号已经几乎等同于分机号,所有对分机的操作几乎也就对手机都适用。试试看,手机也可以放在Queue里。但也还是有一些例外,像打到手机的电话就不能直接转回倒另一个分机(还是有办法实现,但要复杂一点)。

同理,你也可以用ZAP(PSTN)或IAX来实现,分机设置时要用 ZAP/ZAP Trunk/手机号 或 IAX/IAX Trunk/手机号
谢谢dynaguy提出的第三种方法(自定义分机号),非常好!
我用下面这种格式通过了测试:
Local/9我的手机号码@outbound-allroutes

同时,想问一个别的问题:
平时,电信汇线通群内的用户如果使用支持转接键的电话机,是可以将接通的外部来电由R键转给另一个用户(四位内线短号)的,Trixbox接到来电时可否也作类似的动作呢?即:

如果我的实验环境是在一个汇线通群内部,只利用一片FXO卡在做转接时,可否仅仅送一个短叉簧音(即:<=0.1秒的叉簧中断信号)+分机短号给局端,模拟转接键R的功能?这样我的Trixbox就可以纯粹作为一个话务台了,接到来电将其转移至别的电话后立即释放通道。

现在我的Trixbox放在公司汇线通群内,想把它替换原来的前台话务台,可是用户打入电话后,虽然能听到语音提示,也能选按分机号码,但转接成功后该线路通道一直没有释放,此时再有电话打进,则忙音了。除非前面那个电话讲完。

这是不理想的。因为话务台只需要负责将来电信号成功转接至另外的电话,而不是一只占用通道直至通话结束。

本文来源:http://hi.baidu.com/%E5%B9%BD%E5%85%B0%E6%BA%AA%E8%B0%B7/blog/item/26a7fbdd53db8ee477c6380c.html

给我留言

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录