在Asterisk 1.6 上安装TE110P

所谓五分钟热度或者热情澎湃大概描述的就是我.在Asterisk1.6上安装X100P的成功,让我领略到了VoIP-PSTN的美妙,也促使我想进一步尝试更加企业级的T1/E1-VoIP的念头.说做就做,马上去淘宝上买了一块TE110P,装上电脑,马上安装起来.
注意,本文是在在Asterisk1.6上安装X100P的基础上进行的,所以没有完整的安装过程,只有每个步骤的结果和错误的总结.有问题的可以参考前文.


Step 1 硬件安装
这次学乖了.先从底层硬件驱动开始安装.开机以后直接运行dahdi_cfg,结果如下.

$ dahdi_cfg -vv
DAHDI Tools Version - 2.2.0
Notice: Configuration file is /etc/dahdi/system.conf
line 0: Unable to open master device '/dev/dahdi/ctl'
1 error(s) detected

运行asterisk,察看dahdi的status和channels情况,结果如下.

*CLI> dahdi show status
Description Alarms IRQ bpviol CRC4 Fra Codi Options LBO
Digium Wildcard TE110P T1/E1 Card 0 UNCONFI 0 0 0 CAS Unk YEL 0 db (CSU)/0-133 feet (DSX-1)
*CLI> dahdi show channels
Chan Extension Context Language MOH Interpret Blocked State
pseudo default default In Service

基本情况完全一样,除了dahdi show status显示的板卡名称变成了Digium Wildcard TE110P T1/E1 Card(娃哈哈,企业级啊-,-b).
需要注意的是这台机器我成功的安装了DAHDI Complete,所以/etc/dahdi/modules的内容略有不同,所有的板卡代号都有,具体如下.

bash$ cat /etc/dahdi/modules
# Contains the list of modules to be loaded / unloaded by /etc/init.d/dahdi.
#
# NOTE: Please add/edit /etc/modprobe.d/dahdi or /etc/modprobe.conf if you
# would like to add any module parameters.
#
# Format of this file: list of modules, each in its own line.
# Anything after a '#' is ignore, likewise trailing and leading
# whitespaces and empty lines.
# Digium TE205P/TE207P/TE210P/TE212P: PCI dual-port T1/E1/J1
# Digium TE405P/TE407P/TE410P/TE412P: PCI quad-port T1/E1/J1
# Digium TE220: PCI-Express dual-port T1/E1/J1
# Digium TE420: PCI-Express quad-port T1/E1/J1
wct4xxp
# Digium TE120P: PCI single-port T1/E1/J1
# Digium TE121: PCI-Express single-port T1/E1/J1
# Digium TE122: PCI single-port T1/E1/J1
wcte12xp
# Digium T100P: PCI single-port T1
# Digium E100P: PCI single-port E1
wct1xxp
# Digium TE110P: PCI single-port T1/E1/J1
wcte11xp
# Digium TDM2400P/AEX2400: up to 24 analog ports
# Digium TDM800P/AEX800: up to 8 analog ports
# Digium TDM410P/AEX410: up to 4 analog ports
wctdm24xxp
# X100P - Single port FXO interface
# X101P - Single port FXO interface
wcfxo
# Digium TDM400P: up to 4 analog ports
wctdm
# Digium B410P: 4 NT/TE BRI ports
wcb4xxp
# Digium TC400B: G729 / G723 Transcoding Engine
wctc4xxp
# Xorcom Astribank Devices
xpp_usb

修复Error的方法照旧,将/etc/modprobe.d/dahdi.blacklist中wcte11xp那行去掉,重新运行/etc/init.d/dahdi,结果如下.

