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

Интеграция Notion и n8n: контент-пайплайн, статусы, дедлайны и защита от дублей

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

AI summary: Problem/Solution-гайд по Notion и n8n: как превратить базу Notion в управляемый контент-пайплайн с дедлайнами, статусами, уникальным external_id, webhook-обработкой и безопасной публикацией.
Готовый blueprint для внедрения

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

Проблема: Notion удобен для редакционного плана, но без правил статусов и idempotency страницы дублируются, задачи теряются, а черновики случайно уходят в публикацию.

Решение: строить интеграцию Notion и n8n как state machine: читать только карточки с нужным статусом, фиксировать external_id, валидировать обязательные поля, переводить страницу в следующий статус и сохранять ссылку на результат.

Схема интеграции Notion и n8n для контент-пайплайна со статусами и дедупликацией
Схема показывает путь карточки Notion от статуса Ready до draft и обновления результата.

Проблема: почему база Notion без workflow-правил превращается в хаос

Типичная ошибка — использовать Notion только как красивую таблицу. Редактор меняет статус, интегратор вручную копирует текст, маркетолог просит срочно опубликовать, а n8n не понимает, какую страницу уже обработал. В результате один и тот же материал может попасть в WordPress дважды или потерять метки кампании.

Надёжный сценарий использует Notion database как источник правды: у каждой карточки есть статус, владелец, дедлайн, canonical slug, external_id и поле для ошибки. Тогда автоматизация контента становится предсказуемой и удобной для команды.

Архитектура workflow Notion + n8n для контент-пайплайна

БлокЗадачаProduction-проверка
Notion Trigger / Pollчитает страницы со статусом Readyфильтр по database_id и статусу
Validate propertiesпроверяет title, slug, owner, deadlineнет пустых обязательных полей
Build publishing payloadготовит Markdown/HTML и metadatacanonical, tags, excerpt, cover
Idempotency checkсравнивает external_id или slugнет повторной публикации
Publish / create taskсоздаёт черновик или задачуне публикует без review
Update Notion statusпишет результат и ссылкуDone, Error, Needs review

Для редакционного процесса лучше создавать draft или задачу, а не сразу публиковать материал. Человек проверяет финальный вид, а n8n сохраняет трассировку.

Контракт страницы Notion

{
  "page_id": "notion-page-10492",
  "database_id": "content_calendar",
  "title": "Как настроить n8n с Notion",
  "slug": "n8n-notion-content-pipeline",
  "status": "Ready for automation",
  "owner": "editor@example.ru",
  "deadline": "2026-06-05",
  "tags": [
    "n8n",
    "Notion",
    "content ops"
  ],
  "external_id": "content:n8n-notion-content-pipeline"
}

Ключевое поле — external_id или slug. Именно оно защищает от повторного создания черновика, если карточку случайно вернули в статус Ready.

Code Node: проверка статуса, дедлайна и external_id

const src = $json.body ?? $json;
const title = String(src.title ?? src.properties?.Title?.title?.[0]?.plain_text ?? '').trim();
const slug = String(src.slug ?? src.properties?.Slug?.rich_text?.[0]?.plain_text ?? '').trim().toLowerCase();
const status = String(src.status ?? src.properties?.Status?.select?.name ?? '').trim();
const deadline = String(src.deadline ?? src.properties?.Deadline?.date?.start ?? '').trim();
if (!title || !slug) throw new Error('Notion page requires title and slug');
if (!/^[-a-z0-9]+$/.test(slug)) throw new Error(`Invalid slug: ${slug}`);
if (!['Ready for automation','Ready to publish'].includes(status)) {
  return [{ json: { action: 'skip', reason: 'wrong_status', status, page_id: src.page_id ?? src.id } }];
}
const externalId = String(src.external_id ?? `notion:${slug}`);
return [{ json: {
  action: 'create_draft', page_id: src.page_id ?? src.id, external_id: externalId,
  title, slug, deadline, tags: src.tags ?? [], status,
  idempotency_key: externalId,
  publish_payload: { title, slug, status: 'draft', source: 'notion', deadline }
}}];
Почему статус важнее кнопки Запустить

Если workflow ориентируется на статус в базе, команда может управлять публикацией без доступа к n8n. Это снижает риск ручных запусков и дублирования черновиков.

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

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

{
  "name": "Nodbot - Notion content pipeline with idempotency",
  "nodes": [
    {
      "name": "Notion Ready Trigger",
      "type": "n8n-nodes-base.notionTrigger",
      "purpose": "Найти карточки Ready"
    },
    {
      "name": "Validate Notion properties",
      "type": "n8n-nodes-base.code",
      "purpose": "Проверить title, slug, status"
    },
    {
      "name": "Check idempotency",
      "type": "n8n-nodes-base.if",
      "purpose": "Не создавать дубль"
    },
    {
      "name": "Create draft or task",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Создать черновик/задачу"
    },
    {
      "name": "Update Notion status",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Записать результат"
    },
    {
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "purpose": "Вернуть summary"
    }
  ],
  "connections": "Notion Ready Trigger → Validate Notion properties → Check idempotency → Create draft or task → Update Notion status → Respond"
}

Пошаговая настройка Notion database, n8n и публикации

  1. Создайте Notion integration и выдайте доступ только нужной базе.
  2. Добавьте поля Status, Slug, Owner, Deadline, External ID, Result URL и Error.
  3. Импортируйте workflow JSON и замените database_id, credentials и target-систему.
  4. Настройте фильтр только на статус Ready for automation.
  5. Протестируйте повторный запуск одной карточки и запись ошибки обратно в Notion.

Тесты перед production

curl -X POST "https://YOUR-N8N-DOMAIN/webhook/integration-notion-n8n-content-ops" \
  -H "Content-Type: application/json" \
  --data @integration-notion-n8n-content-ops-payload.json
  1. Карточка без slug должна падать с понятной ошибкой.
  2. Карточка в статусе Draft должна быть пропущена.
  3. Повторный external_id не создаёт второй черновик.
  4. Ошибка target-системы записывается в Notion Error.
  5. После успеха статус меняется на Done или Needs review.

Production-риски

  • Статусы не формализованы. Workflow реагирует на случайные значения и запускается не вовремя.
  • Нет idempotency. Возврат карточки в Ready создаёт новый draft.
  • Публикация без review. Непроверенный текст уходит на сайт или в рассылку.
  • Слишком широкие права Notion token. Интеграция видит лишние базы.
  • Ошибки не пишутся обратно. Редактор не понимает, почему автоматизация остановилась.
Карточка результата Notion pipeline в n8n со статусом и ссылкой на draft
Пример результата: карточка получила статус и ссылку на созданный черновик.

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

  1. У каждой карточки есть slug, owner, deadline и external_id.
  2. Workflow читает только согласованные статусы.
  3. Повторный запуск не создаёт дубль.
  4. Ошибки target-системы возвращаются в Notion.
  5. Публикация идёт через draft/review, если нет отдельного бизнес-правила.
Нужен контент-пайплайн без ручного хаоса?

Nodbot настроит Notion + n8n под вашу редакцию: статусы, дедлайны, idempotency, генерацию черновиков, уведомления и контроль публикации.

Обсудить Notion-автоматизацию