Google 리뷰 감정 분석 워크플로
이것은AI Summarization, Multimodal AI분야의자동화 워크플로우로, 25개의 노드를 포함합니다.주로 Set, Code, Slack, Filter, Agent 등의 노드를 사용하며. Google 비즈니스 리뷰 분석 및 Gemini를 사용하여 Slack에 감정 보고서 전송
- •Slack Bot Token 또는 Webhook URL
- •Google Gemini API Key
사용된 노드 (25)
{
"id": "peemlQQi9udHOyNH",
"meta": {
"instanceId": "bbc3fa3cd7d64d8ff0c4877d98dee68ce7dadacc5e089546680c915b3e5a212b",
"templateCredsSetupCompleted": true
},
"name": "Google review Sentiment analysis workflow",
"tags": [],
"nodes": [
{
"id": "3f44e182-92ad-4e47-9eab-4ffc6c9a3dfa",
"name": "다수 리뷰 가져오기",
"type": "n8n-nodes-base.googleBusinessProfile",
"position": [
-272,
-80
],
"parameters": {
"limit": 1000,
"account": {
"__rl": true,
"mode": "name",
"value": "="
},
"location": {
"__rl": true,
"mode": "name",
"value": "="
},
"resource": "review",
"operation": "getAll",
"requestOptions": {}
},
"typeVersion": 1
},
{
"id": "29592644-4922-4095-a608-fc369882a249",
"name": "감정 분석",
"type": "@n8n/n8n-nodes-langchain.sentimentAnalysis",
"position": [
368,
-96
],
"parameters": {
"options": {
"batching": {
"batchSize": 20,
"delayBetweenBatches": 60000
},
"categories": "Positive, Neutral, Negative",
"enableAutoFixing": true,
"systemPromptTemplate": "=You are a highly intelligent and accurate sentiment analyzer. \n\nYou will receive multiple JSON objects, each containing: \n- Comment: \"{{ $json.Comment }}\" \n- Rating: \"{{ $json.Raiting }}\" \n- Date: \"{{ $json.Date }}\" \n\nRules for analysis: \n- If Comment = \"no comment\", ignore the comment and analyze sentiment only from the rating. \n- If Comment has text, analyze sentiment based on both the comment and rating together. \n- Use the Date field to group sentiments by month and identify trends. \n\nYour tasks: \n1. Classify the overall sentiment trends into one of the following categories: {categories}. \n2. Group the results by month (based on the Date field) and provide the sentiment distribution for each month. \n3. For each month, give a short explanation of why the sentiment appears that way (e.g., common themes in comments, tone, or rating alignment). \n4. Provide a consolidated summary of sentiment across the entire dataset, including the key reasons driving the results. ",
"includeDetailedResults": true
},
"inputText": "={{ $json.Comment }}{{ $json.Raiting }}{{ $json.Date }}"
},
"typeVersion": 1.1
},
{
"id": "692ed10b-947e-4386-9707-0c2ce1e307f9",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
1056,
-224
],
"parameters": {
"options": {
"maxOutputTokens": 5000
},
"modelName": "models/gemini-2.0-flash"
},
"typeVersion": 1
},
{
"id": "713c6715-380d-4adf-a681-092765116409",
"name": "스케줄 트리거",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-688,
-80
],
"parameters": {
"rule": {
"interval": [
{
"field": "months"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "20e79d80-cdce-4cae-ab1f-6ff44565731b",
"name": "AI 에이전트",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1040,
-432
],
"parameters": {
"text": "=You are an AI assistant that consolidates customer feedback consisting of comments, ratings, and sentiment analysis metadata. \n\nINPUT DATA:\n{{ $json.feedback }}\n\nTASK:\n1. Review all feedback entries together.\n - Ignore entries where \"Comment\" = \"no comment\".\n - Convert \"Raiting\" into numeric stars (FIVE = 5, FOUR = 4, etc.).\n - Use \"sentimentAnalysis\" to confirm tone and consistency.\n - Consider \"Date\" to identify any trends or changes over time.\n\n2. Produce ONE single consolidated report in **valid JSON format** with the following structure:\n\n{\n \"overallSentiment\": \"string\", // e.g. \"Positive\", \"Negative\", \"Mixed\"\n \"averageRating\": number, // average numeric rating\n \"highlights\": [ \"string\", ... ], // list of positive aspects\n \"weaknessesConcerns\": [ \"string\", ... ], // list of concerns/issues\n \"timeTrend\": \"string\", // description of sentiment or rating trend over time\n \"finalSummary\": \"string\" // concise conclusion\n}",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "97dce654-beb7-46f3-9d4c-9f4768b72324",
"name": "AI 에이전트1",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1040,
-128
],
"parameters": {
"text": "=You are an AI assistant that consolidates customer feedback consisting of comments, ratings, and sentiment analysis metadata. \n\nINPUT DATA:\n{{ $json.feedback }}\n\nTASK:\n1. Review all feedback entries together.\n - Ignore entries where \"Comment\" = \"no comment\".\n - Convert \"Raiting\" into numeric stars (FIVE = 5, FOUR = 4, etc.).\n - Use \"sentimentAnalysis\" to confirm tone and consistency.\n - Consider \"Date\" to identify any trends or changes over time.\n\n2. Produce ONE single consolidated report in **valid JSON format** with the following structure:\n\n{\n \"overallSentiment\": \"string\", // e.g. \"Positive\", \"Negative\", \"Mixed\"\n \"averageRating\": number, // average numeric rating\n \"highlights\": [ \"string\", ... ], // list of positive aspects\n \"weaknessesConcerns\": [ \"string\", ... ], // list of concerns/issues\n \"timeTrend\": \"string\", // description of sentiment or rating trend over time\n \"finalSummary\": \"string\" // concise conclusion\n}",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "bfc5447b-fd82-4c44-af66-0d2b60f75280",
"name": "AI 에이전트2",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1056,
112
],
"parameters": {
"text": "=You are an AI assistant that consolidates customer feedback consisting of comments, ratings, and sentiment analysis metadata. \n\nINPUT DATA:\n{{ $json.feedback }}\n\nTASK:\n1. Review all feedback entries together.\n - Ignore entries where \"Comment\" = \"no comment\".\n - Convert \"Raiting\" into numeric stars (FIVE = 5, FOUR = 4, etc.).\n - Use \"sentimentAnalysis\" to confirm tone and consistency.\n - Consider \"Date\" to identify any trends or changes over time.\n\n2. Produce ONE single consolidated report in **valid JSON format** with the following structure:\n\n{\n \"overallSentiment\": \"string\", // e.g. \"Positive\", \"Negative\", \"Mixed\"\n \"averageRating\": number, // average numeric rating\n \"highlights\": [ \"string\", ... ], // list of positive aspects\n \"weaknessesConcerns\": [ \"string\", ... ], // list of concerns/issues\n \"timeTrend\": \"string\", // description of sentiment or rating trend over time\n \"finalSummary\": \"string\" // concise conclusion\n}",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "f95e4642-38b6-48ea-bf53-5de3175a7846",
"name": "Google Gemini Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
368,
112
],
"parameters": {
"options": {
"maxOutputTokens": 5000
},
"modelName": "models/gemini-2.0-flash"
},
"credentials": {
"googlePalmApi": {
"id": "WGFHFP25iuAU2TH9",
"name": "Google Gemini(PaLM) Api account 2"
}
},
"typeVersion": 1
},
{
"id": "8606a252-49af-472d-a47c-559be628fe60",
"name": "스티키 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-512,
-288
],
"parameters": {
"width": 752,
"height": 432,
"content": "## Reading Google review\n**Reading google review from the google business profile**"
},
"typeVersion": 1
},
{
"id": "eb49d865-7578-4969-b505-b643caa3f29d",
"name": "스티키 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
288,
-288
],
"parameters": {
"width": 400,
"height": 544,
"content": "## Run sentiment analysis on google review\n**Based on the google review data a sentiment analysis run on top of the google review using Gemini model.**"
},
"typeVersion": 1
},
{
"id": "17a9299c-5c99-466e-ae6a-895c29b25106",
"name": "스티키 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
-624
],
"parameters": {
"width": 640,
"height": 896,
"content": "## Summarize the sentiment analysis report using AI model\n**After the sentiment of each review is analysed consolidating the overall sentiment and restructure the output.**"
},
"typeVersion": 1
},
{
"id": "4b087a3b-d891-4f9a-97d1-be57259afb19",
"name": "스티키 노트3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1392,
-656
],
"parameters": {
"width": 448,
"height": 928,
"content": "## Sent notification to slack channel\n\n**Restructure the data to slack block and send to slack channel.**"
},
"typeVersion": 1
},
{
"id": "091e5606-4e04-4fe3-b2df-0625f32d6beb",
"name": "스티키 노트5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-816,
-816
],
"parameters": {
"width": 512,
"height": 448,
"content": "\n## Google review Sentiment analysis workflow\n\n\n**What it does**\n- Read Google review from the google business profile\n- Run sentimental analysis on the review for a defined period.\n- Send notification to slack channel.\n\n**Requirement**\n- Google business profile with approved project by Google.\n- Enable google business profile API service.\n- Gemini model with necessary credentials\n\n\n**Setup Instructions:**\n- Setup google business profile and enable Google Business Profile API.\n- Read google review using owner name and location.\n- Setup slack account to send notification from workflow.\n- Configure the time period of the review using set time period node\n"
},
"typeVersion": 1
},
{
"id": "b4506c66-8619-4eef-aed0-f4a9363af457",
"name": "시간 범위 설정",
"type": "n8n-nodes-base.set",
"position": [
-480,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "6acde8ee-5eeb-451c-a491-ed4a19c7b765",
"name": "period",
"type": "string",
"value": "year"
},
{
"id": "f5212cc6-8ed1-45de-ac3b-ff839822bed2",
"name": "time",
"type": "string",
"value": "3"
}
]
}
},
"executeOnce": true,
"typeVersion": 3.4
},
{
"id": "f284db6b-8852-427a-be86-e30961871f97",
"name": "시간 범위 기준 리뷰 필터링",
"type": "n8n-nodes-base.filter",
"position": [
-96,
-80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2dd5772a-efc9-46ac-9054-c5a7de0abdc9",
"operator": {
"type": "dateTime",
"operation": "after"
},
"leftValue": "={{ $json.updateTime }}",
"rightValue": "={{ $today.minus({ [ $('Set time period').item.json.period ]: $('Set time period').item.json.time }).toISO() }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "c775ac9e-4367-463d-b3d0-45e3d7bc648f",
"name": "댓글과 평점 매핑",
"type": "n8n-nodes-base.set",
"position": [
112,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "4ad19e64-07ad-4351-a696-d2d0026aaa31",
"name": "Comment",
"type": "string",
"value": "={{ $json.comment ?? \"no comment\" }}"
},
{
"id": "ac2932fb-6a62-4179-98d3-5d66a9738ee8",
"name": "Raiting",
"type": "string",
"value": "={{ $json.starRating ?? \"0\" }}"
},
{
"id": "fcadfd58-3d78-44e3-9e95-a24cbdaec614",
"name": "Date",
"type": "string",
"value": "={{ $json.updateTime }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "719cdaa0-f962-45da-91a4-34492f92119e",
"name": "json 문자열로 변환",
"type": "n8n-nodes-base.code",
"position": [
816,
-336
],
"parameters": {
"jsCode": "return [\n {\n json: {\n feedback: JSON.stringify($input.all().map(item => item.json), null, 2)\n }\n }\n];"
},
"executeOnce": true,
"typeVersion": 2
},
{
"id": "68f2cf3c-4b21-4004-b8d4-3399d8c1bafa",
"name": "json 문자열로 변환1",
"type": "n8n-nodes-base.code",
"position": [
816,
-96
],
"parameters": {
"jsCode": "return [\n {\n json: {\n feedback: JSON.stringify($input.all().map(item => item.json), null, 2)\n }\n }\n];"
},
"executeOnce": true,
"typeVersion": 2
},
{
"id": "046f17c6-c024-4b62-b16f-6d6ccdfeaad2",
"name": "json 문자열로 변환2",
"type": "n8n-nodes-base.code",
"position": [
816,
112
],
"parameters": {
"jsCode": "return [\n {\n json: {\n feedback: JSON.stringify($input.all().map(item => item.json), null, 2)\n }\n }\n];"
},
"executeOnce": true,
"typeVersion": 2
},
{
"id": "cad3406f-e05d-4c9c-ae13-aa9d877286e3",
"name": "긍정적 감정 데이터를 slack 블록으로 재구성",
"type": "n8n-nodes-base.code",
"position": [
1456,
-432
],
"parameters": {
"jsCode": "// Extract JSON string from $json.output (remove ```json ... ```)\nlet raw = $json.output.replace(/```json|```/g, \"\").trim();\n\n// Parse JSON\nlet data;\ntry {\n data = JSON.parse(raw);\n} catch (e) {\n throw new Error(\"Invalid JSON format in output: \" + e.message);\n}\n\n// Slack blocks array\nconst blocks = [\n {\n type: \"header\",\n text: {\n type: \"plain_text\",\n text: \"📊 Customer Feedback Report\",\n emoji: true\n }\n }\n];\n\n// Overall Sentiment\nif (data.overallSentiment) {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Overall Sentiment:* ${data.overallSentiment}` }\n });\n}\n\n// Average Rating\nif (data.averageRating) {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Average Rating:* ${data.averageRating} ⭐` }\n });\n}\n\n// Highlights\nif (data.highlights && data.highlights.length > 0) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: \"*Highlights:*\" }\n });\n\n data.highlights.forEach(h => {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `• ${h}` }\n });\n });\n}\n\n// Weaknesses/Concerns\nif (data.weaknessesConcerns && data.weaknessesConcerns.length > 0) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: \"*Weaknesses / Concerns:*\" }\n });\n\n data.weaknessesConcerns.forEach(w => {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `• ${w}` }\n });\n });\n}\n\n// Time Trend\nif (data.timeTrend) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Time Trend:* ${data.timeTrend}` }\n });\n}\n\n// Final Summary\nif (data.finalSummary) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Final Summary:* ${data.finalSummary}` }\n });\n}\n\n// Return Slack-ready JSON\nreturn [\n {\n json: {\n blocks\n }\n }\n];\n"
},
"executeOnce": true,
"typeVersion": 2
},
{
"id": "e734a3e0-5b2e-4930-a61a-c81a9263d34a",
"name": "중립 감정 데이터를 slack 블록으로 재구성",
"type": "n8n-nodes-base.code",
"position": [
1440,
-128
],
"parameters": {
"jsCode": "// Extract JSON string from $json.output (remove ```json ... ```)\nlet raw = $json.output.replace(/```json|```/g, \"\").trim();\n\n// Parse JSON\nlet data;\ntry {\n data = JSON.parse(raw);\n} catch (e) {\n throw new Error(\"Invalid JSON format in output: \" + e.message);\n}\n\n// Slack blocks array\nconst blocks = [\n {\n type: \"header\",\n text: {\n type: \"plain_text\",\n text: \"📊 Customer Feedback Report\",\n emoji: true\n }\n }\n];\n\n// Overall Sentiment\nif (data.overallSentiment) {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Overall Sentiment:* ${data.overallSentiment}` }\n });\n}\n\n// Average Rating\nif (data.averageRating) {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Average Rating:* ${data.averageRating} ⭐` }\n });\n}\n\n// Highlights\nif (data.highlights && data.highlights.length > 0) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: \"*Highlights:*\" }\n });\n\n data.highlights.forEach(h => {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `• ${h}` }\n });\n });\n}\n\n// Weaknesses/Concerns\nif (data.weaknessesConcerns && data.weaknessesConcerns.length > 0) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: \"*Weaknesses / Concerns:*\" }\n });\n\n data.weaknessesConcerns.forEach(w => {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `• ${w}` }\n });\n });\n}\n\n// Time Trend\nif (data.timeTrend) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Time Trend:* ${data.timeTrend}` }\n });\n}\n\n// Final Summary\nif (data.finalSummary) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Final Summary:* ${data.finalSummary}` }\n });\n}\n\n// Return Slack-ready JSON\nreturn [\n {\n json: {\n blocks\n }\n }\n];\n"
},
"executeOnce": true,
"typeVersion": 2
},
{
"id": "bf8ebac2-b4f9-43ea-8ec0-ab2a018760c2",
"name": "부정적 감정 데이터를 slack 블록으로 재구성",
"type": "n8n-nodes-base.code",
"position": [
1456,
112
],
"parameters": {
"jsCode": "// Extract JSON string from $json.output (remove ```json ... ```)\nlet raw = $json.output.replace(/```json|```/g, \"\").trim();\n\n// Parse JSON\nlet data;\ntry {\n data = JSON.parse(raw);\n} catch (e) {\n throw new Error(\"Invalid JSON format in output: \" + e.message);\n}\n\n// Slack blocks array\nconst blocks = [\n {\n type: \"header\",\n text: {\n type: \"plain_text\",\n text: \"📊 Customer Feedback Report\",\n emoji: true\n }\n }\n];\n\n// Overall Sentiment\nif (data.overallSentiment) {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Overall Sentiment:* ${data.overallSentiment}` }\n });\n}\n\n// Average Rating\nif (data.averageRating) {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Average Rating:* ${data.averageRating} ⭐` }\n });\n}\n\n// Highlights\nif (data.highlights && data.highlights.length > 0) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: \"*Highlights:*\" }\n });\n\n data.highlights.forEach(h => {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `• ${h}` }\n });\n });\n}\n\n// Weaknesses/Concerns\nif (data.weaknessesConcerns && data.weaknessesConcerns.length > 0) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: \"*Weaknesses / Concerns:*\" }\n });\n\n data.weaknessesConcerns.forEach(w => {\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `• ${w}` }\n });\n });\n}\n\n// Time Trend\nif (data.timeTrend) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Time Trend:* ${data.timeTrend}` }\n });\n}\n\n// Final Summary\nif (data.finalSummary) {\n blocks.push({ type: \"divider\" });\n blocks.push({\n type: \"section\",\n text: { type: \"mrkdwn\", text: `*Final Summary:* ${data.finalSummary}` }\n });\n}\n\n// Return Slack-ready JSON\nreturn [\n {\n json: {\n blocks\n }\n }\n];\n"
},
"executeOnce": true,
"retryOnFail": false,
"typeVersion": 2
},
{
"id": "8e8b11a1-1531-4f0d-90f6-5025e04a173e",
"name": "분석 결과가 긍정적일 경우 slack 채널에 메시지 전송",
"type": "n8n-nodes-base.slack",
"position": [
1664,
-432
],
"webhookId": "e3c8bfca-cc86-4c09-923a-0e40bf18d3e5",
"parameters": {
"select": "channel",
"blocksUi": "={{ '{ \"blocks\": ' + JSON.stringify($json.blocks) + ' }' }}",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09DQ7EJ57A",
"cachedResultName": "sentiment-analysis-report"
},
"messageType": "block",
"otherOptions": {
"includeLinkToWorkflow": false
},
"authentication": "oAuth2"
},
"typeVersion": 2.3
},
{
"id": "58b3519a-3484-4d0a-bf16-69fcd3c3cb9f",
"name": "분석 결과가 중립일 경우 slack 채널에 메시지 전송",
"type": "n8n-nodes-base.slack",
"position": [
1680,
-128
],
"webhookId": "e3c8bfca-cc86-4c09-923a-0e40bf18d3e5",
"parameters": {
"select": "channel",
"blocksUi": "={{ '{ \"blocks\": ' + JSON.stringify($json.blocks) + ' }' }}",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09DQ7EJ57A",
"cachedResultName": "sentiment-analysis-report"
},
"messageType": "block",
"otherOptions": {
"includeLinkToWorkflow": false
},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "27RfzQEAlPHYU6tj",
"name": "Slack account"
}
},
"typeVersion": 2.3
},
{
"id": "6b05d854-689d-473b-a02d-631293ff3817",
"name": "분석 결과가 부정적일 경우 slack 채널에 메시지 전송",
"type": "n8n-nodes-base.slack",
"position": [
1680,
112
],
"webhookId": "e3c8bfca-cc86-4c09-923a-0e40bf18d3e5",
"parameters": {
"select": "channel",
"blocksUi": "={{ '{ \"blocks\": ' + JSON.stringify($json.blocks) + ' }' }}",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09DQ7EJ57A",
"cachedResultName": "sentiment-analysis-report"
},
"messageType": "block",
"otherOptions": {
"includeLinkToWorkflow": false
},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "27RfzQEAlPHYU6tj",
"name": "Slack account"
}
},
"typeVersion": 2.3
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "9d0aab67-a72b-43f9-a8c3-e7b8c7aa7be3",
"connections": {
"20e79d80-cdce-4cae-ab1f-6ff44565731b": {
"main": [
[
{
"node": "cad3406f-e05d-4c9c-ae13-aa9d877286e3",
"type": "main",
"index": 0
}
]
]
},
"97dce654-beb7-46f3-9d4c-9f4768b72324": {
"main": [
[
{
"node": "e734a3e0-5b2e-4930-a61a-c81a9263d34a",
"type": "main",
"index": 0
}
]
]
},
"bfc5447b-fd82-4c44-af66-0d2b60f75280": {
"main": [
[
{
"node": "bf8ebac2-b4f9-43ea-8ec0-ab2a018760c2",
"type": "main",
"index": 0
}
]
]
},
"b4506c66-8619-4eef-aed0-f4a9363af457": {
"main": [
[
{
"node": "3f44e182-92ad-4e47-9eab-4ffc6c9a3dfa",
"type": "main",
"index": 0
}
]
]
},
"3f44e182-92ad-4e47-9eab-4ffc6c9a3dfa": {
"main": [
[
{
"node": "f284db6b-8852-427a-be86-e30961871f97",
"type": "main",
"index": 0
}
]
]
},
"713c6715-380d-4adf-a681-092765116409": {
"main": [
[
{
"node": "b4506c66-8619-4eef-aed0-f4a9363af457",
"type": "main",
"index": 0
}
]
]
},
"29592644-4922-4095-a608-fc369882a249": {
"main": [
[
{
"node": "719cdaa0-f962-45da-91a4-34492f92119e",
"type": "main",
"index": 0
}
],
[
{
"node": "68f2cf3c-4b21-4004-b8d4-3399d8c1bafa",
"type": "main",
"index": 0
}
],
[
{
"node": "046f17c6-c024-4b62-b16f-6d6ccdfeaad2",
"type": "main",
"index": 0
}
]
]
},
"719cdaa0-f962-45da-91a4-34492f92119e": {
"main": [
[
{
"node": "20e79d80-cdce-4cae-ab1f-6ff44565731b",
"type": "main",
"index": 0
}
]
]
},
"68f2cf3c-4b21-4004-b8d4-3399d8c1bafa": {
"main": [
[
{
"node": "97dce654-beb7-46f3-9d4c-9f4768b72324",
"type": "main",
"index": 0
}
]
]
},
"046f17c6-c024-4b62-b16f-6d6ccdfeaad2": {
"main": [
[
{
"node": "bfc5447b-fd82-4c44-af66-0d2b60f75280",
"type": "main",
"index": 0
}
]
]
},
"692ed10b-947e-4386-9707-0c2ce1e307f9": {
"ai_languageModel": [
[
{
"node": "20e79d80-cdce-4cae-ab1f-6ff44565731b",
"type": "ai_languageModel",
"index": 0
},
{
"node": "97dce654-beb7-46f3-9d4c-9f4768b72324",
"type": "ai_languageModel",
"index": 0
},
{
"node": "bfc5447b-fd82-4c44-af66-0d2b60f75280",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"f95e4642-38b6-48ea-bf53-5de3175a7846": {
"ai_languageModel": [
[
{
"node": "29592644-4922-4095-a608-fc369882a249",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"c775ac9e-4367-463d-b3d0-45e3d7bc648f": {
"main": [
[
{
"node": "29592644-4922-4095-a608-fc369882a249",
"type": "main",
"index": 0
}
]
]
},
"f284db6b-8852-427a-be86-e30961871f97": {
"main": [
[
{
"node": "c775ac9e-4367-463d-b3d0-45e3d7bc648f",
"type": "main",
"index": 0
}
]
]
},
"e734a3e0-5b2e-4930-a61a-c81a9263d34a": {
"main": [
[
{
"node": "58b3519a-3484-4d0a-bf16-69fcd3c3cb9f",
"type": "main",
"index": 0
}
]
]
},
"bf8ebac2-b4f9-43ea-8ec0-ab2a018760c2": {
"main": [
[
{
"node": "6b05d854-689d-473b-a02d-631293ff3817",
"type": "main",
"index": 0
}
]
]
},
"cad3406f-e05d-4c9c-ae13-aa9d877286e3": {
"main": [
[
{
"node": "8e8b11a1-1531-4f0d-90f6-5025e04a173e",
"type": "main",
"index": 0
}
]
]
}
}
}이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - AI 요약, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Sayone Technologies
@sayonetechSayOne Technologies is a digital transformation and IT services company headquartered in India, with a strong focus on web, mobile, and AI-driven solutions for the retail tech space. With over a decade of experience, SayOne partners with global businesses to build scalable applications, optimize inventory and operations using next-gen AI, and deliver customer-centric digital products.
이 워크플로우 공유