はじめに
「Web 画面のボタンを押すだけで迷惑電話をブロックできるよ!」
…という目論見でやった話です。Asterisk には「BLACKLIST」という関数があるみたいですがコンソールで操作するしかない感じ1だったので「じゃあ実際にやってみっか!w」という軽いノリでやりました。
SQL 文は結構雑なのでご了承ください。
Web UI の話などは一切しません。が、PHP でゴリゴリやってるということだけポロッと口を滑らせておきます。
「こうすればイケるんじゃない?」という読み物な感じでご覧ください。
なお、
- すでに ODBC 経由で CDR をやってる方は「Make TABLE」まで
- 設定だけ見たいんだけどという方は「Asterisk function」まで
それぞれかっ飛ばしてご覧ください。
スペック
- FreeBSD(10.3-RELEASE / amd64)
- Asterisk(13.0 / by ports)
- MySQL(5.6 / by ports)
設定
MySQL DATABASE
create_db.sql
CREATE DATABASE **使うデータベース名**;
Asterisk ODBC2
odbcinst.ini
[**ドライバ名**]
Description = ODBC for MySQL
Driver = /usr/local/lib/libmyodbc5a.so
Setup = /usr/local/lib/libodbcmyS.so
FileUsage = 1
CharSet = utf8
console
# odbcinst -q -d
[**ドライバ名**]
odbc.ini
[**DSN**]
Description = MySQL connection to 'asterisk' database
Driver = **ドライバ名**
Database = **使うデータベース名**
Server = localhost
Port = 3306
Socket = /tmp/mysql.sock
Charset = utf8
console
# isql -v **DSN** **DB ユーザー ID** **DB パスワード**
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> quit
#
Make TABLE
create_table.sql
CREATE TABLE IF NOT EXISTS **使うテーブル名**(
id int(11) NOT NULL AUTO_INCREMENT,
number varchar(20) NOT NULL,
ban tinyint(1) NOT NULL DEFAULT '0'
);
Asterisk function3
func_odbc.conf
[CHECKBL]
dsn = **DSN**
readsql = SELECT COUNT(*) FROM **使うテーブル名** WHERE ban = '1' AND number='${SQL_ESC(${ARG1})}'
synopsis = Check if a caller is in the blacklist table
Asterisk extentions example
extentions.conf
exten => 0.,n,GotoIf(${ODBC_CHECKBL(${CALLERID(num)})}?**実行するコンテキスト**,1)