Связать контакт и компанию в Битрикс24 роботом из 1С
Как автоматически привязать контакт к компании в Битрикс24 при импорте сделок из 1С с помощью роботов и REST API. Пошаговая настройка триггеров, crm.deal.get, crm.company.contact.add, права доступа и примеры кода для CRM.
Как в Битрикс24 автоматически связать контакт и компанию, если они указаны в одной сделке (сделки импортируются из 1С, а в 1С контакт и компания не связаны)? Я хочу, чтобы в карточке компании отображались связанные контакты, а в карточке контакта — связанные компании. Можно ли реализовать это с помощью робота Битрикс24? Какие события/триггеры робота использовать, какие права и параметры нужны, и какова рекомендуемая последовательность действий или пример реализации (например, с использованием REST API: crm.deal.contact.items.get, crm.deal.get для получения id контактов и компании и crm.company.contact.add для добавления контактов к компании)?
Да — в Битрикс24 можно автоматически привязать контакт к компании при импорте сделок из 1С с помощью робота Битрикс24 и вызовов REST API. Обычно используют триггер «Создание/Обновление сделки» или переход в стадию, затем получают данные сделки через crm.deal.get, контакты через crm.deal.contact.items.get и создают связь через crm.company.contact.add (или отправляют данные на внешний сервис, который выполняет эти вызовы). Ниже — пошаговая схема, варианты реализации, пример кода и рекомендации по правам и отладке.
Содержание
- Роботы Битрикс24 для автоматической связи контакта и компании
- Права, авторизация и безопасный доступ
- Пример реализации через REST API битрикс24 (crm.deal.get, crm.deal.contact.items.get, crm.company.contact.add)
- Настройка робота в интерфейсе (условия, фильтры, предотвращение повторов)
- Отладка, логирование и частые ошибки
- Источники
- Заключение
Роботы Битрикс24 для автоматической связи контакта и компании
Почему это работает? При импорте из 1С сделка может прийти с полями «Компания» и «Контакт», но без внутрисистемной связи между ними. Робот Битрикс24 — хороший триггер для автоматизации: он срабатывает при создании/обновлении сделки или при переходе в нужную стадию и запускает логику, которая добавляет связь между компанией и контактами через REST API или через внешний сервис.
Какие триггеры подходят:
- Создание сделки (если 1С создаёт сделку один раз и сразу передаёт все данные).
- Обновление сделки (надежнее, т.к. 1С часто сначала создаёт запись, потом её дополняет).
- Переход в конкретную стадию (например «Контроль»), когда вы хотите запускать проверку только после импорта.
Практика: часто используют робот, который отправляет POST на ваш сервис (вебхук). Там лежит скрипт, который выполняет последовательность: получить сделку, получить контакты сделки, получить/проверить связи компании и добавить недостающие через crm.company.contact.add. Примеры настройки и подходов по смыслу описаны в статье про робота для проверки компании/контакта на vc.ru и в справке по полю «Клиент» в CRM helpdesk.bitrix24.ru.
Права, авторизация и безопасный доступ (CRM_READ/WRITE, входящий вебхук)
Какие права нужны:
- Для вызова методов REST нужны права доступа к CRM (в терминах интеграции — scope/crm или эквивалент: чтение/запись по сделкам, контактам и компаниям). В анализе: CRM_READ/WRITE для сделок, контактов и компаний.
- Если вы используете входящий вебхук (самый простой вариант для облачного Битрикс24), вебхук работает под пользователем, от имени которого создан; этот пользователь должен иметь доступ к нужным сущностям.
Варианты авторизации:
- Входящий вебхук (Incoming webhook): задаёте права «CRM», получаете ключ, с которым вызываете методы вида https://yourdomain.bitrix24.ru/rest/{user_id}/{webhook_key}/crm.method.json. Удобно для серверной реализации без OAuth.
- OAuth-приложение (если нужен более гибкий сценарий и централизованное управление правами).
- Робот в интерфейсе отправляет запрос на ваш внешний URL (HTTP-запрос) — тогда ваш сервер сам вызывает Битрикс REST под своим вебхуком или OAuth.
Безопасность: используйте HTTPS, ограничивайте IP/рефералы по возможности, храните ключи в секретном хранилище и назначьте специального сервисного пользователя для вебхука (чтобы не зависеть от аккаунта сотрудника).
Пример реализации через REST API битрикс24 (crm.deal.get, crm.deal.contact.items.get, crm.company.contact.add)
Рекомендуемая последовательность (простая и надёжная):
- Триггер робота: сделка создана/обновлена или перевод в стадию. Робот отправляет POST на ваш сервис с ID сделки.
- Сервис получает DEAL_ID.
- Вызываем crm.deal.get — получаем поля сделки, в т.ч. COMPANY_ID.
- Вызываем crm.deal.contact.items.get (или эквивалент) — получаем ID контактов, привязанных к сделке.
- Если COMPANY_ID пустой — ничего не делаем (или логируем). Если COMPANY_ID есть и есть контакты — для каждого contactId:
a) Проверяем, связан ли контакт с компанией (можно получить список контактов компании: crm.company.contact.items.get или попытаться добавить и обработать ошибку дублирования).
b) Если связь отсутствует — вызываем crm.company.contact.add с параметрами companyId и ENTITY_ID = contactId. - По успеху можно добавить комментарий в сделку или установить флаг (кастомное поле «Связь проверена») и вернуть результат роботу.
Ссылки на документацию методов и пояснения: подробности по добавлению связи — метод crm.company.contact.add (см. документацию) — training.bitrix24.com/rest_help/crm/companies/contacts/crm_company_contact_add.php. Общие нюансы интеграции 1С и CRM — bitrix24.ru/features/crm/1c/.
Пример на PHP (упрощённо, с входящим вебхуком в Bitrix24):
<?php
$domain = "https://yourdomain.bitrix24.ru";
$webhook = "1/WEBHOOK_KEY"; // user_id / webhook_key
function call($method, $params = []) {
global $domain, $webhook;
$url = "$domain/rest/$webhook/$method.json";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$res = curl_exec($ch);
curl_close($ch);
return json_decode($res, true);
}
// Получаем ID сделки из POST
$dealId = intval($_POST['dealId'] ?? 0);
if(!$dealId) exit('no deal id');
$deal = call('crm.deal.get', ['ID' => $dealId]);
$companyId = $deal['result']['COMPANY_ID'] ?? 0;
if(!$companyId) { exit('no company'); }
$contacts = call('crm.deal.contact.items.get', ['id' => $dealId]);
$contactIds = array_keys($contacts['result'] ?? []);
foreach($contactIds as $cid) {
// Опциональная проверка: получить контакты компании
$companyContacts = call('crm.company.contact.items.get', ['id' => $companyId]);
$companyContactIds = array_keys($companyContacts['result'] ?? []);
if(!in_array($cid, $companyContactIds)) {
$add = call('crm.company.contact.add', ['id' => $companyId, 'ENTITY_ID' => $cid]);
// обработка ошибок/логирование
}
}
echo 'done';
Curl-пример добавления связи напрямую:
curl -s -X POST "https://yourdomain.bitrix24.ru/rest/1/WEBHOOK_KEY/crm.company.contact.add.json" \
-d "id=123&ENTITY_ID=456"
Важно: иногда проще попытаться добавить связь и игнорировать ошибку «связь уже существует» — тогда код проще и идемпотентен. Если 1С создаёт записи в несколько шагов — добавьте таймер в роботе (задержку 30–120 секунд) или используйте условие на «Обновление», чтобы дождаться финальных данных.
Настройка робота в интерфейсе (условия, фильтры, предотвращение повторов)
Шаги в UI (коротко и практично):
- CRM → Сделки → Открыть воронку → рядом с нужной стадией нажать «Роботы».
- Добавить робот типа «Отправить вебхук / HTTP‑запрос» (или «Внешний сервис») — в зависимости от интерфейса.
- В URL указать ваш endpoint, метод POST, в теле отправить ID сделки (вставить макрос ID сделки через селектор макросов). Пример тела JSON: {“dealId”: “{макрос ID сделки}”} (в интерфейсе есть кнопка вставки параметров).
- Условие запуска: «Поле Компания заполнено» AND «Контакты есть» (если доступно) AND «Кастомное поле ‘Связь проверена’ ≠ Да» — чтобы робот не запускался бесконечно.
- Рекомендуется добавить задержку 30–120 секунд, чтобы пройти возможные дополнительные записи от 1С.
- В ответе сервис может вернуть статус и сообщение; при успешной привязке сервис может обновить сделку (crm.deal.update) — поставить метку «Связь проверена» или добавить комментарий через REST/робот.
Если вы не хотите свой сервер: можно создать приложение/робота, который выполняет REST-вызовы внутри Битрикс, но чаще всего удобнее подключить внешний endpoint.
Отладка, логирование и частые ошибки
Что чаще ломает процесс и как править:
- Права. Ошибка «access denied» — вебхук создан под пользователем без прав. Проверьте scope/crm и права пользователя.
- Гонки/нестабильность импорта 1С. 1С может отправлять данные частями — робот сработал раньше, чем заполнились поля. Решение: задержка робота, запуск на «Обновление сделки», или повторная проверка через CRON.
- Дубли. Если попытаться добавить уже существующую связь, API вернёт ошибку. Решение: проверять наличие связи заранее или игнорировать ошибку (идемпотентность).
- Неправильное соответствие контактов. Если в 1С контакт создаётся отдельно и не совпадает по уникальному признаку (телефон/email), может появиться другой контакт. Решение: настроить сопоставление (по email/телефон) или поиск контакта через crm.contact.list перед привязкой.
- Логирование. Записывайте результаты в лог-файл или в комментарий сделки (или в отдельный мониторинг). Это поможет быстро понять, какие сделки остались без связи.
Совет по предотвращению повторов: после успешной обработки устанавливайте кастомное булево поле «Связь проверена» или проставляйте метку в самой сделке — тогда робот по условию больше не будет обрабатывать эту запись.
Источники
- Настраиваем робот для проверки наличия компании и контакта в сделке Битрикс24
- Интеграция Битрикс24 и 1С: обмен данными и синхронизация с продуктами 1С
- Связь между сделками, контактами и компаниями (Helpdesk)
- Поле Клиент в карточке CRM (Helpdesk)
- crm.company.contact.add - документация REST API
Заключение
Коротко: да — роботы битрикс24 + REST API решают задачу автоматической привязки контакта к компании при импорте из 1С. Схема простая: триггер робота → получение сделки (crm.deal.get) → получение контактов сделки (crm.deal.contact.items.get) → добавление связей (crm.company.contact.add). Обратите внимание на права (CRM_READ/WRITE или scope crm), на время запуска (задержки/обновления) и на обработку дублей/повторов. Если настроить это как внешний webhook или как приложение с нужными правами и логикой проверки — карточки компании и контакта будут корректно отображать взаимные связи.