Реализация Blacklist в Asterisk с помощью БД на MySQL

от автора

Если вы не используете уже готовый дистрибутив Asterisk как например FreePBX и у вас нет к нему web GUI то задача добавления номеров в Blacklist сводится к работе с AstDB. С этим в принципе все просто. Но база данных Blacklist Asterisk общая и если нам необходимо разграничить списки заблокированных номеров по абонентам то в таком случае лучше прибегнуть к помощи внешней БД.

Итак для этого нам нужно:

  • Сам Asterisk (ну как же без него)
  • БД на MySQL
  • GUI phpmyadmin для более наглядного управления базой

Приступим. У нас следующий план действий:

  1. Создание базы для номеров и таблиц в ней
  2. Создание макроса в dialplan Asterisk
  3. Проверка работы макроса в dialplan

С помощью phpmyadmin создадим БД и тестовую таблицу с полями

  • id (ключевое поле)
  • callerid (сам заблокированый номер)
  • blockenabled (поле для установки включена ли блокировка для этого номера)
  • notes (заметки)

image

Теперь напишем макрос для проверки в плане набора на наличие номера в нашем blacklist. Для этого в секции general добавим блок globals где объявим все наши переменные необходимые для подключения к нашей базе.
В самом макросе, а мы будем использовать его обновленную и более стабильную версию 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() 

Далее вызываем наш макрос в плане наборов и после его перезагрузки в консоли (dialplan reload) проверяем работоспособность.

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() 

В итоге мы получили следующий функционал:

  • Все злостные телефонные вредители у нас блокируются и хранятся в одной базе. И добавлять номера можно не через консоль а через Web-интерфейс;
  • Мы можем создать несколько таблиц под каждого абонента и блокировать звонящих индивидуально (если в этом есть необходимость).

Все подготовлено по материалам из открытых источников.

ссылка на оригинал статьи http://habrahabr.ru/post/261235/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *