Перейти к содержанию

Битрикс24 и n8n: интеграция CRM без дублей, потери UTM и ручного ввода

Обновлено: 2026-05-30

AI summary: Problem/Solution-гайд по Битрикс24 и n8n: как принимать заявки, нормализовать phone/email, искать дубли через REST API, создавать лид или сделку, сохранять UTM, ставить задачи и не терять события при ошибках API.
Готовый blueprint для внедрения

Используйте JSON как основу: замените credentials, URL порталов, поля CRM и правила дедупликации.

Проблема: Битрикс24 часто подключают к формам, Telegram и сайтам как “просто отправить лид”. Через неделю CRM наполняется дублями, UTM оказываются в комментариях, менеджеры не видят задачи, а webhook-ошибки теряются в execution history.

Решение: строим интеграционный слой на n8n: единый контракт лида, нормализация телефона и email, поиск дублей до создания сущности, запись UTM в отдельные поля, retry/DLQ для REST API и контрольные уведомления ответственному.

Схема интеграции Битрикс24 и n8n с поиском дублей и UTM
Схема показывает production-путь заявки до CRM: нормализация, поиск дубля, запись и уведомление.

Проблема: почему простая интеграция Битрикс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 API429/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

  1. Создайте входящий webhook или приложение Битрикс24 с минимальными CRM-правами.
  2. Заведите пользовательские поля для landing page, external_id и служебного source.
  3. Импортируйте workflow JSON, замените URL портала, credentials, pipeline/status и responsible_user_id.
  4. Настройте маппинг UTM в отдельные поля, а не в комментарий.
  5. Прогоните тесты на повторный телефон, пустой 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
  1. Отправьте один payload дважды и проверьте, что дубль не создан.
  2. Проверьте формат телефона +7, 8 и номер со скобками.
  3. Отключите API-токен и убедитесь, что событие попало в DLQ или alert.
  4. Проверьте, что менеджер видит задачу в нужной воронке и сроке.
  5. Сравните UTM в карточке CRM с исходным payload.

Production-риски

  • Webhook с полными правами. Утечка URL превращается в доступ к CRM-операциям; ограничивайте права и храните секреты в credentials/ENV.
  • Дубли ищутся только по email. В российских лидах телефон часто надёжнее, а email может быть пустым.
  • Разные режимы CRM. Если лиды отключены, crm.lead.add не подходит: нужна сделка/контакт или smart process.
  • Нет retry на 429/5xx. Временная ошибка API не должна терять заявку.
  • UTM в комментарии. Так маркетинг не сможет строить отчёты.
Карточка лида Битрикс24 с UTM, задачей и признаком дедупликации
Визуальный пример результата: лид не продублирован, UTM сохранены, менеджеру поставлена задача.

Критерии готовности

  1. Повторная заявка не создаёт вторую сущность без бизнес-правила.
  2. UTM и source лежат в отдельных полях Битрикс24.
  3. Ошибки REST API классифицируются и не теряются.
  4. У workflow есть владелец, тестовый payload и описание полей.
  5. Права webhook минимальны и не дают лишнего доступа к CRM.
Нужно связать Битрикс24 с формами без дублей?

Nodbot настроит n8n-интеграцию под вашу CRM-структуру: поля, воронки, дубли, UTM, retry, DLQ и мониторинг.

Обсудить интеграцию Битрикс24