Изменение параметров при 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.0
itgrix_amo (amoCRM) ДО версии 2.6.0
/opt/itgrix_bx/custom/
/opt/itgrix_amo/custom/

Параметры

Вход:
1
{
2
"params": {
3
"caller_id":<caller_id>,
4
"channel":<channel>,
5
"context":<context>,
6
"extension":<extension>,
7
"priority":<priority>,
8
"request_data":<request_data>
9
}
10
}
Copied!
Вернуть:
1
{
2
"data": {
3
"caller_id":<caller_id>,
4
"channel":<channel>,
5
"context":<context>,
6
"extension":<extension>,
7
"priority":<priority>
8
}
9
}
Copied!
Параметр request_data содержит все данные запроса от CRM. Он будет удалён перед выполнением Originate. Пример содержимого request_data при запросе от Bitrix24:
1
{
2
"action": "make_call",
3
"auth": {
4
"access_token": "0000000001111111111111122222222222333333334444444444445555555",
5
"application_token": "aaaaaaaabbbbbbbbbbbccccccccddddddddddd",
6
"client_endpoint": "https:\/\/example.bitrix24.ru\/rest\/",
7
"domain": "example.bitrix24.ru",
8
"expires": "1645749061",
9
"expires_in": "3600",
10
"member_id": "eeeeeeffffffffffgggggggggg",
11
"scope": "crm,entity,user,telephony,im,task,call,department,imopenlines",
12
"server_endpoint": "https:\/\/oauth.bitrix.info\/rest\/",
13
"status": "L",
14
"user_id": "1"
15
},
16
"code": "0",
17
"data": {
18
"CALL_ID": "externalCall.abcdefg123456789.1645744511",
19
"CALL_LIST_ID": "0",
20
"CRM_ENTITY_ID": "12345",
21
"CRM_ENTITY_TYPE": "LEAD",
22
"EXTENSION": "111",
23
"IS_MOBILE": "0",
24
"LINE_NUMBER": "",
25
"PHONE_NUMBER": "89120000000",
26
"PHONE_NUMBER_INTERNATIONAL": "+79120000000",
27
"USER_ID": "1"
28
},
29
"event": "ONEXTERNALCALLSTART",
30
"portal": "example.bitrix24.ru",
31
"ts": "1645745461"
32
}
Copied!
Пример содержимого request_data при запросе от amoCRM:
1
{
2
"action": "make_call",
3
"code": "0",
4
"data": {
5
"id": "12345678",
6
"type": "contact"
7
},
8
"phone": "89120000000",
9
"portal": "itgro.amocrm.ru",
10
"target": "https://apix.itgrix.ru:9004/v1/amo/make_call",
11
"user_id": "1"
12
}
Copied!
К возвращаемому массиву данных "data" можно добавить переменные "codecs" и "variables":
1
"codecs":<codecs>,
2
"variable":<variable>,
Copied!

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

1
//имена параметров как в конфиге
2
$phone = &$params['extension'];
3
4
//Получаем в $match последние 10 цифр номера
5
if(preg_match('~(\d{10})$~', $phone, $match)){
6
//Добавляем к найденому префикс
7
$phone = '8' . $match[1];
8
}
9
10
return array(
11
'state' => 'success',
12
'data' => $params
13
);
Copied!

Разные контексты

Бывает, появляется необходимость звонить через разные контексты. В примере звонки с номеров 161, 162, 163 пойдут через контекст custom-context-1; а с номеров 141, 140 через контекст custom-context-2; остальные звонки пойдут через стандартный контекст, указанный в настройках.
1
//имена параметров как в конфиге
2
$phone = &$params['extension'];
3
$channel = explode('/', $params['channel']);
4
5
$contexts = array(
6
'custom-context-1' => array(161, 162, 163),
7
'custom-context-2' => array(141, 140),
8
);
9
10
foreach($contexts as $context => $phones){
11
if(in_array($channel[1], $phones)){
12
$params['context'] = $context;
13
break;
14
}
15
}
16
17
return array(
18
'state' => 'success',
19
'data' => $params
20
);
Copied!