# Добавление данных о звонке в тег новой сделки

При обработке звонков модулем Itgrix могут быть созданы новый контакт и новая сделка. По умолчанию сущности получают один тег - `Itgrix`.

С помощью кастомизации можно добавить теги с информацией о звонке, например, направление (`Входящий` или `Исходящий`) и статус (`Отвеченный` или `Пропущенный`).

Т.к. статус звонка будет известен только в конце звонка, то и добавление тегов нужно добавить в [кастомизацию параметров регистрации звонка (`process_call_params`)](/custom_amo.md#2-process_call_params).

В этой кастомизации известно:

* Является ли сущность (контакт/сделка) новой (т.е. создана ли в процессе обработки этого звонка) - `$params['entity_new']`. Значение `true`, если новая, иначе `false`.
* Какой тип у созданной сущности - `$params['entity_type']`. Для контакта значение `1`, для сделки значение `3`.
* ID сущности - `$params['entity_id']`.

Исходя из этих данных реализуем такой алгоритм:

* Теги будем устанавливать **только для новых сущностей (которые созданы модулем Itgrix).**
* Нужно получить ID сделки, у которой нужно обновить теги.
  * Если в кастомизацию пришла сущность типа сделка, то возьмем её ID из параметров.
  * Если же это контакт, тогда нужно получить данные этого контакта и взять ID первой связанной с ним сделки (у нового контакта может быть только одна сделка). Для этого воспользуемся функцией `Amo::getContact` (поставляется вместе с модулем в файле `/opt/itgrix_amo/customizer/lib/crm.php`). Формат возвращаемых данных описан в [документации amoCRM по работе с контактами](http://web.archive.org/web/20210623075152/https://www.amocrm.com/developers/content/api/contacts/).
* Осталось обновить теги у найденной сделки. Для этого воспользуемся функцией `Amo::updateLead` (поставляется вместе с модулем в файле `/opt/itgrix_amo/customizer/lib/crm.php`). Формат данных описан в [документации amoCRM по работе со сделками](http://web.archive.org/web/20210919140818/https://www.amocrm.com/developers/content/api/leads/).

В результате у сделки будут теги `Itgrix`, `Входящий` и `Отвеченный`:

<figure><img src="/files/1WQPdUxTSCAGrvaCIC3O" alt=""><figcaption></figcaption></figure>

### Пример кода кастомизации

Пример кода для добавления тегов в созданную сделку (файл `/opt/itgrix_amo/customizer/actions/process_call_params.php`):

```php
$this->logDebug('params: '.json_encode($params));

//
// Получить созданную сделку и добавить в нее теги
//

if ($params['call_full']['entity']['is_new'] === true) {
    $this->logInfo('Get created lead and modify its tag...');

if (empty($params['call_full']['deal']['id'])) {
    $this->logInfo('Get created lead and modify its tag...');
   } else {
      $leadId = $params['call_full']['deal']['id'];
        $tags = array();

        if ($params['call_full']['channel']['type'] === 'incoming') {
            array_push($tags, array('name' => 'Входящий'));
        } else {
            array_push($tags, array('name' => 'Исходящий'));
        }

        if ($params['call_full']['channel']["was_answered"] === true) { // true - отвеченный
            array_push($tags, array('name' => 'Отвеченный'));
        } else {
            array_push($tags, array('name' => 'Пропущенный'));
        }

        $this->logInfo(sprintf("Set tags %s to lead ID '%s'...",
            json_encode($tags, JSON_UNESCAPED_UNICODE), $leadId));
        $updateResult = Amo::updateLead($leadId, ['tags_to_add' => $tags]);
        if ($updateResult === false) {
            return array(
                'state' => 'error',
                'data'  => 'failed to update lead ID '.$leadId,
            );
        }
    }
}

$this->logDebug('return params: '.json_encode($params));
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/dobavlenie-dannykh-o-zvonke-v-teg-novoi-sdelki.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.
