Черный список номеров в Asterisk: блокировка спама в extensions.conf и AstDB
Причины необходимости блокировки номеров:
- Офис атакуют телефонные спамеры, роботы с автообзвоном или навязчивая реклама с одних и тех же номеров.
- Хулиганы или уволенные сотрудники непрерывно занимают телефонную линию компании.
- Необходимо мгновенно сбрасывать звонки от нежелательных абонентов без отвлечения менеджеров.
Способ 1. Использование встроенной базы данных Asterisk Blacklist (AstDB)
В Asterisk встроен удобный механизм черного списка, который проверяет номер звонящего по внутренней базе blacklist перед направлением вызова в отдел продаж.
Шаг А: Добавление спам-номера в базу через консоль CLI
Подключитесь к серверу АТС по SSH и откройте консоль Asterisk:
asterisk -rvvvВыполните команду добавления номера (в любом формате, как его передает оператор):
database put blacklist 84951234567 1
database put blacklist 79998887766 "Spam robot"Шаг Б: Просмотр и удаление номеров из черного списка
# Просмотреть весь черный список:
database show blacklist
# Удалить номер из черного списка:
database del blacklist 84951234567Способ 2. Проверка черного списка в диалплане (extensions.conf)
Откройте файл конфигурации диалплана /etc/asterisk/extensions.conf и добавьте проверку функции BLACKLIST() в самое начало входящего контекста для городских линий:
[from-trunk-incoming]
; Проверяем, есть ли входящий номер (CALLERID(num)) в черном списке AstDB
exten => _X.,1,NoOp(--- Входящий вызов от ${CALLERID(num)} ---)
same => n,GotoIf($[${BLACKLIST()}]?blacklisted)
; Если номера нет в ЧС — отправляем звонок в очередь продаж
same => n,Dial(PJSIP/101&PJSIP/102,30)
same => n,Hangup()
; Ветка для спамеров: выдаем сигнал 'Занято' или сбрасываем
same => n(blacklisted),NoOp(--- ВНИМАНИЕ: Номер ${CALLERID(num)} в ЧЕРНОМ СПИСКЕ! ---)
same => n,Answer()
same => n,Wait(1)
same => n,Playback(tt-allbusy) ; Воспроизвести короткие гудки
same => n,Hangup()Примените изменения без перезагрузки сервера:
asterisk -rx "dialplan reload"Способ 3. Блокировка в графическом интерфейсе FreePBX
- Зайдите в панель FreePBX → Admin → Blacklist.
- Нажмите кнопку Add Number.
- Введите номер телефона (например,
84951234567) и краткое описание («Коллекторы/Спам»). - Поставьте галочку «Block Unknown/Anonymous», если хотите заблокировать все вызовы со скрытых номеров без CallerID.
- Нажмите Save → Apply Config.
Частые вопросы (FAQ)
Как заблокировать звонок со скрытого номера (Anonymous / Private)?
В extensions.conf добавьте условие: same => n,ExecIf($["${CALLERID(num)}" = "" | "${CALLERID(num)}" = "anonymous"]?Hangup()).
Можно ли добавить спам-номер в черный список прямо с телефонной трубки?
Да. Во FreePBX наберите сервисный код *30 с телефона, введите номер спамера и нажмите #. А набрав *32, вы добавите последний входящий номер в черный список автоматически.
Что лучше: сразу сбрасывать звонок спамера командой Hangup() или поднимать трубку Answer()?
Если сделать мгновенный Hangup(), спам-робот может сразу начать повторный автодозвон. Лучше сделать Answer(), выдержать паузу Wait(2) и положить трубку — тогда робот решит, что звонок состоялся, и перестанет звонить.
Можно ли заблокировать сразу диапазон номеров (например, весь префикс +7495111xxxx)?
Да, через маску в диалплане extensions.conf: exten => _X./_7495111XXXX,1,Hangup(). Знак слэша означает проверку конкретного шаблона CallerID.