カテゴリー
Asterisk IP-PBX

Asterisk CDR(呼情報)をODBCでMySqlへ格納(後記)

Asterisk CDR(呼情報)をODBCでMySqlへ格納で紹介したCDR格納用のテーブルは cdr_mysql や cdr_odbc アドオンと互換性を維持した構成となっています。

Adaptive CDR ODBCでは start, answer, end というフィールドに通話開始、応答、終了日時を格納します。 calldate は使用しません。

そのため、Asterisk CDR(呼情報)をODBCでMySqlへ格納では、/etc/asterisk/cdr_adaptive_odbc.conf に start フィールドを calldate へ別名として格納するように設定をしています。(以下参照)

[adaptive_connection]
connection=asterisk
table=cdr
alias start => calldate

そこで、今後推奨とされている cdr_adaptive_odbc 用のCDRテーブル定義と、それに対応するように cdr_adaptive_odbc.conf を変更します。

Adaptive CDR ODBC用のCDRテーブル定義

新たに cdr_odbc テーブルを用意します。

CREATE TABLE cdr_odbc (
        `accountcode` VARCHAR(20) NULL , 
        `src`         VARCHAR(80) NULL , 
        `dst`         VARCHAR(80) NULL , 
        `dcontext`    VARCHAR(80) NULL , 
        `clid`        VARCHAR(80) NULL , 
        `channel`     VARCHAR(80) NULL , 
        `dstchannel`  VARCHAR(80) NULL , 
        `lastapp`     VARCHAR(80) NULL , 
        `lastdata`    VARCHAR(80) NULL , 
        `start`       datetime NULL , 
        `answer`      datetime NULL , 
        `end`         datetime NULL , 
        `duration`    int NULL , 
        `billsec`     int NULL , 
        `disposition` VARCHAR(20) NULL , 
        `amaflags`    VARCHAR(16) NULL , 
        `uniqueid`    VARCHAR(150) NULL , 
        `userfield`   VARCHAR(256) NULL ,
        `linkedid`    VARCHAR(32) NOT NULL default '' ,
        `sequence`    VARCHAR(32) NOT NULL default '' ,
        `peeraccount` VARCHAR(32) NOT NULL default ''
    );

/etc/asterisk/cdr_adaptive_odbc.conf の変更

テーブルを cdr_odbc とし alias をやめます。

[adaptive_connection]
connection=asterisk
table=cdr_odbc
;以下不要
;table=cdr
;alias start => calldate

動作確認

mysql> select * from cdr_odbc;                                                                                    
+-------------+------+------+----------+---------------+-------------------+-------------------+---------+---------------+---------------------+---------------------+---------------------+----------+---------+-------------+---------------+--------------+-----------+--------------+----------+-------------+                                    
| accountcode | src  | dst  | dcontext | clid          | channel           | dstchannel        | lastapp | lastdata      | start               | answer              | end                 | duration | billsec | disposition | amaflags      | uniqueid     | userfield | linkedid     | sequence | peeraccount |                                    
+-------------+------+------+----------+---------------+-------------------+-------------------+---------+---------------+---------------------+---------------------+---------------------+----------+---------+-------------+---------------+--------------+-----------+--------------+----------+-------------+
| NULL        | 3001 | 2001 | default  | "3001" <3001> | SIP/3001-00000000 | SIP/2001-00000001 | Dial    | SIP/2001,,rtT | 2015-02-05 18:18:34 | 2015-02-05 18:18:39 | 2015-02-05 18:18:44 |       10 |       5 | ANSWERED    | DOCUMENTATION | 1423127914.0 | NULL      | 1423127914.0 | 0        |             |
| NULL        | 2001 | 3001 | default  | "2001" <2001> | SIP/2001-00000002 | SIP/3001-00000003 | Dial    | SIP/3001,,rtT | 2015-02-05 18:19:11 | 2015-02-05 18:19:13 | 2015-02-05 18:19:19 |        8 |       6 | ANSWERED    | DOCUMENTATION | 1423127951.2 | NULL      | 1423127951.2 | 3        |             |
+-------------+------+------+----------+---------------+-------------------+-------------------+---------+---------------+---------------------+---------------------+---------------------+----------+---------+-------------+---------------+--------------+-----------+--------------+----------+-------------+

