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
使用ノード (20)
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下の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など)は別途料金が発生する場合があります。
関連ワークフロー
毎日 Gmail の受信トレイを Discord にまとめる(GPT-4.1-mini + PDF 変換)
GPT-4.1-miniとPDF変換を使用した日次Gmail受信箱要約のDiscordへの送信
Code
Gmail
Discord
+
Code
Gmail
Discord
18 ノードmoosa
その他
コンテンツジェネレーター v3
AI驱动ブログ自動化:使用GPT-4生成并公開SEO記事至WordPressとTwitter
If
Set
Code
+
If
Set
Code
144 ノードJay Emp0
コンテンツ作成
SlackとAsanaを使用した仮想Scラムマスター
OpenAI、Slack、Asanaを統合したAIベースのScラムマスターアシスタント
Set
Code
Html
+
Set
Code
Html
35 ノードŁukasz
プロジェクト管理
潜在顧客開掘とメールワーキングフロー
Google Maps、SendGrid、AIを使用してB2Bリード獲得とメールマーケティングを自動化
If
Set
Code
+
If
Set
Code
141 ノードEzema Kingsley Chibuzo
リード獲得
Apollo データスクレイピングとタッチアウトフロー 1 ✅
Apollo、AI による解析と計画されたメール.follow-up によるリード生成の自動化
If
Code
Wait
+
If
Code
Wait
39 ノードDeniz
コンテンツ作成
YouTube 動画に基づく自律ブログ公開
YouTube 動画から ChatGPT、Sheets、Apify、Pexels、WordPress を使用してブログの自主公開
If
Set
Code
+
If
Set
Code
80 ノードOriol Seguí
コンテンツ作成