8
n8n 한국어amn8n.com

GPT-4.1 Mini와 Notion 데이터베이스로 AI 선별 과학 기술 뉴스 요약 생성

고급

이것은Content Creation, AI Summarization분야의자동화 워크플로우로, 20개의 노드를 포함합니다.주로 Code, Notion, HttpRequest, ManualTrigger, Agent 등의 노드를 사용하며. GPT-4.1 Mini와 Notion 데이터베이스로 AI 선별 과학 기술 뉴스 요약 생성

사전 요구사항
  • Notion API Key
  • 대상 API의 인증 정보가 필요할 수 있음
  • OpenAI API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "meta": {
    "instanceId": "5f3c5e6f777b2c7f976eff784f15d2e2501680193b55be3d2ceef10db21e51fb",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "c6bfc0f0-ba09-47f7-9224-56581124b177",
      "name": "'워크플로 실행' 클릭 시",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        432,
        64
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "b53c4d1d-ea67-4ef8-a637-3ed694d78845",
      "name": "HTTP 요청",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3136,
        368
      ],
      "parameters": {
        "url": "https://api.notion.com/v1/pages",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $item(\"0\").$node[\"Code in JavaScript2\"].json.pagePayload }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer NOTION_API_KEY_WITH_ACCESS_TO_PAGE"
            },
            {
              "name": "Notion-Version",
              "value": "2022-06-28"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "046cff62-c51c-4568-91e3-b387641a6800",
      "name": "다수 데이터베이스 페이지 가져오기",
      "type": "n8n-nodes-base.notion",
      "position": [
        720,
        240
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "key": "Date|date",
              "date": "={{$now.minus({days: 1}).toISO()}}",
              "condition": "after"
            }
          ]
        },
        "options": {},
        "resource": "databasePage",
        "matchType": "allFilters",
        "operation": "getAll",
        "returnAll": true,
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": "26f79f2b-1851-8054-a6af-e7106fc0ce40",
          "cachedResultUrl": "https://www.notion.so/26f79f2b18518054a6afe7106fc0ce40",
          "cachedResultName": "Tech & Startups rss feed"
        },
        "filterType": "manual"
      },
      "credentials": {
        "notionApi": {
          "id": "sRT9MWg4gspaOMaP",
          "name": "Notion account"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "6a1e2866-d724-4ddf-92e6-124540e376b6",
      "name": "JavaScript 코드",
      "type": "n8n-nodes-base.code",
      "position": [
        960,
        272
      ],
      "parameters": {
        "jsCode": "const techKeywords = [\n  \"tech\", \"startup\", \"ai\", \"openai\", \"google\", \"microsoft\", \"apple\",\n  \"iphone\", \"app\", \"software\", \"vc\", \"funding\", \"ipo\", \"venture\",\n  \"silicon valley\", \"cloud\", \"semiconductor\", \"data\", \"innovation\",\n  \"tiktok\", \"meta\", \"facebook\", \"amazon\", \"netflix\", \"snap\"\n];\n\nreturn items.filter(item => {\n  const text = (\n    (item.json.property_title || \"\") + \" \" +\n    (item.json.property_summary || \"\") + \" \" +\n    (item.json.property_full_article || \"\")\n  ).toLowerCase();\n\n  return techKeywords.some(k => text.includes(k));\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "c61e26d7-22bc-4135-9d9f-49219dbdd36f",
      "name": "텍스트 분류기",
      "type": "@n8n/n8n-nodes-langchain.textClassifier",
      "position": [
        1312,
        240
      ],
      "parameters": {
        "options": {},
        "inputText": "=Classify the article into one of these categories: \"Tech/Startup\" or \"Other\".\nReturn only one word: Tech/Startup or Other.\n\nTitle: {{$json.property_title}}\nSummary: {{$json.property_summary}}\nFull article: {{$json.property_full_article}}\n",
        "categories": {
          "categories": [
            {
              "category": "Other",
              "description": "not Tech/Startup"
            },
            {
              "category": "Tech/Startup",
              "description": "Tech/Startup"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "64df328e-4a0d-428c-9e6f-26cd378a3371",
      "name": "OpenAI 채팅 모델",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1360,
        448
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "j4OqIQtI7Um6LEX2",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "54ceedf7-a9bf-4a50-a3a8-8cdc37c0b9f8",
      "name": "JavaScript 코드1",
      "type": "n8n-nodes-base.code",
      "position": [
        1744,
        480
      ],
      "parameters": {
        "jsCode": "\nconst articles = items.map(item => item.json);\n\n// Return one array in one item\nreturn [{ json: { articles } }];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "13728a28-ba6e-465d-9257-2ec7cbc3a9a7",
      "name": "AI 에이전트",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2128,
        384
      ],
      "parameters": {
        "text": "={{ $json.articles }}",
        "options": {
          "systemMessage": "=\nYou are an expert technology editor creating a **daily curated digest** of technology and startup news.\nYou receive a list of articles as input (with titles, summaries, and links).\n\n### Your Goals:\n\n1. **Create a single daily digest page** that feels like a professional publication.\n2. **Write a short intro paragraph** summarizing the day’s main themes.\n3. **Group articles by categories** (e.g., *AI & Developer Tools, Startups & Funding, Consumer Tech, Regulation, Hardware & Gadgets, Web & Internet Services*).\n\n   * Only include categories that are relevant for today’s articles.\n4. **For each article**:\n\n   * Use a **bullet point format**.\n   * Write in **concise editorial style** (2–3 sentences max per article).\n   * Always include the **title as a link** to the article.\n5. **End with a closing note** like “That’s it for today’s digest.”\n\n### Formatting Rules:\n\n* Use **Markdown headings** (`#`, `##`) for sections.\n* Ensure **links are clickable Markdown links**.\n* Do **not** include raw JSON, system notes, or AI meta-commentary.\n* Output should be **clean and publish-ready** for Notion.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "d93debb8-7e57-4117-92fe-64b43501b326",
      "name": "OpenAI 채팅 모델1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2176,
        608
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "j4OqIQtI7Um6LEX2",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d5cd2cc9-5f16-40c7-97c4-68edbee168a3",
      "name": "JavaScript 코드2",
      "type": "n8n-nodes-base.code",
      "position": [
        2656,
        400
      ],
      "parameters": {
        "jsCode": "// Get markdown digest from AI output\nconst digest = $json[\"output\"];\nconst today = new Date().toISOString().split(\"T\")[0]; // YYYY-MM-DD\n\n// Helper: convert a markdown line into a Notion block\nfunction mdToBlock(line) {\n  line = line.trim();\n\n  // Headings\n  if (line.startsWith(\"### \")) {\n    return {\n      object: \"block\",\n      type: \"heading_3\",\n      heading_3: {\n        rich_text: [{ type: \"text\", text: { content: line.replace(/^### /, \"\") } }]\n      }\n    };\n  }\n  if (line.startsWith(\"## \")) {\n    return {\n      object: \"block\",\n      type: \"heading_2\",\n      heading_2: {\n        rich_text: [{ type: \"text\", text: { content: line.replace(/^## /, \"\") } }]\n      }\n    };\n  }\n  if (line.startsWith(\"# \")) {\n    return {\n      object: \"block\",\n      type: \"heading_1\",\n      heading_1: {\n        rich_text: [{ type: \"text\", text: { content: line.replace(/^# /, \"\") } }]\n      }\n    };\n  }\n\n  // Bulleted list\n  if (line.startsWith(\"- \")) {\n    const linkMatch = line.match(/\\[(.*?)\\]\\((.*?)\\)/);\n    let textContent = line.replace(/^- /, \"\");\n    let richText = [];\n\n    if (linkMatch) {\n      richText.push({\n        type: \"text\",\n        text: { content: linkMatch[1], link: { url: linkMatch[2] } }\n      });\n      const after = textContent.replace(linkMatch[0], \"\").trim();\n      if (after) {\n        richText.push({ type: \"text\", text: { content: \" \" + after } });\n      }\n    } else {\n      richText.push({ type: \"text\", text: { content: textContent } });\n    }\n\n    return {\n      object: \"block\",\n      type: \"bulleted_list_item\",\n      bulleted_list_item: { rich_text: richText }\n    };\n  }\n\n  // Horizontal rule\n  if (line.startsWith(\"---\")) {\n    return { object: \"block\", type: \"divider\", divider: {} };\n  }\n\n  // Regular paragraph\n  if (line.length > 0) {\n    return {\n      object: \"block\",\n      type: \"paragraph\",\n      paragraph: { rich_text: [{ type: \"text\", text: { content: line } }] }\n    };\n  }\n\n  // Empty line → blank paragraph\n  return {\n    object: \"block\",\n    type: \"paragraph\",\n    paragraph: { rich_text: [] }\n  };\n}\n\n// Convert markdown into array of Notion blocks\nconst blocks = digest.split(\"\\n\").map(mdToBlock).filter(Boolean);\n\n// Split blocks into chunks of 100\nconst chunkSize = 100;\nconst chunks = [];\nfor (let i = 0; i < blocks.length; i += chunkSize) {\n  chunks.push(blocks.slice(i, i + chunkSize));\n}\n\nreturn {\n  pagePayload: {\n    parent: { page_id: \"26f79f2b185180ffa6aded90ddd9ba4c\" }, // your parent page\n    icon: { emoji: \"📰\" },\n    cover: {\n      external: { url: \"https://upload.wikimedia.org/wikipedia/commons/6/62/Tuscankale.jpg\" }\n    },\n    properties: {\n      title: [\n        {\n          text: { content: `Tech & Startup Daily Digest – ${today}` }\n        }\n      ]\n    },\n    children: chunks[0] // first 100 blocks only\n  },\n  extraChunks: chunks.slice(1) // save rest for appending\n};\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "6caf59be-ed6b-4ac7-8699-28fd3cc0c799",
      "name": "일정 트리거",
      "type": "n8n-nodes-base.scheduleTrigger",
      "disabled": true,
      "position": [
        448,
        384
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 20
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7a2e7407-a775-466b-8022-37836b1927f6",
      "name": "스티커 노트1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        -48
      ],
      "parameters": {
        "height": 576,
        "content": "## manual activation is for testing\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ba4b3f32-885b-4155-ab8e-a30530dc1f07",
      "name": "스티커 노트2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        240
      ],
      "parameters": {
        "width": 208,
        "height": 128,
        "content": "## we can schedule it for daily"
      },
      "typeVersion": 1
    },
    {
      "id": "8e8e21ca-190f-491e-be20-f14861347e2e",
      "name": "스티커 노트3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        624,
        16
      ],
      "parameters": {
        "height": 416,
        "content": "## date filter can be modified for desired days or may be hours to fetch articles from notion database\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3c1c0e30-ebe5-4b1b-b431-916716b822f1",
      "name": "스티커 노트4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        896,
        48
      ],
      "parameters": {
        "height": 400,
        "content": "## this code does initial filtering for required articles for our these **Tech and startup** "
      },
      "typeVersion": 1
    },
    {
      "id": "adff5b0a-8745-4a2e-9325-3a165055ac91",
      "name": "스티커 노트5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        32
      ],
      "parameters": {
        "width": 368,
        "height": 560,
        "content": "## more filtering for articles with text classifier model used is (gpt-4.1-mini)"
      },
      "typeVersion": 1
    },
    {
      "id": "1d4c0870-766f-453a-a2cc-dc4f38f433f1",
      "name": "스티커 노트6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1696,
        352
      ],
      "parameters": {
        "height": 320,
        "content": "## combile articles in one object to pass into ai agent\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0709856a-1b2e-4c31-97c8-b4546169cf60",
      "name": "스티커 노트7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2096,
        192
      ],
      "parameters": {
        "width": 304,
        "height": 544,
        "content": "## generate summaries of all articles into single article with raw notion page format"
      },
      "typeVersion": 1
    },
    {
      "id": "c36eeaae-77ee-4d73-9e2f-6879c9c1801d",
      "name": "스티커 노트8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2528,
        272
      ],
      "parameters": {
        "width": 384,
        "height": 288,
        "content": "## format into correct notion page json object to pass into http node"
      },
      "typeVersion": 1
    },
    {
      "id": "5dfb71e3-db06-49a2-b3ce-ff953a00ac50",
      "name": "스티커 노트9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3040,
        272
      ],
      "parameters": {
        "width": 320,
        "height": 304,
        "content": "## create notion page\n### here created for specific day"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "13728a28-ba6e-465d-9257-2ec7cbc3a9a7": {
      "main": [
        [
          {
            "node": "d5cd2cc9-5f16-40c7-97c4-68edbee168a3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c61e26d7-22bc-4135-9d9f-49219dbdd36f": {
      "main": [
        [],
        [
          {
            "node": "54ceedf7-a9bf-4a50-a3a8-8cdc37c0b9f8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6caf59be-ed6b-4ac7-8699-28fd3cc0c799": {
      "main": [
        [
          {
            "node": "046cff62-c51c-4568-91e3-b387641a6800",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "64df328e-4a0d-428c-9e6f-26cd378a3371": {
      "ai_languageModel": [
        [
          {
            "node": "c61e26d7-22bc-4135-9d9f-49219dbdd36f",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "6a1e2866-d724-4ddf-92e6-124540e376b6": {
      "main": [
        [
          {
            "node": "c61e26d7-22bc-4135-9d9f-49219dbdd36f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d93debb8-7e57-4117-92fe-64b43501b326": {
      "ai_languageModel": [
        [
          {
            "node": "13728a28-ba6e-465d-9257-2ec7cbc3a9a7",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "54ceedf7-a9bf-4a50-a3a8-8cdc37c0b9f8": {
      "main": [
        [
          {
            "node": "13728a28-ba6e-465d-9257-2ec7cbc3a9a7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d5cd2cc9-5f16-40c7-97c4-68edbee168a3": {
      "main": [
        [
          {
            "node": "b53c4d1d-ea67-4ef8-a637-3ed694d78845",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "046cff62-c51c-4568-91e3-b387641a6800": {
      "main": [
        [
          {
            "node": "6a1e2866-d724-4ddf-92e6-124540e376b6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c6bfc0f0-ba09-47f7-9224-56581124b177": {
      "main": [
        [
          {
            "node": "046cff62-c51c-4568-91e3-b387641a6800",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

고급 - 콘텐츠 제작, AI 요약

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
고급
노드 수20
카테고리2
노드 유형9
난이도 설명

고급 사용자를 위한 16+개 노드의 복잡한 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34