xiuxiu@sh-c2-pc:/etc/dahdi$ sudo /etc/init.d/dahdi start
Loading DAHDI hardware modules:
WARNING: All config files need .conf: /etc/modprobe.d/dahdi.blacklist, it will be ignored in a future release.
WARNING: All config files need .conf: /etc/modprobe.d/dahdi, it will be ignored in a future release.
wct4xxp: done wcte12xp: done wct1xxp: done wcte11xp: done wctdm24xxp: done wcfxo: done wctdm: done wcb4xxp: done wctc4xxp: done xpp_usb: done
Running dahdi_cfg: done.
xiuxiu@sh-c2-pc:/etc/dahdi$ sudo dahdi_cfg -vv
DAHDI Tools Version - 2.2.0
DAHDI Version: 2.2.0.2
Echo Canceller(s): MG2
Configuration
======================
SPAN 1: CCS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1)
Channel map:
Channel 01: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 01)
Channel 02: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 02)
Channel 03: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 03)
Channel 04: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 04)
Channel 05: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 05)
Channel 06: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 06)
Channel 07: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 07)
Channel 08: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 08)
Channel 09: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 09)
Channel 10: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 10)
Channel 11: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 11)
Channel 12: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 12)
Channel 13: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 13)
Channel 14: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 14)
Channel 15: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 15)
Channel 16: D-channel (Default) (Echo Canceler: none) (Slaves: 16)
Channel 17: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 17)
Channel 18: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 18)
Channel 19: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 19)
Channel 20: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 20)
Channel 21: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 21)
Channel 22: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 22)
Channel 23: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 23)
Channel 24: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 24)
Channel 25: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 25)
Channel 26: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 26)
Channel 27: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 27)
Channel 28: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 28)
Channel 29: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 29)
Channel 30: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 30)
Channel 31: Clear channel (Default) (Echo Canceler: mg2) (Slaves: 31)
31 channels to configure.
Setting echocan for channel 1 to mg2
Setting echocan for channel 2 to mg2
Setting echocan for channel 3 to mg2
Setting echocan for channel 4 to mg2
Setting echocan for channel 5 to mg2
Setting echocan for channel 6 to mg2
Setting echocan for channel 7 to mg2
Setting echocan for channel 8 to mg2
Setting echocan for channel 9 to mg2
Setting echocan for channel 10 to mg2
Setting echocan for channel 11 to mg2
Setting echocan for channel 12 to mg2
Setting echocan for channel 13 to mg2
Setting echocan for channel 14 to mg2
Setting echocan for channel 15 to mg2
Setting echocan for channel 16 to none
Setting echocan for channel 17 to mg2
Setting echocan for channel 18 to mg2
Setting echocan for channel 19 to mg2
Setting echocan for channel 20 to mg2
Setting echocan for channel 21 to mg2
Setting echocan for channel 22 to mg2
Setting echocan for channel 23 to mg2
Setting echocan for channel 24 to mg2
Setting echocan for channel 25 to mg2
Setting echocan for channel 26 to mg2
Setting echocan for channel 27 to mg2
Setting echocan for channel 28 to mg2
Setting echocan for channel 29 to mg2
Setting echocan for channel 30 to mg2
Setting echocan for channel 31 to mg2

OK.到了这里硬件驱动安装部分就应该没问题了.

Step 2 配置Asterisk
因为换了一台机器,所以需要在chan_dahdi.conf中加入如下语句.

#include dahdi-channels.conf

重新运行asterisk,察看结果.

*CLI> dahdi show status
Description Alarms IRQ bpviol CRC4 Fra Codi Options LBO
Digium Wildcard TE110P T1/E1 Card 0 RED 1 0 0 CCS HDB3 CRC4 0 db (CSU)/0-133 feet (DSX-1)
*CLI> dahdi show channels
Chan Extension Context Language MOH Interpret Blocked State
pseudo default default In Service
1 from-pstn default In Service
2 from-pstn default In Service
3 from-pstn default In Service
4 from-pstn default In Service
5 from-pstn default In Service
6 from-pstn default In Service
7 from-pstn default In Service
8 from-pstn default In Service
9 from-pstn default In Service
10 from-pstn default In Service
11 from-pstn default In Service
12 from-pstn default In Service
13 from-pstn default In Service
14 from-pstn default In Service
15 from-pstn default In Service
17 from-pstn default In Service
18 from-pstn default In Service
19 from-pstn default In Service
20 from-pstn default In Service
21 from-pstn default In Service
22 from-pstn default In Service
23 from-pstn default In Service
24 from-pstn default In Service
25 from-pstn default In Service
26 from-pstn default In Service
27 from-pstn default In Service
28 from-pstn default In Service
29 from-pstn default In Service
30 from-pstn default In Service
31 from-pstn default In Service
*CLI>

OK了.到了这里Te110P的E1 PRI线路就通了.你可以配置自己的dial plan,然后修改dahdi-channels.conf中的配置来导入E1线路.Oh yeah~
问题总结
1.无法拨通,Asterisk本身没有debug信息.察看log,发现

