Asterisk: забанить по номеру

Это бан-хаммерХочу рассказать о способе, который естественным образом вытекает из задачи забанить абонента по номеру. Оператор, принявший звонок, просто отправляет его на… специальный добавочный номер (к примеру «0»), на котором уже крутится логика бана этого номера. Для хранения номеров будем пользоваться внутренней базой данных Asterisk. Также хочу отметить, что для успешного функционирования данного способа у вас должен быть включён “слепой трансфер” в features.conf, по умолчанию это кнопка “#”. Самое приятное, что теперь операторы смогут банить неугодных без участия админа.

Начнём, пожалуй. Определяем в диалплане default добавочный номер, на который операторы будут отправлять “плохие” звонки. В данном случае оператору нужно будет набрать #0

[default]
exten = 0,1,Goto(ban,1)

[ban]
exten = s,1,Set(DB(ban/${CALLERID(number)})=1)
exten = s,n,System(echo "${STRFTIME(${EPOCH},,%d.%m.%Y-%H:%M:%S)}: Number ${CALLERID(number)} is banned by ${DIALEDPEERNUMBER}" | mail -s "Banned" vassily@pupkin.com)
exten = s,n,Hangup

При этом, как видно, номер сохраняется в базе данных “ban”, и отправляется уведомление админу (Васе Пупкину).

Теперь, при очередном звонке, Asterisk проводит проверку наличия номера в базе забаненных номеров:

[incoming]
exten = s,1,Answer
exten = s,n,Macro(blacklist)
exten = s,n,(здесь ваша обычная логика обработки звонка)

[macro-blacklist]
exten = s,1,GotoIf($["${DB(ban/${CALLERID(number)})}"="1"]?false)
exten = s,n,MacroExit
exten = s,n(false),Hangup

Эта полезная фишка убережёт не только ваши нервы, но и ваших коллег, сидящих на телефоне. И как обычно, всё так просто.

Похожие статьи

Leave a Reply

Your email address will not be published. Required fields are marked *