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

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

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

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

Из пользовательской кастомизации можно делать запросы в amoCRM (например, создать задачу или сделку) в тех случаях, когда [стандартная логика обработки звонка](https://docs.itgrix.ru/custom_amo/..#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](https://docs.itgrix.ru/custom_amo/..#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](https://docs.itgrix.ru/custom_amo/..#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,
);
```
