К списку статей

Изменение номера\контекста для вызова в астериск

Инициализация звонка из CRM может не сработать по следующим причинам:

  • Телефонный номер в CRM начинается с символа "+";
  • На Asterisk настроен особый набор номера, например звонить можно только через 9.

Логика такой доработки будет следующая: будем получать последние 10 символов (для России) и прибавлять к полученному результату нужный префикс. В примере префиксом будет цифра 8.

Для настройки кастомизации необходимо подключить файл кастомизатора в настроки модуля. Редактируем файл /opt/bx24asterisk/custom/process_originate_params.php.

Если папки /opt/bx24asterisk/custom нет, редактируем файла /opt/bx24asterisk/customizer.php, после строки case 'process_originate_params':

Подробное описание входящих\выходящих параметров описано в статье

//имена параметров как в конфиге
$phone = &$params['extension'];

//Полчаем в $match последние 10 цифр номера
if(preg_match('~(\d{10})$~', $phone, $match)){
    //Добавляем к найденому префикс
    $phone = '8' . $match[1];
}

return array(
    'state' => 'success',
    'data' => $params
);

Бывает появляется необходимость звонить через разные контексты. В примере: звонки с номеров (161, 162, 163) пойдут через контекст custom-context-1; с номеров (141, 140) через контекст custom-context-2; остальные звонки пойдут через стандартный контекст, указанный в настройках.

//имена параметров как в конфиге
$phone = &$params['extension'];
$channel = explode('/', $params['channel']);

$contexts = array(
    'custom-context-1' => array(161, 162, 163),
    'custom-context-2' => array(141, 140),
);

foreach($contexts as $context => $phones){
    if(in_array($channel[1], $phones)){
        $params['context'] = $context;
        break;
    }
}

return array(
    'state' => 'success',
    'data' => $params
);