사이버 보안 정보: Gemini AI를 사용하여 매일 요약 및 인기 주제 생성
고급
이것은AI Summarization, Multimodal AI분야의자동화 워크플로우로, 39개의 노드를 포함합니다.주로 Set, Code, Merge, Baserow, EmailSend 등의 노드를 사용하며. 网络安全 정보: Gemini AI를 사용하여 일일 요약 및 바이러스적 전파 주제 생성
사전 요구사항
- •Google Gemini API Key
사용된 노드 (39)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"instanceId": "c47b2be6e94e56f3895047f8e71284fea9b7ba290222599b4ab91232f7a20d1f",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "798d5678-dce4-4942-8fc7-e96f26b4ff75",
"name": "Bleepingcomputer",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
352,
1424
],
"parameters": {
"url": "https://www.bleepingcomputer.com/feed/",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "dedfc0c2-443b-491e-a9d3-631e85072ed5",
"name": "Securityweek",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
352,
1616
],
"parameters": {
"url": "https://www.securityweek.com/feed",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "d61a714c-a12f-4112-b52f-daa5d55865c3",
"name": "Schneier on Security",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
352,
2000
],
"parameters": {
"url": "https://www.schneier.com/feed/atom/",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "ad13d476-4780-4ed5-9ce8-8ab707116fe7",
"name": "The Hacker News",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
352,
1808
],
"parameters": {
"url": "https://feeds.feedburner.com/TheHackersNews",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "0eccdac4-22eb-4f7e-94b1-af0fc1cb22a6",
"name": "Darkreading",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
352,
2192
],
"parameters": {
"url": "https://www.darkreading.com/rss.xml",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "889c9692-1474-4d04-9621-7aa02e0c571b",
"name": "구조화된 출력 파서",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1104,
2512
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"activity_nation_state_actors\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"news_item\": { \"type\": \"string\" },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"link\": { \"type\": \"string\" },\n \"website_name\": { \"type\": \"string\" },\n \"publish_date\": { \"type\": \"string\", \"format\": \"date-time\" }\n },\n \"required\": [\"link\", \"website_name\", \"publish_date\"]\n }\n }\n },\n \"required\": [\"news_item\", \"references\"]\n }\n },\n \"activity_financially_motivated_actors\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"news_item\": { \"type\": \"string\" },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"link\": { \"type\": \"string\" },\n \"website_name\": { \"type\": \"string\" },\n \"publish_date\": { \"type\": \"string\", \"format\": \"date-time\" }\n },\n \"required\": [\"link\", \"website_name\", \"publish_date\"]\n }\n }\n },\n \"required\": [\"news_item\", \"references\"]\n }\n },\n \"activity_compromises_and_data_breaches\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"news_item\": { \"type\": \"string\" },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"link\": { \"type\": \"string\" },\n \"website_name\": { \"type\": \"string\" },\n \"publish_date\": { \"type\": \"string\", \"format\": \"date-time\" }\n },\n \"required\": [\"link\", \"website_name\", \"publish_date\"]\n }\n }\n },\n \"required\": [\"news_item\", \"references\"]\n }\n },\n \"activity_vulnerabilities\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"news_item\": { \"type\": \"string\" },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"link\": { \"type\": \"string\" },\n \"website_name\": { \"type\": \"string\" },\n \"publish_date\": { \"type\": \"string\", \"format\": \"date-time\" }\n },\n \"required\": [\"link\", \"website_name\", \"publish_date\"]\n }\n }\n },\n \"required\": [\"news_item\", \"references\"]\n }\n },\n \"activity_miscellaneous\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"news_item\": { \"type\": \"string\" },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"link\": { \"type\": \"string\" },\n \"website_name\": { \"type\": \"string\" },\n \"publish_date\": { \"type\": \"string\", \"format\": \"date-time\" }\n },\n \"required\": [\"link\", \"website_name\", \"publish_date\"]\n }\n }\n },\n \"required\": [\"news_item\", \"references\"]\n }\n }\n },\n \"required\": [\n \"activity_nation_state_actors\",\n \"activity_financially_motivated_actors\",\n \"activity_compromises_and_data_breaches\",\n \"activity_vulnerabilities\",\n \"activity_miscellaneous\"\n ]\n}"
},
"typeVersion": 1.2
},
{
"id": "a2c0e161-ea80-42b3-b081-6b7ec6a93b6c",
"name": "데이터 사전 처리",
"type": "n8n-nodes-base.code",
"position": [
800,
2288
],
"parameters": {
"jsCode": "// Get the current date and time\nconst now = new Date();\n\n// Combine the output from all RSS feed nodes into one array\nconst allArticles = items.flatMap(item => item.json);\n\n// Filter out articles older than 24 hours\nconst filteredArticles = allArticles.filter(item => {\n const pubDate = new Date(item.pubDate);\n const diff = (now - pubDate) / (1000 * 60 * 60);\n return diff <= 24;\n});\n\n// Extract key fields including publish date\nconst articlesText = filteredArticles.map(item => {\n return `\\nTitle: ${item.title}\\nLink: ${item.link}\\nPublished: ${item.pubDate}\\nText snippet: ${item.contentSnippet}\\n---\\n`;\n}).join('');\n\n// Return the filtered and formatted articles\nreturn [{ json: { articlesText } }];\n"
},
"typeVersion": 2
},
{
"id": "e2c5b770-f147-4f7b-a295-717fbc3fc26b",
"name": "출력을 HTML로 처리",
"type": "n8n-nodes-base.code",
"position": [
1376,
2384
],
"parameters": {
"jsCode": "function convertToHTML(data) {\n const categoryMap = {\n activity_nation_state_actors: \"Nation State Actors\",\n activity_financially_motivated_actors: \"Financially Motivated Actors\",\n activity_compromises_and_data_breaches: \"Compromises and Data Breaches\",\n activity_vulnerabilities: \"Vulnerabilities\",\n activity_miscellaneous: \"Miscellaneous\"\n };\n\n const input = data[0]?.json?.output;\n if (!input) return [{ htmlOutput: '' }];\n\n let html = '';\n\n Object.keys(categoryMap).forEach((key) => {\n const entries = input[key];\n if (!Array.isArray(entries) || entries.length === 0) return;\n\n html += `<h4>${categoryMap[key]}</h4>`;\n\n entries.forEach((item) => {\n html += `- ${item.news_item}`;\n\n if (Array.isArray(item.references) && item.references.length > 0) {\n const sources = item.references.map((ref, idx) => {\n const date = new Date(ref.publish_date);\n const formattedDate = `${String(date.getDate()).padStart(2, '0')}/${String(date.getMonth() + 1).padStart(2, '0')}/${String(date.getFullYear()).slice(-2)}`;\n return `<a href=\"${ref.link}\" target=\"_blank\" rel=\"noopener\">${ref.website_name} (${formattedDate})</a>`;\n }).join(', ');\n html += ` (${sources})`;\n }\n\n html += '<br />';\n });\n });\n\n return [{ htmlOutput: html }];\n}\n\nreturn convertToHTML($input.all());\n"
},
"typeVersion": 2
},
{
"id": "48bcffbc-2bdc-4395-92cc-8d631580650b",
"name": "Baserow 데이터 푸시",
"type": "n8n-nodes-base.baserow",
"position": [
1376,
2192
],
"parameters": {
"tableId": 562928,
"fieldsUi": {
"fieldValues": [
{
"fieldId": 4515701,
"fieldValue": "={{ JSON.stringify($json.output) }}"
}
]
},
"operation": "create",
"databaseId": 236879
},
"credentials": {
"baserowApi": {
"id": "S0JbjUsfZA9NtGxj",
"name": "Baserow account"
}
},
"typeVersion": 1
},
{
"id": "b418c1a0-15e0-40ba-8e21-aee998d3a447",
"name": "Kaspersky Securelist",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
352,
2384
],
"parameters": {
"url": "http://www.securelist.com/en/rss/allupdates",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "2c8b84d6-abc0-4c82-8ee3-a0a2ce4ab3fd",
"name": "Google (Mandiant)",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
352,
2576
],
"parameters": {
"url": "https://www.mandiant.com/resources/blog/rss.xml",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "c11f98ac-9680-4c1f-a374-4308e4059ece",
"name": "Microsoft Security",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
352,
2768
],
"parameters": {
"url": "https://www.microsoft.com/en-us/security/blog/feed/",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "443e3f7a-b465-4b2e-ac83-0ef249f180ee",
"name": "Proofpoint Threat Insight",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
-592,
3840
],
"parameters": {
"url": "https://www.proofpoint.com/us/threat-insight-blog.xml",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "c6fad442-8ffc-4e1c-ba50-fb87e03fa5bf",
"name": "Recorded Future",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
352,
3152
],
"parameters": {
"url": "https://www.recordedfuture.com/feed/",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "13f82226-90de-4bbd-8e37-430cb83b98dc",
"name": "Google TAG",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
-592,
4064
],
"parameters": {
"url": "https://blog.google/threat-analysis-group/rss",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "d0d0b83f-e0de-4c3a-b36a-23ede75b19f7",
"name": "Trend Micro",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
352,
2960
],
"parameters": {
"url": "http://feeds.trendmicro.com/TrendMicroSimplySecurity",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "f03baefc-21c8-4898-9db7-107255eaf34d",
"name": "Sophos",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
-592,
3616
],
"parameters": {
"url": "https://news.sophos.com/en-us/feed",
"options": {
"ignoreSSL": true
}
},
"executeOnce": false,
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "1a2089ee-d4b6-4afc-a877-bad51563fd44",
"name": "요약 및 생성 날짜 필터링",
"type": "n8n-nodes-base.set",
"position": [
2048,
2192
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9974ba68-9f3b-420c-8676-38de8c6d1292",
"name": "daily_report",
"type": "string",
"value": "={{ $json.Description }}"
},
{
"id": "aac39345-a8e6-4b8c-ac09-7452fe584040",
"name": "created_on",
"type": "string",
"value": "={{ $json[\"Created on\"] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "c3ad7a1b-c3c8-4127-8bbc-268b8589ef30",
"name": "이전 날짜 데이터 가져오기",
"type": "n8n-nodes-base.baserow",
"position": [
1824,
2192
],
"parameters": {
"tableId": 562928,
"databaseId": 236879,
"additionalOptions": {
"filters": {
"fields": [
{
"field": 4515726,
"value": "={{ $json.previous_days }}",
"operator": "date_after"
}
]
}
}
},
"credentials": {
"baserowApi": {
"id": "S0JbjUsfZA9NtGxj",
"name": "Baserow account"
}
},
"typeVersion": 1
},
{
"id": "9c6e7f25-c8de-4ddd-b5ac-eeb20f3e6662",
"name": "Google Gemini 채팅 모델",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
2512,
2416
],
"parameters": {
"options": {
"temperature": 0
}
},
"credentials": {
"googlePalmApi": {
"id": "XEg77k9lHATjmxBY",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "a780f816-8837-4c28-9d5f-412887203159",
"name": "평면화",
"type": "n8n-nodes-base.code",
"position": [
2272,
2192
],
"parameters": {
"jsCode": "const merged = items.map(e => e.json);\nreturn [{\n json: {\n merged_reports: merged\n }\n}];\n"
},
"typeVersion": 2
},
{
"id": "a66f1c65-a6e4-4fea-9516-46ec0d539df9",
"name": "출력을 HTML1로 처리",
"type": "n8n-nodes-base.code",
"position": [
2848,
2096
],
"parameters": {
"jsCode": "const reports = items[0].json.output;\n\nconst filtered = reports.filter(report => report.references.length >= 3);\n\nconst html = filtered.map(report => {\n const references = report.references.map(ref => {\n const date = ref.publish_date ? new Date(ref.publish_date).toISOString().split('T')[0] : 'N/A';\n return `<li><a href=\"${ref.link}\">${ref.website_name}</a> (${date})</li>`;\n }).join('');\n\n return `\n <section style=\"margin-bottom:2em;\">\n <h2>${report.title}</h2>\n <p>${report.content}</p>\n <ul>${references}</ul>\n </section>\n `;\n}).join('');\n\nreturn [{\n json: {\n html: `<div>${html}</div>`\n }\n}];\n"
},
"typeVersion": 2
},
{
"id": "d80708b7-e1a5-45cb-b126-08f82b07ea60",
"name": "Baserow 데이터 푸시1",
"type": "n8n-nodes-base.baserow",
"position": [
2848,
2288
],
"parameters": {
"tableId": 628338,
"fieldsUi": {
"fieldValues": [
{
"fieldId": 5118199,
"fieldValue": "={{ JSON.stringify($json.output) }}"
}
]
},
"operation": "create",
"databaseId": 236879
},
"credentials": {
"baserowApi": {
"id": "S0JbjUsfZA9NtGxj",
"name": "Baserow account"
}
},
"typeVersion": 1
},
{
"id": "2356acbc-2759-4ba8-bbf9-0d9e3c7d7a04",
"name": "일일 트리거",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
128,
2288
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"typeVersion": 1.2
},
{
"id": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"name": "수집된 아티클 병합",
"type": "n8n-nodes-base.merge",
"position": [
576,
2160
],
"parameters": {
"numberInputs": 10
},
"typeVersion": 3.1
},
{
"id": "8352ef4c-4c9e-4d14-a665-aa25dd03c4c7",
"name": "오늘의 기본 요약 작성",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1024,
2288
],
"parameters": {
"text": "={{ $json.articlesText }}",
"messages": {
"messageValues": [
{
"message": "You are an intelligence analyst. Summarize the following threat intelligence articles into a concise, high-signal daily briefing. Do not make things up. Drop items that are not relevant enough. Follow these rules: \n1. Group information by topic. Use the following sections as guidelines:\n - Nation state actor activity\n - Financially motivated actor activity\n - Compromises and data breach activity (list victims only)\n - Vulnerabilities activity (list with CVEs or affected products, only high priorities)\n - Other miscellaneous activity that is sensible to share. Topics not related to cybersecurity can be disregarded. Ignore ads. Keep it short.\n2. Deduplicate reports. If multiple sources report on the same event, merge them. Prefer brevity over repetition.\n3. Prioritize topics mentioned multiple times. Omit low-signal, one-off articles unless highly critical. Keep lines concise, prioritize readability of the end product over including all content. Topics should typically fit on a single line, having 20 words maximum.\n4. Link all sources found for an item. Deduplicated items should have more than one source. \n5. Remove all ads, promotional language, or off-topic content.\n6. Use clear, non-speculative language. Avoid filler. \n7. Put it in well-unified JSON format."
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.6
},
{
"id": "516904af-b6d2-4a32-9620-cbdd20fd0431",
"name": "일일 요약 이메일 전송",
"type": "n8n-nodes-base.emailSend",
"position": [
1600,
2384
],
"webhookId": "b10ab568-4d98-41d8-b431-6a2fbeb0a04c",
"parameters": {
"html": "={{ $json.htmlOutput }}",
"options": {},
"subject": "=CTI Digest - {{ $now.format('yyyy-MM-dd') }}",
"toEmail": "velden.tom@linkmet.me",
"fromEmail": "Threat Intelligence Digest <CTI@notification.com>"
},
"credentials": {
"smtp": {
"id": "aglx8Z4I6eejlFRD",
"name": "SMTP account"
}
},
"typeVersion": 2.1
},
{
"id": "4a72735e-69aa-4442-a9d9-66482b3bff21",
"name": "바이럴 토픽 이메일 전송",
"type": "n8n-nodes-base.emailSend",
"position": [
3072,
2096
],
"webhookId": "b10ab568-4d98-41d8-b431-6a2fbeb0a04c",
"parameters": {
"html": "={{ $json.html }}",
"options": {},
"subject": "=CTI Digest (Viral Topics) - {{ $now.format('yyyy-MM-dd') }}",
"toEmail": "velden.tom@linkmet.me",
"fromEmail": "Threat Intelligence Digest <CTI@notification.com>"
},
"credentials": {
"smtp": {
"id": "aglx8Z4I6eejlFRD",
"name": "SMTP account"
}
},
"typeVersion": 2.1
},
{
"id": "01d3e5d9-794d-4941-9a48-57e9b024634e",
"name": "구조화된 출력 파서1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2640,
2416
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"title\": { \"type\": \"string\" },\n \"content\": { \"type\": \"string\" },\n \"references\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"link\": { \"type\": \"string\" },\n \"website_name\": { \"type\": \"string\" },\n \"publish_date\": { \"type\": \"string\", \"format\": \"date-time\" }\n }\n }\n }\n }\n }\n}"
},
"typeVersion": 1.2
},
{
"id": "bd26af2e-0ffd-476b-acbe-cbfdcca91f4e",
"name": "바이럴 토픽 식별 및 요약 작성",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"onError": "continueRegularOutput",
"position": [
2496,
2192
],
"parameters": {
"text": "={{ $json }}",
"messages": {
"messageValues": [
{
"message": "You are an intelligence analyst reviewing cyber threat intelligence reports from the past x days, formatted in a defined JSON schema. Your task is to identify 'viral' news items that describe the *same topic* and appear across multiple days. When such overlapping topics are found:\n\n* Merge them into a single entry.\n* Ensure the merged entry is mentioned on multiple across the grouped items.\n* Extract and synthesize a concise *title* and *summary* for the merged topic.\n* Aggregate all associated references under the merged entry.\n* Sort the merged topics based on newest source, descending.\n\nYou may merge items across different categories (e.g., “Nation state actors”, “Vulnerabilities”) if they clearly concern the same underlying event or threat. Do not include or report on any item that does not meet the above threshold. The objective is to surface recurring, high-signal topics for a daily digest, consolidating redundant reports into unified narratives. It is more important to have three well-processed viral topics, than many bad ones.\n"
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.6
},
{
"id": "573f1261-b2be-48b5-ad2e-e01a03e64ce3",
"name": "스티키 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
1344
],
"parameters": {
"width": 416,
"height": 2016,
"content": "## Collection\nIngest intelligence from RSS feeds, every morning on 7am."
},
"typeVersion": 1
},
{
"id": "ab97c5ee-648b-46ac-961c-641948cf58b7",
"name": "스티키 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
528,
1344
],
"parameters": {
"color": 3,
"width": 416,
"height": 2016,
"content": "## Processing\nProcess the ingested data for further analysis by merging it into a single data block. Filter articles older than 24h and irrelevant fields."
},
"typeVersion": 1
},
{
"id": "d57fe9a7-4b7e-4409-af19-0b8b0ac71fa5",
"name": "스티키 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
976,
1344
],
"parameters": {
"color": 4,
"width": 320,
"height": 2016,
"content": "## Analysis\nLeverage AI to deduplicate, organize, and summarize the information for a daily digest email."
},
"typeVersion": 1
},
{
"id": "32e4c1c4-349f-42ac-ae19-44996f6962fb",
"name": "스티키 노트3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2448,
1344
],
"parameters": {
"color": 4,
"width": 320,
"height": 2016,
"content": "## Analysis\nLeverage AI to identity viral topics in reporting from the previous week and organize it into a viral topics threat brief."
},
"typeVersion": 1
},
{
"id": "4aec27b9-16c4-486f-95be-e59342055366",
"name": "7일 전 날짜",
"type": "n8n-nodes-base.code",
"position": [
1600,
2192
],
"parameters": {
"jsCode": "return [{\n json: {\n previous_days: new Date(Date.now() - 604800000).toISOString().split('T')[0]\n }\n}];"
},
"typeVersion": 2
},
{
"id": "4dce20d6-456e-4133-80fe-f94f897f3089",
"name": "스티키 노트4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1328,
2352
],
"parameters": {
"color": 5,
"width": 416,
"height": 1008,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Dissemination\nDisseminate the report over email."
},
"typeVersion": 1
},
{
"id": "7155a07d-ab5e-4b79-9a81-3ea09c48b073",
"name": "스티키 노트5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1328,
1344
],
"parameters": {
"color": 3,
"width": 1088,
"height": 976,
"content": "## Processing\nSave the output in a database and collect the data of the last 7 days for viral topic identification. Filter out only the needed data and flatten the array for better AI consumption."
},
"typeVersion": 1
},
{
"id": "dc30ac83-874b-4660-873b-ee9f3f5646c6",
"name": "스티키 노트6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2800,
1344
],
"parameters": {
"color": 5,
"width": 416,
"height": 2016,
"content": "## Dissemination\nDisseminate the report over email and save it in a database for future usage."
},
"typeVersion": 1
},
{
"id": "3fda11d8-6593-4d49-a183-2ed8ad95ec40",
"name": "스티키 노트7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-592,
1344
],
"parameters": {
"color": 7,
"width": 640,
"height": 1072,
"content": "# AI Threat Intelligence: Compose Daily Digest & Viral Topics Reports \n## Process cybersecurity reports into an AI-generated daily threat intelligence digest and viral topic report.\nThis n8n workflow simplifies the process of digesting cybersecurity reports by summarizing, deduplicating, organizing, and identifying viral topics of interest into daily emails. \n\nIt will generate two types of emails:\n- A daily digest with summaries of deduplicated cybersecurity reports organized into various topics.\n- A daily viral topic report with summaries of recurring topics that have been identified over the last seven days. \n\n\n**This workflow template supports threat intelligence analysts digest the high number of cybersecurity reports they must analyse daily by decreasing the noise and tracking topics of importance with additional care, while providing customizability with regards to sources and output format.**\n\n## How it works\nThe workflow follows the threat intelligence lifecycle as labelled by the coloured notes.\n- Every morning, collect news articles from a set of RSS feeds.\n- Merge the feeds output and prepare them for LLM consumption.\n- Task an LLM with writing an intelligence briefing that summarizes, deduplicates, and organizes the topics.\n- Generate and send an email with the daily digest.\n- Collect the daily digests of the last seven days and prepare them for LLM consumption.\n- Task an LLM with writing a report that covers 'viral' topics that have appeared prominently in the news. \n- Store this report and send out over email.\n\n## How to use & customization\n- The workflow will trigger daily at 7am. \n- The workflow can be reused for other types of news as well. The RSS feeds can be swapped out and the AI prompts can easily be altered. \n- The parameters used for the viral topic identification process can easily be changed (number of previous days considered, requirements for a topic to be 'viral').\n\n## Requirements\n- The workflow leverages Gemini (free tier) for email content generation and Baserow for storing generated reports. The viral topic identification relies on the Gemini Pro model because of a higher data quantity and more complex task.\n- An SMTP email account must be provided to send the emails with. This can be through Gmail. "
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"a780f816-8837-4c28-9d5f-412887203159": {
"main": [
[
{
"node": "bd26af2e-0ffd-476b-acbe-cbfdcca91f4e",
"type": "main",
"index": 0
}
]
]
},
"0eccdac4-22eb-4f7e-94b1-af0fc1cb22a6": {
"main": [
[
{
"node": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"type": "main",
"index": 4
}
]
]
},
"d0d0b83f-e0de-4c3a-b36a-23ede75b19f7": {
"main": [
[
{
"node": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"type": "main",
"index": 8
}
]
]
},
"a2c0e161-ea80-42b3-b081-6b7ec6a93b6c": {
"main": [
[
{
"node": "8352ef4c-4c9e-4d14-a665-aa25dd03c4c7",
"type": "main",
"index": 0
}
]
]
},
"dedfc0c2-443b-491e-a9d3-631e85072ed5": {
"main": [
[
{
"node": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"type": "main",
"index": 1
}
]
]
},
"2356acbc-2759-4ba8-bbf9-0d9e3c7d7a04": {
"main": [
[
{
"node": "798d5678-dce4-4942-8fc7-e96f26b4ff75",
"type": "main",
"index": 0
},
{
"node": "dedfc0c2-443b-491e-a9d3-631e85072ed5",
"type": "main",
"index": 0
},
{
"node": "ad13d476-4780-4ed5-9ce8-8ab707116fe7",
"type": "main",
"index": 0
},
{
"node": "d61a714c-a12f-4112-b52f-daa5d55865c3",
"type": "main",
"index": 0
},
{
"node": "0eccdac4-22eb-4f7e-94b1-af0fc1cb22a6",
"type": "main",
"index": 0
},
{
"node": "b418c1a0-15e0-40ba-8e21-aee998d3a447",
"type": "main",
"index": 0
},
{
"node": "2c8b84d6-abc0-4c82-8ee3-a0a2ce4ab3fd",
"type": "main",
"index": 0
},
{
"node": "c11f98ac-9680-4c1f-a374-4308e4059ece",
"type": "main",
"index": 0
},
{
"node": "d0d0b83f-e0de-4c3a-b36a-23ede75b19f7",
"type": "main",
"index": 0
},
{
"node": "c6fad442-8ffc-4e1c-ba50-fb87e03fa5bf",
"type": "main",
"index": 0
}
]
]
},
"4aec27b9-16c4-486f-95be-e59342055366": {
"main": [
[
{
"node": "c3ad7a1b-c3c8-4127-8bbc-268b8589ef30",
"type": "main",
"index": 0
}
]
]
},
"c6fad442-8ffc-4e1c-ba50-fb87e03fa5bf": {
"main": [
[
{
"node": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"type": "main",
"index": 9
}
]
]
},
"ad13d476-4780-4ed5-9ce8-8ab707116fe7": {
"main": [
[
{
"node": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"type": "main",
"index": 2
}
]
]
},
"798d5678-dce4-4942-8fc7-e96f26b4ff75": {
"main": [
[
{
"node": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"type": "main",
"index": 0
}
]
]
},
"48bcffbc-2bdc-4395-92cc-8d631580650b": {
"main": [
[
{
"node": "4aec27b9-16c4-486f-95be-e59342055366",
"type": "main",
"index": 0
}
]
]
},
"2c8b84d6-abc0-4c82-8ee3-a0a2ce4ab3fd": {
"main": [
[
{
"node": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"type": "main",
"index": 6
}
]
]
},
"c11f98ac-9680-4c1f-a374-4308e4059ece": {
"main": [
[
{
"node": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"type": "main",
"index": 7
}
]
]
},
"b418c1a0-15e0-40ba-8e21-aee998d3a447": {
"main": [
[
{
"node": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"type": "main",
"index": 5
}
]
]
},
"d61a714c-a12f-4112-b52f-daa5d55865c3": {
"main": [
[
{
"node": "6f2637dc-9ad6-4d45-837e-db882c5a142a",
"type": "main",
"index": 3
}
]
]
},
"516904af-b6d2-4a32-9620-cbdd20fd0431": {
"main": [
[]
]
},
"9c6e7f25-c8de-4ddd-b5ac-eeb20f3e6662": {
"ai_languageModel": [
[
{
"node": "bd26af2e-0ffd-476b-acbe-cbfdcca91f4e",
"type": "ai_languageModel",
"index": 0
},
{
"node": "8352ef4c-4c9e-4d14-a665-aa25dd03c4c7",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"6f2637dc-9ad6-4d45-837e-db882c5a142a": {
"main": [
[
{
"node": "a2c0e161-ea80-42b3-b081-6b7ec6a93b6c",
"type": "main",
"index": 0
}
]
]
},
"e2c5b770-f147-4f7b-a295-717fbc3fc26b": {
"main": [
[
{
"node": "516904af-b6d2-4a32-9620-cbdd20fd0431",
"type": "main",
"index": 0
}
]
]
},
"889c9692-1474-4d04-9621-7aa02e0c571b": {
"ai_outputParser": [
[
{
"node": "8352ef4c-4c9e-4d14-a665-aa25dd03c4c7",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"c3ad7a1b-c3c8-4127-8bbc-268b8589ef30": {
"main": [
[
{
"node": "1a2089ee-d4b6-4afc-a877-bad51563fd44",
"type": "main",
"index": 0
}
]
]
},
"a66f1c65-a6e4-4fea-9516-46ec0d539df9": {
"main": [
[
{
"node": "4a72735e-69aa-4442-a9d9-66482b3bff21",
"type": "main",
"index": 0
}
]
]
},
"01d3e5d9-794d-4941-9a48-57e9b024634e": {
"ai_outputParser": [
[
{
"node": "bd26af2e-0ffd-476b-acbe-cbfdcca91f4e",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"8352ef4c-4c9e-4d14-a665-aa25dd03c4c7": {
"main": [
[
{
"node": "e2c5b770-f147-4f7b-a295-717fbc3fc26b",
"type": "main",
"index": 0
},
{
"node": "48bcffbc-2bdc-4395-92cc-8d631580650b",
"type": "main",
"index": 0
}
]
]
},
"1a2089ee-d4b6-4afc-a877-bad51563fd44": {
"main": [
[
{
"node": "a780f816-8837-4c28-9d5f-412887203159",
"type": "main",
"index": 0
}
]
]
},
"bd26af2e-0ffd-476b-acbe-cbfdcca91f4e": {
"main": [
[
{
"node": "a66f1c65-a6e4-4fea-9516-46ec0d539df9",
"type": "main",
"index": 0
},
{
"node": "d80708b7-e1a5-45cb-b126-08f82b07ea60",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - AI 요약, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Twitter 데이터 스크래핑 - n8n Creator
사용Gemini 2.5 Pro자동생성Twitter情报摘要并推送로WhatsApp群组
Set
Code
Wait
+
Set
Code
Wait
39 노드Daniel Lianes
AI 요약
매일 프랑스 경제 뉴스 요약 (Gemini AI + Outlook 이메일)
Gemini AI와 Outlook 이메일을 사용한 매일 프랑스 경제 뉴스 요약
If
Set
Sort
+
If
Set
Sort
29 노드Louis
AI 요약
매일 Jira 작업 요약 생성기 (GPT-5 + Jira API)
GPT-5와 Jira API를 사용한 매일 Jira 작업 요약 생성기
Set
Code
Jira
+
Set
Code
Jira
24 노드Billy Christi
AI 요약
매일 WhatsApp 그룹 지능형 분석: GPT-4.1 분석 및 음성 메시지 변환
매일 WhatsApp 그룹 지능 분석: GPT-4.1 분석 및 음성 메시지 트랜스크립션
If
Set
Code
+
If
Set
Code
52 노드Daniel Lianes
기타
ScrapeGraph AI를 사용하여 n8n 커뮤니티에서 최근 추가된 워크플로우 추출
ScrapeGraphAI와 Gemini를 사용하여 n8n 커뮤니티가 최근 추가한 워크플로우를 추출하고 저장합니다.
Set
Merge
Split Out
+
Set
Merge
Split Out
21 노드Davide
기타
Groq, Gemini, Slack 승인 시스템을 사용한 RSS에서 Medium 자동 게시
Groq, Gemini 및 Slack 승인 시스템을 통한 RSS에서 Medium 발행 자동화 워크플로
If
Set
Code
+
If
Set
Code
41 노드ObisDev
콘텐츠 제작