Edited at

AsteriskのVoicemailメッセージをODBC経由でMySQLに保存する


AsteriskのVoicemailメッセージをODBC経由でMySQLに保存する

とりあえず、memo書きなので時期に補足します。


環境


  • FreeBSD 12.0R

  • Asterisk16 16.4.0

  • MySQL 5.6


Asteriskの導入時に注意すること

FreeBSDのPackagesやportsではVoicemailメッセージの保存先にODBCを利用するになっていないため、

portsを利用し、コンパイルオプションを変更して対応する


/usr/ports/net/asterisk16/Makefile.

# post-configureセクションの最後に追記

post-configure:
#.........
@cd ${WRKSRC} && ./menuselect/menuselect --enable ODBC_STORAGE menuselect.makeopts


テーブルの作成

データベースに下記のテーブルを作成する

CREATE TABLE `voicemessages` (

`id` int(11) NOT NULL AUTO_INCREMENT,
`msgnum` int(11) NOT NULL DEFAULT '0',
`dir` varchar(80) DEFAULT '',
`context` varchar(80) DEFAULT '',
`macrocontext` varchar(80) DEFAULT '',
`callerid` varchar(40) DEFAULT '',
`origtime` varchar(40) DEFAULT '',
`duration` varchar(20) DEFAULT '',
`mailboxuser` varchar(80) DEFAULT '',
`mailboxcontext` varchar(80) DEFAULT '',
`recording` longblob,
`flag` varchar(128) DEFAULT '',
`msg_id` varchar(40) NOT NULL,
PRIMARY KEY (`id`),
KEY `dir` (`dir`)
) ENGINE=InnoDB;


ODBC向けのMySQL Connectorを導入

# pkg install mysql-connector-odbc-unixodbc-mysql56


各種設定


/usr/local/etc/odbcinst.ini

[MySQL]

Description=ODBC for MySQL
Driver=/usr/local/lib/libmyodbc5w.so
UsageCount=20004
#Trace=yes
#TraceFile=/tmp/mysql.log


/usr/local/etc/odbc.ini

[asterisk]

; odbcinst.iniの[MySQL]と合わせる
Driver=MySQL
SERVER=127.0.0.1
PORT=3306
DATABASE=asterisk
USER=UserID
PASSWORD=Password


/usr/local/etc/asterisk/res_odbc.conf

[asterisk]

enabled => yes
; odbc.iniの[asterisk]と合わせる
dsn => asterisk
pre-connect => yes


/usr/local/etc/asterisk/voicemail.conf

; res_odbc.confの[asterisk]と合わせる

odbcstorage=asterisk
odbctable=voicemessages


動作確認


  • odbc.iniの設定が出来ていることを確認

    セクション名が表示されればOK

# odbcinst -s -q


  • ODBC経由でMySQLに接続出来ることを確認

    1が返ってくればOKです。上手く接続出来なければ何かしらのエラーが表示されると思います。

# echo "select 1" | isql -v asterisk

+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> +---------------------+
| 1 |
+---------------------+
| 1 |
+---------------------+
SQLRowCount returns 1
1 rows fetched