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

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

{% hint style="info" %}
Запросы API amoCRM из кастомизации поддерживаются начиная с [версии 2.6.0](https://docs.itgrix.ru/custom_amo/pages/-MFFgLMt-w7Eq-gUqvP2#2.6.0).

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

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

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

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

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

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

В кастомизациях доступен метод **`Amo::createTask`**, которая делает запрос в amoCRM на создание задачи.\
Описание полей задачи в [документации **API amoCRM**](https://www.amocrm.ru/developers/content/crm_platform/tasks-api#tasks-add).

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

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

[Логика модуля Itgrix](/custom_amo.md#skhema-obrabotki-zvonka-modulem-integracii-itgrix) по умолчанию предполагает создание задачи при регистрации пропущенного звонка. В данном примере будет создана новая задача для **любого** входящего звонка (в т.ч. отвеченного). Таким образом для пропущенных будет создано две задачи, если не отключить создание задачи по пропущенному в настройках модуля.

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

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

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

    $response = Amo::createTask(array(
        'text'                => 'Обработать звонок от '.$phone,
        'complete_till'       => $deadLine,
        'created_by'          => $createdByUserId,
        'responsible_user_id' => $responsibleUserId,
    ));

    if ($response === false) {
        return array(
            'state' => 'error',
            'data'  => 'Не удалось создать задачу',
        );
    }

//    // Для отладки можно вывести ответ amoCRM в лог модуля Itgrix:
//    $this->logDebug('response: ' . json_encode($response, JSON_UNESCAPED_UNICODE));
}

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

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

В кастомизациях доступна функция `Amo::createLead`, которая делает запрос в amoCRM на создание сделки.\
Подробное описание полей сделки в [документации **API amoCRM**](https://www.amocrm.ru/developers/content/crm_platform/leads-api#leads-add).

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

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

В таком случае будет создана новая сделка (ещё одна), даже если [сделка уже создана при регистрации звонка модулем Itgrix](/custom_amo.md#skhema-obrabotki-zvonka-modulem-integracii-itgrix).

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

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

    // Установим дату-время окончания звонка как дату-время создания сделки
    $callEndTime = date_create($params['call']['end_time']);
    $callEndTime = intval($callEndTime->format('U'));

    $response  = Amo::createLead(array(
        'name'                => 'Сделка с клиентом '.$phone,
        'created_by'          => $createdByUserId,
        'responsible_user_id' => $responsibleUserId,
        'created_at'          => $callEndTime,
    ));

    if ($response === false) {
        return array(
            'state' => 'error',
            'data'  => 'Не удалось создать сделку',
        );
    }

//    // Для отладки можно вывести ответ amoCRM в лог модуля 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_amo/zaprosy-v-amocrm-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.
