Периодически каждая компания сталкивается с проблемой поступления «спам» звонков. В связи с этим возникает потребность блокировки определенных номеров, чтобы звонки с этих номеров не поступали.
Продвинутый вариант
Создайте новое «Приложение диалплан»
Укажите произвольное название, к примеру 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» - это идентификатор приложения, найти можно в адресной строке браузера при редактирвоании приложения
Сохраните изменения!
Черный список телефонов будет храниться в файле:
«/storage/usbdisk1/mikopbx/custom_modules/balcklist.txt»
Также можно на АТС загрузить файлы оповещения о добавлении в черный список:
/storage/usbdisk1/mikopbx/custom_modules/blacklist_remove.wav
Для добавления номера в черный список просто выполните переадресацию на номер 99 (слепую, без консультации)Наберите 1*74950000300 для добавления номера в черный списокНаберите 0*74950000300 для удаления номера из черного списка
Упрощенная реализация
Подойдет для старых версий 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-ПРОВАЙДЕРА - значение, которое вы можете найти в адресной строке в момент конфигурации провайдера