ERROR[2077] chan_dahdi.c: Unknown signalling method 'pri_cpe' at line 14.

解决方案:主要原因是你的libpri没有安装好.重新下一个最新的libpri版本重新编译安装,应该就会好.


2.Asterisk有debug信息.但是无法默认接入Default Dialplan,听到”Welcome…”的语音.
主要是被X100P宠坏了,认为就应该直接可以拨入default的dialplan. 修改/etc/asterisk/dahdi-channels.conf,将context从from-pstn修改成default就可以了.

 

在Asterisk1.6上安装X100P

玩Asterisk有一段时间了,于是想在ethernet的基础上接触一下Analog, T1/E1方面的内容,也算是对本身工作的一种补充.
X100P是Asterisk入门级的FXO卡(其实就是最便宜板型中最便宜的一款-,-),热血沸腾了一把就在淘宝上花了100元买了一块.
网上X100P安装配置的文章很多,不过大多数都是基于Asterisk1.4之前的版本,使用Zaptel.而Asterisk之后使用的是DAHDI,所以配置上有一些差异,这让我着实费了一些功夫,也让我决心把我的安装过程写下来.
DAHDI与Zaptel配置文件的对应关系

/etc/zaptel.conf <-> /etc/dahdi/system.conf
/etc/asterisk/zapata.conf <-> /etc/asterisk/chan_dahdi.conf

Step 0 前提
软件要求:

sudo apt-get install cvs make gcc g++ libncurses5-dev libssl-dev zlib1g-dev make build-essential libxml2-dev

硬件要求:当然是把X100P插好咯.-,-


Step 1 安装libpri

wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.10.2.tar.gz
tar zxvf libpri-1.4.10.2.tar.gz
cd libpri-1.4.10.2
sudo make; sudo make install

Step 2 安装DAHDI Linux 和 DAHDI Tools

wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/releases/dahdi-linux-2.2.1.tar.gz
tar zxvf dahdi-linux-2.2.1.tar.gz
cd dahdi-linux-2.2.1
sudo make;sudo make install


wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases/dahdi-tools-2.2.1.tar.gz
tar zxvf dahdi-tools-2.2.1.tar.gz
cd dahdi-tools-2.2.1
sudo make;sudo make install
sudo make config

这步作完系统会提示发现DAHDI设备

install -D dahdi.init /etc/init.d/dahdi
/usr/sbin/update-rc.d dahdi defaults 15 30
System start/stop links for /etc/init.d/dahdi already exist.
DAHDI has been configured.
List of detected DAHDI devices:
pci:0000:01:02.0 wcfxo+ 1057:5608 Wildcard X100P
run 'dahdi_genconf modules' to load support for only
the DAHDI hardware installed in this system. By
default support for all DAHDI hardware is loaded at
DAHDI start.

Step 3 运行dahdi_genconf
上一步作完以后提示你运行这个命令.这也是dahdi和zaptel的一个比较大的不同.在dahdi中,dahdi_genconf会根据侦测到的dahdi设备自动为你进行配置.涉及到的配置文件包括以下几个.


/etc/dahdi/modules

# Autogenerated by /usr/sbin/dahdi_genconf (Dahdi::Config::Gen::Modules) on Fri Jan 22 06:45:44 2010
# If you edit this file and execute /usr/sbin/dahdi_genconf again,
# your manual changes will be LOST.
wcfxo

/etc/dahdi/system.conf

# Autogenerated by /usr/sbin/dahdi_genconf on Fri Jan 22 12:45:37 2010
# If you edit this file and execute /usr/sbin/dahdi_genconf again,
# your manual changes will be LOST.
# Dahdi Configuration File
#
# This file is parsed by the Dahdi Configurator, dahdi_cfg
#
# Span 1: WCFXO/0 "Wildcard X100P Board 1" (MASTER)
fxsks=1
echocanceller=mg2,1
# Global data
loadzone = us
defaultzone = us

如果你是在国内使用,请将上面的loadzone和 defaultzone修改成cn.


/etc/asterisk/dahdi_channels.conf

