そのため、次が必要です。
- アスタリスク自体(それがなければどうなるでしょうか)
- MySQLデータベース
- より視覚的なデータベース管理のためのPhpmyadmin GUI
始めましょう。 次のアクションプランがあります。
- 数値とテーブルのベースを作成する
- ダイヤルプランアスタリスクでマクロを作成する
- ダイヤルプランでのマクロ操作の検証
phpmyadminを使用して、フィールドを含むデータベースとテストテーブルを作成します
- id(キーフィールド)
- callerid(自己ブロック番号)
- blockenabled(この番号に対してブロッキングを有効にするかどうかを設定するフィールド)
- ノート
![画像](https://habrastorage.org/files/647/46c/5b6/64746c5b68774d41a013adf81d50ef56.png)
ここで、ブラックリストにある番号のダイヤルに関してチェックするマクロを作成します。 これを行うには、一般セクションで、データベースに接続するために必要なすべての変数を宣言するグローバルブロックを追加します。
マクロ自体で、GoSub()の更新されたより安定したバージョンを使用して、データベースに接続するコマンドを記述し(Asterisk MySQLオペレーターを使用します)、目的のCALLERID値をテーブルで検索します。
データベースから取得した後、見つかった値を呼び出し元のCALLERIDで確認し、一致する場合は呼び出しを終了します。
[general] [globals] DBCurrentHost=localhost DBuser=myuser DBpass=mysomepassword DBname=asterisk [SubMysqlblacklist] exten => s,1,NoOp(--- MACRO --- BLACKLIST ---) same => n,MySql(connect connid ${DBCurrentHost} ${DBuser} ${DBpass} ${DBname}) same => n,MySql(query resultid ${connid} select callerid from own_blacklist where callerid=${CALLERID(num)} and blockenabled = 1) same => n,MySql(Fetch fetchid ${resultid} blacklistid) same => n,NoOp(FetchID: ${fetchid} Var1: ${blacklistid} ConnID: ${connid} ResultID: ${resultid}) same => n,GotoIf($["${CALLERID(num)}" = "${blacklistid}"]?blacklisted) same => n,MySql(clear ${resultid}) same => n,MySql(disconnect ${connid}) same => n,Goto(end) same => n(blacklisted),NoOp(Cannot dial - ${CALLERID(num)} is blacklisted !) same => n,MYSQL(clear ${resultid}) same => n,MYSQL(disconnect ${connid}) same => n,Hangup() same => n(end),NoOp(-- Clear --) same => n,Return()
次に、セットの観点からマクロを呼び出し、コンソールでリブートした後(ダイヤルプランのリロード)、操作性を確認します。
exten => 4445566,1,NoOp(-- to ${EXTEN} -- <from> -- ${CALLERID(num)} --) same => n,GoSub(SubMysqlblacklist,s,1()) same => n,Dial(SIP/to_user1/555,40) same => n,Hangup()
その結果、次の機能が得られました。
- 悪意のある電話の害虫はすべてブロックされ、1つのデータベースに保存されます。 また、コンソールからではなく、Webインターフェースからも番号を追加できます。
- サブスクライバごとに複数のテーブルを作成し、呼び出し元を個別にブロックできます(必要な場合)。
すべては、オープンソースの資料に基づいて準備されています。