Если вы не используете уже готовый дистрибутив Asterisk как например FreePBX и у вас нет к нему web GUI то задача добавления номеров в Blacklist сводится к работе с AstDB. С этим в принципе все просто. Но база данных Blacklist Asterisk общая и если нам необходимо разграничить списки заблокированных номеров по абонентам то в таком случае лучше прибегнуть к помощи внешней БД.
Итак для этого нам нужно:
- Сам Asterisk (ну как же без него)
- БД на MySQL
- GUI phpmyadmin для более наглядного управления базой
Приступим. У нас следующий план действий:
- Создание базы для номеров и таблиц в ней
- Создание макроса в dialplan Asterisk
- Проверка работы макроса в dialplan
С помощью phpmyadmin создадим БД и тестовую таблицу с полями
- id (ключевое поле)
- callerid (сам заблокированый номер)
- blockenabled (поле для установки включена ли блокировка для этого номера)
- notes (заметки)
Теперь напишем макрос для проверки в плане набора на наличие номера в нашем 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/
Добавить комментарий