Битрикс24 и n8n: интеграция CRM без дублей, потери UTM и ручного ввода ¶
Обновлено: 2026-05-30
Используйте JSON как основу: замените credentials, URL порталов, поля CRM и правила дедупликации.
Проблема: Битрикс24 часто подключают к формам, Telegram и сайтам как “просто отправить лид”. Через неделю CRM наполняется дублями, UTM оказываются в комментариях, менеджеры не видят задачи, а webhook-ошибки теряются в execution history.
Решение: строим интеграционный слой на n8n: единый контракт лида, нормализация телефона и email, поиск дублей до создания сущности, запись UTM в отдельные поля, retry/DLQ для REST API и контрольные уведомления ответственному.
Проблема: почему простая интеграция Битрикс24 и n8n создаёт дубли ¶
Главная ошибка — создавать лид сразу после входящего webhook. Один клиент может оставить форму дважды, написать с другого email, перейти из VK или Tilda с новым UTM, а менеджер может уже вести сделку по тому же телефону. Без проверки дублей автоматизация продаж превращается в генератор ручной работы.
Вторая проблема — отсутствие контракта данных. Если форма передаёт phone, Telegram — contact.phone_number, а сайт — tel, то в Битрикс24 попадают разные форматы одного номера. Поэтому production-интеграция начинается не с crm.lead.add, а с нормализации и правил маршрутизации.
Архитектура связки Битрикс24, n8n, форм и уведомлений ¶
| Блок | Задача | Production-проверка |
|---|---|---|
| Webhook / Form input | принимает Tilda, VK, Telegram или сайт | секретный путь, JSON body, source и form_id |
| Normalize lead | чистит телефон, email, UTM и комментарий | единый формат +7, lowercase email, пустые поля |
| Duplicate lookup | ищет совпадения по PHONE/EMAIL | поиск до создания лида, не после |
| Create or update CRM item | создаёт лид/сделку или обновляет найденную | pipeline, status, responsible, UTM_* |
| Task and notification | ставит задачу и уведомляет менеджера | SLA, ссылка на карточку, без персональных данных в alert |
| Retry / DLQ | сохраняет сбои REST API | 429/5xx отдельно от 400/422 |
Для новых порталов Битрикс24 заранее решите, используются ли лиды или сразу сделки/контакты. В workflow это должен быть явный переключатель, а не скрытая логика в HTTP Request.
Контракт лида и сделки для Bitrix24 REST API ¶
{
"source": "tilda",
"external_id": "lead-10492",
"name": "Мария",
"phone": "+7 (925) 111-22-33",
"email": "maria@example.ru",
"comment": "Нужна интеграция CRM и сайта",
"utm_source": "yandex",
"utm_medium": "cpc",
"utm_campaign": "bitrix24_n8n",
"page": "https://example.ru/crm"
}
Минимальный обязательный ключ — телефон или email. Но для аналитики нужны UTM, страница, форма и внешний ID события: без них невозможно объяснить, откуда пришёл лид и почему он был обновлён, а не создан заново.
Code Node: нормализация и контроль качества ¶
const src = $json.body ?? $json;
const rawPhone = String(src.phone ?? src.tel ?? '').trim();
let digits = rawPhone.replace(/\D/g, '');
if (digits.length === 11 && digits.startsWith('8')) digits = `7${digits.slice(1)}`;
if (digits.length === 10) digits = `7${digits}`;
if (!/^7\d{10}$/.test(digits)) throw new Error(`Invalid phone for Bitrix24: ${rawPhone}`);
const email = String(src.email ?? '').trim().toLowerCase();
return [{ json: {
dedupe: { type: 'PHONE', value: `+${digits}`, email, key: `bitrix24:${digits}:${email || 'no-email'}` },
fields: {
TITLE: `Новая заявка: ${src.name ?? 'без имени'}`,
NAME: String(src.name ?? '').trim(),
PHONE: [{ VALUE: `+${digits}`, VALUE_TYPE: 'WORK' }],
EMAIL: email ? [{ VALUE: email, VALUE_TYPE: 'WORK' }] : [],
COMMENTS: String(src.comment ?? '').trim(),
SOURCE_ID: 'WEB',
UTM_SOURCE: src.utm_source ?? '', UTM_MEDIUM: src.utm_medium ?? '',
UTM_CAMPAIGN: src.utm_campaign ?? '', UTM_CONTENT: src.utm_content ?? '', UTM_TERM: src.utm_term ?? '',
UF_CRM_LANDING_PAGE: src.page ?? '', UF_CRM_EXTERNAL_ID: src.external_id ?? ''
}
}}];
Почему поиск дубля идёт до создания лида
Если сначала создать лид, а потом искать совпадения, CRM уже загрязнена. Правильный порядок: нормализация, duplicate lookup, решение update/create, только затем запись в Битрикс24.
Готовый workflow JSON: скачать и импортировать ¶
Скачать готовый workflow JSON Скачать тестовый payload
{
"name": "Nodbot - Bitrix24 integration blueprint with dedupe and UTM",
"nodes": [
{
"name": "Webhook input",
"type": "n8n-nodes-base.webhook",
"purpose": "Принять заявку из формы, Telegram или другого источника"
},
{
"name": "Normalize Bitrix24 lead",
"type": "n8n-nodes-base.code",
"purpose": "Собрать fields и dedupe key"
},
{
"name": "Find duplicate by phone/email",
"type": "n8n-nodes-base.httpRequest",
"purpose": "Вызвать поиск дублей через REST API"
},
{
"name": "Create or update CRM item",
"type": "n8n-nodes-base.httpRequest",
"purpose": "Создать лид/сделку или обновить найденную сущность"
},
{
"name": "Notify manager",
"type": "n8n-nodes-base.telegram",
"purpose": "Отправить короткий alert со ссылкой"
},
{
"name": "Respond",
"type": "n8n-nodes-base.respondToWebhook",
"purpose": "Вернуть безопасный ответ источнику"
}
],
"connections": "Webhook input → Normalize Bitrix24 lead → Find duplicate by phone/email → Create or update CRM item → Notify manager → Respond"
}
Пошаговая настройка Битрикс24, webhook и n8n ¶
- Создайте входящий webhook или приложение Битрикс24 с минимальными CRM-правами.
- Заведите пользовательские поля для landing page, external_id и служебного source.
- Импортируйте workflow JSON, замените URL портала, credentials, pipeline/status и responsible_user_id.
- Настройте маппинг UTM в отдельные поля, а не в комментарий.
- Прогоните тесты на повторный телефон, пустой email, кириллицу в UTM и ошибку REST API.
Тесты перед production ¶
curl -X POST "https://YOUR-N8N-DOMAIN/webhook/integration-bitrix24-n8n" \
-H "Content-Type: application/json" \
--data @integration-bitrix24-n8n-payload.json
- Отправьте один payload дважды и проверьте, что дубль не создан.
- Проверьте формат телефона +7, 8 и номер со скобками.
- Отключите API-токен и убедитесь, что событие попало в DLQ или alert.
- Проверьте, что менеджер видит задачу в нужной воронке и сроке.
- Сравните UTM в карточке CRM с исходным payload.
Production-риски ¶
- Webhook с полными правами. Утечка URL превращается в доступ к CRM-операциям; ограничивайте права и храните секреты в credentials/ENV.
- Дубли ищутся только по email. В российских лидах телефон часто надёжнее, а email может быть пустым.
- Разные режимы CRM. Если лиды отключены,
crm.lead.addне подходит: нужна сделка/контакт или smart process. - Нет retry на 429/5xx. Временная ошибка API не должна терять заявку.
- UTM в комментарии. Так маркетинг не сможет строить отчёты.
Полезные ссылки и смежные материалы ¶
- Bitrix24 REST: поиск дублей по коммуникациям
- Workflow Tilda → Битрикс24 с UTM
- Создание задач Битрикс24 из email
- Webhook idempotency через Postgres
Критерии готовности ¶
- Повторная заявка не создаёт вторую сущность без бизнес-правила.
- UTM и source лежат в отдельных полях Битрикс24.
- Ошибки REST API классифицируются и не теряются.
- У workflow есть владелец, тестовый payload и описание полей.
- Права webhook минимальны и не дают лишнего доступа к CRM.
Nodbot настроит n8n-интеграцию под вашу CRM-структуру: поля, воронки, дубли, UTM, retry, DLQ и мониторинг.
Обсудить интеграцию Битрикс24