; Autogenerated by /usr/sbin/dahdi_genconf on Fri Jan 22 12:45:37 2010
; If you edit this file and execute /usr/sbin/dahdi_genconf again,
; your manual changes will be LOST.
; Dahdi Channels Configurations (chan_dahdi.conf)
;
; This is not intended to be a complete chan_dahdi.conf. Rather, it is intended
; to be #include-d by /etc/chan_dahdi.conf that will include the global settings
;
; Span 1: WCFXO/0 "Wildcard X100P Board 1" (MASTER)
;;; line="1 WCFXO/0/0 FXSKS (SWEC: MG2)"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 1
callerid=
group=
context=default

按照注释说明,dahdi_channels.conf是dahdi_genconf自动生成的.包含dahdi设备需要的默认信息.然后是希望用户在才chan_dahdi.conf中include这个file的.
实际情况是,网上的帖子基本都是实际在chan_dahdi.conf中修改完事的.没人理睬这个file.我一开始配置的时候也是这么做的.直到写这篇博客的时候重读注释才发现了这个问题.其实只要简单的做下面这一步就OK了.


修改/etc/asterisk/chan_dahdi.conf,在末尾加上如下语句

#include dahdi-channels.conf

Step 4 安装Asterisk

wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.2.1.tar.gz
tar zxvf asterisk-1.6.2.1.tar.gz
cd asterisk-1.6.2.1
sudo ./configure;

这步会帮你检查Asterisk需要的Library,理论上按照Step 0的话这便会顺利通过.如果你需要额外的Function(例如curl,postgresql)的话,可以在这边获得相应的提示.

sudo make
sudo make install
sudo make samples

运行Asterisk
好了.验收成果的时候来了.

sudo asterisk -vvvvc
.....
*CLI>

Asterisk启动成功.然后查看一下硬件状况.

dahdi show status
Description Alarms IRQ bpviol CRC4 Fra Codi Options LBO
Wildcard X100P Board 1 OK 0 0 0 CAS Unk YEL 0 db (CSU)/0-133 feet (DSX-1)
*CLI>

可以看到Asterisk已经读到了我的X100P.然后查看一下dahdi channels的情况.

*CLI> dahdi show channels
Chan Extension Context Language MOH Interpret Blocked State
pseudo default default In Service
1 from-pstn default In Service
*CLI>

其中”1″就是我们新添加的Dahdi Channel.
注意,如果你板卡检测到了但是Channel没有显示,很可能是chan_dahdi.conf的配置问题.


一切都OK了.连上电话线,给自己打一个电话吧.默认配置就可以听到美丽的”Welcome to Open Source PBX Asterisk…”.
问题一
使用DAHDI Complete Source Tarball编译失败.
解决办法:说实话这个问题很诡异,因为之前都没有问题.我的解决办法就是使用DAHDI Linux Source Tarball和DAHDI Tools Source Tarball分别编译安装,就没有这个问题了.
问题二

bash$ dahdi_cfg
Notice: Configuration file is /etc/dahdi/system.conf
line 0: Unable to open master device '/dev/dahdi/ctl'
1 error(s) detected

解决办法:修改 /etc/modprobe.d/dahdi.blacklist.去掉wcfxo这行.该文件是用于禁止加载某一类型的dahdi驱动的,默认禁止所有类型.

参考链接
配置X100P卡详细步骤
X100P安装手册 (转)
ASTERISK1.4.0+REDHAT9.0+X100P安装
Trixbox下使用x100p卡做FXO通道外呼的实现DAHDI配置文件与zaptel的差别

 

Asterisk conntected with 7962G

之前比较偷懒,通过sip trunk连接CUCM和Asterisk,实现了7962G->CUCM->Asterisk->Xlite这样一个方案. 现在直接配置7962G和Asterisk进行连接,遇到了各种各样怪异的问题,才发现这实在是不容易.写个步骤下来,不然自己都怕忘记.
Step 1 下载7962G SIP Firmware Image
如果你有CCO帐号,可以直接访问http://www.cisco.com/cgi-bin/tablebuild.pl/ip-7900ser,获取相应的Image文件,注意后缀名是cop.
cop文件其实是一个tar压缩文件,修改后缀名以后可以打开了.注意其中有一个xxxxx.loads的文件.xxxxxx代表的就是当前Firmware Image的版本号.
Step 2 下载配置文件
我已经把配置文件模板放在了我的网站上,可以通过configs下载,其中包含三个文件.

  • XMLDefault.cnf.xml:默认配置文件,其中是各个型号Phone的默认版本号.
  • dialplan.xml:顾名思义,dialplan配置文件.默认情况下不需要配置.
  • SEPXXXX.cnf.xml:Phone的配置文件,

