Блокировка номера Asterisk при не верном наборе кода направления

Блокировка номера Asterisk при не верном наборе кода направления

Задача заблокировать пир в Asterisk при не верном наборе кода защиты направления выхода на междугороднюю и междунородную связь, количество не правильных наборов может быть изменено в диаплане это цифра пять, то есть если абонент не верно набрал код защиты более пяти раз его номер будет отключен от текущих контекстов позволяющих совершать пользователю вызовы, при наборе номера после блокировки абонент получит уведомление о том, что он заблокирован в связи с превышнием количества вводов кода защиты, а админу будет выслано сообщение о блокировке пира. Реализация задачи будет очень простой решение задачи отключения сип пира будет выполнять sh скрипт.

Диалплан блокировки абонента
[intercity]
;Направление мобильного абонента с кодом доступа к линии
;Вырезаем код доступа
exten => _1*810.,1,Set(pass=${EXTEN:5:3})
exten => _1*810.,n,Goto(passage,s,1)

[passage]
;Устанавливаем переменные и переходим к обработке
exten => s,1,Set(per1="/var/lib/asterisk/sounds/ru/intercity")
exten => s,n,Set(CHANNEL(language)=ru)
exten => s,n,Playback(${per1}/invisible_being.txt)
exten => s,n,Macro(ubit,${pass})

[macro-ubit]
;Макрос обработки доступа
exten => s,1,Set(per1="/var/lib/asterisk/sounds/ru/intercity")
exten => s,n,Set(CHANNEL(language)=ru)

;Проверяем аргументы
;exten => s,n,SayNumber(${ARG1})

;Если верно, осуществляем вызов
exten => s,n,GotoIf($["${ARG1}" = "123"]?yes:no)
exten => s,n(yes),Dial(SIP/SMG2/${EXTEN})
exten => s,n,Hangup()

;Если ошибка считаем их количество, как только их > 5 отключаем абонента
exten => s,n(no),Playback(${per1}/dialing_code_nonexistent_direction)
exten => s,n,Set(number=${CALLERID(num)})
;Проверяем номер абонента
;exten => s,n,SayNumber(${number})
exten => s,n,System(echo "${number}" >> ${per1}/number)
exten => s,n,Set(RESULT=${SHELL(/var/lib/asterisk/sounds/ru/intercity/script.sh ${number})})

;Если нужно проверить работу внешнего скрипта
;exten => s,n,SayNumber(${RESULT})
exten => s,n,Hangup()

;Если направление уже отключено
[disable-mobile]
exten => _1*810.,1,Set(per1="/var/lib/asterisk/sounds/ru/intercity")
exten => _1*810.,n,Playback(${per1}/invisible_bein)
exten => _1*810.,n,Playback(${per1}/your_account_incorrectly_dialed_area_code_more_than_five_times_and_has_been_disabled)
exten => _1*810.,n,Playback(${per1}/To_activate_your_account_please_contact_Technical_Support)
exten => _1*810.,n,Hangup()

Скрипт считающий количество ошибок ввода, и занимающийся блокировкой номера
#!/bin/bash
patch=/var/lib/asterisk/sounds/ru/intercity/
blockfile=/etc/asterisk/

pars="`grep -o "$1" $patch/number | uniq -c`"
#echo "$pars" > /var/lib/asterisk/sounds/ru/intercity/proverka
chislo=${pars:6:1}

if [ "$chislo" -ge "5" ]
then

replace "[$1]" ";[$1]" -- $blockfile/sip.conf
echo "[$1]" >> $blockfile/disable-mobile.conf
echo "include => disable-mobile" >> $blockfile/disable-mobile.conf
echo " " >> $blockfile/disable-mobile.conf
sed -i "/${1}/d" $patch/number
echo "Abonent number "$1" disable" | /usr/bin/mail -v -s "disable 8." admin"@"domain.com
/etc/init.d/asterisk reload

else

echo "$chislo"
echo "SET VARIABLE RESULT $chislo"

fi

Скрипт блокирует настройки пира в sip.conf и переключает его на диалплан disable

Поделиться:

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

0 + 7 =
Решите простой математический пример. Например для "два плюс четыре =?" введите "6".