如果没有配置好Asterisk的odbc和Mysql环境,请参考"利用Digium卡搭建一个小型的asterisk电话系统 (二、添加Mysql支持) " Digium卡不是必须的。
一、建表
建立cdr表,用于存储通话记录,如下表。
CREATE TABLE `cdr` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uniqueid` varchar(32) NOT NULL DEFAULT '',
`userfield` varchar(255) NOT NULL DEFAULT '',
`accountcode` varchar(20) NOT NULL DEFAULT '',
`src` varchar(80) NOT NULL DEFAULT '',
`dst` varchar(80) NOT NULL DEFAULT '',
`dcontext` varchar(80) NOT NULL DEFAULT '',
`clid` 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 '',
`calldate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`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',
`transferdate` timestamp NULL DEFAULT NULL,
`start` datetime DEFAULT NULL,
`answer` datetime DEFAULT NULL,
`end` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
cdr表的字段也可以自定义和扩展,通过CDR函数可以设置自定义的值。本文只讨论默认的cdr属性,对于一般的情况来说,这可以满足需求了。
二、配置Asterisk
2.1 对集群Asterisk服务器设置唯一的标记码,如果你的环境没有集群,可以跳过。
cdr.uniqueid唯一标记每一条cdr记录,但是对于集群的Asterisk服务器来说,这可能产生重复,一种可行的解决办法是在cdr.uniqueid 的字段值之前加入一个前缀。如,AsteriskA,前缀为“A”,AsteriskB,前缀为“B”。
$ vim /etc/asterisk/asterisk.conf
加入如下内容
[options]
systemname=sq
2.2 建立cdr和odbc的关系
$ vim /etc/asterisk/cdr_adaptive_odbc.conf file
在文件末尾加入
[adaptive_connection]
connection=asterisk
table=cdr
2.3 重载变更
CLI> module reload cdr_adaptive_odbc.so
通过如下命令可以显示cdr的状态
CLI> cdr show status
Call Detail Record (CDR) settings
----------------------------------
Logging: Enabled
Mode: Simple
Log unanswered calls: No
* Registered Backends
-------------------
cdr-syslog
Adaptive ODBC
cdr-custom
csv
cdr_manager
对于修改了cdr.uniqueid的前缀,可以通过重启asterisk强迫其生效
三、测试
配置使其生效后,就可以测试了,拨打一个电话,一切正常的话,cdr表应该添加了相应的记录。
四、关于账单
有了cdr记录,就可以根据实际的情况来生成账单,一个可行的办法是通过Tomcat+Java+JSP+Mysql来实行账单系统。