Черные и белые списки
Периодически каждая компания сталкивается с проблемой поступления «спам» звонков. В связи с этим возникает потребность блокировки определенных номеров, чтобы звонки с этих номеров не поступали.
Продвинутый вариант
Создайте новое «Приложение диалплан»
Укажите произвольное название, к примеру Blacklist
Выберите «Тип кода» - «PHP AGI Скрипт»
Укажите короткий номер для приложения, к примеру 99
На вкладке «Программный код» вставьте:
<?php require_once('Globals.php'); use MikoPBX\Core\Asterisk\AGI; $agi = new AGI(); $isTransfer = !empty($agi->get_variable('ISTRANSFER', true)); $number = substr($agi->request['agi_callerid'], -10); $cliNumber = isset($argv[2]) && !empty($argv[2]) ? substr($argv[2], -10) : $number; $actionFlag = $isTransfer ? 1 : (isset($argv[1]) ? intval($argv[1]) : null); $agi->verbose('Action flag: ' . $actionFlag . ', Phone number: ' . $cliNumber, 1); $filename = '/storage/usbdisk1/mikopbx/custom_modules/blacklist.txt'; if(file_exists($filename)){ $blacklist = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $isInBlacklist = in_array($cliNumber, $blacklist); }else{ $isInBlacklist = false; } if (is_null($actionFlag) || is_null($cliNumber)) { if($isInBlacklist){ $agi->verbose('The number was found in the blacklist. The call will be completed'); $agi->hangup(); } exit(0); } if ($actionFlag === 1) { if (!$isInBlacklist) { $agi->verbose('Adding number to black list (fileWriteContent): ' . $cliNumber, 1); $blacklist[] = $cliNumber; \MikoPBX\Core\System\Util::fileWriteContent($filename, implode(PHP_EOL, $blacklist) . PHP_EOL); } else { $agi->verbose('Number already exists in the black list: ' . $cliNumber, 1); } $filename = '/storage/usbdisk1/mikopbx/custom_modules/blacklist_add.wav'; if(file_exists("$filename")){ $agi->exec('Playback', \MikoPBX\Core\System\Util::trimExtensionForFile($filename)); } } elseif ($actionFlag === 0) { if ($isInBlacklist) { $agi->verbose('Removing number from black list (fileWriteContent): ' . $cliNumber, 1); $blacklist = array_filter($blacklist, function($blacklistedNumber) use ($cliNumber) { return $blacklistedNumber !== $cliNumber; }); \MikoPBX\Core\System\Util::fileWriteContent($filename, implode(PHP_EOL, $blacklist) . PHP_EOL); } else { $agi->verbose('Number not found in black list: ' . $cliNumber, 1); } $filename = '/storage/usbdisk1/mikopbx/custom_modules/blacklist_remove.wav'; if(file_exists("$filename")){ $agi->exec('Playback', \MikoPBX\Core\System\Util::trimExtensionForFile($filename)); } } else { $agi->verbose('Invalid action flag: ' . $actionFlag . '. Use 1 to add, 0 to remove.', 1); exit(1); } $agi->verbose('Operation completed successfully.', 1);
Сохраните изменения и скопируйте идентификатор приложения из адресной строки браузера, в этом примере "
DIALPLAN-APP-1C34052A"
.Перейдите в раздел Система → Кастомизация системных файлов, откройте для редактирования файл extensions.conf
Выберите режим «Добавлять в конец файла», внизу в черное поле для редактирования вставьте следующие строки:
[internal-transfer](+) exten => _99,1,Set(__ISTRANSFER=transfer_) same => n,Goto(internal,${EXTEN},1) [applications](+) exten => _1*X.,1,AGI(DIALPLAN-APP-1C34052A.php,1,${EXTEN:3}) exten => _0*X.,1,AGI(DIALPLAN-APP-1C34052A.php,0,${EXTEN:3}) [add-trim-prefix-clid-custom] exten => _[0-9*#+a-zA-Z][0-9*#+a-zA-Z]!,1,NoOp(start check blacklist) same => n,AGI(DIALPLAN-APP-1C34052A.php) same => n,Return()
, где «
DIALPLAN-APP-1C34052A
» - это идентификатор приложения, найти можно в адресной строке браузера при редактирвоании приложенияСохраните изменения!
Упрощенная реализация
Подойдет для старых версий MikoPBX
Перейдите в раздел Система → Кастомизация системных файлов.

Откройте для редактирования конфигурационный файл extensions.conf.

Установите режим "Добавлять в конец файла" и вставьте следующий код:
[add-trim-prefix-clid-custom]
exten => _X!,1,NoOp(...)
; Черный список номеров. Вызов будет завершен.
same => n,ExecIf($["${CALLERID(num)}" == "72942293042"]?Hangup())
same => n,ExecIf($["${CALLERID(num)}" == "72942293043"]?Hangup())
same => n,ExecIf($["${CALLERID(num)}" == "72942293044"]?Hangup())
same => n,return

Белый список номеров иногда требуется описать для конкретных провайдеров:
[ID-ПРОВАЙДЕРА-incoming-custom]
exten => _X!,1,NoOp(...)
; Белый список номеров.
same => n,ExecIf($["${CALLERID(num)}" == "72942291111"]?return)
same => n,ExecIf($["${CALLERID(num)}" == "72942291112"]?return)
same => n,ExecIf($["${CALLERID(num)}" == "72942291113"]?return)
same => n,Hangup()

ID-ПРОВАЙДЕРА - значение, которое вы можете найти в адресной строке в момент конфигурации провайдера

Last updated
Was this helpful?