n8n + RetailCRM: Неочевидные сценарии автоматизации

n8n + RetailCRM: Неочевидные сценарии автоматизации

Продвинутая автоматизация RetailCRM с помощью n8n. Сценарии, которые невозможно реализовать встроенными средствами CRM. Примеры кода и готовые workflow.

18 минут чтения

Что такое n8n и зачем он нужен с RetailCRM

n8n — это open-source платформа для автоматизации workflow (рабочих процессов). Это аналог Zapier/Make.com, но с полным контролем и возможностью хостить на своем сервере.

Зачем нужен n8n, если в RetailCRM уже есть триггеры?

Триггеры RetailCRM — это мощный инструмент, но у них есть ограничения:

  • ❌ Нет планировщика (scheduled tasks) — нельзя запускать действия по расписанию
  • ❌ Нет сложной бизнес-логики с множественными условиями и циклами
  • ❌ Ограниченная интеграция с внешними API (только HTTP-запросы)
  • ❌ Нельзя агрегировать данные из нескольких источников
  • ❌ Нет работы с AI/ML моделями для персонализации
  • ❌ Сложно делать batch-обработку больших объемов данных

n8n решает эти задачи и открывает возможности продвинутой автоматизации.

  ## Архитектура связки n8n + RetailCRM
  
┌──────────────────┐
│   RetailCRM      │
│  (События CRM)   │
└────────┬─────────┘
         │ Webhook
         ▼
┌──────────────────┐      ┌─────────────────┐
│      n8n         │◄────►│  Внешние API    │
│   (Оркестратор)  │      │  (GPT, Telegram,│
└────────┬─────────┘      │   Analytics...)  │
         │                └─────────────────┘
         │ API Call
         ▼
┌──────────────────┐
│   RetailCRM      │
│  (Обновление)    │
└──────────────────┘
  ## Сценарий #1: Умные серийные рассылки с персонализацией через AI

  ### Проблема
  

В RetailCRM можно отправить email через триггер, но нельзя:

  • Создать серию писем (Day 1, Day 3, Day 7) автоматически
  • Персонализировать контент на основе поведения клиента
  • Использовать AI для генерации уникального текста для каждого клиента

Решение через n8n

Workflow:

1. Webhook от RetailCRM (новый клиент зарегистрировался)
   ↓
2. Получить историю заказов клиента через API RetailCRM
   ↓
3. Анализ данных: сегмент, интересы, средний чек
   ↓
4. Генерация персонального текста через OpenAI GPT-4
   ↓
5. Создание серии задач в n8n (отложенная отправка на Day 1, 3, 7)
   ↓
6. Отправка email через SendGrid/UniSender с уникальным контентом
   ↓
7. Логирование результатов обратно в RetailCRM
  #### Пример n8n workflow (JSON фрагмент)
  
{
  "nodes": [
    {
      "name": "Webhook RetailCRM",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "retailcrm-new-customer",
        "httpMethod": "POST"
      }
    },
    {
      "name": "Get Customer Data",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "=https://yourstore.retailcrm.ru/api/v5/customers/{{$json.customer.id}}",
        "authentication": "genericCredentialType",
        "method": "GET",
        "headers": {
          "X-API-KEY": "{{$credentials.retailcrm.apiKey}}"
        }
      }
    },
    {
      "name": "Generate Personalized Content",
      "type": "n8n-nodes-base.openAi",
      "parameters": {
        "resource": "text",
        "operation": "complete",
        "model": "gpt-4",
        "prompt": "=Напиши персональное приветственное письмо для клиента интернет-магазина {{$json.customer.firstName}}. Его интересы: {{$json.tags.join(', ')}}. Средний чек: {{$json.avgCheck}}₽. Тон: дружелюбный, стиль: современный."
      }
    },
    {
      "name": "Schedule Email Day 1",
      "type": "n8n-nodes-base.schedule",
      "parameters": {
        "rule": {
          "interval": [{"field": "days", "value": 1}]
        }
      }
    },
    {
      "name": "Send Email",
      "type": "n8n-nodes-base.sendGrid",
      "parameters": {
        "to": "={{$json.customer.email}}",
        "subject": "Добро пожаловать в наш магазин!",
        "text": "={{$node['Generate Personalized Content'].json.choices[0].text}}"
      }
    }
  ]
}
  #### Результат
  

✅ Open Rate вырос с 18% до 34% благодаря персонализации ✅ Click Rate увеличился на 67% ✅ Конверсия серии писем: 12% (было 4%)

  ## Сценарий #2: Автоматический ежедневный отчет руководителю

  ### Проблема
  

RetailCRM не умеет автоматически отправлять отчеты по расписанию. Триггеры срабатывают только на события.

  ### Решение через n8n
  

Задача: Каждое утро в 9:00 отправлять директору отчет о продажах за вчера + план на сегодня.

  #### Workflow
  
1. Schedule Trigger (каждый день в 9:00)
   ↓
2. Получить заказы за вчера (API RetailCRM)
   ↓
3. Получить незавершенные задачи на сегодня
   ↓
4. Агрегация: сумма продаж, количество заказов, средний чек
   ↓
5. Сравнение с планом (данные из Google Sheets)
   ↓
6. Генерация красивого HTML-отчета
   ↓
7. Отправка в Telegram + Email директору
   ↓
8. Если план не выполнен — создать задачу в RetailCRM "Разобраться с низкими продажами"
  #### Пример кода для агрегации данных
  
// Code Node в n8n (JavaScript)
const orders = $input.all();

const stats = {
  totalRevenue: 0,
  orderCount: orders.length,
  avgCheck: 0,
  topProducts: {},
  topManagers: {}
};

orders.forEach(order => {
  stats.totalRevenue += order.json.totalSumm;

  // Топ товары
  order.json.items.forEach(item => {
    if (!stats.topProducts[item.offer.name]) {
      stats.topProducts[item.offer.name] = 0;
    }
    stats.topProducts[item.offer.name] += item.quantity;
  });

  // Топ менеджеры
  const manager = order.json.manager?.name || 'Не назначен';
  if (!stats.topManagers[manager]) {
    stats.topManagers[manager] = { count: 0, revenue: 0 };
  }
  stats.topManagers[manager].count++;
  stats.topManagers[manager].revenue += order.json.totalSumm;
});

stats.avgCheck = stats.totalRevenue / stats.orderCount;

// Сортировка топов
stats.topProducts = Object.entries(stats.topProducts)
  .sort((a, b) => b[1] - a[1])
  .slice(0, 5);

stats.topManagers = Object.entries(stats.topManagers)
  .sort((a, b) => b[1].revenue - a[1].revenue)
  .slice(0, 3);

return [{ json: stats }];
  #### Пример Telegram-сообщения
  
📊 Отчет за {{yesterday}}

💰 Выручка: {{totalRevenue}} ₽ (план: 500 000₽)
📦 Заказов: {{orderCount}} шт
🧮 Средний чек: {{avgCheck}} ₽

🔥 Топ товары:
1. {{topProducts[0].name}} — {{topProducts[0].qty}} шт
2. {{topProducts[1].name}} — {{topProducts[1].qty}} шт
3. {{topProducts[2].name}} — {{topProducts[2].qty}} шт

⭐ Лучшие менеджеры:
1. {{topManagers[0].name}} — {{topManagers[0].revenue}}₽
2. {{topManagers[1].name}} — {{topManagers[1].revenue}}₽

📋 Задачи на сегодня: {{todayTasks}} шт

{{planStatus === 'failed' ? '⚠️ План не выполнен! Требуется разбор.' : '✅ План выполнен!'}}
  ## Сценарий #3: Умная очистка дублей клиентов

  ### Проблема
  

В RetailCRM накапливаются дубли клиентов (один клиент оформлял заказы с разных номеров или email). Ручная очистка отнимает часы работы.

  ### Решение через n8n
  

Workflow: Еженедельная проверка и автоматическое объединение дублей

1. Schedule (каждое воскресенье в 3:00 ночи)
   ↓
2. Получить всех клиентов из RetailCRM (пагинация по 100 шт)
   ↓
3. Анализ схожести:
   - Levenshtein distance для имен (с учетом опечаток)
   - Совпадение телефонов/email
   - Схожие адреса доставки
   ↓
4. Группировка потенциальных дублей
   ↓
5. Для каждой группы:
   - Определить "главного" клиента (с максимумом данных)
   - Перенести заказы от дублей к главному
   - Объединить теги и кастомные поля
   - Удалить дубли через API
   ↓
6. Отчет в Telegram: "Очищено X дублей, объединено Y заказов"
  #### Алгоритм поиска дублей (Code Node)
  
// Поиск дублей по схожести
function findDuplicates(customers) {
  const duplicateGroups = [];
  const processed = new Set();

  customers.forEach((customer, index) => {
    if (processed.has(customer.id)) return;

    const group = [customer];

    for (let i = index + 1; i  85% — считаем дублем
      if (score > 0.85) {
        group.push(other);
        processed.add(other.id);
      }
    }

    if (group.length > 1) {
      duplicateGroups.push(group);
    }
    processed.add(customer.id);
  });

  return duplicateGroups;
}

function calculateSimilarity(c1, c2) {
  let score = 0;
  let checks = 0;

  // Телефон (вес 40%)
  if (c1.phones && c2.phones) {
    const phones1 = c1.phones.map(p => p.number.replace(/\D/g, ''));
    const phones2 = c2.phones.map(p => p.number.replace(/\D/g, ''));
    if (phones1.some(p => phones2.includes(p))) {
      score += 0.4;
    }
    checks++;
  }

  // Email (вес 30%)
  if (c1.email && c2.email && c1.email.toLowerCase() === c2.email.toLowerCase()) {
    score += 0.3;
    checks++;
  }

  // Имя (вес 20%, с учетом опечаток)
  if (c1.firstName && c2.firstName) {
    const nameSimilarity = 1 - (levenshteinDistance(
      c1.firstName.toLowerCase(),
      c2.firstName.toLowerCase()
    ) / Math.max(c1.firstName.length, c2.firstName.length));
    score += nameSimilarity * 0.2;
    checks++;
  }

  // Адрес (вес 10%)
  if (c1.address && c2.address) {
    const addrSimilarity = 1 - (levenshteinDistance(
      c1.address.text?.toLowerCase() || '',
      c2.address.text?.toLowerCase() || ''
    ) / Math.max(c1.address.text?.length || 0, c2.address.text?.length || 0));
    score += addrSimilarity * 0.1;
    checks++;
  }

  return checks > 0 ? score : 0;
}

// Levenshtein distance для сравнения строк
function levenshteinDistance(str1, str2) {
  const matrix = [];
  for (let i = 0; i  item.json);
const duplicates = findDuplicates(customers);

return duplicates.map(group => ({ json: { group } }));
  #### Результат
  

✅ Очистка 200-300 дублей в неделю автоматически ✅ Экономия 3-4 часов работы менеджера ✅ Точность определения: 94%

  ## Сценарий #4: Интеграция с системами без API (парсинг + автозаполнение)

  ### Проблема
  

У вас есть старая учетная система поставщика без API. Нужно ежедневно проверять остатки товаров, но это возможно только через их веб-интерфейс.

  ### Решение через n8n
  

Используем headless browser для автоматизации:

1. Schedule (каждый день в 6:00)
   ↓
2. Puppeteer Node: открыть сайт поставщика
   ↓
3. Автоматическая авторизация (логин/пароль)
   ↓
4. Переход в раздел "Остатки товаров"
   ↓
5. Парсинг HTML таблицы с остатками
   ↓
6. Сопоставление артикулов поставщика с вашими товарами (mapping)
   ↓
7. Обновление остатков в RetailCRM через API
   ↓
8. Если товар закончился — создать задачу менеджеру по закупкам
  #### Пример Puppeteer-скрипта
  
// Execute Command Node (Puppeteer)
const puppeteer = require('puppeteer');

async function scrapeSupplierStocks() {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();

  // Авторизация
  await page.goto('https://supplier.example.com/login');
  await page.type('#username', 'your-login');
  await page.type('#password', 'your-password');
  await page.click('#login-button');
  await page.waitForNavigation();

  // Переход к остаткам
  await page.goto('https://supplier.example.com/stocks');
  await page.waitForSelector('#stocks-table');

  // Парсинг таблицы
  const stocks = await page.evaluate(() => {
    const rows = Array.from(document.querySelectorAll('#stocks-table tbody tr'));
    return rows.map(row => {
      const cells = row.querySelectorAll('td');
      return {
        article: cells[0]?.textContent.trim(),
        name: cells[1]?.textContent.trim(),
        quantity: parseInt(cells[2]?.textContent.trim()) || 0,
        price: parseFloat(cells[3]?.textContent.replace(/[^0-9.]/g, '')) || 0
      };
    });
  });

  await browser.close();
  return stocks;
}

const stocks = await scrapeSupplierStocks();
return stocks.map(item => ({ json: item }));
  ## Сценарий #5: Резервное копирование и аналитика

  ### Проблема
  

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

  ### Решение через n8n
  

Ежедневный экспорт данных в аналитическое хранилище:

1. Schedule (каждую ночь в 2:00)
   ↓
2. Получить все заказы за вчера (RetailCRM API)
   ↓
3. Обогащение данных:
   - Добавить UTM-метки из внешней системы аналитики
   - Рассчитать LTV клиента
   - Определить RFM-сегмент
   ↓
4. Запись в Google BigQuery / PostgreSQL
   ↓
5. Обновление дашборда в Google Data Studio / Metabase
   ↓
6. Если аномалия (резкое падение заказов) — уведомление в Telegram
  #### Пример записи в PostgreSQL
  
// Postgres Node в n8n
INSERT INTO analytics.orders (
  order_id,
  customer_id,
  order_date,
  total_amount,
  items_count,
  utm_source,
  utm_medium,
  utm_campaign,
  customer_ltv,
  rfm_segment
) VALUES (
  '{{$json.id}}',
  '{{$json.customer.id}}',
  '{{$json.createdAt}}',
  {{$json.totalSumm}},
  {{$json.items.length}},
  '{{$json.customFields.utm_source}}',
  '{{$json.customFields.utm_medium}}',
  '{{$json.customFields.utm_campaign}}',
  {{$node['Calculate LTV'].json.ltv}},
  '{{$node['RFM Segmentation'].json.segment}}'
) ON CONFLICT (order_id) DO UPDATE SET
  total_amount = EXCLUDED.total_amount,
  rfm_segment = EXCLUDED.rfm_segment;
  ## Сценарий #6: Кросс-платформенные уведомления с эскалацией

  ### Проблема
  

Важные заказы (VIP-клиенты, крупные суммы) требуют немедленной реакции менеджера. Одного email недостаточно — нужна эскалация по каналам.

  ### Решение через n8n
  

Умная система уведомлений с эскалацией:

1. Webhook от RetailCRM (новый VIP-заказ > 50 000₽)
   ↓
2. Отправка уведомления в Telegram менеджеру
   ↓
3. Wait 10 минут
   ↓
4. Проверка: изменился ли статус заказа?
   ↓
5. Если НЕТ:
   - Звонок менеджеру через API телефонии (Zadarma/Mango)
   - Дублирование уведомления руководителю
   - Создание задачи с высоким приоритетом
   ↓
6. Wait еще 20 минут
   ↓
7. Если ВСЕ ЕЩЕ НЕТ реакции:
   - Push-уведомление директору
   - SMS резервному менеджеру
   - Автоматическое назначение заказа другому менеджеру
  #### Пример workflow с условиями
  
{
  "nodes": [
    {
      "name": "VIP Order Webhook",
      "type": "n8n-nodes-base.webhook"
    },
    {
      "name": "Send Telegram to Manager",
      "type": "n8n-nodes-base.telegram"
    },
    {
      "name": "Wait 10 min",
      "type": "n8n-nodes-base.wait",
      "parameters": {
        "amount": 10,
        "unit": "minutes"
      }
    },
    {
      "name": "Check Order Status",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "=https://yourstore.retailcrm.ru/api/v5/orders/{{$json.order.id}}"
      }
    },
    {
      "name": "IF Status Changed",
      "type": "n8n-nodes-base.if",
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json.order.status.code}}",
              "value2": "new"
            }
          ]
        }
      }
    },
    {
      "name": "Call Manager",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.zadarma.com/v1/request/callback/",
        "method": "POST",
        "body": {
          "from": "{{$json.manager.phone}}",
          "to": "internal-number",
          "sip": "your-sip"
        }
      }
    }
  ]
}
  ## Установка и настройка n8n для работы с RetailCRM

  ### Вариант 1: Docker (рекомендуется)
  
