← AI process automation with n8n
07 / 07 · 60 min

Capstone: an AI lead-qualification pipeline

An end-to-end project: webhook lead intake, enrichment, AI scoring with structured output, tier-based routing, reliability, and acceptance tests.

Lesson content is currently available in Russian.

What you will learn

  • →Спроектировать сквозной AI-пайплайн от вебхука до CRM с явным контрактом входа.
  • →Реализовать воспроизводимый AI-скоринг со structured output и страховочной валидацией.
  • →Сдать пайплайн по приёмочному чеклисту: отказы, дубликаты, метрики качества.

Архитектура пайплайна: от вебхука до CRM

Капстоун собирает все навыки курса в один production-пайплайн: форма на сайте шлёт лида, система валидирует, обогащает, оценивает через LLM и раскладывает по корзинам.

Webhook (POST /lead)
  → валидация payload (IF / Code) ──невалидно──→ Respond 422
  → дедупликация (Remove Duplicates по email)
  → обогащение (HTTP Request: данные о компании по домену)
  → AI-скоринг (AI Agent + Structured Output Parser)
  → страховочный IF (tier из A/B/C, score в 0..100)
  → Switch по tier:
      A → CRM + мгновенный алерт менеджеру
      B → CRM + welcome-цепочка
      C → лог-таблица «позже»
  → Respond to Webhook: 201 { leadId, tier }

Контракт входа фиксируем сразу: { email, name, company, message, source }, обязательны email и message. Всё, что не проходит контракт, получает 422 и не создаёт side effects.

Порядок сборки — скелет раньше мяса: сначала весь путь на заглушках (Edit Fields вместо CRM, фиксированный tier вместо агента), сквозной прогон зелёный — и только потом замена заглушек реальными интеграциями по одной. Так каждая проблема локализуется в последней заменённой ноде, а не «где-то в пайплайне».

AI-скоринг со structured output

Скоринг — сердце пайплайна. System message агента описывает идеальный профиль клиента (ICP) и шкалу:

Ты оцениваешь B2B-лидов для платформы оркестрации AI-агентов.
Идеальный клиент: компания 20+ человек, есть инженерная команда,
в заявке — конкретная задача автоматизации, а не «просто интересно».
Верни score 0-100 и tier: A (>= 70), B (40-69), C (< 40).
В reason назови конкретные сигналы из заявки.

Structured Output Parser получает схему:

{
  "type": "object",
  "properties": {
    "score": { "type": "number" },
    "tier": { "type": "string", "enum": ["A", "B", "C"] },
    "reason": { "type": "string" }
  },
  "required": ["score", "tier", "reason"]
}

Парсер гарантирует форму, но не бизнес-смысл, поэтому после агента стоит страховочный IF: tier действительно из списка, score в диапазоне. Невалидный выход — не падение, а ветка manual review: лид дороже красивой архитектуры.

Temperature держите 0.1-0.3: скоринг должен быть воспроизводимым. Поле reason обязательно сохраняйте в CRM — менеджер должен видеть, ПОЧЕМУ лид получил tier A; непрозрачному скорингу перестают доверять за неделю. Дешёвый тест стабильности: прогоните десять эталонных лидов дважды и сравните разброс score.

Надёжность: этот workflow будет падать

Проектируйте с допущением, что внешние сервисы будут падать, — потому что будут.

Обогащение — необязательный шаг: лид без данных о компании ценнее потерянного лида. Поэтому у ноды обогащения On Error = Continue (using error output): ветка ошибки ставит enriched: false и возвращается в основной поток — скоринг работает по тем полям, что есть. Плюс Retry On Fail (3 попытки, 2000 мс) от транзиентных сбоев.

CRM — обязательный шаг: здесь Retry On Fail тоже включён, но при исчерпании попыток лид не исчезает — error-ветка пишет его в резервную таблицу (Google Sheets или Postgres) со статусом crm_failed, а error workflow из урока 5 шлёт алерт с execution.url. После починки CRM лиды доливаются повтором executions — дедупликация по email гарантирует, что доехавшие ранее не задвоятся.

Дедупликация стоит ДО side effects: повторный submit формы и ретрай отправителя не создают второго лида.

И журнал: каждая заявка — строка в лог-таблице (timestamp, email, tier, score, enriched, статус доставки в CRM). Эта таблица — одновременно аудит, дашборд для владельца процесса и датасет для будущего улучшения промпта скоринга.

Приёмка: как понять, что пайплайн готов

Пайплайн готов не когда «демо прошло», а когда пройден приёмочный чеклист.

Функциональные сценарии: эталонный лид A-профиля → tier A, запись в CRM, менеджер получил алерт с reason; заявка «студент, пишу диплом» → C, менеджера не беспокоили; payload без email → 422, ни одной записи нигде.

Сценарии отказов: сервис обогащения выключен → лид прошёл со enriched: false и честным скорингом по остальным полям; тот же payload дважды → в CRM одна запись, второй запрос получил корректный ответ; CRM недоступна → алерт в error-канале, лид в резервной таблице, Retry execution после починки доводит его до CRM без дублей.

Метрики первой недели: медианное время от вебхука до ответа (цель — секунды); доля manual review — стабильно выше 10% значит, что схема или промпт слабые; согласованность с человеком — попросите менеджера вслепую оценить 20 лидов и сравните с tier модели. Расхождение больше ~30% лечится уточнением критериев ICP в system message, а не подкруткой temperature.

Это и есть выпускной стандарт курса: workflow, который переживает плохие данные, лежащие сервисы и повторы — и оставляет след, по которому его можно улучшать.

Practice

Сдача капстоуна

Соберите полный пайплайн квалификации: вебхук с контрактом входа, дедупликация, обогащение с деградацией, AI-скоринг со схемой, Switch по tier, CRM или её заглушка, лог-таблица, error workflow. Прогоните 10 тестовых лидов: три явных A, три B, четыре C или мусорных.

Deliverable

JSON всех workflow и таблица прогона: payload → tier, score, reason и что произошло (CRM, алерт, 422, дедуп).

Checkpoint

Проведите демонстрацию: живой лид от заявки до записи в CRM с объяснением каждого перехода.

  • ✓ Сквозной проход работает: вебхук отвечает 201 с tier, запись появляется в CRM или таблице.
  • ✓ Отказ внешнего сервиса и повторная отправка обработаны без потери и без дубликатов.
  • ✓ Скоринг воспроизводим и объясним: schema-валидный выход, reason сохраняется.

Check yourself

Почему дедупликация стоит до side effects, а не после?

01Почему дедупликация стоит до side effects, а не после?

Почему у ноды обогащения выбран On Error: Continue (using error output), а не Stop Workflow?

02Почему у ноды обогащения выбран On Error: Continue (using error output), а не Stop Workflow?

Зачем страховочный IF после агента, если уже есть Structured Output Parser?

03Зачем страховочный IF после агента, если уже есть Structured Output Parser?

Что должен получить клиент при payload без обязательного email?

04Что должен получить клиент при payload без обязательного email?

Стабильно высокая доля manual review (выше ~10%) сигналит о том, что…

05Стабильно высокая доля manual review (выше ~10%) сигналит о том, что…

Sources

Capstone: an AI lead-qualification pipeline · AI process automation with n8n · VORCL