AutomationFlowsAI & RAG › AI Content Generation Pipeline

AI Content Generation Pipeline

Original n8n title: [마케팅] AI 콘텐츠 생성 파이프라인 - Webhook

[마케팅] AI 콘텐츠 생성 파이프라인 - Webhook. Uses openAi, notion, slack. Webhook trigger; 6 nodes.

Webhook trigger★★★★☆ complexityAI-powered6 nodesOpenAINotionSlack
AI & RAG Trigger: Webhook Nodes: 6 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Notion → OpenAI recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "[\ub9c8\ucf00\ud305] AI \ucf58\ud150\uce20 \uc0dd\uc131 \ud30c\uc774\ud504\ub77c\uc778 - Webhook",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "content-pipeline",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "webhook-node",
      "name": "\ucf58\ud150\uce20 \uc694\uccad",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        250,
        300
      ]
    },
    {
      "parameters": {
        "resource": "text",
        "operation": "message",
        "modelId": "gpt-4o-mini",
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "\ub2f9\uc2e0\uc740 \uc804\ubb38 \ucf58\ud150\uce20 \ub9c8\ucf00\ud130\uc785\ub2c8\ub2e4. \uc8fc\uc5b4\uc9c4 \uc8fc\uc81c\ub85c 3\uac00\uc9c0 \ubc84\uc804\uc758 \ucf58\ud150\uce20\ub97c \uc0dd\uc131\ud558\uc138\uc694.\n\nJSON\uc73c\ub85c \uc751\ub2f5:\n{\n  \"sns\": \"SNS \ucea1\uc158 (200\uc790 \uc774\ub0b4, \ud574\uc2dc\ud0dc\uadf8 \ud3ec\ud568)\",\n  \"blog\": \"\ube14\ub85c\uadf8 \ubcf8\ubb38 (1000\uc790 \ub0b4\uc678, \uc18c\uc81c\ubaa9 \ud3ec\ud568)\",\n  \"newsletter\": \"\ub274\uc2a4\ub808\ud130 (500\uc790 \ub0b4\uc678, \uc778\uc0ac\ub9d0+\ubcf8\ubb38+CTA)\"\n}"
            },
            {
              "role": "user",
              "content": "=\uc8fc\uc81c: {{ $json.body?.topic || $json.topic || '\ub9c8\ucf00\ud305 \uc790\ub3d9\ud654' }}\n\ud1a4: {{ $json.body?.tone || $json.tone || '\uc804\ubb38\uc801\uc774\uba74\uc11c \uce5c\uadfc\ud55c' }}\n\ud0c0\uae43: {{ $json.body?.target || $json.target || '\ub9c8\ucf00\ud305 \ub2f4\ub2f9\uc790' }}"
            }
          ]
        },
        "options": {
          "temperature": 0.7
        }
      },
      "id": "openai-node",
      "name": "AI \ucf58\ud150\uce20 \uc0dd\uc131",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.3,
      "position": [
        450,
        300
      ],
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "const aiResponse = $input.first().json.message?.content || '{}';\nlet parsed;\ntry {\n  parsed = JSON.parse(aiResponse);\n} catch (e) {\n  parsed = {\n    sns: 'SNS \ucf58\ud150\uce20 \uc0dd\uc131 \uc2e4\ud328',\n    blog: '\ube14\ub85c\uadf8 \ucf58\ud150\uce20 \uc0dd\uc131 \uc2e4\ud328',\n    newsletter: '\ub274\uc2a4\ub808\ud130 \ucf58\ud150\uce20 \uc0dd\uc131 \uc2e4\ud328'\n  };\n}\n\nconst topic = $('\ucf58\ud150\uce20 \uc694\uccad').first().json.body?.topic || '\uc8fc\uc81c \uc5c6\uc74c';\nconst now = new Date().toISOString();\n\nreturn [{\n  json: {\n    topic,\n    sns: parsed.sns || '',\n    blog: parsed.blog || '',\n    newsletter: parsed.newsletter || '',\n    createdAt: now,\n    versions: 3\n  }\n}];"
      },
      "id": "code-node",
      "name": "\ubc84\uc804\ubcc4 \ubd84\ub9ac",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        650,
        300
      ]
    },
    {
      "parameters": {
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "value": "placeholder-notion-database-id",
          "mode": "id"
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "\uc8fc\uc81c",
              "title": "={{ $json.topic }}"
            },
            {
              "key": "SNS \ucea1\uc158",
              "richText": true,
              "textContent": "={{ $json.sns }}"
            },
            {
              "key": "\ube14\ub85c\uadf8 \ubcf8\ubb38",
              "richText": true,
              "textContent": "={{ $json.blog }}"
            },
            {
              "key": "\ub274\uc2a4\ub808\ud130",
              "richText": true,
              "textContent": "={{ $json.newsletter }}"
            },
            {
              "key": "\uc0dd\uc131\uc77c",
              "date": "={{ $json.createdAt }}"
            }
          ]
        },
        "options": {}
      },
      "id": "notion-node",
      "name": "\ub178\uc158 \uc800\uc7a5",
      "type": "n8n-nodes-base.notion",
      "typeVersion": 2.2,
      "position": [
        850,
        300
      ],
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "value": "placeholder-channel-id",
          "mode": "id"
        },
        "text": "=\u2705 *\ucf58\ud150\uce20 \uc0dd\uc131 \uc644\ub8cc*\n\n\ud83d\udccc \uc8fc\uc81c: {{ $json.topic }}\n\ud83d\udcdd \uc0dd\uc131\ub41c \ubc84\uc804: SNS \ucea1\uc158 / \ube14\ub85c\uadf8 \ubcf8\ubb38 / \ub274\uc2a4\ub808\ud130\n\ud83d\udd17 \ub178\uc158\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694",
        "otherOptions": {}
      },
      "id": "slack-node",
      "name": "\uc644\ub8cc \uc54c\ub9bc",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.2,
      "position": [
        1050,
        300
      ],
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ success: true, topic: $json.topic, message: '\ucf58\ud150\uce20 3\uac00\uc9c0 \ubc84\uc804\uc774 \uc0dd\uc131\ub418\uc5b4 \ub178\uc158\uc5d0 \uc800\uc7a5\ub418\uc5c8\uc2b5\ub2c8\ub2e4.' }) }}",
        "options": {}
      },
      "id": "respond-node",
      "name": "\uc644\ub8cc",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        1250,
        300
      ]
    }
  ],
  "connections": {
    "\ucf58\ud150\uce20 \uc694\uccad": {
      "main": [
        [
          {
            "node": "AI \ucf58\ud150\uce20 \uc0dd\uc131",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI \ucf58\ud150\uce20 \uc0dd\uc131": {
      "main": [
        [
          {
            "node": "\ubc84\uc804\ubcc4 \ubd84\ub9ac",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ubc84\uc804\ubcc4 \ubd84\ub9ac": {
      "main": [
        [
          {
            "node": "\ub178\uc158 \uc800\uc7a5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ub178\uc158 \uc800\uc7a5": {
      "main": [
        [
          {
            "node": "\uc644\ub8cc \uc54c\ub9bc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\uc644\ub8cc \uc54c\ub9bc": {
      "main": [
        [
          {
            "node": "\uc644\ub8cc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": "",
    "timezone": "Asia/Seoul",
    "saveExecutionProgress": true,
    "saveDataErrorExecution": "all",
    "saveDataSuccessExecution": "all",
    "executionTimeout": 3600
  },
  "staticData": null,
  "tags": [
    {
      "createdAt": "2026-03-09T00:00:00.000Z",
      "updatedAt": "2026-03-09T00:00:00.000Z",
      "id": "marketing",
      "name": "\ub9c8\ucf00\ud305"
    },
    {
      "createdAt": "2026-03-09T00:00:00.000Z",
      "updatedAt": "2026-03-09T00:00:00.000Z",
      "id": "ai-content",
      "name": "AI \ucf58\ud150\uce20"
    }
  ],
  "triggerCount": 1,
  "updatedAt": "2026-03-09T00:00:00.000Z",
  "versionId": "1"
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

[마케팅] AI 콘텐츠 생성 파이프라인 - Webhook. Uses openAi, notion, slack. Webhook trigger; 6 nodes.

Source: https://github.com/cskwork/n8n-maker/blob/34120aa8922a96a6a05e9ca710cc0ce1e6c3dfe6/public/workflows/ai-content-pipeline.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Automatically triage Product UAT feedback with AI, deduplicate it against your existing Notion backlog, create/update the right Notion item, and close the loop with the tester (Slack or email).

Notion, Gmail, Slack +1
AI & RAG

AI-powered priority re-evaluation every 2 hours. Analyzes new signals, meeting decisions, emails, and blockers, then runs 3 AI passes (Impact, Urgency, Final Ranking) to suggest re-ranking. Only updat

Notion, OpenAI, Slack
AI & RAG

Venafi Presentation - Watch Video

Venafi Tls Protect Cloud, HTTP Request, OpenAI +1
AI & RAG

Automatically detects missed Zoom demos booked via Calendly and triggers AI-powered follow-up sequences.

HTTP Request, OpenAI, Email Send +3
AI & RAG

Pyragogy AI Village - Orchestrazione Master (Architettura Profonda V2). Uses start, postgres, openAi, emailSend. Webhook trigger; 36 nodes.

Start, Postgres, OpenAI +4