Asterisk可以存储CDR记录到一个MYSQL数据库中,也可以选择以CSV文本文件的形式保存起来。
由于Mysql客户端开发库的版权问题,Mysql billing应用程序不再作为Asterisk标准发布版本中的其中一部分来发布,而是以附加内容的形式存在:asterisk-addons。
为了让Asterisk支持把CDR日志保存到mysql数据库中,必须下载asterisk-addons包,然后编译与mysql有关的几个模块,并且装载到你的Asterisk服务器中。
一.下载asterisk-addons包。
有两种方式:
1:官方网站上发布的:
http://downloads.digium.com/pub/asterisk/,如果你当前使用的asterisk是.14版本而且是最新的,这时候从目录中找到最新的asterisk-addons包。
2:从SVN库中检出
svn checkout http://svn.digium.com/svn/asterisk-addons/branches/1.4/,用这种方法要注意几点:
(1) http://svn.digium.com/svn/asterisk-addons/,这个根目录下面,有
branches/
tags/
team/
trunk/
这几个目录,如果你当前使用的asterisk是.14版本而且是最新的,这时候应该要从branches分支目录中找到最新的版本下载,注意:不要直接check out trunk/目录。
二. 编译安装asterisk addons
1. 修改Makefile文件
在编译asterisk addons之前,必须修改asterisk addons源文件下的Makefile文
件:
CFLAGS+=-fPIC
ifeq ($(OSARCH),SunOS)
ASTETCDIR=/var/etc/asterisk
ASTLIBDIR=/opt/asterisk/lib
else
ASTLIBDIR=/usr/lib/asterisks (对应asterisk安装后的模块目录上一级目录)
#ASTETCDIR=/home/asterisk- 1.4.11 (对应asterisk的源代码目录)
endif
MODULES_DIR=$(ASTLIBDIR)/modules
2.执行三部曲
确定已经有了zlib-devel、mysql-devel(/usr/lib/mysql/),
# make clean
# make menuselect
(在这个命令下选择待编译的模块,按enter选择或取消选择某个模块,按x保存并退出)
# make
# make install
三. 修改所有配置文件
*1:编辑cdr_manager.conf:enabled = yes
*2:编辑modules.conf,在[modules],
增加:load => cdr_addon_mysql.so
3:编辑cdr_mysql.conf,如果目前还没有这个文件,新创建一个
[global]
hostname=0.0.0.0(Mysql数据库服务器)
dbname=cdrmysqltest (数据库名)
user=root
password=123456
port=3306
userfield=1
四.在Mysql数据库中新建数据数据库、表
CREATE DATABASE cdrmysqltest ;
CREATE TABLE `cdr` (
`calldate` datetime NOT NULL default '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL default '',
`src` varchar(80) NOT NULL default '',
`dst` varchar(80) NOT NULL default '',
`dcontext` varchar(80) NOT NULL default '',
`channel` varchar(80) NOT NULL default '',
`dstchannel` varchar(80) NOT NULL default '',
`lastapp` varchar(80) NOT NULL default '',
`lastdata` varchar(80) NOT NULL default '',
`duration` int(11) NOT NULL default '0',
`billsec` int(11) NOT NULL default '0',
`disposition` varchar(45) NOT NULL default '',
`amaflags` int(11) NOT NULL default '0',
`accountcode` varchar(20) NOT NULL default '',
`uniqueid` varchar(32) NOT NULL default '',
`userfield` varchar(255) NOT NULL default ''
);
ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );