페이지 속도 인사이트
고급
이것은DevOps, AI Summarization분야의자동화 워크플로우로, 17개의 노드를 포함합니다.주로 Code, Switch, Discord, ScheduleTrigger, ChainLlm 등의 노드를 사용하며. Gemini 및 PageSpeed Insights를 사용한 웹사이트 성능 분석 및 비교 자동화
사전 요구사항
- •Discord Bot Token 또는 Webhook
- •Google Gemini API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "hHhdfJwx4e6Q68ho",
"meta": {
"instanceId": "c2650793f644091dc80fb900fe63448ad1f4b774008de9608064d67294f8307c",
"templateCredsSetupCompleted": true
},
"name": "Page Speed Insight",
"tags": [],
"nodes": [
{
"id": "f709e408-0443-42c5-b346-7df22a6e6dfe",
"name": "단일 URL 분석",
"type": "n8n-nodes-google-pagespeed.googlePageSpeed",
"position": [
496,
112
],
"parameters": {
"url": "={{ $json.content }}",
"additionalFields": {}
},
"credentials": {
"googlePageSpeedApi": {
"id": "88sZZbmocLQRgVT4",
"name": "Google PageSpeed account"
}
},
"typeVersion": 2
},
{
"id": "0af35e1d-138f-42b4-bb27-7d4aa86b2306",
"name": "스티키 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
368,
672
],
"parameters": {
"color": 5,
"width": 272,
"height": 80,
"content": "## get your key [Here](https://developers.google.com/speed/docs/insights/v5/get-started)"
},
"typeVersion": 1
},
{
"id": "fd0399cd-2643-4a3c-9d43-d938a69240ac",
"name": "사이트맵에서 분석",
"type": "n8n-nodes-google-pagespeed.googlePageSpeed",
"position": [
-96,
768
],
"parameters": {
"operation": "analyzeSitemap",
"sitemapUrl": "=https://{{ $json.url }}/sitemap.xml",
"urlFilters": {},
"additionalFields": {}
},
"credentials": {
"googlePageSpeedApi": {
"id": "88sZZbmocLQRgVT4",
"name": "Google PageSpeed account"
}
},
"typeVersion": 2
},
{
"id": "0fba35e0-9c05-4f66-9530-df2989918757",
"name": "다수 메시지 가져오기",
"type": "n8n-nodes-base.discord",
"position": [
48,
272
],
"webhookId": "08a75470-e282-46c0-81bd-94bdb38aecf3",
"parameters": {
"limit": 1,
"guildId": {
"__rl": true,
"mode": "list",
"value": "924339263372406844",
"cachedResultUrl": "https://discord.com/channels/924339263372406844",
"cachedResultName": "Khaisa Studio"
},
"options": {},
"resource": "message",
"channelId": {
"__rl": true,
"mode": "list",
"value": "1396015310888374313",
"cachedResultUrl": "https://discord.com/channels/924339263372406844/1396015310888374313",
"cachedResultName": "pagespeed"
},
"operation": "getAll"
},
"credentials": {
"discordBotApi": {
"id": "dJMKbc7ZDni2mvkT",
"name": "Khaisa-n8n-bot"
}
},
"typeVersion": 2
},
{
"id": "d3efd950-c7ab-45ff-8f3e-1eebf4674586",
"name": "일정 트리거",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-176,
272
],
"parameters": {
"rule": {
"interval": [
{
"field": "minutes",
"minutesInterval": 1
}
]
}
},
"typeVersion": 1.2
},
{
"id": "0c81a6b1-15ea-4e40-90ad-c8c4fe9d117e",
"name": "다중 URL 일괄 분석",
"type": "n8n-nodes-google-pagespeed.googlePageSpeed",
"position": [
144,
768
],
"parameters": {
"operation": "analyzeMultiple",
"additionalFields": {}
},
"credentials": {
"googlePageSpeedApi": {
"id": "88sZZbmocLQRgVT4",
"name": "Google PageSpeed account"
}
},
"typeVersion": 2
},
{
"id": "46fbf072-0d7b-48b5-82cc-6cd0d0412c44",
"name": "스티키 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-192,
640
],
"parameters": {
"color": 7,
"width": 848,
"height": 352,
"content": "## Available Tools\n"
},
"typeVersion": 1
},
{
"id": "b9f9b80e-41e2-4306-b441-88163db07472",
"name": "메시지 전송",
"type": "n8n-nodes-base.discord",
"position": [
1504,
304
],
"webhookId": "13a2a72e-c936-43c4-93af-f801b0f56a05",
"parameters": {
"content": "={{ $json.message }}",
"guildId": {
"__rl": true,
"mode": "list",
"value": "924339263372406844",
"cachedResultUrl": "https://discord.com/channels/924339263372406844",
"cachedResultName": "Khaisa Studio"
},
"options": {},
"resource": "message",
"channelId": {
"__rl": true,
"mode": "list",
"value": "1396015310888374313",
"cachedResultUrl": "https://discord.com/channels/924339263372406844/1396015310888374313",
"cachedResultName": "pagespeed"
}
},
"credentials": {
"discordBotApi": {
"id": "dJMKbc7ZDni2mvkT",
"name": "Khaisa-n8n-bot"
}
},
"typeVersion": 2
},
{
"id": "3a00c7c5-d0ab-4555-9994-48e270797b71",
"name": "스위치",
"type": "n8n-nodes-base.switch",
"position": [
272,
272
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "process single",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "87365dce-5527-49da-ac21-587baa735679",
"operator": {
"type": "string",
"operation": "startsWith"
},
"leftValue": "={{ $json.content }}",
"rightValue": "http"
}
]
},
"renameOutput": true
},
{
"outputKey": "compare",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "69456027-7e86-4077-9715-2ea7d66b0370",
"operator": {
"type": "string",
"operation": "startsWith"
},
"leftValue": "={{ $json.content }}",
"rightValue": "compare"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "cecf1333-f995-434b-a440-98fd4a7587ec",
"name": "섹션별 구문 분석",
"type": "n8n-nodes-base.code",
"position": [
1248,
112
],
"parameters": {
"jsCode": "// n8n Code Node - Split long messages for Discord\n// Place this node between AI Agent and Discord Send Message\n\nconst input = $input.all();\nconst results = [];\n\n// Discord message limit (leaving some buffer)\nconst DISCORD_MAX_LENGTH = 1900;\n\n// Process each input item\nfor (const item of input) {\n const longMessage = item.json.output || '';\n \n // If message is short enough, send as-is\n if (longMessage.length <= DISCORD_MAX_LENGTH) {\n results.push({\n json: {\n message: longMessage,\n messageNumber: 1,\n totalMessages: 1\n }\n });\n continue;\n }\n \n // Split long message into chunks\n const chunks = splitMessage(longMessage, DISCORD_MAX_LENGTH);\n \n // Create output items for each chunk\n chunks.forEach((chunk, index) => {\n results.push({\n json: {\n message: chunk,\n messageNumber: index + 1,\n totalMessages: chunks.length\n }\n });\n });\n}\n\n// Function to split message intelligently\nfunction splitMessage(text, maxLength) {\n const chunks = [];\n let currentChunk = '';\n \n // Split by natural break points (double newlines, then single newlines, then sentences)\n const paragraphs = text.split('\\n\\n');\n \n for (const paragraph of paragraphs) {\n // If adding this paragraph would exceed limit\n if ((currentChunk + '\\n\\n' + paragraph).length > maxLength) {\n // Save current chunk if it has content\n if (currentChunk.trim()) {\n chunks.push(currentChunk.trim());\n currentChunk = '';\n }\n \n // If single paragraph is too long, split by sentences\n if (paragraph.length > maxLength) {\n const sentences = paragraph.split('. ');\n \n for (let i = 0; i < sentences.length; i++) {\n const sentence = sentences[i] + (i < sentences.length - 1 ? '. ' : '');\n \n if ((currentChunk + sentence).length > maxLength) {\n if (currentChunk.trim()) {\n chunks.push(currentChunk.trim());\n currentChunk = sentence;\n } else {\n // Even single sentence is too long, force split\n chunks.push(sentence.substring(0, maxLength - 3) + '...');\n currentChunk = '...' + sentence.substring(maxLength - 3);\n }\n } else {\n currentChunk += sentence;\n }\n }\n } else {\n currentChunk = paragraph;\n }\n } else {\n // Add paragraph to current chunk\n if (currentChunk) {\n currentChunk += '\\n\\n' + paragraph;\n } else {\n currentChunk = paragraph;\n }\n }\n }\n \n // Add final chunk\n if (currentChunk.trim()) {\n chunks.push(currentChunk.trim());\n }\n \n return chunks;\n}\n\nreturn results;"
},
"typeVersion": 2
},
{
"id": "d6d80ea2-4b28-45a1-883c-c4018c2d8af1",
"name": "Gemini",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
800,
288
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "7ZkDDnjsiPRXf6eh",
"name": "project gcp: n8n-khmuhtadin"
}
},
"typeVersion": 1
},
{
"id": "02a20bc9-69ed-4854-9a30-14fa63149fc1",
"name": "AI 에이전트",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
720,
112
],
"parameters": {
"text": "={{ $json }}",
"batching": {},
"messages": {
"messageValues": [
{
"message": "=You are an expert web performance and SEO analyst. Your task is to meticulously analyze the following Lighthouse JSON report. Your goal is to transform this raw data into a clear, insightful, and actionable audit report. The report should be easy for a website owner or project manager to understand but must also contain the specific technical details a developer needs to implement the fixes. Analyze the JSON data provided below and structure your output using the following format and sections: 1. Executive Summary Start with a high-level, 2-3 sentence overview of the website's health based on this mobile audit. Summarize the key findings and overall performance. 2. Overall Scorecard Present the four main Lighthouse scores (Performance, Accessibility, Best Practices, SEO) in a clear list or table. Briefly explain what each score represents in simple terms. 3. ✅ What's Going Well (Key Strengths) Identify and celebrate what the website is doing right. Highlight the areas with perfect or near-perfect scores (like Best Practices) and explain why these are important wins. 4. 🚀 Actionable Recommendations (Priority List) This is the most critical section. Identify the key areas for improvement, ordering them by priority from most to least critical. For each recommendation: State the Issue: Use a clear, descriptive title (e.g., \"Critical Accessibility Failure: Poor Color Contrast\"). Explain the Impact: In simple terms, explain why this is a problem. Describe its impact on user experience, accessibility for people with disabilities, or search engine ranking. Provide the Fix: Give specific, actionable advice on how to resolve the issue. Reference the exact data from the JSON where necessary. For example, when discussing performance, mention the specific metrics (like Largest Contentful Paint at 2.8 s) and suggest concrete solutions (e.g., \"Optimize the main hero image to load faster\"). Crucially, focus your analysis on the audits with low or failing scores (color-contrast, meta-description) and the performance metrics that fall outside the \"good\" threshold. Split the output into multiple shorter messages, each under 1800 characters. End each message with \"--- (Message X/Y) ---\" and ensure each message is complete and readable on its own."
}
]
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "3a0b7ea6-287c-42c9-a460-6bc8868c7211",
"name": "웹사이트 비교",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
896,
416
],
"parameters": {
"text": "={{ $json }}",
"batching": {},
"messages": {
"messageValues": [
{
"message": "You are an expert web performance and SEO analyst specializing in website comparisons.\n\nYour task is to analyze website comparison data and create a Discord-optimized report. Use Discord markdown formatting and ensure readability on mobile and desktop Discord clients.\n\n**DISCORD FORMATTING RULES:**\n- Use **bold** for headings and emphasis\n- Use `code blocks` for metrics and URLs\n- Use bullet points with - or •\n- Avoid complex tables - use simple lists instead\n- Keep line spacing readable\n- Use emojis for visual appeal\n\n**ANALYSIS STRUCTURE:**\n\n**Message 1: Executive Summary & Scorecard**\n```\n🔍 **Website Performance Comparison**\n\n**Executive Summary:**\n[2-3 sentences comparing overall performance]\n\n**📊 Lighthouse Scores:**\n• **Performance:** `Site1: XX` vs `Site2: XX` (Winner: Site)\n• **Accessibility:** `Site1: XX` vs `Site2: XX` (Winner: Site) \n• **Best Practices:** `Site1: XX` vs `Site2: XX` (Winner: Site)\n• **SEO:** `Site1: XX` vs `Site2: XX` (Winner: Site)\n\n🏆 **Overall Winner:** [Site] with [X] category wins\n\n--- (Message 1/4) ---\n```\n\n**Message 2: Performance Metrics Deep Dive**\n```\n⚡ **Performance Metrics Breakdown**\n\n**Site Comparison:**\n• **First Contentful Paint:** \n - `Site1`: XXXXms | `Site2`: XXXXms\n - Winner: [Site] (faster by XXXms)\n\n• **Largest Contentful Paint:**\n - `Site1`: XXXXms | `Site2`: XXXXms \n - Winner: [Site] (faster by XXXms)\n\n[Continue for all metrics with clear formatting]\n\n--- (Message 2/4) ---\n```\n\n**Message 3: Key Insights & Winners**\n```\n🎯 **Key Performance Insights**\n\n**Biggest Improvements:**\n• [Metric]: Improved by [amount]\n• [Metric]: Improved by [amount]\n\n**Critical Issues Found:**\n• [Site]: [Issue description]\n• [Site]: [Issue description]\n\n--- (Message 3/4) ---\n```\n\n**Message 4: Actionable Recommendations**\n```\n🚀 **Action Plan**\n\n**For [Underperforming Site]:**\n• Fix: [Specific issue] - [Impact]\n• Optimize: [Specific area] - [Expected improvement]\n\n**For [Better Site]:**\n• Maintain: [What's working well]\n• Improve: [Areas for enhancement]\n\n**Both Sites:**\n• [Universal recommendations]\n\n--- (Message 4/4) ---\n```\n\n**REQUIREMENTS:**\n- Each message MUST be under 1800 characters\n- Use actual data from scoreDifferences and metricDifferences\n- Include specific millisecond improvements\n- Make URLs readable with `backticks`\n- Prioritize mobile-friendly formatting\n- End each message with the exact format: \"--- (Message X/Y) ---\""
}
]
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "9193bccf-37d2-4894-b61c-ab6e79ad0351",
"name": "비교 결과 구문 분석",
"type": "n8n-nodes-base.code",
"position": [
1264,
416
],
"parameters": {
"jsCode": "// n8n Code Node - Split comparison messages that are already formatted\n// Place this node after AI Agent and before Discord Send Message\n\nconst input = $input.all();\nconst results = [];\n\nfor (const item of input) {\n const fullText = item.json.text || item.json.output || '';\n \n if (!fullText) {\n console.log('No text content found');\n continue;\n }\n \n // Split by the message delimiter pattern\n const messagePattern = /--- \\(Message \\d+\\/\\d+\\) ---/;\n const chunks = fullText.split(messagePattern);\n \n // Clean up chunks and filter out empty ones\n const cleanChunks = chunks\n .map(chunk => chunk.trim())\n .filter(chunk => chunk.length > 0);\n \n // Create output for each chunk\n cleanChunks.forEach((chunk, index) => {\n results.push({\n json: {\n message: chunk,\n messageNumber: index + 1,\n totalMessages: cleanChunks.length,\n originalLength: fullText.length,\n chunkLength: chunk.length\n }\n });\n });\n \n // If no message delimiters found, treat as single message\n if (cleanChunks.length === 0 || cleanChunks.length === 1) {\n // Check if message is too long for Discord (over 1900 chars)\n if (fullText.length > 1900) {\n // Split into smaller chunks\n const smallChunks = splitLongMessage(fullText, 1800);\n \n smallChunks.forEach((chunk, index) => {\n results.push({\n json: {\n message: chunk,\n messageNumber: index + 1,\n totalMessages: smallChunks.length,\n originalLength: fullText.length,\n chunkLength: chunk.length,\n autoSplit: true\n }\n });\n });\n } else {\n // Single message that fits Discord limits\n results.push({\n json: {\n message: fullText,\n messageNumber: 1,\n totalMessages: 1,\n originalLength: fullText.length,\n chunkLength: fullText.length\n }\n });\n }\n }\n}\n\n// Function to split long messages at natural break points\nfunction splitLongMessage(text, maxLength) {\n const chunks = [];\n let currentChunk = '';\n \n // Split by paragraphs first (double newlines)\n const paragraphs = text.split('\\n\\n');\n \n for (const paragraph of paragraphs) {\n // If adding this paragraph would exceed limit\n if ((currentChunk + '\\n\\n' + paragraph).length > maxLength) {\n // Save current chunk if it has content\n if (currentChunk.trim()) {\n chunks.push(currentChunk.trim());\n currentChunk = '';\n }\n \n // If single paragraph is too long, split by sentences\n if (paragraph.length > maxLength) {\n const sentences = paragraph.split('. ');\n \n for (let i = 0; i < sentences.length; i++) {\n const sentence = sentences[i] + (i < sentences.length - 1 ? '. ' : '');\n \n if ((currentChunk + sentence).length > maxLength) {\n if (currentChunk.trim()) {\n chunks.push(currentChunk.trim());\n currentChunk = sentence;\n } else {\n // Force split if even single sentence is too long\n chunks.push(sentence.substring(0, maxLength - 3) + '...');\n currentChunk = '...' + sentence.substring(maxLength - 3);\n }\n } else {\n currentChunk += sentence;\n }\n }\n } else {\n currentChunk = paragraph;\n }\n } else {\n // Add paragraph to current chunk\n if (currentChunk) {\n currentChunk += '\\n\\n' + paragraph;\n } else {\n currentChunk = paragraph;\n }\n }\n }\n \n // Add final chunk\n if (currentChunk.trim()) {\n chunks.push(currentChunk.trim());\n }\n \n return chunks;\n}\n\nreturn results;"
},
"typeVersion": 2
},
{
"id": "3080f3be-a15c-439c-ae0b-aacf3d3d2d65",
"name": "스티키 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
368,
768
],
"parameters": {
"width": 272,
"height": 192,
"content": "## Guideline\n- send single url to measure your web performance\n- compare url by sending ``compare, \"url1\", \"url2\"``\n\nall url must started with http / https"
},
"typeVersion": 1
},
{
"id": "1d063c68-b265-42ba-b313-3a44d1e9bd94",
"name": "모바일 성능 비교",
"type": "n8n-nodes-google-pagespeed.googlePageSpeed",
"position": [
672,
416
],
"parameters": {
"url1": "={{ $json.url1 }}",
"url2": "={{ $json.url2 }}",
"operation": "compareUrls",
"additionalFields": {}
},
"credentials": {
"googlePageSpeedApi": {
"id": "88sZZbmocLQRgVT4",
"name": "Google PageSpeed account"
}
},
"typeVersion": 2
},
{
"id": "a238e039-7768-4b5b-8dd7-63b48e8c7c7f",
"name": "URL 구문 분석",
"type": "n8n-nodes-base.code",
"position": [
496,
416
],
"parameters": {
"jsCode": "// n8n Code Node - Extract URLs for comparison\n// This version handles messages like \"compare, https://site1.com, https://site2.com\"\n\nconst input = $input.all();\nconst results = [];\n\n// URL regex pattern\nconst urlPattern = /https?:\\/\\/[^\\s,]+/g;\n\nfor (const item of input) {\n const content = item.json.content || '';\n \n // Check if this is a comparison request\n const isComparison = content.toLowerCase().includes('compare');\n \n // Extract URLs\n const urls = content.match(urlPattern) || [];\n \n // Clean URLs\n const cleanUrls = urls.map(url => url.replace(/[,.\\s]+$/, ''));\n \n if (cleanUrls.length > 0) {\n if (isComparison && cleanUrls.length > 1) {\n // For comparison, create one output with url1 and url2\n results.push({\n json: {\n type: 'comparison',\n url1: cleanUrls[0],\n url2: cleanUrls[1] || null,\n url3: cleanUrls[2] || null, // In case there are more than 2 URLs\n urlCount: cleanUrls.length,\n originalContent: content\n }\n });\n } else {\n // For single URL analysis, use url1\n results.push({\n json: {\n type: 'single',\n url1: cleanUrls[0],\n url2: null,\n urlCount: cleanUrls.length,\n originalContent: content\n }\n });\n }\n }\n}\n\nreturn results;"
},
"typeVersion": 2
}
],
"active": false,
"pinData": {
"Parse Url": [
{
"json": {
"type": "comparison",
"url1": "https://pinecone.io/",
"url2": "https://khmuhtadin.com/",
"url3": null,
"urlCount": 2,
"originalContent": "compare, https://pinecone.io/, https://khmuhtadin.com/"
}
}
]
},
"settings": {
"executionOrder": "v1",
"saveManualExecutions": true,
"saveExecutionProgress": true,
"saveDataErrorExecution": "all",
"saveDataSuccessExecution": "all"
},
"versionId": "9843222e-8f1d-498e-91ee-4d705f44fb81",
"connections": {
"d6d80ea2-4b28-45a1-883c-c4018c2d8af1": {
"ai_languageModel": [
[
{
"node": "02a20bc9-69ed-4854-9a30-14fa63149fc1",
"type": "ai_languageModel",
"index": 0
},
{
"node": "3a0b7ea6-287c-42c9-a460-6bc8868c7211",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"3a00c7c5-d0ab-4555-9994-48e270797b71": {
"main": [
[
{
"node": "f709e408-0443-42c5-b346-7df22a6e6dfe",
"type": "main",
"index": 0
}
],
[
{
"node": "a238e039-7768-4b5b-8dd7-63b48e8c7c7f",
"type": "main",
"index": 0
}
]
]
},
"02a20bc9-69ed-4854-9a30-14fa63149fc1": {
"main": [
[
{
"node": "cecf1333-f995-434b-a440-98fd4a7587ec",
"type": "main",
"index": 0
}
]
]
},
"a238e039-7768-4b5b-8dd7-63b48e8c7c7f": {
"main": [
[
{
"node": "1d063c68-b265-42ba-b313-3a44d1e9bd94",
"type": "main",
"index": 0
}
]
]
},
"3a0b7ea6-287c-42c9-a460-6bc8868c7211": {
"main": [
[
{
"node": "9193bccf-37d2-4894-b61c-ab6e79ad0351",
"type": "main",
"index": 0
}
]
]
},
"9193bccf-37d2-4894-b61c-ab6e79ad0351": {
"main": [
[
{
"node": "b9f9b80e-41e2-4306-b441-88163db07472",
"type": "main",
"index": 0
}
]
]
},
"d3efd950-c7ab-45ff-8f3e-1eebf4674586": {
"main": [
[
{
"node": "0fba35e0-9c05-4f66-9530-df2989918757",
"type": "main",
"index": 0
}
]
]
},
"0fba35e0-9c05-4f66-9530-df2989918757": {
"main": [
[
{
"node": "3a00c7c5-d0ab-4555-9994-48e270797b71",
"type": "main",
"index": 0
}
]
]
},
"f709e408-0443-42c5-b346-7df22a6e6dfe": {
"main": [
[
{
"node": "02a20bc9-69ed-4854-9a30-14fa63149fc1",
"type": "main",
"index": 0
}
]
]
},
"cecf1333-f995-434b-a440-98fd4a7587ec": {
"main": [
[
{
"node": "b9f9b80e-41e2-4306-b441-88163db07472",
"type": "main",
"index": 0
}
]
]
},
"1d063c68-b265-42ba-b313-3a44d1e9bd94": {
"main": [
[
{
"node": "3a0b7ea6-287c-42c9-a460-6bc8868c7211",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 데브옵스, AI 요약
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
WordPress + 소셜 미디어
GPT/Gemini 및 WordPress 기반 자동화된 블로그 생성 및 다중 플랫폼 게시
If
Set
Switch
+
If
Set
Switch
44 노드Khairul Muhtadin
콘텐츠 제작
JinaAI 및 Gemini-GPT를 사용하여 기사를 Bluesky 스레드 게시물로 변환
JinaAI 및 Gemini/GPT를 사용한 기사를 Bluesky 스레드 게시물로 변환
If
Set
Code
+
If
Set
Code
21 노드Khairul Muhtadin
AI 요약
블리츠 블로그 Runware
OpenRouter와 Runware로 SEO 블로그 게시물 자동 생성 및 WordPress 게시
Discord
Telegram
Wordpress
+
Discord
Telegram
Wordpress
23 노드Khairul Muhtadin
인공지능
Gemini AI 요약을 사용한 자동화된 WhatsApp 그룹 주간 팀 보고서
Gemini AI 요약을 활용한 자동화 WhatsApp 그룹 주간 팀 보고서
If
Set
Code
+
If
Set
Code
47 노드Jamot
프로젝트 관리
SEO 친화적 - WordPress 기사 생성기
SEO 최적화된 블로그 기사 생성 및 WordPress에 게시
If
Discord
Telegram
+
If
Discord
Telegram
18 노드Khairul Muhtadin
인공지능
스마트资金관리器
基于Telegram、Google Sheets및OpenAI의AI驱动收据및支出追踪器
If
Set
Code
+
If
Set
Code
50 노드Khairul Muhtadin
금융