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