start, answer, end に日時が格納され、amaflags の値は以前とは異なり文字列となっています。

参考:
https://www.voip-info.org/wiki/view/Asterisk+cdr+odbc
https://www.voip-info.org/wiki/view/Asterisk+billing

以上です。

カテゴリー
Asterisk IP-PBX

Asterisk CDR(呼情報)をODBCでMySqlへ格納

Asterisk 設定を MySQL に格納してリアルタイム変更では、asterisk-addons モジュールで呼情報をMySqlへ格納する方法を紹介しましたが、Asterisk 1.8 以降ではODBCを使用する方法が推奨となったのでその方法を紹介します。

CentOS 6.6 でMySql 5.1.73 および Asterisk 1.8.25 がインストールされている前提です。

Asterisk CDR(呼情報)をODBCでMySqlへ格納するための関連するAsterisk の構成ファイルとODBC/Database の関係です。

Asterisk 側                                   
cdr_adaptive_odbc.conf -> res_odbc.conf -> /etc/odbc.ini

Linux 側
/etc/odbc.ini -> MySql database

1. Asterisk 用のデータベースを作成

mysql コマンドで root でログインします。

# mysql -u root -p
Enter password:

次に、ユーザーを作成します。ここではユーザーを asterisk 、パスワードを asterpassとします。

mysql> CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'asterpass';

続いて、データベースを作成します。ここではデータベース名を asterisk とします。

mysql> CREATE DATABASE asterisk;

さらに、作成したユーザーにデータベースへの権限を付与します。

mysql> GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'localhost';

以上でデータベース作成は終了。一旦、MySql コンソールから抜けます。

mysql> exit

次に、呼情報を格納するテーブルを作成します。先ほど作成したユーザーとパスワードでmysqlコンソールへログインします。

# mysql -u asterisk -p
Enter password:

データベース一覧には asterisk が表示されます。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| asterisk           |
+--------------------+

asterisk データベースを指定して cdr テーブルを作成します。

mysql> use asterisk;
Database changed

