Черный список для Asterisk
Если вам надоели звонки с каких-то номеров, их легко можно заблокировать на вашем asterisk.
Сейчас расскажу как.
Для организации черного списка номеров в asterisk есть специальная функция BLACKLIST, функция появилась в версии 1.4 и заменила собой устаревшую LookupBlaclist().
Посмотреть описание функции можно так.
office-pbx*CLI> core show function BLACKLIST
Теперь напишем нужный dialplan
[incoming]
exten=>7495XXXXXXX,1,Answer()
exten=>7495XXXXXXX,n,GotoIf($[${BLACKLIST()}=1]?blacklist)
exten=>7495XXXXXXX,n,GoTo(call4nums,s,1)
exten=>7495XXXXXXX,n(blacklist),Hangup()
exten=>h,1,Hangup()
exten=>i,1,Hangup()
BLACKLIST() проверяет в базе данных AstDB в семействе blacklist ключ, равный Caller*ID, со значением 1. Если ключ есть и значение равно единице, то BLACKLIST() возвращает 1. Что проверяется вот этой строчкой:
exten=>7495XXXXXXX,n,GotoIf($[${BLACKLIST()}=1]?blacklist)
Если условие выполняется, то вызывается extension с пометкой blacklist
exten=>7495XXXXXXX,n(blacklist),Hangup()
Для управления черным списком можно использовать CLI:
office-pbx*CLI> database put blacklist 74957007070 1
office-pbx*CLI> database del blacklist 74957007070
Чтобы упросить себе жизнь, можно написать shell скрипт:
~ # cat /root/bin/astblacklist.sh
#!/bin/bash
function helpfunction {
echo "astblacklist.sh [show|add|del][CALLERID]"
echo show - show blacklist AstDB family
echo add CALLERID - add CALLERID to blacklist
echo del CALLERID - add CALLERID to blacklist
}
ACTION=$1
CALLERID=$2
if [ ${ACTION} == 'show' ]; then
asterisk -r -x "database show" | fgrep blacklist
exit 0
fi
if [ ${ACTION} == 'add' ] || [ ${ACTION} == 'del' ]; then
if [ -z ${CALLERID} ]; then
helpfunction
exit 1
fi
if [ ${ACTION} == 'add' ];then
asterisk -r -x "database put blacklist ${CALLERID} 1"
exit 0
fi
if [ ${ACTION} == 'del' ];then
asterisk -r -x "database del blacklist ${CALLERID}"
exit 0
fi
fi
helpfunction
Можно изменять базу и при помощи extensions, для этого в asterisk 1.4 есть функция DB и DB_DELETE
[add-to-backlist]
exten=>_X.,1,Set(DB(blacklist/${EXTEN})=1)
exten=>_X.,n,background(demo-thanks)
exten=>_X.,n,Wait(1)
exten=>_X.,n,Hangup()
exten=>t,1,Hangup()
exten=>h,1,Hangup()
exten=>i,1,Hungup()
[del-from-backlist]
exten=>_X.,1,NoOp(${DB_DELETE(blacklist/${EXTEN})})
exten=>_X.,n,background(demo-thanks)
exten=>_X.,n,Wait(1)
exten=>_X.,n,Hangup()
exten=>t,1,Hangup()
exten=>h,1,Hangup()
exten=>i,1,Hungup()
Эти два контекста при помощи функций DB и DB_DELETE добавляют и удаляют из blacklist. Теперь нужно только вызвать их. Для этого в общем плане набора создаем два extension
exten => _*1*X.,1,Goto(add-to-backlist,${EXTEN:3},1)
exten => _*2*X.,1,Goto(del-from-backlist,${EXTEN:3},1)
Несколько полезных ссылок:
Функция DB
Функция DB_DELETE
Более продвинутая реализация черного списка
|
|
1 комментарийto Черный список для Asterisk
Leave a Reply
Вы должны войти чтобы оставить комментарий.
[...] можно спокойно послать звонящего куда подальше! Про «Простой» вариант написано можно почитать здесь, а мне захотелось слегка облегчить себе жизнь: ну [...]