Черный список для 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
Более продвинутая реализация черного списка

Tags: ,

Пятница, Май 15th, 2009 Советы

3 Commentsto Черный список для Asterisk

  • […] можно спокойно послать звонящего куда подальше! Про «Простой» вариант написано можно почитать здесь, а мне захотелось слегка облегчить себе жизнь: ну […]

  • klistrod:

    А как сделать уведомления на почту чтото ктото попал в Черный список ?!

  • constantine.malov:

    В смысле? если кто-то в поддержке добавил номер в черный список через звонок и тоновый набор кого заблокировать? Тогда можно прямо в контекст, который работает с такими добавлениями добавить вызов system с командой отправки почты себе.

  • Leave a Reply

    Для отправки комментария вам необходимо авторизоваться.