Блог Горошко Андрея Bitrix24,PHP Объединить дубликаты crm.entity.mergeBatch

Объединить дубликаты crm.entity.mergeBatch

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Объединить дубликаты crm.entity.mergeBatch». Мы подготовили подробный разбор принципов работы и развернутые примеры интеграции.

Объединить дубликаты crm.entity.mergeBatch

> Scope: crm
>
> Кто может выполнять метод: администратор

Метод crm.entity.mergeBatch объединяет несколько элементов в один.

Параметры метода

Название
тип
Описание
params
object
Объект с элементами для объединения (подробное описание)

Параметр params{#params}

Название
тип
Описание
entityTypeId
integer
Идентификатор типа объекта CRM. Возможные значения:
— 1 — лид
— 2 — сделка
— 3 — контакт
— 4 — компания
— 7 — предложение
— 31 — счет
— 128 — смарт-процесс. Идентификатор конкретного смарт-процесса можно узнать методами crm.enum.ownertype и crm.type.list
entityIds*
integer[]
Массив идентификаторов элементов, которые необходимо объединить. Минимум два элемента

Особенности работы метода

Объединять можно только элементы одного типа: лид с лидом, контакт с контактом, элемент смарт-процесса с ID 128 c элементом смарт-процесса с ID 128.

Полное автоматическое объединение доступно в нескольких случаях:

  • элементы идентичны друг другу,
  • элементы не идентичны, но разница в значениях полей не требует ручной обработки. Например, в одном элементе поле заполнено, а в другом это же поле пустое — будет сохранено значение из заполненного поля.

Главным элементом при объединении будет тот, ID которого указан первым в массиве entityIds. В главный элемент будет перенесена информация из других элементов. Все элементы кроме главного будут удалены после успешного объединения.

Ручное объединение при конфликте

Если метод возвращает статус CONFLICT, продолжить объединение можно вручную в интерфейсе Битрикс24 по ссылке:

  • Контакты: /crm/contact/merge/?id=1,2,3
  • Компании: /crm/company/merge/?id=1,2,3
  • Лиды: /crm/lead/merge/?id=1,2,3
  • Сделки: /crm/deal/merge/?id=1,2,3

Параметр id содержит идентификаторы объединяемых элементов через запятую.

  • Счета: /crm/type/31/merge/?id[]=1&id[]=2
  • Предложения: /crm/type/7/merge/?id[]=1&id[]=2
  • Смарт-процессы: /crm/type/128/merge/?id[]=1&id[]=2

Параметр id[] содержит идентификаторы объединяемых элементов, переданные в виде повторяющегося параметра.

Примеры кода

  • cURL (Webhook)
    curl -X POST \
         -H "Content-Type: application/json" \
         -H "Accept: application/json" \
         -d '{"params":{"entityTypeId":3,"entityIds":[100,101,102]}}' \
         https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/crm.entity.mergeBatch
  • cURL (OAuth)
    curl -X POST \
         -H "Content-Type: application/json" \
         -H "Accept: application/json" \
         -d '{"auth":"**put_access_token_here**","params":{"entityTypeId":3,"entityIds":[100,101,102]}}' \
         https://**put_your_bitrix24_address**/rest/crm.entity.mergeBatch
  • JS
    try
    {
    	const response = await $b24.callMethod(
    		'crm.entity.mergeBatch',
    		{
    			params: {
    				entityTypeId: 3,
    				entityIds: [100, 101, 102]
    			}
    		}
    	);
    	
    	const result = response.getData().result;
    	console.dir(result);
    }
    catch( error )
    {
    	console.error(error);
    }
  • PHP
    try {
        $response = $b24Service
            ->core
            ->call(
                'crm.entity.mergeBatch',
                [
                    'params' => [
                        'entityTypeId' => 3,
                        'entityIds'    => [100, 101, 102]
                    ]
                ]
            );
    
        $result = $response
            ->getResponseData()
            ->getResult();
    
        if ($result->error()) {
            error_log($result->error());
        } else {
            echo 'Success: ' . print_r($result->data(), true);
        }
    
    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error merging entities: ' . $e->getMessage();
    }
  • BX24.js
    BX24.callMethod(
        'crm.entity.mergeBatch',
        {
            params: {
                entityTypeId: 3,
                entityIds: [100, 101, 102]
            }
        },
        function(result) {
            if(result.error())
                console.error(result.error());
            else
                console.dir(result.data());
        }
    );
  • PHP CRest
    require_once('crest.php');

    $result = CRest::call(
        'crm.entity.mergeBatch',
        [
            'params' => [
                'entityTypeId' => 3,
                'entityIds' => [100, 101, 102]
            ]
        ]
    );

    echo '<PRE>';
    print_r($result);
    echo '</PRE>';

Обработка ответа

HTTP-статус: 200

{
    "result": {
        "STATUS": "SUCCESS",
        "ENTITY_IDS": [101, 102]
    },
    "time": {
        "start": 1750754639.300838,
        "finish": 1750754641.350269,
        "duration": 2.049431085586548,
        "processing": 2.0271031856536865,
        "date_start": "2025-06-24T11:43:59+03:00",
        "date_finish": "2025-06-24T11:44:01+03:00",
        "operating_reset_at": 1750755239,
        "operating": 0
    }
}

Возвращаемые данные

Название
тип
Описание
STATUS
string
Статус выполнения операции. Возможные значения:
— SUCCESS — объединение прошло успешно
— CONFLICT — возник конфликт данных, автоматическое объединение невозможно
— ERROR — произошла ошибка
ENTITY_IDS
integer[]
Массив идентификаторов элементов, которые были удалены при объединении
time
time
Информация о времени выполнения запроса

Обработка ошибок

HTTP-статус: 400

{
    "error": 0,
    "error_description": "The parameter entityIds must contains at least two elements."
}

Возможные коды ошибок {#errors}

КодОписаниеЗначение
403Access deniedУ пользователя нет прав на изменение или удаление элементов CRM
400The parameter entityTypeId is required.Не указан обязательный параметр entityTypeId
400The parameter entityIds does not contains valid elements.Не переданы или не найдены элементы для объединения
400The parameter entityIds must contains at least two elements.Для объединения требуется минимум два элемента
400Owner was not foundОбъект не найден
400Entity type {entityTypeName} is not supportedУказан неподдерживаемый тип объекта
400CRM_FEATURE_RESTRICTION_ERRORОграничение тарифа
  • crm.duplicate.findbycomm

💡 Экспертное мнение и рекомендации

Ключевые выводы по теме «Объединить дубликаты crm.entity.mergeBatch»:

Использование современных стандартов D7 при работе с crm.entity.mergeBatch позволяет писать чистый, масштабируемый и безопасный код. Не забывайте обрабатывать исключения (try/catch) и проверять права доступа текущего пользователя перед выполнением критических операций.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Удаление приложенийУдаление приложений

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Удаление приложений», разберем архитектурные особенности и предоставим готовые

Как использовать метод SDK crm.deal.userfield.add в Битрикс24Как использовать метод SDK crm.deal.userfield.add в Битрикс24

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Как использовать метод SDK crm.deal.userfield.add в Битрикс24». Вы узнаете экспертные методики работы с

Внедрение Битрикс24 для оптовой торговой компании и дистрибьютораВнедрение Битрикс24 для оптовой торговой компании и дистрибьютора

Профессиональная настройка и внедрение Битрикс24 CRM позволяет систематизировать работу отдела продаж, исключить потерю лидов и автоматизировать ключевые бизнес-процессы компании. Услуга «Внедрение Битрикс24 для оптовой торговой компании и дистрибьютора» обеспечивает сегментация