Step 3 配置XMLDefault.cnf.xml
打开XMLDefault.cnf.xml,添加下面的语句

<loadInformation5 model="Cisco 7962">SIP42.9-0-2S</loadInformation5>

标签中的内容就是之前Firmware Image的版本号.

Step 4 添加sip帐号
如果是Trixbox应该可以自动在界面添加,我用的是纯Asterisk(-,-),修改sip.conf

[555]
type=friend
secret=555
callerid="555"
host=100.100.3.85
nat=no
qualify=yes
canreinvite=no ; Typically set to NO if behind NAT
disallow=all
allow=gsm ; GSM consumes far less bandwidth than G711-u (ulaw)
allow=ulaw
allow=alaw
context=cloud

Step 5 配置SEPXXXX.cnf.xml
这是最主要的配置部分,具体的reference可以参考
http://www.voip-info.org/wiki/index.php?page_id=3242
首先要把该文件名中的XXXX用Phone的Mac地址替换,例如修改成SEP001B2C24CC.cnf.xml.
然后打开该文件,有几个地方需要修改.

  • ipAddr1:修改成Asterisk的IP
  • sipIpAddr1:修改成Asterisk的IP
  • backupProxy:修改成Asterisk的IP
  • emergencyProxy:修改成Asterisk的IP
  • outboundProxy:修改成Asterisk的IP
  • line::proxy:修改成Asterisk的IP
  • line::featureLabel:sip帐号的显示名称
  • line::authName:sip帐号的用户名
  • line::authPassword:sip帐号的secret
  • loadInformation:Firmware Image的版本号

另外每个line都代表了一个号码,可以按照需要自己添加或者删除.
Step 5 搭建TFTP Server
我用的是Ubuntu的tftpd,简单方便,这里就不多说了.
把cop文件解药后的所有文件以及三个配置文件都放到tftp的folder下.
Step 6 运行起来
最后要做的就是让Phone通过tftp下载这些Firmware Image, Configuration File.
可以用的方法主要有两种:
1)修改DHCP,在dhcpd.conf中添加如下语句

option tftp-server-addr 100.100.3.70;

2)通过Phone->Settings->Network Configuration->IPv4 Configuration,按”**#”解除锁.修改”Alternative TFTP”设置成”Yes”,修改”TFTP Server”成你TFTP Server的IP地址.

怎么样,试试看?让你的Cisco TNP Phones连接Asterisk吧.同样的办法我也把7975G连上了,打电话肯定没问题,ohyeah.

F&Q:
Q1:Phone在Registering这步就走不下去了怎么办?
A1:在sip.conf中配置”nat=never”,把SEPXXX.cnf.xml中sipProxies中各个标签的内容都设置成空,应该就没问题了.
Q2:Unable to create channel of type ‘SIP’ (cause 20 – Unknown) ?
A2:可能的问题是你把sipProxies中内容全部删除了,其实是标签留着,内容删除.或者在sip.conf中将host设置成静态IP也可以.
Q3:有噪音怎么办?
Q3:我解决的办法是删除sip.conf中”dtmfmode=rfc2833″.

参考链接:http://www.asterisktutorials.com/cisco-7970-ip-phone/
参考链接:http://www.greenwireit.com/blog/2008/12/a-guide-a-faq-how-to-unbrick-the-cisco-7970g/

 

基于Trixbox的HUDLite客户端和服务器端的安装

Trixbox的Wiki上是这么描述HUDlite的.

The new HUDlite client is a very cool piece of technology, with HUDLite you can see the status of all of the extensions on your phone system and know at a glance if someone is busy or available. The new version of HUDlite takes this further and adds instant messaging so you can text chat with everyone which adds to everyone’s productivity. HUDlite also adds new Outlook connectivity so you can dial from within Outlook and incoming calls are compared to your Outlook contacts so you know who is calling you.

个人体验下来, HUDLite作为一种新的SoftPhone Application,很好的整合了Phone,IM甚至Outlook Contact等若干通讯方式.统一通讯解决方案一直是我的研究学习方向,HUDLite正对我的胃口,二话不说,动手安装.

