カテゴリー別アーカイブ: asterisk

Asteriskのログ(cdr)をmysqlに格納したい

着信履歴を確認したいという要望があり、参照画面をPHPで作るために、発着呼のログをmysqlに格納する必要があった。

ほぼ、このサイト通りでいけた。

http://www.northwind.mydns.jp/samples/blog/2015/02/05/asterisk-cdr%E5%91%BC%E6%83%85%E5%A0%B1%E3%82%92odbc%E3%81%A7mysql%E3%81%B8%E6%A0%BC%E7%B4%8D/

Mysql/Asteriskはインストール済みの前提。

保存用のテーブルをmysqlに作る。

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 ”,
`userfield` varchar(255) NOT NULL default ”,
`uniqueid` VARCHAR(32) NOT NULL default ”,
`linkedid` VARCHAR(32) NOT NULL default ”,
`sequence` VARCHAR(32) NOT NULL default ”,
`peeraccount` VARCHAR(32) NOT NULL default ”
);

ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );

mysql直接接続は非推奨らしいので、ODBC接続にします。
必要なライブラリのインストール。
$ yum install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel
$ yum install mysql-connector-odbc
自分の環境では、関連のモジュールはインストール済みだった。

$ odbcinst -q -d
[PostgreSQL]
[MySQL]

MySQLがでればOK。

asterisk用のODBC設定を追加。

$ vi /etc/odbc.ini
[asterisk-connector]
Description = MySQL connection to ‘asterisk’ database
Driver = MySQL
Database = asterisk
Server = localhost
UserName = asterisk
Password = asterpass
Port = 3306
Socket = /var/lib/mysql/mysql.sock

asteriskにODBC接続の設定を追加

$ vi /etc/asterisk/res_odbc.conf
[asterisk]
enabled => yes
dsn => asterisk-connector
username => asterisk
password => asterpass
pooling => no
limit => 1
pre-connect => yes

モジュールをロードするように設定。

$ vi /etc/asterisk/modules
preload => res_odbc.so
preload => res_config_odbc.so

res_odbc.soが無い場合は、ビルド時にodbcを追加していなかったということなので、ビルドし直す。
# ./configure
# make menuselect
# make install

ドライバがロードされたか確認。

$ asterisk -rvvvv
localhost*CLI> odbc show

ODBC DSN Settings
—————–

Name: asterisk
DSN: asterisk-connector
Last connection attempt: 1970-01-01 09:00:00
Pooled: No
Connected: Yes

asteriskでcdrをODBCで出力するという設定を追加

$ vi /etc/asterisk/cdr_adaptive_odbc.conf
[adaptive_connection]
connection=asterisk
table=cdr
alias start => calldate

再起動。

$ service asterisk restart

なんかうまくいかないときは、以下の出力を確認してみる。
$ asterisk -rvvv
$ module unload res_odbc.so
$ module load res_odbc.so