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

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

{% hint style="info" %}
Запросы REST API Битрикс24 из кастомизации поддерживаются начиная с версии [3.4.0](https://docs.itgrix.ru/changelog-bx#3.4.0).

При обновлении (в т.ч. на 3.4.0) кастомизатор не изменяется, чтобы не нарушить настроенную клиентом работу интеграции. Поэтому, потребуется [обновить кастомизатор вручную](https://docs.itgrix.ru/custom_common/obnovlenie-kastomizatora-v-itgrix_bx-3.4.0-i-itgrix_amo-2.6.0).
{% endhint %}

Из пользовательской кастомизации можно делать запросы в Битрикс24 (например, создать задачу или лид) в тех случаях, когда [стандартная логика обработки звонка](https://docs.itgrix.ru/custom_bx/..#skhema-obrabotki-zvonka-modulem-integracii-itgrix) не охватывает специфические случаи.

Для этого в API кастомизатора реализован класс `Bitrix` с соответствующими методами. Методы, их аргументы и возвращаемые значения подробно описаны в файле\*\*`/opt/itgrix_bx/customizer/README`\*\*.

{% hint style="warning" %}
Для работы HTTP-запросов в кастомизаторе нужно, чтобы в системе был установлен модуль **php-curl** (опционально, без php-curl кастомизатор будет выполнять всё кроме HTTP-запросов).

Проверить можно, выполнив в терминале команду: `php -r 'echo curl_version()["version"];'`\
Пример ответа:`7.47.0`
{% endhint %}

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

В кастомизациях доступен метод **`Bitrix::createTask`**, которая делает запрос в Битрикс24 на создание задачи, используя [REST-метод **tasks.task.add**](https://dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_add.php).\
Описание полей задачи в [документации **REST API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_getFields.php).

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

Добавим вызов функции `Bitrix::createTask` в кастомизацию `process_final_params` (настраивается в файле `/opt/itgrix_bx/customizer/actions/process_final_params.php`).

Логика модуля Itgrix по умолчанию предполагает создание задачи при регистрации пропущенного звонка (тоже [можно кастомизировать](https://docs.itgrix.ru/custom_bx/task-for-missed-call)). В данном примере будет создана новая задача для **любого** входящего звонка (в т.ч. отвеченного). Таким образом для пропущенных будет создано две задачи, если не отключить [создание задачи по пропущенному в настройках модуля](https://docs.itgrix.ru/custom_bx/task-for-missed-call).

```php
if ($params['call']['type'] === 2) { // 2 - входящий; 3 - исходящий
    $phone = $params['call']['from'];

    // Сделаем одного и того же постановщика и ответственного для задачи
    $responsibleUserId = 49;
    $createdByUserId = 49;

    // Установим срок выполнения - 1 час после окончания звонка
    $deadLine = date_create($params['call']['end_time']);
    $deadLine->add(new DateInterval('PT1H'));
    // Пример срока в 1 день:
    //$deadLine->add(new DateInterval('P1D'));
    $deadLine = $deadLine->format('c');

    $response = Bitrix::createTask(array(
        'TITLE'          => 'Обработать звонок от '.$phone,
        'CREATED_BY'     => $createdByUserId,
        'RESPONSIBLE_ID' => $responsibleUserId,
        'DEADLINE'       => $deadLine,
    ));

    if ($response === false) {
        return array(
            'state' => 'error',
            'data'  => 'Не удалось создать задачу для номера '.$phone,
        );
    }
//    // Для отладки можно вывести ответ Битрикса в лог модуля Itgrix:
//    $this->logDebug('response: '.json_encode($response, JSON_UNESCAPED_UNICODE));
}

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

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

В кастомизациях доступна функция `Bitrix::createLead`, которая делает запрос в Битрикс24 на создание лида, используя [метод **crm.lead.add**](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_add.php).\
Подробное описание полей лида в [документации **REST API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php).

{% hint style="info" %}
Функция `Bitrix::createLead` поддерживается начиная с версии 3.4.2.
{% endhint %}

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

Добавим вызов функции `Bitrix::createLead` в кастомизацию `process_final_params` (настраивается в файле `/opt/itgrix_bx/customizer/actions/process_final_params.php`).

В таком случае будет создан новый лид (ещё один), даже если Битрикс создаст лид при регистрации звонка модулем Itgrix.

```php
if ($params['call']['type'] === 2) { // 2 - входящий; 3 - исходящий

    $phone = $params['call']['from'];
    $trunk = $params['call']['trunk'];

    $fields = array(
        'TITLE'              => $phone.' - входящий звонок',
        'STATUS_ID'          => 'NEW',
        'OPENED'             => 'Y',
//            'ASSIGNED_BY_ID'     => 49,
        'SOURCE_ID'          => 'CALL',
        'SOURCE_DESCRIPTION' => 'Звонок на внешний номер: '.$trunk.
            ' Создан кастомизацией Asterisk-коннектора Itgrix',
        'PHONE'              => array(
            array(
                'VALUE'      => $phone,
                'VALUE_TYPE' => 'WORK',
            ),
        ),
    );

    // Если сущность - это контакт или компания, то привяжем лид к ней.
    $entityType = $params['entity_type'];
    $entityId = $params['entity_id'];

    if ($entityType === 'contact') {
        $fields['CONTACT_ID'] = $entityId;
    } else if ($entityType === 'company') {
        $fields['COMPANY_ID'] = $entityId;
    }

    $response = Bitrix::createLead(
        $fields,
        array(
            'REGISTER_SONET_EVENT' => 'N',
        )
    );

    if ($response === false) {
        return array(
            'state' => 'error',
            'data'  => 'Не удалось создать лид для '.$phone,
        );
    }
//    // Для отладки можно вывести ответ Битрикса в лог модуля Itgrix:
//    $this->logDebug('response: '.json_encode($response, JSON_UNESCAPED_UNICODE));
}

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