HUDLite服务端的安装
HUDLite安装参考:http://www.trixbox.org/hudlite-setup-guide
HUDLite与Trixbox的集成非常的方便,如果你的Trixbox能够连接互联网的话,按照上面Link中的方法通过几步设置就可以实现了.我的Trixbox放在内网,主要的区别就是需要自己下载安装用的rpm,没办法享受Trixbox的福利了.下面就是我的具体安装步骤.

HUDLite服务端的安装文件:http://yum.trixbox.org/centos/5/RPMS/repodata/repoview/
1)下载安装文件.在上面的连接中寻找hudlite-server和tbm-hudadmin两个安装包,下载到本地.
2)将安装文件上传到Trixbox上,通过rpm安装.

rpm -ivh *.rpm

3)访问http://IP/maint/(默认帐号密码:maint/password),这时候左上方Server Status中HUD Server的指示条已经变成了绿色.选择PBX->Hudlite Admin. HUDLite Server会自动为每个用户生成一个随机的密码,你可以按照自己的需求进行修改,例如用户sip200,密码sip200.

OK,服务端的设置这样就搞定了.下面就是客户端.

HUDLite客户端的安装
HUDLite客户端:http://www.hudlite.org/downloads.htm
1)客户端安装.HUDLite为各种平台都提供了相应的客户端程序.按照上面的连接下载适合你电脑的客户端,点击安装.
2)客户端配置.第一次HUDLite客户端安装好以后会提示你配置客户端,相关的参数含义如下

  • Username:用户名,例如Sip200
  • Password:密码,HUDLite Server默认自动生成,也可以在服务端修改,例如sip200
  • Server Name: Trixbox服务器IP
  • Server Password: 就是’Password’
  • Server Port: 6600

就这些了,运行HUDLite Client,很酷的界面(-,-anyway),可以看到其他Extension的状况.如果你选择安装了TAPI功能,可以直接拨打其他用户或者发送message. 期待它的后续进展.

 

Adhearsion初体验

我是偶尔在Asterisk: The Future of Telephony上看到Adhearsion的介绍的.以下是摘自Adhearsion主页http://adhearsion.com/的一段对Adhearsion的定义.

Adhearsion is a new way to write voice-enabled applications. It's not just an API or library — it's a fully-featured framework, the first of its kind, designed for maximal code reuse and intuitiveness. The name "Adhearsion" is a combination of "adhesion" and "hear" because Adhearsion shines best when integrating technologies with voice.

简单的说就是基于Asterisk AGI,一套完整的应用于Voice Application的Ruby框架.VoIP Application + Ruby,还有什么比这个更适合我呢?二话不说,马上开始试用.
Adhearsion Getting Start


Adhearsion的主页还是非常的人性化的。不仅提供了完全免费,电话测试系统,使得你建立的Adhearsion应用可以方便的进行调试运行,还提供了多种Voice客户端的选择,包括Skype, 各种SIP Phones甚至In-browser Phone。按照下面的步骤,你可以轻松的建立你的第一个Adhearsion Application.
Step 1:注册Adhearsion帐号
默认会加入Adhearsion的Mailing List,不算很热闹,偶尔会有一些邮件。Adhearsion帐号同时也是电话系统的测试帐号,有了它你就可以连接到Adhearsion提供的SandBox上了.

Step 2:安装Ruby, RubyGems, Adhearsion
Ruby和Gems的安装就不多说了.安装Adhearsion也就是一句话的事情.感谢伟大的Ubuntu和RubyGems.

sudo gem install adhearsion

Step 3:创建你的第一个Adhearsion应用
类似Rails,Adhearsion会创建一整套基础部件,解决了类似Adhearsion服务器启动,停止等工作,使得你可以专心在Adhearsion应用的开发上.

ahn create my_first_app

Step 4:启用Sandbox Component
Adhearsion中有一个Component的概念.Component类似插件的意思,代表了一组功能的集合.所有的Components都放在my_first_app/components目录下.其中Sandbox就是一个包含了连接注册Adhearsion电话测试系统的Component.

cd my_first_app
ahn enable component sandbox

修改my_first_app/components/sandbox/sandbox.yml,按照你在Ahearsion注册的帐号密码修改该文件,这样你无需编写任何代码就可以连接注册到Adhearsion电话测试系统了.

username: xxxxxxx
password: xxxxxxx

Step 5:编写你的Adhearsion应用
打开my_first_app/dialplan.rb,添加如下代码:

sandbox {
play "hello-world"
}

