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

DaData и n8n: нормализация телефонов, адресов и реквизитов перед CRM

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

AI summary: Problem/Solution-гайд по DaData и n8n: как очищать телефон, email, адрес, ФИО и реквизиты перед записью в CRM, использовать quality codes, не терять исходные данные и контролировать ошибки API.
Готовый blueprint для внедрения

Импортируйте JSON в n8n, замените credentials, URL API, поля CRM/БД и лимиты под вашу инфраструктуру.

Проблема: формы, CRM и таблицы часто получают телефоны в разных форматах, адреса без индекса, email с пробелами и реквизиты без проверки. В итоге менеджеры вручную исправляют карточки, доставка ошибается, а аналитика не может нормально группировать лиды.

Решение: ставим DaData как слой качества данных в n8n: сохраняем raw-поля, отправляем их в clean/suggest API, проверяем quality codes, нормализуем телефон/email/адрес/ИНН и только после этого обновляем CRM или таблицу.

Схема интеграции DaData и n8n для нормализации лида перед CRM
Схема показывает, как сырой лид проходит через DaData и quality gate перед обновлением CRM.

Проблема: почему CRM без нормализации DaData быстро загрязняется

Главная ошибка — перезаписывать исходные данные очищенными без контроля качества. DaData может вернуть нормализованное значение, но вместе с ним нужно учитывать qc, qc_geo, полноту адреса и уверенность в распознавании. Иначе workflow красиво заполнит CRM, но фактически закрепит ошибку.

Вторая проблема — смешивать enrichment с дедупликацией. Нормализованный телефон помогает искать дубль, но решение о создании или обновлении карточки должно быть отдельным бизнес-правилом. Поэтому интеграция DaData и n8n должна возвращать не просто “красивый адрес”, а понятный объект качества данных.

Архитектура workflow DaData → n8n → CRM

БлокЗадачаProduction-проверка
Webhook / CRM triggerполучает сырой лид из формы, CRM или таблицыraw-поля сохраняются отдельно
Prepare DaData requestсобирает phone/email/address/innпустые поля не отправляются в API
DaData clean/suggestнормализует данные и возвращает quality codesтаймаут, токен, лимиты, статус 4xx/5xx
Quality gateрешает auto-update или manual reviewqc/qc_geo, confidence, обязательные поля
Update CRMпишет normalized-поля и raw-поляотдельные custom fields, история изменений
Audit and retryлогирует исход, ошибки и attemptsalert при 401/429/5xx

Для B2B-лидов отдельно храните ИНН/КПП и название организации из DaData. Для B2C важнее нормализованный телефон, email и адрес доставки.

Контракт входных данных для обогащения лида

{
  "lead_id": "crm-10492",
  "name": "ООО Ромашка",
  "phone": "8 (916) 123-45-67",
  "email": "  SALES@EXAMPLE.RU ",
  "address": "москва тверская 7",
  "inn": "7707083893",
  "source": "tilda"
}

Не удаляйте raw-поля. Если клиент указал “корпус 2, вход со двора”, эта информация может быть важнее идеальной формальной строки адреса.

Code Node: подготовка запроса в DaData и проверка качества

const src = $json.body ?? $json;
const rawPhone = String(src.phone ?? '').trim();
const rawEmail = String(src.email ?? '').trim();
const rawAddress = String(src.address ?? '').trim();
const inn = String(src.inn ?? '').replace(/\D/g, '');
const phoneDigits = rawPhone.replace(/\D/g, '');
if (!phoneDigits && !rawEmail && !rawAddress && !inn) {
  throw new Error('No fields for DaData enrichment');
}
return [{ json: {
  lead_id: String(src.lead_id ?? ''),
  raw: { phone: rawPhone, email: rawEmail, address: rawAddress, inn, name: src.name ?? '' },
  dadata: {
    phone: phoneDigits ? [rawPhone] : [],
    email: rawEmail ? [rawEmail.toLowerCase()] : [],
    address: rawAddress ? [rawAddress] : [],
    party_query: inn || String(src.name ?? '').trim()
  },
  quality_policy: { auto_update_qc_max: 1, require_phone: true, manual_review_on_qc_geo: [3,4,5] },
  dedupe_key: phoneDigits ? `phone:${phoneDigits}` : `email:${rawEmail.toLowerCase()}`
}}];
Почему raw и normalized нужно хранить рядом

Raw помогает расследовать спорные случаи и восстановить контекст заявки. Normalized нужен для поиска дублей, аналитики, доставки и автоматических правил. Перезапись без raw-поля делает ошибку необратимой.

Готовый workflow JSON: скачать и импортировать

Скачать готовый workflow JSON Скачать тестовый payload

{
  "name": "Nodbot - DaData enrichment before CRM update",
  "nodes": [
    {
      "name": "Webhook lead input",
      "type": "n8n-nodes-base.webhook",
      "purpose": "Принять сырой лид"
    },
    {
      "name": "Prepare DaData request",
      "type": "n8n-nodes-base.code",
      "purpose": "Собрать clean/suggest request"
    },
    {
      "name": "Call DaData API",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Получить нормализованные данные"
    },
    {
      "name": "Quality gate",
      "type": "n8n-nodes-base.if",
      "purpose": "Проверить qc и полноту"
    },
    {
      "name": "Update CRM fields",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Записать normalized и raw"
    },
    {
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "purpose": "Вернуть итог"
    }
  ],
  "connections": "Webhook lead input → Prepare DaData request → Call DaData API → Quality gate → Update CRM fields → Respond"
}

Пошаговая настройка DaData API, n8n и CRM-полей

  1. Создайте DaData API token и храните его в credentials или ENV.
  2. Определите, какие поля CRM будут raw, а какие normalized.
  3. Импортируйте workflow JSON и настройте endpoint DaData под clean или suggest API.
  4. Настройте quality gate: что обновлять автоматически, а что отдавать на ручную проверку.
  5. Проверьте лимиты API и alert на 401, 429 и 5xx.

Тесты перед production

curl -X POST "https://YOUR-N8N-DOMAIN/webhook/integration-dadata-n8n" \
  -H "Content-Type: application/json" \
  --data @integration-dadata-n8n-payload.json
  1. Телефон в формате 8, +7, пробелы и скобки.
  2. Email с пробелами и верхним регистром.
  3. Адрес без индекса и с опечаткой.
  4. ИНН организации и название без ИНН.
  5. DaData вернул низкий quality code или пустой результат.

Production-риски

  • Перезаписали raw-адрес. Курьерский комментарий или уточнение клиента потерялись.
  • Не проверили quality codes. CRM получила красивое, но неверное значение.
  • DaData используется для дедупликации без бизнес-правил. Похожие записи могут быть ошибочно объединены.
  • Токен в Code Node. API token должен быть в credentials/ENV.
  • Нет backoff. При лимитах API workflow начинает падать пачками.
Карточка результата нормализации DaData в n8n с quality code
Пример результата: поля нормализованы, quality code допустим, CRM обновляется безопасно.

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

  1. Raw и normalized-поля разделены.
  2. Quality gate не пропускает сомнительные значения автоматически.
  3. Ошибки DaData логируются и отправляются в alert.
  4. CRM-дедупликация использует нормализованный телефон/email, но не объединяет записи без правила.
  5. У workflow есть тестовый payload и владелец полей.
Нужно очистить лиды перед CRM без ручной рутины?

Nodbot настроит DaData + n8n: clean/suggest API, quality gate, raw/normalized-поля, дедупликацию и alert-ы по ошибкам.

Обсудить очистку данных