使用Gemini、Slack和Notion从新闻简报创建AI情报摘要
高级
这是一个Miscellaneous, AI Summarization, Multimodal AI领域的自动化工作流,包含 19 个节点。主要使用 Set, Code, Gmail, Slack, Filter 等节点。 使用Gemini、Slack和Notion从新闻简报创建AI情报摘要
前置要求
- •Google 账号和 Gmail API 凭证
- •Slack Bot Token 或 Webhook URL
- •Notion API Key
使用的节点 (19)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"meta": {
"instanceId": "2b4a3d81eafa60e4b2dfa202fdf88e491b785e2a2a6ca005b137d831a6faa7c0",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "2755b9eb-352a-447f-9960-d34fb4905045",
"name": "获取带标签的新闻简报",
"type": "n8n-nodes-base.gmail",
"notes": "Fetches emails with your specified label from the last 24 hours",
"position": [
288,
384
],
"webhookId": "bf88d99c-1bea-4f19-9ef5-3c0a59eb862c",
"parameters": {
"limit": 20,
"simple": false,
"filters": {
"labelIds": [
"YOUR_GMAIL_LABEL_ID"
],
"receivedAfter": "={{ $today.minus(1, 'days') }}"
},
"options": {},
"operation": "getAll"
},
"credentials": {
"gmailOAuth2": {
"id": "yvJI2wRBiA9DGTL4",
"name": "Gmail account"
}
},
"typeVersion": 2.1,
"alwaysOutputData": true
},
{
"id": "b53fe8a3-8cc6-4343-ad86-6d64ca6b4e72",
"name": "合并所有新闻简报",
"type": "n8n-nodes-base.aggregate",
"notes": "Combines all newsletter emails into a single item for AI processing",
"position": [
736,
384
],
"parameters": {
"include": "specifiedFields",
"options": {},
"aggregate": "aggregateAllItemData",
"fieldsToInclude": "headers.from, subject, textAsHtml",
"destinationFieldName": "newsletter"
},
"typeVersion": 1
},
{
"id": "0e35800c-542d-49b5-80eb-2900fb2bb6b3",
"name": "AI 新闻简报分析师",
"type": "@n8n/n8n-nodes-langchain.agent",
"notes": "AI agent that analyzes newsletters and generates insights based on your configuration",
"position": [
1024,
384
],
"parameters": {
"text": "=Analyze today's newsletters and create a comprehensive brief for {{ $('Configuration').item.json.recipient_name }}.\n\n## Context\n{{ $('Configuration').item.json.business_context }}\n\n## Task 1: Executive Summary\nFrom today's newsletters, identify 3-5 developments that matter for {{ $('Configuration').item.json.target_audience }}. For each:\n\n**[Development Title]**\n- TL;DR: [2-3 sentences explaining what this is about]\n- Why this matters: [1-2 sentences on real business impact for your audience]\n- Implementation reality: [What it would actually take to adopt this]\n- Source: [Newsletter sender name]\n\nOnly include developments that pass this test: {{ $('Configuration').item.json.relevance_filter }}\n\nAs part of the executive summary, include a short tl;dr that should be maximum of 1-2 sentences summarizing all the developments you extract.\n\n## Task 2: Content-Inspiring Questions\nGenerate 3-4 questions that could become {{ $('Configuration').item.json.content_platforms }} content. Each question should:\n- Connect to real operational challenges\n- Bridge technical capability and business reality\n- Feel non-obvious but highly relevant\n\nFormat:\n**Question:** [Concise, thought-provoking question]\n**Context:** [1 sentence on why this question matters now, referencing specific newsletter content]\n**Relevant Content Pillar:** [name of the content pillar this relates to]\n\n## Task 3: Hidden Patterns\nBrief note on any patterns across multiple newsletters that suggest an emerging theme your audience should track.\n\nRemember: Filter aggressively. If something is just \"interesting\" but not actionable for your specific audience, exclude it. Focus on signal, not noise.\n\n## Content to analyze\n\nHere are the newsletters and their content: {{ \n$json.newsletter.map(item => \n `Subject: \"${item.subject}\"\nFull content follows:\n${item.textAsHtml}`\n).join('\\\\n\\\\n==========\\\\n\\\\n')\n}}",
"options": {
"systemMessage": "=You are an AI intelligence analyst for {{ $('Configuration').item.json.company_name }}, helping to filter the daily flood of newsletters through a specific operational lens.\n\n## Core Context\n\n### Who You Serve\n{{ $('Configuration').item.json.target_audience_description }}\n\n### Your Unique Perspective\nYou view information through three interconnected lenses:\n1. **Operational Reality**: How does this actually work in a running business?\n2. **Technical Feasibility**: What's required to implement this at scale?\n3. **Human Dynamics**: How will teams actually adopt and use this?\n\n### Content Focus Areas\n{{ $('Configuration').item.json.content_pillars }}\n\n## Processing Framework\n\nWhen analyzing newsletters and updates:\n\n### Relevance Filter\nINCLUDE information about:\n- New capabilities that could change how operations work (not just make them faster)\n- Implementation patterns from companies in the {{ $('Configuration').item.json.company_size_range }} range\n- Tools or frameworks that bridge technical capability and business operations\n- Real implementation case studies (not just press releases)\n- {{ $('Configuration').item.json.additional_include_criteria }}\n\nEXCLUDE information about:\n- Pure research advances without clear operational application\n- Consumer products without business applications\n- Generic tool updates that are just feature additions\n- {{ $('Configuration').item.json.additional_exclude_criteria }}\n\n### Analysis Depth\nFor each relevant item, consider:\n- What operational problem does this actually solve?\n- What would implementing this require (people, process, technology)?\n- How does this connect to what {{ $('Configuration').item.json.target_audience }} are already doing?\n\nIf needed, and really only in cases where you feel it's required, you can use the Perplexity tool to find additional information. Be efficient in your use.\n\n## Output Requirements\n\n### Executive Summary Structure\n- Lead with operational impact, not technical innovation\n- Connect developments to specific challenges your audience faces\n- Use concrete examples over abstract possibilities\n- Maintain calm clarity - no breathless hype\n- Maximum 3-5 key developments per day (quality over quantity)\n- Keep language free of jargon and accessible\n- Go for conciseness while including essential information\n\n### Question Generation Philosophy\nCreate questions that:\n- Bridge the gap between potential and operational reality\n- Challenge conventional thinking\n- Explore practical implementation tensions\n- Address the \"how\" after others cover the \"what\"\n- Connect capabilities to business outcomes\n- Use clear, accessible language without corporate jargon\n\nQuestions should feel like they come from someone who has actually worked in this space, not someone theorizing about it.\n\nRemember: Your audience needs insights that are worth their precious mental space during commutes and reflection time."
},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": true,
"typeVersion": 2.2
},
{
"id": "c1986c22-9219-4dd0-8c59-88d618f06065",
"name": "每日早晨触发器",
"type": "n8n-nodes-base.scheduleTrigger",
"notes": "Runs daily at 8am UTC - adjust timezone as needed",
"position": [
-176,
384
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 8 * * *"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "111aea15-2a77-4326-b132-58d6ab8d054a",
"name": "过滤空结果",
"type": "n8n-nodes-base.filter",
"notes": "Only proceeds if emails were found",
"position": [
512,
384
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "9fda51d9-feb0-464d-9ab7-a8d32b4654a3",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "3da6d119-88a4-49ad-9af1-c82e6dc3deb2",
"name": "Slack 格式化",
"type": "n8n-nodes-base.code",
"notes": "Converts AI analysis to rich Slack Block Kit format",
"position": [
1424,
288
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Format the structured AI analysis for Slack Block Kit\nconst data = $input.item.json;\nconst analysis = Array.isArray(data) ? data[0].output : (data.output || data);\nconst config = $('Configuration').item.json;\n\n// Helper function to format date nicely\nconst formatDate = (dateStr) => {\n const date = dateStr ? new Date(dateStr) : new Date();\n return date.toLocaleDateString('en-US', { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n });\n};\n\n// Helper to truncate text to avoid Slack's block limits\nconst truncateText = (text, maxLength = 3000) => {\n if (text && text.length > maxLength) {\n return text.substring(0, maxLength - 3) + '...';\n }\n return text || '';\n};\n\n// Use the TLDR from the AI agent or create a fallback\nlet tldrSummary = \"\";\nif (analysis.executive_summary?.tldr) {\n tldrSummary = analysis.executive_summary.tldr;\n} else if (analysis.executive_summary?.developments && analysis.executive_summary.developments.length > 0) {\n const devCount = analysis.executive_summary.developments.length;\n const topics = analysis.executive_summary.developments\n .slice(0, 2)\n .map(dev => dev.title.split(' ').slice(0, 4).join(' '))\n .join(\" and \");\n tldrSummary = `${devCount} key developments today: ${topics}. Focus on signal over noise.`;\n} else {\n tldrSummary = \"No developments met our strict relevance criteria today. This is valuable signal - not every day brings operationally relevant news.\";\n}\n\n// Build the blocks array\nlet blocks = [\n {\n \"type\": \"header\",\n \"text\": {\n \"type\": \"plain_text\",\n \"text\": `📰 | ${config.brief_title || 'Intelligence Brief'}`\n }\n },\n {\n \"type\": \"context\",\n \"elements\": [\n {\n \"text\": `📅 ${formatDate(analysis.metadata?.date_analyzed)} | 👤 ${config.recipient_name || 'Team'}`,\n \"type\": \"mrkdwn\"\n }\n ]\n },\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"section\",\n \"text\": {\n \"type\": \"mrkdwn\",\n \"text\": \"📢 | *TL;DR*\"\n }\n },\n {\n \"type\": \"section\",\n \"text\": {\n \"type\": \"mrkdwn\",\n \"text\": truncateText(tldrSummary, 3000)\n }\n },\n {\n \"type\": \"divider\"\n }\n];\n\n// Add news summary if we have developments\nif (analysis.executive_summary?.developments && analysis.executive_summary.developments.length > 0) {\n blocks.push({\n \"type\": \"section\",\n \"text\": {\n \"type\": \"mrkdwn\",\n \"text\": \"📰 | *KEY DEVELOPMENTS*\"\n }\n });\n\n // Build rich text elements for each development\n let richTextElements = [];\n \n analysis.executive_summary.developments.forEach((dev, index) => {\n // Add title with source\n richTextElements.push({\n \"type\": \"rich_text_section\",\n \"elements\": [\n {\n \"type\": \"text\",\n \"text\": `${dev.title}`,\n \"style\": {\n \"code\": true\n }\n },\n {\n \"type\": \"text\",\n \"text\": ` - ${dev.source || 'Newsletter'}`,\n \"style\": {\n \"italic\": true\n }\n },\n {\n \"type\": \"text\",\n \"text\": \"\\n\"\n }\n ]\n });\n \n // Add content in quote block \n richTextElements.push({\n \"type\": \"rich_text_quote\",\n \"elements\": [\n {\n \"type\": \"text\",\n \"text\": \"TL;DR:\",\n \"style\": {\n \"bold\": true\n }\n },\n {\n \"type\": \"text\",\n \"text\": `\\n${truncateText(dev.tldr_development, 500)}\\n\\n`\n },\n {\n \"type\": \"text\",\n \"text\": \"Why it matters:\",\n \"style\": {\n \"bold\": true\n }\n },\n {\n \"type\": \"text\",\n \"text\": `\\n${truncateText(dev.operational_impact, 500)}\\n\\n`\n },\n {\n \"type\": \"text\",\n \"text\": \"Implementation Reality:\",\n \"style\": {\n \"bold\": true\n }\n },\n {\n \"type\": \"text\",\n \"text\": `\\n${truncateText(dev.implementation_reality, 500)}\\n\\n`\n }\n ]\n });\n \n // Add separator between items (except after last item)\n if (index < analysis.executive_summary.developments.length - 1) {\n richTextElements.push({\n \"type\": \"rich_text_section\",\n \"elements\": [\n {\n \"type\": \"text\",\n \"text\": \"\\n\"\n }\n ]\n });\n }\n });\n \n richTextElements.push({\n \"type\": \"rich_text_section\",\n \"elements\": []\n });\n \n blocks.push({\n \"type\": \"rich_text\",\n \"elements\": richTextElements\n });\n \n blocks.push({\n \"type\": \"divider\"\n });\n}\n\n// Add content questions if we have them\nif (analysis.content_questions && analysis.content_questions.length > 0) {\n blocks.push({\n \"type\": \"section\",\n \"text\": {\n \"type\": \"mrkdwn\",\n \"text\": \"🤔 | *CONTENT INSPIRATION*\"\n }\n });\n \n let questionElements = [];\n \n analysis.content_questions.forEach((q, index) => {\n questionElements.push({\n \"type\": \"rich_text_quote\",\n \"elements\": [\n {\n \"type\": \"text\",\n \"text\": `\"${truncateText(q.question, 500)}\"\\n\\n`,\n \"style\": {\n \"bold\": true\n }\n },\n {\n \"type\": \"text\",\n \"text\": truncateText(q.context, 500),\n \"style\": {\n \"italic\": true\n }\n }\n ]\n });\n \n if (q.content_pillar) {\n questionElements.push({\n \"type\": \"rich_text_section\",\n \"elements\": [\n {\n \"type\": \"text\",\n \"text\": `📁 Content Pillar: ${q.content_pillar}`,\n \"style\": {\n \"italic\": true\n }\n }\n ]\n });\n }\n \n if (index < analysis.content_questions.length - 1) {\n questionElements.push({\n \"type\": \"rich_text_section\",\n \"elements\": [\n {\n \"type\": \"text\",\n \"text\": \"\\n\"\n }\n ]\n });\n }\n });\n \n questionElements.push({\n \"type\": \"rich_text_section\",\n \"elements\": []\n });\n \n blocks.push({\n \"type\": \"rich_text\",\n \"elements\": questionElements\n });\n \n blocks.push({\n \"type\": \"divider\"\n });\n}\n\n// Add hidden patterns if present\nif (analysis.hidden_patterns?.pattern) {\n blocks.push({\n \"type\": \"section\",\n \"text\": {\n \"type\": \"mrkdwn\",\n \"text\": \"🔍 | *EMERGING PATTERN*\"\n }\n });\n \n blocks.push({\n \"type\": \"section\",\n \"text\": {\n \"type\": \"mrkdwn\",\n \"text\": `_${truncateText(analysis.hidden_patterns.pattern, 3000)}_`\n }\n });\n \n if (analysis.hidden_patterns.relevance) {\n blocks.push({\n \"type\": \"context\",\n \"elements\": [\n {\n \"type\": \"mrkdwn\",\n \"text\": `*Relevance:* ${truncateText(analysis.hidden_patterns.relevance, 2900)}`\n }\n ]\n });\n }\n \n blocks.push({\n \"type\": \"divider\"\n });\n}\n\n// Add footer\nblocks.push({\n \"type\": \"context\",\n \"elements\": [\n {\n \"type\": \"mrkdwn\",\n \"text\": `_${config.footer_message || 'Focus on signal, not noise. Make informed decisions.'}_`\n }\n ]\n});\n\n// Add stats if available\nif (analysis.metadata) {\n let statsText = \"\";\n \n if (analysis.metadata.total_developments) {\n statsText += `📊 ${analysis.metadata.total_developments} developments analyzed`;\n \n if (analysis.executive_summary?.developments?.length) {\n statsText += `, ${analysis.executive_summary.developments.length} passed relevance threshold`;\n }\n }\n \n if (analysis.metadata.newsletter_count) {\n if (statsText) statsText += \" | \";\n statsText += `📧 ${analysis.metadata.newsletter_count} newsletters processed`;\n }\n \n if (statsText) {\n blocks.push({\n \"type\": \"context\",\n \"elements\": [\n {\n \"type\": \"mrkdwn\",\n \"text\": `_${statsText}_`\n }\n ]\n });\n }\n}\n\nconst blockKitJson = {\n \"blocks\": blocks\n};\n\nreturn {\n blocksUi: JSON.stringify(blockKitJson),\n rawBlocks: blocks,\n blockKitObject: blockKitJson,\n hasContent: (analysis.executive_summary?.developments?.length > 0) || \n (analysis.content_questions?.length > 0) || \n analysis.hidden_patterns?.pattern,\n developmentCount: analysis.executive_summary?.developments?.length || 0,\n questionCount: analysis.content_questions?.length || 0,\n metadata: analysis.metadata\n};"
},
"typeVersion": 2
},
{
"id": "76e03f5c-553a-4b15-9fc4-171d45300c60",
"name": "发送至 Slack",
"type": "n8n-nodes-base.slack",
"notes": "Sends formatted brief to your Slack channel",
"position": [
1648,
288
],
"webhookId": "0ff2b8f9-344a-4f43-9fd7-b8149a5d5ca9",
"parameters": {
"text": "Daily Newsletter Brief",
"select": "channel",
"blocksUi": "={{ $json.blocksUi }}",
"channelId": {
"__rl": true,
"mode": "id",
"value": "YOUR_SLACK_CHANNEL_ID"
},
"messageType": "block",
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "I1AdBji1W6jc0rm7",
"name": "Slack account"
}
},
"typeVersion": 2.3
},
{
"id": "314f38f4-0663-417a-a811-c3ab59df9186",
"name": "OpenRouter Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"notes": "Primary AI model for newsletter analysis",
"position": [
880,
624
],
"parameters": {
"model": "google/gemini-2.5-flash",
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "bA9Ec45f0B7Bpa10",
"name": "OpenRouter"
}
},
"typeVersion": 1
},
{
"id": "bfbc76fb-5ca3-4801-8b1a-1534bf45e7c1",
"name": "输出解析模型",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"notes": "Model for structured output parsing",
"position": [
1296,
816
],
"parameters": {
"model": "google/gemini-2.5-flash",
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "bA9Ec45f0B7Bpa10",
"name": "OpenRouter"
}
},
"typeVersion": 1
},
{
"id": "0d990fe0-495c-4967-b53c-480f84f301b2",
"name": "拆分问题",
"type": "n8n-nodes-base.splitOut",
"notes": "Separates content questions for individual processing",
"position": [
1424,
480
],
"parameters": {
"options": {},
"fieldToSplitOut": "output.content_questions"
},
"typeVersion": 1
},
{
"id": "bd52e7e9-c35e-4e8e-bf50-d6945bb02891",
"name": "保存问题至 Notion",
"type": "n8n-nodes-base.notion",
"notes": "Creates Notion pages for each content question (optional)",
"position": [
1648,
480
],
"parameters": {
"title": "={{ $json.question }}",
"blockUi": {
"blockValues": [
{
"text": {
"text": [
{
"text": "={{ $json.context }}",
"annotationUi": {
"italic": true
}
}
]
},
"richText": true
},
{
"textContent": "=Content Pillar: {{ $json.content_pillar }}"
},
{
"textContent": "=Generated from newsletter analysis on {{ $today.format('MM-dd-yyyy') }}"
}
]
},
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "id",
"value": "YOUR_NOTION_DATABASE_ID"
}
},
"credentials": {
"notionApi": {
"id": "toqwsLC7U4Kur83F",
"name": "Notion"
}
},
"typeVersion": 2.2
},
{
"id": "c4553d6c-3b7a-4018-b91d-fce030c48590",
"name": "Perplexity 研究工具",
"type": "n8n-nodes-base.perplexityTool",
"notes": "Optional tool for the AI agent to gather additional context",
"position": [
1168,
608
],
"parameters": {
"model": "sonar-pro",
"options": {},
"messages": {
"message": [
{
"content": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('message0_Text', ``, 'string') }}"
}
]
},
"requestOptions": {}
},
"credentials": {
"perplexityApi": {
"id": "Lp8s8pOa5dCRCcUm",
"name": "Perplexity account"
}
},
"typeVersion": 1
},
{
"id": "88953eaf-035a-4c44-8d17-98432b4a5a8f",
"name": "多表:您可以连接多个表以实现有组织的数据结构",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"notes": "Ensures AI output follows the expected JSON structure",
"position": [
1296,
656
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n \"executive_summary\": {\n \"tldr\": \"Quick summary across all developments\",\n \"developments\": [\n {\n \"title\": \"Development Title Here\",\n \"operational_impact\": \"Why this matters operationally\",\n \"implementation_reality\": \"What it would actually take to adopt this\",\n \"tldr_development\": \"TL;DR of the development\",\n \"source\": \"Newsletter source name\"\n }\n ]\n },\n \"content_questions\": [\n {\n \"question\": \"The thought-provoking question itself\",\n \"context\": \"Why this question matters now, with newsletter reference\",\n \"content_pillar\": \"Relevant content pillar\"\n }\n ],\n \"hidden_patterns\": {\n \"pattern\": \"Description of emerging theme across newsletters\",\n \"relevance\": \"Why this pattern matters for the audience\"\n },\n \"metadata\": {\n \"date_analyzed\": \"2024-01-20\",\n \"newsletter_count\": 2,\n \"total_developments\": 5\n }\n}"
},
"typeVersion": 1.3
},
{
"id": "fb930565-a81e-40cd-96d6-340b6bf64138",
"name": "对话记忆",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"notes": "Maintains context across multiple AI interactions",
"position": [
1024,
704
],
"parameters": {
"contextWindowLength": 7
},
"typeVersion": 1.3
},
{
"id": "68c99298-c391-4026-b589-8f09028c5966",
"name": "配置",
"type": "n8n-nodes-base.set",
"notes": "📝 CUSTOMIZE THESE VALUES for your business and use case",
"position": [
64,
384
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2aa9dd22-9fe1-46a4-9927-7b8a997c30af",
"name": "recipient_name",
"type": "string",
"value": "Who the brief is for (e.g., \"Tech Team\")"
},
{
"id": "f2440cb8-6076-4dac-831b-c38c489fbff8",
"name": "company_name",
"type": "string",
"value": "Your company name"
},
{
"id": "550c6854-c3c2-4aec-8c89-3e4d11dc5f7e",
"name": "business_context",
"type": "string",
"value": "What your company does/goals"
},
{
"id": "30be18e1-0242-45f7-a1da-8b20b35e7c35",
"name": "target_audience",
"type": "string",
"value": "Who you're analyzing for (e.g., \"product managers and engineering leaders\")"
},
{
"id": "39659801-9da6-4259-b07c-9d19b4bdac62",
"name": "target_audience_description",
"type": "string",
"value": "Detailed description of your audience"
},
{
"id": "91841974-0e77-4068-8568-4e762269e43e",
"name": "company_size_range",
"type": "string",
"value": "Size of companies you focus on (e.g., \"50-200 employee\")"
},
{
"id": "a4a9ad55-1817-46da-a787-4892a94f3787",
"name": "relevance_filter",
"type": "string",
"value": "The key question to filter relevant news"
},
{
"id": "4f3237ae-a44f-4594-ac3d-27d2488c0e48",
"name": "content_platforms",
"type": "string",
"value": "Where you'll use insights (e.g., \"LinkedIn posts, internal updates\")"
},
{
"id": "def78ff4-6ef5-4eeb-9c86-7f10a6d2aa0a",
"name": "content_pillars",
"type": "string",
"value": "Your main content focus areas (3 pillars)"
},
{
"id": "14fd66df-9969-4228-a68f-20e34b372e3f",
"name": "additional_include_criteria",
"type": "string",
"value": "Extra things to include in analysis"
},
{
"id": "c7906cd3-9589-4b9f-b07b-724042d2f404",
"name": "additional_exclude_criteria",
"type": "string",
"value": "Things to exclude from analysis"
},
{
"id": "0435bcaa-85b7-4ae3-8ee4-7c933e9d44ae",
"name": "brief_title",
"type": "string",
"value": "Title for your Slack briefs (e.g., \"Tech Intelligence Brief\")"
},
{
"id": "f1f74e29-fe24-4620-8def-c0e8a02b17e7",
"name": "footer_message",
"type": "string",
"value": "Footer text for your briefs"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "2da8b52f-779b-4289-aa2a-2072116feb20",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1664,
-272
],
"parameters": {
"color": 5,
"width": 767,
"height": 1133,
"content": "## 🤖 AI 驱动的新闻简报智能摘要"
},
"typeVersion": 1
},
{
"id": "71e94dba-2edf-4183-874c-cfa9c35ffa5d",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
-272
],
"parameters": {
"width": 443,
"height": 507,
"content": "## ⚙️ 设置步骤"
},
"typeVersion": 1
},
{
"id": "1c04e69c-16cb-43b3-a952-53a7ccc3cd24",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
272
],
"parameters": {
"width": 443,
"height": 520,
"content": "## 🔧 必要配置"
},
"typeVersion": 1
},
{
"id": "04f9d0ca-0bd3-4367-af91-42491570b1c6",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-336,
-272
],
"parameters": {
"color": 2,
"width": 423,
"height": 491,
"content": "## 🚨 重要说明"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"Configuration": {
"main": [
[
{
"node": "Get Labeled Newsletters",
"type": "main",
"index": 0
}
]
]
},
"Format for Slack": {
"main": [
[
{
"node": "Send to Slack",
"type": "main",
"index": 0
}
]
]
},
"Conversation Memory": {
"ai_memory": [
[
{
"node": "AI Newsletter Analyst",
"type": "ai_memory",
"index": 0
}
]
]
},
"Output Parser Model": {
"ai_languageModel": [
[
{
"node": "Structured Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Split Out Questions": {
"main": [
[
{
"node": "Save Questions to Notion",
"type": "main",
"index": 0
}
]
]
},
"AI Newsletter Analyst": {
"main": [
[
{
"node": "Format for Slack",
"type": "main",
"index": 0
},
{
"node": "Split Out Questions",
"type": "main",
"index": 0
}
]
]
},
"Daily Morning Trigger": {
"main": [
[
{
"node": "Configuration",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Newsletter Analyst",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Combine All Newsletters": {
"main": [
[
{
"node": "AI Newsletter Analyst",
"type": "main",
"index": 0
}
]
]
},
"Get Labeled Newsletters": {
"main": [
[
{
"node": "Filter Out Empty Results",
"type": "main",
"index": 0
}
]
]
},
"Filter Out Empty Results": {
"main": [
[
{
"node": "Combine All Newsletters",
"type": "main",
"index": 0
}
]
]
},
"Perplexity Research Tool": {
"ai_tool": [
[
{
"node": "AI Newsletter Analyst",
"type": "ai_tool",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Newsletter Analyst",
"type": "ai_outputParser",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 杂项, AI 摘要总结, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
自动化会议准备
使用 GPT-5 和 Gemini 研究从日历到 Slack 通过 Attio CRM 自动准备会议
If
Set
Code
+16
39 节点Harry Siggins
AI 摘要总结
基于AI的会议研究与每日议程(Google日历、Attio CRM和Slack)
基于AI的会议研究与每日议程:使用Google日历、Attio CRM和Slack
If
Set
Code
+15
30 节点Harry Siggins
AI 摘要总结
每日 WhatsApp 群组智能分析:GPT-4.1 分析与语音消息转录
每日 WhatsApp 群组智能分析:GPT-4.1 分析与语音消息转录
If
Set
Code
+20
52 节点Daniel Lianes
杂项
使用Perplexity和GPT为WordPress创建SEO优化博客,包含关键词和媒体
使用Perplexity和GPT为WordPress创建SEO优化博客,包含关键词和媒体
Set
Code
Limit
+22
124 节点Paul
内容创作
使用特定工具为WordPress创建SEO优化博客
使用特定工具为WordPress创建SEO优化博客
Set
Code
Limit
+22
124 节点Paul
内容创作
深度研究智能体
深度研究智能体 - 自动化研究与 Notion 报告生成器
Set
Code
Filter
+17
43 节点Aziz B
市场调研