sandbox代表的是Asterisk中规定的context,Adhearsion测试系统默认的context就是sandbox. play “hello-world”的意思就是播放”hello-world”的音频.简单的就好像说话一样-.-


Step 6:运行你的Adhearsion应用
直接通过ahn命令就可以运行你的adhearsion应用了.由于启用了sandbox component,你的应用会先去连接adhearsion测试系统进行登录注册,然后启动后台进程监听请求.

ahn start .



OK了,这就是Adhearsion全部需要做得了.测试一下吧.选一款你觉得最酷的soft phone,按照Ahdearsion的提示拨打电话,听到一声清脆的”Hello World”,你的Adhearsion蹦出一些log信息.看这就爽,你也快来试试看吧.

 

Asterisk与Call Manager的整合

几个月前就完成了这个工作。可是因为工作的需要,一直重装不同版本的Call Manager,然后再回头配置集成。痛定思痛,决定把过程写下来,自己找起来也方便。

Asterisk上的配置
Step 1 在sip.conf中添加如下配置,简单的说就是添加一个SIP User.

[callman01]
type=friend
context=xiuxiu
host=10.0.0.1
disallow=all
allow=ulaw
allow=alaw
nat=no
canreinvite=yes
qualify=yes


Step 2
在extensions.conf你需要用到Call Manager的Context按照如下方法使用。基本和普通的SIP User都是一样的,就是要对SIP Header稍微做一些处理。

[macro-dialout-callmanager]
exten => s,1,ChanIsAvail(SIP/callman02&SIP/callman01)
exten => s,2,Dial(${CUT(AVAILCHAN||1)}/${ARG1})
exten => s,3,Hangup
exten => s,102,Congestion
[outgoing]
exten => _XXXX,1,Macro(dialout-callmanager,${EXTEN})
exten => _9NXXXXXX,1,Macro(dialout-callmanager,${EXTEN})
exten => _91NXXNXXXXXX,1,Macro(dialout-callmanager,${EXTEN})
exten => i,1,Congestion

Call Manager上的配置
Step 1 配置 SIP Trunk
1)在菜单中选择 Device -> Trunk -> Add New
2)点”Add New”
3)选择Trunk Type: SIP Trunk, Device Protocol: SIP
4)选择Device Pool(默认的就可以), Destination Address: Asterisk服务器的地址

Step 2 修改 SIP Trunk Security Profile (我用的是CUCM 7.1,所以需要这个修改)
1)在菜单中选择System > Security Profile > SIP Trunk Security Profile
2)在列表中选择你之前填写的Security Profile
3)将Outgoing Transport Type修改成UDP

Step 3 配置Route Pattern
1)在菜单中选择Call/Routing -> Route/Hunt -> Route Pattern
2)点Add New
3)Route Pattern: 8XXX, Gateway/Route List: 之前创建的SIP Trunk(按照你的需求设置,例如这里就是8开头的四位电话号码转到Asterisk上)

OK,基本就这些了,用你的X Lite 给Call Manager打个电话吧。

参考地址:Asterisk Cisco CallManager Integration

 

Jabber与Asterisk的整合

虽然Skype风雨飘摇,但是它的成功不言而喻,一个小小的聊天软件居然还能打电话,酷阿。
 
前一段日子装了Openfire(Jabber),聊天的一套有了。
最近玩了Asterisk(PBX),能打电话了。
嗯,整整吧。
 
没办法,伟大的人总归想的都是一样的(-,-),
这方面的需求显然是非常炙热的,整合的办法也有很多种。
 
在Openfire中整合Asterisk
0Asterisk必须安装AMI
1在Openfire中安装Asterisk-IM的plugin
2配置Asterisk服务器信息。Asterisk-IM->General Settings(user/pwd为AMI帐号)
3将Openfire用户与Phone匹配。Asterisk-IM->Phone Mapping(Device的格式类似SIP/2000)
这个plugin的作用是通过AMI(Asterisk Manager API)获得Phone的状态变化信息。
具体的效果就是Spark上用户的状态会变为"On the Pone",or "Available".
不过可以把它的AMI Client偷过来自己用,娃哈哈)
 
