Запросы в Битрикс из кастомизации

Общее описание

Запросы REST API Битрикс24 из кастомизации поддерживаются начиная с версии 3.4.0.
При обновлении (в т.ч. на 3.4.0) кастомизатор не изменяется, чтобы не нарушить настроенную клиентом работу интеграции. Поэтому, потребуется обновить кастомизатор вручную.
Из пользовательской кастомизации можно делать запросы в Битрикс24 (например, создать задачу или лид) в тех случаях, когда стандартная логика обработки звонка не охватывает специфические случаи.
Для этого в API кастомизатора реализован класс Bitrix с соответствующими методами. Методы, их аргументы и возвращаемые значения подробно описаны в файле**/opt/itgrix_bx/customizer/README**.
Для работы HTTP-запросов в кастомизаторе нужно, чтобы в системе был установлен модуль php-curl (опционально, без php-curl кастомизатор будет выполнять всё кроме HTTP-запросов).
Проверить можно, выполнив в терминале команду: php -r 'echo curl_version()["version"];' Пример ответа:7.47.0

Создание задачи

В кастомизациях доступен метод Bitrix::createTask, которая делает запрос в Битрикс24 на создание задачи, используя REST-метод tasks.task.add. Описание полей задачи в документации REST API Битрикс24.

Пример создания задачи по любому входящему звонку

Добавим вызов функции Bitrix::createTask в кастомизацию process_final_params (настраивается в файле /opt/itgrix_bx/customizer/actions/process_final_params.php).
Логика модуля Itgrix по умолчанию предполагает создание задачи при регистрации пропущенного звонка (тоже можно кастомизировать). В данном примере будет создана новая задача для любого входящего звонка (в т.ч. отвеченного). Таким образом для пропущенных будет создано две задачи, если не отключить создание задачи по пропущенному в настройках модуля.
1
if ($params['call']['type'] === 2) { // 2 - входящий; 3 - исходящий
2
$phone = $params['call']['from'];
3
4
// Сделаем одного и того же постановщика и ответственного для задачи
5
$responsibleUserId = 49;
6
$createdByUserId = 49;
7
8
// Установим срок выполнения - 1 час после окончания звонка
9
$deadLine = date_create($params['call']['end_time']);
10
$deadLine->add(new DateInterval('PT1H'));
11
// Пример срока в 1 день:
12
//$deadLine->add(new DateInterval('P1D'));
13
$deadLine = $deadLine->format('c');
14
15
$response = Bitrix::createTask(array(
16
'TITLE' => 'Обработать звонок от '.$phone,
17
'CREATED_BY' => $createdByUserId,
18
'RESPONSIBLE_ID' => $responsibleUserId,
19
'DEADLINE' => $deadLine,
20
));
21
22
if ($response === false) {
23
return array(
24
'state' => 'error',
25
'data' => 'Не удалось создать задачу для номера '.$phone,
26
);
27
}
28
// // Для отладки можно вывести ответ Битрикса в лог модуля Itgrix:
29
// $this->logDebug('response: '.json_encode($response, JSON_UNESCAPED_UNICODE));
30
}
31
32
return array(
33
'state' => 'success',
34
'data' => $params,
35
);
Copied!

Создание лида

В кастомизациях доступна функция Bitrix::createLead, которая делает запрос в Битрикс24 на создание лида, используя метод crm.lead.add. Подробное описание полей лида в документации REST API Битрикс24.
Функция Bitrix::createLead поддерживается начиная с версии 3.4.2.

Пример создания лида на любой входящий звонок

Добавим вызов функции Bitrix::createLead в кастомизацию process_final_params (настраивается в файле /opt/itgrix_bx/customizer/actions/process_final_params.php).
В таком случае будет создан новый лид (ещё один), даже если Битрикс создаст лид при регистрации звонка модулем Itgrix.
1
if ($params['call']['type'] === 2) { // 2 - входящий; 3 - исходящий
2
3
$phone = $params['call']['from'];
4
$trunk = $params['call']['trunk'];
5
6
$fields = array(
7
'TITLE' => $phone.' - входящий звонок',
8
'STATUS_ID' => 'NEW',
9
'OPENED' => 'Y',
10
// 'ASSIGNED_BY_ID' => 49,
11
'SOURCE_ID' => 'CALL',
12
'SOURCE_DESCRIPTION' => 'Звонок на внешний номер: '.$trunk.
13
' Создан кастомизацией Asterisk-коннектора Itgrix',
14
'PHONE' => array(
15
array(
16
'VALUE' => $phone,
17
'VALUE_TYPE' => 'WORK',
18
),
19
),
20
);
21
22
// Если сущность - это контакт или компания, то привяжем лид к ней.
23
$entityType = $params['entity_type'];
24
$entityId = $params['entity_id'];
25
26
if ($entityType === 'contact') {
27
$fields['CONTACT_ID'] = $entityId;
28
} else if ($entityType === 'company') {
29
$fields['COMPANY_ID'] = $entityId;
30
}
31
32
$response = Bitrix::createLead(
33
$fields,
34
array(
35
'REGISTER_SONET_EVENT' => 'N',
36
)
37
);
38
39
if ($response === false) {
40
return array(
41
'state' => 'error',
42
'data' => 'Не удалось создать лид для '.$phone,
43
);
44
}
45
// // Для отладки можно вывести ответ Битрикса в лог модуля Itgrix:
46
// $this->logDebug('response: '.json_encode($response, JSON_UNESCAPED_UNICODE));
47
}
48
49
return array(
50
'state' => 'success',
51
'data' => $params,
52
);
Copied!
Last modified 8h ago