# docker-compose.yml
version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=your-secure-password
      - N8N_HOST=n8n.yourdomain.com
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://n8n.yourdomain.com/
      - GENERIC_TIMEZONE=Europe/Moscow
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

Запуск:

docker-compose up -d
  ### Вариант 2: npm (для разработки)
  
npm install -g n8n
n8n start
  ### Настройка RetailCRM Credentials в n8n
  
  • Зайти в n8n Settings Credentials
  • Add Credential HTTP Header Auth
  • Заполнить:
Name: RetailCRM API
Header Name: X-API-KEY
Header Value: ваш-api-ключ-из-retailcrm
  • Save

Создание первого workflow

Простой пример: логирование новых заказов в Google Sheets

  • Создать новый Workflow
  • Добавить Webhook Trigger
  • Добавить HTTP Request для получения деталей заказа
  • Добавить Google Sheets Node для записи данных
  • Активировать workflow
  • В RetailCRM создать webhook на событие order.create с URL из n8n

Стоимость внедрения и поддержки

  ### Затраты
  
Компонент                          Стоимость
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
n8n (self-hosted)                 Бесплатно (Open Source)
Сервер (VPS 2GB RAM)              500 - 1000₽/мес
Домен + SSL                       Бесплатно (Let's Encrypt)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Настройка (услуга)                20 000 - 50 000₽
Разработка кастомных workflow     5 000₽ за workflow
Обучение команды                  10 000₽
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ИТОГО (старт)                     30 000 - 60 000₽
Ежемесячно                        500 - 1000₽

Альтернатива: n8n Cloud (платный хостинг) — от $20/мес

  ## Реальные кейсы и результаты

  ### Кейс 1: Магазин электроники
  

Задача: Автоматизация работы с гарантийными заявками

Решение через n8n:

  • Webhook при создании заказа с кастомным полем "Гарантийный ремонт"
  • Автоматическое создание тикета в Jira для сервисного центра
  • Отправка клиенту трек-номера для отслеживания ремонта
  • Еженедельные уведомления клиенту о статусе ремонта
  • При завершении ремонта — автоматическая печать накладной и уведомление курьеру

Результат: Сокращение времени обработки гарантийных заявок с 3 дней до 4 часов. NPS вырос на 28%.

  ### Кейс 2: Оптовая торговля стройматериалами
  

Задача: Динамическое ценообразование на основе остатков

Решение через n8n:

  • Каждый час анализ остатков товаров
  • Если остаток 200% — цена -10% (распродажа излишков)
  • Автоматическое обновление цен в RetailCRM и на сайте
  • Уведомление менеджерам о критических остатках

Результат: Рост маржи на 8%, сокращение неликвида на 34%.

  ## Когда НЕ нужен n8n
  

n8n — это мощный инструмент, но он избыточен, если:

  • Все ваши задачи решаются встроенными триггерами RetailCRM
  • Нет необходимости в интеграции с экзотическими сервисами
  • В команде нет технически подкованного человека (хотя бы базовый JS)
  • Бюджет на автоматизацию меньше 50 000₽

Вывод

n8n + RetailCRM — это pro-level автоматизация для бизнеса, который:

  • Хочет выжать максимум из данных CRM
  • Интегрируется с 5+ внешними сервисами
  • Нуждается в сложной бизнес-логике (не покрываемой триггерами)
  • Готов вкладываться в технологии для конкурентного преимущества

С n8n вы можете автоматизировать процессы, которые раньше казались невозможными. Это инвестиция в масштабируемость и эффективность.

  ## Нужна помощь с внедрением n8n?
  

Команда Sideback поможет настроить автоматизацию на n8n + RetailCRM:

  • ✅ Аудит процессов и подбор сценариев для автоматизации
  • ✅ Установка и настройка n8n на вашем сервере
  • ✅ Разработка кастомных workflow под ваши задачи
  • ✅ Интеграция с внешними сервисами (AI, аналитика, телефония)
  • ✅ Обучение команды работе с n8n
  • ✅ Техническая поддержка и доработка workflow

Стоимость: от 30 000₽ | Срок: 1-2 недели

Заказать внедрение n8n

Или получите бесплатную консультацию

Поделиться статьей:

ВКонтакте Telegram WhatsApp