4在Openfire中安装SIP Phone Plugin
5配置SIP Server信息.Server->Phone->Sip Settings
(没有NAT所以没有配STUN,voicemail实在不知道干啥用这里,随便写了)
6将PHONE与Openfire用户匹配.Server->Phone->Sip Phone Mapping(其实为什么不和上面那个Plugin整合呢)
7在Spark上安装SIP Phone Plugin,关闭,重启
这套Plugin要强大的多,提供了基本的SIP Softphone的功能,可以Call,Hold等等。
实现用了OpenSource的SIP包,娃哈哈可以偷过来玩)
 
OK.顺利的话,你的Spark就进化成为了SIP Softphone!
终于有了第二个SoftPhone,欢快的地给Xlite打了一个电话。
这个方案最大的问题是对客户端的依赖。
不管是Status的变化还是Sip Phone,换成其他的都不行。
 
P.S.配置之中遇到的最大问题是Spark一直没办法注册到Asterisk上。
搞了半天最后才搞定。总结下来最有可能是以下两方面问题。
1原来Openfire上Asterisk的地址配的是localhost,可能Phone直接拿了这个地址去连接。
2最后Spark卸载了重装就好了,可能是本身Configuration没有更新。
 
在Asterisk中整合Jabber
其实Asterisk本身也整合了Jabber的功能(皑皑,蛋糕就这么大,谁都想吃)
1.4以后的版本都包含了Jabber Module,可以作为Jabber Client或者Component进行实用。
1作为Jabber Client,可以通过两个Application(jabbersend,jabberstatus)
在extension.conf中发送XMPP消息
2作为Jabber Component
可以在jabber.conf中配置Jabber Server
让Asterisk作为Jabber Component与Server通讯。(还不知道具体啥样子呢-。-)
 
这部分都没有试过。因为具体的效果就是那样
而且我也不确定Jabber Server是否对这种通讯支持良好。
皑皑,毕竟有上面那种比较完善的解决方案在了。。。
 
 
 
 
 
 

 

搭建自己的PBX-asterisk

不小心看到了Cisco加入开源推广Asterisk.
忠心一片的我当然要看看这是啥东西。
不堪不知道,居然据说要replace call manager.
然后好奇心强烈的我当然要看看怎么让它run起来。
run起来以后当然要找Phone来用咯。
79XX貌似很难配置的样子,
突然之间发现原来还有传说中的free SIP softphones –X Lite.
于是Asterisk + Xlite 3的组合就诞生了了。
晚上终于自己革自己打了第一个电话,特此纪念。
 
Asterisk的安装
入门级的安装几乎没有任何要求
 
Asterisk GUI的安装
 
Xlite的安装
 
基本的配置就是两个电话,两个线路
sip.conf

[1000]
type=friend
secret=1000
callerid="Jane Smith" <1000>
host=dynamic
canreinvite=no                ; Typically set to NO if behind NAT
disallow=all
allow=gsm                     ; GSM consumes far less bandwidth than G711-u (ulaw)
allow=ulaw
allow=alaw
dtmfmode=rfc2833
context=xiuxiu

[2000]
type=friend
secret=2000
callerid="Jane Smith" <2000>
host=dynamic
canreinvite=no                ; Typically set to NO if behind NAT
disallow=all
allow=gsm                     ; GSM consumes far less bandwidth than G711-u (ulaw)
allow=ulaw
allow=alaw
dtmfmode=rfc2833
context=xiuxiu

[callmanager]
type=friend
context=xiuxiu
host=*.*.*.*
disallow=all
allow=ulaw
allow=alaw
nat=no
canreinvite=yes
qualify=yes

extensions.conf

[xiuxiu]

exten => 1/1000,1,Answer()
exten => 1/1000,2,Dial(SIP/2000)
exten => 1/1000,3,Hangup()
exten => 1/2000,1,Answer()
exten => 1/2000,2,Dial(SIP/1000)
exten => 1/2000,3,Hangup()
 
exten => 9000,1,Answer()
exten => 9000,2,Dial(SIP/1000)
exten => 9000,3,Hangup()
exten => 5555,1,Dial(SIP/5555@*.*.*.*,30,rT)
exten => 5555,2,Hangup()

下一步的课题
  1. sip.conf的配置
  2. extension.conf的配置(重点,dianplan的编写)
  3. asterisk与79XX的连接配置
  4. asterisk与CallManager的连接配置 (完成,已更新) Asterisk and Call Manager
  5. asterisk的VoiceMail功能
  6. sip协议深入(重点)

 

 

无觅相关文章插件,快速提升流量