差分

移動先: 案内検索

Asterisk+MySQL

3,749 バイト追加, 2017年11月18日 (土) 17:51
Asterisk+MySQL」を保護しました ([編集=管理者のみ許可] (無期限) [移動=管理者のみ許可] (無期限))
==CDR==
通話記録をデータベース管理したいという要望は多いはずです。MySQLと連動させるために、まずはこの部分を設定してみます。<br>
Asterisk-addonsを入手し、コンパイルします。addonsを入手し、コンパイルします(1.4まで。1.6以降は本体といっしょに配布されている)。./configure、make menuselectを実行し、Call Deteil Recordingで以下のようにcdr_addon_mysqlが選択可能になっていることを確認します。もし、なっていなければmysql-develの入れ忘れです。
****************************************
Asterisk-addons Module Selection
);
quit
これでDBの準備は完了です。<br>注:AsteriskはCDRを吐き出すだけなので、GRANT ALLではなくGRANT INSERT to asterisk.cdrだけにしてもかまいません。 
===cdr_addon_mysqを設定する===
以下を参考に、/etc/asteriskに cdr_mysql.conf という名前でファイルを作成します。
port=3306
sock=/var/lib/mysql/mysql.so
設定が終わったらAsteriskを再起動するか、module load cdr_addon_mysql.so を実行します。これで通話記録はDBに保存されるようになります。
===動作を確認してみる===
正しく設定されていればCDRはデータベースに記録されますので、適当に内線にでも電話してみます。MySQLで確認するとCDRが取れていることがわかるはずです。
# mysql -u root -p
Password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.0.45 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use asterisk;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from cdr;
+---------------------+-------------+-----+-----+----------+------------------+-
-----------+---------+----------+----------+---------+-------------+----------+-
------------+----------+-----------+
| calldate | clid | src | dst | dcontext | channel |
dstchannel | lastapp | lastdata | duration | billsec | disposition | amaflags |
accountcode | uniqueid | userfield |
+---------------------+-------------+-----+-----+----------+------------------+-
-----------+---------+----------+----------+---------+-------------+----------+-
------------+----------+-----------+
| 2009-02-19 09:29:55 | "201" <201> | 201 | 300 | default | SIP/201-082e04c8 |
| MeetMe | 300|M | 20 | 20 | ANSWERED | 3 |
| | |
+---------------------+-------------+-----+-----+----------+------------------+-
-----------+---------+----------+----------+---------+-------------+----------+-
------------+----------+-----------+
1 row in set (0.00 sec)
mysql>
あとはphpMyAdminを使うなり、自分で書いたプログラムで処理するなりすれば通話記録が様々な用途に使えます。データベース管理されているので便利になることでしょう。<br>
なお当然ですが、適切な設定をすればAsteriskサーバとDBサーバは別なマシンでもかまいません。<br>
 
==extensions.conf==
Addonsを入れるとapp_addon_sql_mysqlも入れることができます。これを使うと何とextenからSQL文が叩けるようになります。
exten => XXXX,1,MYSQL(Connect conid localhost asterisk DBユーザ DBパスワード)
exten => XXXX,n,NoOp(${conid})
exten => XXXX,n,MYSQL(Query resultid ${conid} SELECT\ なんとか\ from\ かんとか\ where\ なんちゃら=${EXTEN});
exten => XXXX,n,MYSQL(Fetch fetchid ${resultid} TARGETEXTEN)
exten => XXXX,n,NoOp(${resultid})
exten => XXXX,n,NoOp(${fetchid})
exten => XXXX,n,NoOp(${TARGETEXTEN})
exten => XXXX,n,MYSQL(Disconnect ${conid})
バックスラッシュ(\)はスペースをクォートするために必要です。<br>
まずConnectでDBに接続します。接続すると識別子がconidに入ります。<br>
次にこのconidを使って、QueryでSELECTを発行します。この記述方法はSQL文そのものです。結果を取得するには、resultidを使ってFetchで行います。この例では「かんとか」テーブルから「なんとか」を探し、その際の条件が「なんちゃら」がEXTEN、つまりダイヤルされた4桁の番号をDBで検索します。<br>
用事がすんだらDisconnectで切断します。<br>

案内メニュー

VoIp-Info.jp

HP Directplus -HP公式オンラインストア-