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

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

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

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

Из пользовательской кастомизации можно делать запросы в Битрикс24 (например, создать задачу или лид) в тех случаях, когда [стандартная логика обработки звонка](/custom_bx.md#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 по умолчанию предполагает создание задачи при регистрации пропущенного звонка (тоже [можно кастомизировать](/custom_bx/task-for-missed-call.md)). В данном примере будет создана новая задача для **любого** входящего звонка (в т.ч. отвеченного). Таким образом для пропущенных будет создано две задачи, если не отключить [создание задачи по пропущенному в настройках модуля](/custom_bx/task-for-missed-call.md).

```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,
);
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.itgrix.ru/custom_bx/zaprosy-v-bitriks-iz-kastomizacii.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
