Настроил Черный список по инструкции https://wiki.mikopbx.ru/providers:black_list
Обнаружил проблему:
при Входящем вызове план набора проходит через "add-trim-prefix-clid-custom", который добавили вручную. CallerIDnum на этом этапе считывается правильно. Дальше вызов идет на внутренний номер (100), с которого хотим внести звонящего в ЧС. тут и начинается заморчка. Для системы приложение с номером "**99" вызывает именно внутренний номер (100), поэтому CallerIDnum подставляется внутренний и в ЧС заносится именно он.
Поскольку данный модуль проще, чем ЧС на 2019 версии (добавлять руками), пришлось изучать, как исправить данную ситуацию.
У agi есть функция get_full_variable, но в 2022.3.15 этой функции нет.
Поскольку работал в режиме "без изменения системных файлов", то пришлось костылить.
Если есть более удобный вариант, прошу специалистов ответить. Либо исправить FAQ.
Ниже рабочий код ЧС (заменить в своем приложении, создав резервную копию).
<?php
use MikoPBX\Core\Asterisk\AGI;
use MikoPBX\Core\System\Processes;
require_once('Globals.php');
$agi = new AGI();
$number = $agi->request['agi_callerid'];
$filename = '/storage/usbdisk1/mikopbx/custom_modules/balcklist.txt';
if (isset($argv[1])) {
if ($argv[1]=='check') {
$result = Processes::mwExec("/usr/sbin/grep '$number' < $filename");
if ($result === 0) {
// Номер найден.
$agi->verbose('The number ' . $number . ' was found in the blacklist. The call will be completed');
$agi->hangup();
} else {
// Номер не найден.
$agi->verbose('The number ' . $number . ' was not found in the blacklist.');
}
}
} else {
// Добавить в ЧС
$agi->answer();
$origchan = $agi->get_variable("FROM_CHAN", true);
$orignum = $agi->evaluate("GET FULL VARIABLE $[CDR(src)] {$origchan}");
file_put_contents($filename, $orignum['data'].PHP_EOL, FILE_APPEND);
$agi->verbose('Add number ' . $orignum['data'] . ' to black list', 1);
$agi->hangup();
}
?>
В файле extensions.conf (режим "добавлять в конец файла") вместо
[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-***.php)
same => n,Return()
прописать
[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-***.php,"check")
same => n,Return()
где "DIALPLAN-APP-***.php" - ваше приложение