Изменение параметров при click-to-call

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

  • Телефонный номер в CRM начинается с символа "+";

  • На Asterisk настроен особый набор номера – например, звонить можно только через 9.

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

Кастомизация настраивается в файле process_originate_params.php, он находится в каталоге:

itgrix_bx (Битрикс24)itgrix_amo (amoCRM)

/opt/itgrix_bx/customizer/actions/

/opt/itgrix_amo/customizer/actions/

Для более ранних версий:

itgrix_bx (Битрикс24) ДО версии 3.4.0itgrix_amo (amoCRM) ДО версии 2.6.0

/opt/itgrix_bx/custom/

/opt/itgrix_amo/custom/

Параметры

Вход:

{
  "params": {
    "caller_id":<caller_id>,
    "channel":<channel>,
    "context":<context>,
    "extension":<extension>,
    "priority":<priority>,
    "request_data":<request_data>
  }
}

Вернуть:

{
  "data": {
    "caller_id":<caller_id>,
    "channel":<channel>,
    "context":<context>,
    "extension":<extension>,
    "priority":<priority>
  }
}

Параметр request_data содержит все данные запроса от CRM. Он будет удалён перед выполнением Originate. Пример содержимого request_data при запросе от Bitrix24:

{
  "action": "make_call",
  "auth": {
    "access_token": "0000000001111111111111122222222222333333334444444444445555555",
    "application_token": "aaaaaaaabbbbbbbbbbbccccccccddddddddddd",
    "client_endpoint": "https:\/\/example.bitrix24.ru\/rest\/",
    "domain": "example.bitrix24.ru",
    "expires": "1645749061",
    "expires_in": "3600",
    "member_id": "eeeeeeffffffffffgggggggggg",
    "scope": "crm,entity,user,telephony,im,task,call,department,imopenlines",
    "server_endpoint": "https:\/\/oauth.bitrix.info\/rest\/",
    "status": "L",
    "user_id": "1"
  },
  "code": "0",
  "data": {
    "CALL_ID": "externalCall.abcdefg123456789.1645744511",
    "CALL_LIST_ID": "0",
    "CRM_ENTITY_ID": "12345",
    "CRM_ENTITY_TYPE": "LEAD",
    "EXTENSION": "111",
    "IS_MOBILE": "0",
    "LINE_NUMBER": "",
    "PHONE_NUMBER": "89120000000",
    "PHONE_NUMBER_INTERNATIONAL": "+79120000000",
    "USER_ID": "1"
  },
  "event": "ONEXTERNALCALLSTART",
  "portal": "example.bitrix24.ru",
  "ts": "1645745461"
}

Пример содержимого request_data при запросе от amoCRM:

{
  "action": "make_call",
  "code": "0",
  "data": {
    "id": "12345678",
    "type": "contact"
  },
  "phone": "89120000000",
  "portal": "itgro.amocrm.ru",
  "target": "https://apix.itgrix.ru:9004/v1/amo/make_call",
  "user_id": "1"
}

К возвращаемому массиву данных "data" можно добавить переменные "codecs" и "variables":

    "codecs": “<codecs>,
    "variable": “<variable>,

Добавлем префикс

//имена параметров как в конфиге
$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
);

Last updated