続けて、以下の CREATE TABLE 文を実行

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` );

参考:
https://wiki.asterisk.org/wiki/display/AST/CDR+Fields
https://wiki.asterisk.org/wiki/display/AST/MySQL+CDR+Backend

2. ODBC ドライバーのインストール

# yum install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel

3. MySql 接続用のODBCドライバーのインストール

# yum install mysql-connector-odbc

上記コマンドが完了したら、下記コマンドでドライバーの確認。[MySQL] が表示されればOKです。

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

4. ODBC設定の追加

/etc/odbc.ini へAsteriskデータベースへの接続情報を記述追加します。

[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

5. AsteriskのODBCモジュールのインストール

Asterisk のビルド時にODBCドライバーがシステムにインストールされていない場合、AsteriskのODBCモジュールはデフォルトで入っていないはずなので追加し、再ビルドします。

Asterisk のソースツリー(例: /usr/local/src/asterisk-1.8.25/) へ移動して下記コマンドを実行します。

# cd /usr/local/src/asterisk-1.8.25/
# ./configure
# make menuselect
# make install

6. AsteriskとODBC接続の構成

最後に、Asterisk からODBCでMySqlデータベースへ接続するために設定を /etc/asterisk/res_odbc.conf へ追加します。

[asterisk]
enabled => yes
dsn => asterisk-connector
username => asterisk
password => asterpass
pooling => no
limit => 1
pre-connect => yes

7. 構成の確認

Asterisk を再スタートし、Asterisk コンソールからODBCの構成を確認

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

8. 呼情報テーブル (cdr) の設定

Asterisk 呼情報を cdr テーブルへ格納するように設定するために /etc/asterisk/cdr_adaptive_odbc.conf を変更します。

[adaptive_connection]
connection=asterisk
table=cdr
alias start => calldate

参考:
https://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/database_storing-cdr.html

Asteriskを再起動します。

# /sbin/service asterisk restart

Asterisk コンソールから cdr 設定の確認をします。Registered Backends に cdr-custom, Adaptive ODBC と csv が確認できます。

# /usr/sbin/asterisk -rvvvvvvvvvvvvvvvvvv

localhost*CLI> cdr show status

Call Detail Record (CDR) settings
----------------------------------
  Logging:                    Enabled
  Mode:                       Simple
  Log unanswered calls:       No

* Registered Backends
  -------------------
    cdr-custom
    Adaptive ODBC
    csv

8. 動作確認

呼情報がMySqlへ格納されるか動作確認してみます。
ここでは、SIP #3001 と #2001 へ双方へ電話した後の cdr テーブルの情報を見ます。

# mysql -u asterisk -p
Enter password: 

mysql> use asterisk;
mysql> select * from cdr;
+---------------------+---------------+------+------+----------+-------------------+-------------------+---------+---------------+----------+---------+-------------+----------+-------------+-----------+--------------+--------------+----------+-------------+
| calldate            | clid          | src  | dst  | dcontext | channel           | dstchannel        | lastapp | lastdata      | duration | billsec | disposition | amaflags | accountcode | userfield | uniqueid     | linkedid     | sequence | peeraccount |
+---------------------+---------------+------+------+----------+-------------------+-------------------+---------+---------------+----------+---------+-------------+----------+-------------+-----------+--------------+--------------+----------+-------------+
| 2015-02-05 17:40:31 | "3001" <3001> | 3001 | 2001 | default  | SIP/3001-00000000 | SIP/2001-00000001 | Dial    | SIP/2001,,rtT |        7 |       2 | ANSWERED    |        3 |             |           | 1423125631.0 | 1423125631.0 | 0        |             |
| 2015-02-05 17:40:50 | "2001" <2001> | 2001 | 3001 | default  | SIP/2001-00000002 | SIP/3001-00000003 | Dial    | SIP/3001,,rtT |        5 |       4 | ANSWERED    |        3 |             |           | 1423125650.2 | 1423125650.2 | 3        |             |
+---------------------+---------------+------+------+----------+-------------------+-------------------+---------+---------------+----------+---------+-------------+----------+-------------+-----------+--------------+--------------+----------+-------------+
2 rows in set (0.00 sec)

以上です。

カテゴリー
Asterisk IP-PBX PHP

Asterisk AGI PHPスクリプトの改行コード

オープンソースのIP-PBXである Asterisk は 機能を追加するために AGI (Asterisk Gateway Interface) というインターフェースがあります。さまざまな言語 (Perl, PHP etc.) でデータベースへアクセスするなど電話とコンピュータシステムの連携することができます。

現在開発中のシステムで AGI スクリプトを PHP で書いていて気づいた点があったので備忘録に。

例えば、以下のdefault コンテキストのエクステンションから起動される hangup.php という AGI スクリプトがあります。処理は電話の切断情報をデータベースに書き込んで終了します。

[default]
.. 省略 ..
exten => h,1,NoOp(${HANGUPCAUSE})
 same => n,NoOp(${CHANNEL})
 same => n,NoOp(${AVAILSTATUS})
 same => n,AGI(hangup.php)

コマンドラインから hangup.php 単体を実行すると期待どおりの動作で問題なかったのですが、エクステンションから起動されると、正常終了するものの処理が行われません。

正常に動作するスクリプトと見比べること数時間。。

違いといえば、正常動作するスクリプトは改行コードが LF のみで、hangup.php は改行コードが CRLF になっていることくらい。

ものは試しに改行コードを LF に変換して実行すると、期待通りの動作となりました。 🙂

ということで、AGIスクリプトの改行コードは LF のみでないと期待通りの動作にならないことがある。

ちなみに、Asterisk のバージョンは 1.8.25 です。

カテゴリー
Asterisk IP-PBX

Ubuntu 12.04 LTSへAsterisk 1.8.x をインストール

Ubuntu 12.04 LTS へ Asterisk 1.8.21.0 をインストール メモです。

Ubuntu 12.04 LTS をインストールが終わったら、Asterisk をビルドする準備をします。

1. まず、Ubuntu を最新にします。

$ sudo su
# apt-get update
# apt-get upgrade

 
2. ソースのビルドに必要なパッケージのインストール

# apt-get install build-essential
# apt-get install libncurses5-dev
# apt-get install libssl-dev
# apt-get install docxygen

 
3. 次に、Asterisk をダウンロードしてきます。1.8 の最新版(現時点で 1.8.21.0)を wget コマンドでダウンロードして展開します。

# wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz
# tar zxvf asterisk-1.8-current.tar.gz

 
4. 展開したディレクトリに移動してビルド開始します。 ./configure で問題ないか確認します。

# ./configure

 
5. menuselect でインストールするアドオンなどを確認。デフォルトのままで大丈夫でしょう。[ESC]キーでメニューから抜けます。

# make menuselect

 
6. make でビルドしてインストールします。

# make
# make install

 
7. サンプルコンフィグを作成。 /etc/asterisk に *.conf ファイルが作成されます。

# make samples

 
8. 最後に起動時に Asterisk が開始されるように設定します。

# make config

 

カテゴリー
Asterisk IP-PBX

Zoiper ソフトフォン

Asterisk を使うには高いIP電話機を購入しなくてもフリーで使えるソフトフォンとマイク、スピーカーか、ヘッドセットがあれば十分です。

今日は、Zoiper Free を使ってみました。ここでは、以前作成した Asterisk SIP.conf テンプレートに設定したアカウントと、Asterisk extensions.conf ‘same =>’ オペレータ で作成したダイアルプランを使用します。

ダウンロード

https://www.ziper.com から “Download” をクリックして、”Zoiper Communicator” / “Software” から “Windows” をクリックすると Zoiper Free の “Download Free” ボタンをクリックするとダウンロードできます。

機能制限はありますが、通話で使う分には問題ないと思います。

インストール

インストールは簡単です。ダウンロードした Zoiper_Free_2.39_Installer.exe をダブルクリックして起動します。

インストールが実行されるのでステップ1で “Next” ボタンをクリックすると、ステップ2で “License Agreement” が表示されますので、 “I Agree” ボタンをクリックして、順次 “Next” ボタンをクリックして行き、最後に “Finish” ボタンをクリックします。

SIP アカウントの設定

インストールが完了したら、SIP アカウントを設定します。

メニューまたは、デスクトップに “Zoiper Free” のショートカットをダブルクリックして Zoiper Free を起動します。すると以下の画面が表示されます。

(もし、この画面が出てこない場合は、メイン画面のツールバー右端のスパナのアイコンをクリックして、”Zoper Options” ダイアログ左部ツリービューから “Add new SIP account” をクリックします。)

ここでは、以下のように “Name” に “201” を入力して設定を行います。

Zoiper_Add_Sip1

次に、
“Domain” へ Asterisk サーバーのIPアドレスを 入力
“Username” へ  201 (sip.conf で定義)
“Password” へパスワード (sip.conf で定義)
“Caller ID Name” へ発信者名

を入力して “OK” ボタンをクリックします。

すると、入力情報が正しければ “201 (Registered) (SIP)” と表示されます。

ダイアル発信

これで通話ができます。”Phone to dial” に 1000 を入力して、ツールバー左部の青い受話器のボタンをクリックします。”Hello world” が聞こえるはずです。

最後に

私がいろいろ試した限りでは音声も途切れることなく通話ができます。無料で使え、通話品質も良く、アカウントも複数登録して切り替えられるのでAsterisk の試用にはもってこいです。