> 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-zvonka-v-neskolko-sushnostei.md).

# dobavlenie zvonka v neskolko sushnostei

По умолчанию при регистрации звонка, amoCRM записывает его **только в одну сущность** (контакте/компании/сделке)**,** которую определяет [по своему алгоритму](https://www.amocrm.ru/developers/content/crm_platform/calls-api).

Задача от клиента: в базе CRM на один номер телефона было сохранено несколько контактов с разными ответственными. Нужно сохранить звонок во все сущности с таким номером.

Звонок в сущности отображается как **"примечание** **о звонке"** в списке событий:

На данный момент в amoCRM звонок фигурирует только в виде "примечания о звонке" в карточке сущности (контакта/компании/сделки).\
Поэтому можно вместо регистрации звонка через [API-метод calls](https://www.amocrm.ru/developers/content/crm_platform/calls-api) добавить примечание о звонке с помощью [API-метода notes](http://web.archive.org/web/20210623091710/https://www.amocrm.com/developers/content/api/notes/). Таким образом, чтобы добавить звонок в несколько сущностей, нужно добавить одинаковые примечания о звонке.

Для этого нужно в кастомизации [process\_call\_params](file:///1659967/Archive.zip/#2-process_call_params) воспользоваться функцией `Amo::addNoteToEntities`, которая уже присутствует в поставке модуля (файл `/opt/itgrix_amo/customizer/lib/crm.php`).

{% hint style="warning" %}
При добавлении примечания о звонке в несколько сущностей нужно НЕ регистрировать звонок стандартным методом, чтобы избежать дублирования примечания в одной из сущностей.

Для этого в текущей версии модуля нужно "сломать" регистрацию, вернув из кастомизации пустые параметры (см. пример).
{% endhint %}

### Пример

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

```php
//
// Подготовка данных примечания о звонке
//
$callInfo = array(
    'responsible_user_id' => $params['responsible_user_id'],
    'created_by'          => $params['created_by'],
    'params' => array(
        'UNIQ' => $params['call']['id'],
        'LINK' => Utils::makeRecordingUrl(
            $params['call']['id'],
            $params['call']['from'],
            $params['call']['to']),
        'DURATION' => $params['duration'],
        'SRC' => 'Itgrix',
        'call_status' => $params['call_status'],
        'call_result' => $params['call_result'],
    ),
    'created_at' => date_create($params['call']['end_time'])->getTimestamp(),
);
if ($params['direction'] === 'inbound') {
    $callInfo['note_type'] = 10; // входящий
    $callInfo['params']['PHONE'] = $params['call']['from'];
} else if ($params['direction'] === 'outbound') {
    $callInfo['note_type'] = 11; // исходящий
    $callInfo['params']['PHONE'] = $params['call']['to'];
}
$this->logDebug("call info: ".json_encode($callInfo));

//
// Добавляем примечания о звонках в контакты с данным телефоном
//
$phone = $callInfo['params']['PHONE'];
$contacts = Amo::getContactsList(array(
    'query' => $phone,
    'limit' => 250,
));
if ($contacts === false) {
    return array(
        'state' => 'error',
        'data'  => "Failed to get contacts with phone '$phone'",
    );
} else if (empty($contacts)) {
    $this->logDebug('No contacts. Do nothing, return original params');
    return array(
        'state' => 'success',
        'data'  => $params,
    );
}

$contactIds = array();
foreach ($contacts['_embedded']['items'] as $contact) {
    array_push($contactIds, $contact['id']);
}
$this->logDebug(sprintf("Found contacts with phone '%s': %s", $phone, json_encode($contactIds)));
$res = Amo::addNoteToEntities($callInfo, 'contact', $contactIds);
if ($res === false) {
    return array(
        'state' => 'error',
        'data'  => "Failed to add notes to contacts",
    );
}

//
// Ломаем регистрацию звонка во избежание дублирования примечаний о звонке в сущностях
//
$this->logDebug('Return EMPTY params to avoid duplicate call notes (breaks AddCall)');
$params = array();
return array(
    'state' => 'success',
    'data'  => $params,
);

```
