> For the complete documentation index, see [llms.txt](https://itgro-aly.gitbook.io/test-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://itgro-aly.gitbook.io/test-docs/custom_amo/dobavlenie-dannykh-o-zvonke-v-teg-novoi-sdelki.md).

# dobavlenie dannykh o zvonke v teg novoi sdelki

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

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

Т.к. статус звонка будет известен только в конце звонка, то и добавление тегов нужно добавить в [кастомизацию параметров регистрации звонка (`process_call_params`)](file:///1659967/Archive.zip/#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`, `Входящий` и `Отвеченный`:

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

Пример кода для добавления тегов в созданную сделку (файл `/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,
);
```
