연구 계획
고급
이것은Document Extraction, Multimodal AI분야의자동화 워크플로우로, 33개의 노드를 포함합니다.주로 Code, Gmail, GoogleDocs, FormTrigger, HttpRequest 등의 노드를 사용하며. Gemini AI, Google Docs 및 인간 피드백을 사용한 UX 연구 계획 자동화
사전 요구사항
- •Google 계정 및 Gmail API 인증 정보
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Gemini API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "UEMiYKbevdzCdGfN",
"meta": {
"instanceId": "da4d3e0377931917a7d278ed58cc0bd71d819153520f9e58768cc8f079c2ec17",
"templateCredsSetupCompleted": true
},
"name": "Planning Research",
"tags": [],
"nodes": [
{
"id": "a92f96d8-42fd-498e-bc7d-60d9bfb0e191",
"name": "양식 제출 시",
"type": "n8n-nodes-base.formTrigger",
"position": [
496,
704
],
"webhookId": "9c1c5243-1da1-40d6-afe7-7f47c101bee8",
"parameters": {
"options": {},
"formTitle": "Provide Context for Writing a Research Plan",
"formFields": {
"values": [
{
"fieldType": "textarea",
"fieldLabel": "What type of organization do you work for?",
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "What kind of product, service, or experience does your company provide?",
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "What do you want to learn about your users or the problem you are addressing?",
"requiredField": true
},
{
"fieldType": "email",
"fieldLabel": "Which email address would you prefer to receive the email at?",
"requiredField": true
}
]
}
},
"typeVersion": 2.3
},
{
"id": "c73b6880-dc9c-4678-a2cf-b092a2b52eef",
"name": "Gemini",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
672,
848
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "yV24yp5FKJPWnLlP",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "68573d63-98b1-42f0-83d3-9bce7d364a11",
"name": "AI 에이전트: 질문 작성기",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
672,
704
],
"parameters": {
"text": "=You are a UX researcher assistant. Your role is to generate **10 research questions** based on the following information:\n\n* What type of organization do you work for?: `{{ $json['What type of organization do you work for?'] }}`\n* What kind of product, service, or experience does your company provide?: `{{ $json['What kind of product, service, or experience does your company provide?'] }}`\n* What do you want to learn about your users or the problem you are addressing?: `{{ $json['What do you want to learn about your users or the problem you are addressing?'] }}`\n\nReturn the questions in **JSON format** exactly as follows:\n\n```json\n{\n \"Question 01\": \"<created question>\",\n \"Question 02\": \"<created question>\",\n \"Question 03\": \"<created question>\",\n \"Question 04\": \"<created question>\",\n \"Question 05\": \"<created question>\",\n \"Question 06\": \"<created question>\",\n \"Question 07\": \"<created question>\",\n \"Question 08\": \"<created question>\",\n \"Question 09\": \"<created question>\",\n \"Question 10\": \"<created question>\"\n}\n",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "70af22d2-8bda-479c-a1d0-2b3f166a31b8",
"name": "AI 에이전트: 질문 편집기",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
848,
1104
],
"parameters": {
"text": "=You are a UX research assistant helping refine Planning Research Questions.\n\nHere is general information about the organization and research goal:\n\n* Type of organization: {{ $('On form submission').item.json['What type of organization do you work for?'] }}\n* Product/service/experience provided: {{ $('On form submission').item.json['What kind of product, service, or experience does your company provide?'] }}\n* Research objective: {{ $('On form submission').item.json['What do you want to learn about your users or the problem you are addressing?'] }}\n\nThe previous AI Agent generated several user research questions:\n{{ $('AI Agent: Question Maker').item.json.output }}\n\nThe designer reviewed these questions and gave feedback. \nSome were **approved**, some were **rejected**, and some were marked as **\"Should be edited\"**.\nAlso the user give their feedback on how you can improve it.\n\nYour task:\n- For questions marked as **\"Should be edited\"**, rephrase or refine them based on the user's feedback. If there is no feedback from the user edit it to improve clarity, relevance, or tone. \n- **Avoid reusing the format or style** of any questions that were rejected.\n- If a question was approved, keep it unchanged.\n\nHere are the questions and their respective review outcomes:\n\n\n{{ $json['Question 1'] }}\nStatus: {{ $json['status 1'] }}\nIf Question 01 needs editing, how should it be edited?: {{ $json['status 1'] }}\n---\n{{ $json['Question 2'] }}\nStatus: {{ $json['status 2'] }}\nIf Question 02 needs editing, how should it be edited?: {{ $json['status 2'] }}\n---\n{{ $json['Question 3'] }}\nStatus: {{ $json['status 3'] }}\nIf Question 03 needs editing, how should it be edited?: {{ $json['status 3'] }}\n---\n{{ $json['Question 4'] }}\nStatus: {{ $json['status 4'] }}\nIf Question 04 needs editing, how should it be edited?: {{ $json['status 4'] }}\n---\n{{ $json['Question 5'] }}\nStatus: {{ $json['status 5'] }}\nIf Question 05 needs editing, how should it be edited?: {{ $json['status 5'] }}\n---\n{{ $json['Question 6'] }}\nStatus: {{ $json['status 6'] }}\nIf Question 06 needs editing, how should it be edited?: {{ $json['status 6'] }}\n---\n{{ $json['Question 7'] }}\nStatus: {{ $json['status 7'] }}\nIf Question 07 needs editing, how should it be edited?: {{ $json['status 7'] }}\n---\n{{ $json['Question 8'] }}\nStatus: {{ $json['status 8'] }}\nIf Question 08 needs editing, how should it be edited?: {{ $json['status 8'] }}\n---\n{{ $json['Question 9'] }}\nStatus: {{ $json['status 9'] }}\nIf Question 09 needs editing, how should it be edited?: {{ $json['status 9'] }}\n---\n{{ $json['Question 10'] }}\nStatus: {{ $json['status 10'] }}\nIf Question 10 needs editing, how should it be edited?: {{ $json['status 10'] }}\n\nReturn your final output **only** in a list of questions (no markdown or extra text). Reset the numbering so it starts again from Question 01 in order. \n",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "f0cdc45b-6a52-44c0-a9cd-cbeef08f8d58",
"name": "Gemini Google",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
848,
1248
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "yV24yp5FKJPWnLlP",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "88aececb-21da-4a47-a23c-1cc7eb1172d4",
"name": "질문 분리",
"type": "n8n-nodes-base.code",
"position": [
976,
704
],
"parameters": {
"jsCode": "// n8n Function Node code\n// Assumes input comes in the first item as `input[0].json.output`\n\n// Get the raw string containing JSON\nconst rawString = $json[\"output\"];\n\n// Remove the ```json wrapper if present\nconst jsonString = rawString.replace(/```json|```/g, '').trim();\n\n// Parse it into a JavaScript object\nconst data = JSON.parse(jsonString);\n\n// Return only the questions in the same structure\nreturn [\n {\n json: data\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "1bc75236-67a4-4d5f-934f-c868287be67d",
"name": "질문 승인",
"type": "n8n-nodes-base.gmail",
"position": [
496,
1104
],
"webhookId": "5952cd6a-8670-41bd-9b64-a89aba96683e",
"parameters": {
"sendTo": "={{ $('On form submission').item.json['Which email address would you prefer to receive the email at?'] }}",
"message": "=Dear Designer,\n\nI hope this email finds you well.\n\nI am writing to share the proposed research questions for your project and kindly request your feedback. Please review each question and indicate whether you approve or disapprove of them.\n\nYour guidance is greatly appreciated, and your approval will help me move forward with the research design.\n\nThank you very much for your time and support.\n\nBest regards,\nYour UX Assistance",
"options": {},
"subject": "Request for Approval of Research Questions",
"operation": "sendAndWait",
"formFields": {
"values": [
{
"fieldType": "radio",
"fieldLabel": "=Question 01: {{ $json[\"Question 01\"] }}",
"fieldOptions": {
"values": [
{
"option": "Approved"
},
{
"option": "Disapproved"
},
{
"option": "Should be edited"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "If Question 01 needs editing, how should it be edited?"
},
{
"fieldType": "radio",
"fieldLabel": "={{ $json[\"Question 02\"] }}",
"fieldOptions": {
"values": [
{
"option": "Approved"
},
{
"option": "Disapproved"
},
{
"option": "Should be edited"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "If Question 02 needs editing, how should it be edited?"
},
{
"fieldType": "radio",
"fieldLabel": "={{ $json[\"Question 03\"] }}",
"fieldOptions": {
"values": [
{
"option": "Approved"
},
{
"option": "Disapproved"
},
{
"option": "Should be edited"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "If Question 03 needs editing, how should it be edited?"
},
{
"fieldType": "radio",
"fieldLabel": "={{ $json[\"Question 04\"] }}",
"fieldOptions": {
"values": [
{
"option": "Approved"
},
{
"option": "Disapproved"
},
{
"option": "Should be edited"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "If Question 04 needs editing, how should it be edited?"
},
{
"fieldType": "radio",
"fieldLabel": "={{ $json[\"Question 05\"] }}",
"fieldOptions": {
"values": [
{
"option": "Approved"
},
{
"option": "Disapproved"
},
{
"option": "Should be edited"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "If Question 05 needs editing, how should it be edited?"
},
{
"fieldType": "radio",
"fieldLabel": "={{ $json[\"Question 06\"] }}",
"fieldOptions": {
"values": [
{
"option": "Approved"
},
{
"option": "Disapproved"
},
{
"option": "Should be edited"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "If Question 06 needs editing, how should it be edited?"
},
{
"fieldType": "radio",
"fieldLabel": "={{ $json[\"Question 07\"] }}",
"fieldOptions": {
"values": [
{
"option": "Approved"
},
{
"option": "Disapproved"
},
{
"option": "Should be edited"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "If Question 07 needs editing, how should it be edited?"
},
{
"fieldType": "radio",
"fieldLabel": "={{ $json[\"Question 08\"] }}",
"fieldOptions": {
"values": [
{
"option": "Approved"
},
{
"option": "Disapproved"
},
{
"option": "Should be edited"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "If Question 08 needs editing, how should it be edited?"
},
{
"fieldType": "radio",
"fieldLabel": "={{ $json[\"Question 09\"] }}",
"fieldOptions": {
"values": [
{
"option": "Approved"
},
{
"option": "Disapproved"
},
{
"option": "Should be edited"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "If Question 09 needs editing, how should it be edited?"
},
{
"fieldType": "radio",
"fieldLabel": "={{ $json[\"Question 10\"] }}",
"fieldOptions": {
"values": [
{
"option": "Approved"
},
{
"option": "Disapproved"
},
{
"option": "Should be edited"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "If Question 10 needs editing, how should it be edited?"
}
]
},
"responseType": "customForm"
},
"credentials": {
"gmailOAuth2": {
"id": "FyKU6TD2Hbf3tjG3",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "feac9d2d-23be-42d8-ad97-90757c98748f",
"name": "편집 승인",
"type": "n8n-nodes-base.gmail",
"position": [
496,
1504
],
"webhookId": "5952cd6a-8670-41bd-9b64-a89aba96683e",
"parameters": {
"sendTo": "={{ $('On form submission').item.json['Which email address would you prefer to receive the email at?'] }}",
"message": "=Dear Designer,\n\nI hope this email finds you well.\n\nI am writing to share the proposed research questions for your project and kindly request your feedback. Please review each question and indicate whether you approve or disapprove of them:\n{{ $('AI Agent: Question Editor').item.json.output }}\n\nYour guidance is greatly appreciated, and your approval will help me move forward with the research design.\n\nThank you very much for your time and support.\n\nBest regards,\nYour UX Assistance",
"options": {},
"subject": "Request for Approval of Research Questions",
"operation": "sendAndWait",
"formFields": {
"values": [
{
"fieldLabel": "Which question have you not approved? Please write the number only."
},
{
"fieldType": "textarea",
"fieldLabel": "Why are they rejected?"
}
]
},
"responseType": "customForm"
},
"credentials": {
"gmailOAuth2": {
"id": "FyKU6TD2Hbf3tjG3",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "5c37ff3e-1433-4bd4-a6d8-588e406e56ce",
"name": "Google Gemini 채팅 모델",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
624,
1632
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "yV24yp5FKJPWnLlP",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "e859a1db-874f-475f-8d06-957a544938fd",
"name": "AI 에이전트: 두 번째 편집기",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
624,
1504
],
"parameters": {
"text": "=You are a UX research assistant helping refine Planning Research Questions.\n\nHere is general information about the organization and research goal:\n\n* Type of organization: {{ $('On form submission').item.json['What type of organization do you work for?'] }}\n* Product/service/experience provided: {{ $('On form submission').item.json['What kind of product, service, or experience does your company provide?'] }}\n* Research objective: {{ $('On form submission').item.json['What do you want to learn about your users or the problem you are addressing?'] }}\n\nThe previous AI Agent generated several user research questions:\n{{ $('AI Agent: Question Editor').item.json.output }}\n\nThe designer reviewed these questions and gave feedback. \nSome were **approved**, some were **rejected**, and the reason why it is rejected.\n\nWhich question have been rejected: \n{{ $json.data['Which question have you not approved? Please write the number only.'] }}\n\nYour task:\n- Rewrite the questions that the user not approved. Use the users' feedback if it is available:\n{{ $json.data['Why are they rejected?'] }}\n\nReturn your final output **only** in a list of questions (no markdown or extra text). Reset the numbering so it starts again from Question 01 in order. \n",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "77e4a8bc-c953-461e-86e8-79d869a6ce72",
"name": "Google Gemini 채팅",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
912,
1648
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "yV24yp5FKJPWnLlP",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "d07287cb-de97-453a-861b-a76d6c414883",
"name": "AI 에이전트: 요청 방법",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
912,
1504
],
"parameters": {
"text": "=You are a **UX research assistant** helping identify suitable **research methods** for user research questions.\n\n**Context**\n\n* **Type of organization:** {{ $('On form submission').item.json['What type of organization do you work for?'] }}\n* **Product/service/experience provided:** {{ $('On form submission').item.json['What kind of product, service, or experience does your company provide?'] }}\n* **Research objective:** {{ $('On form submission').item.json['What do you want to learn about your users or the problem you are addressing?'] }}\n\n**Input**\n\nThe previous AI Agent generated the following user research questions:\n{{ $json.output }}\n\n**Your task**\n\nFor each research question:\n\n* Recommend the **most suitable UX research method(s)** (e.g., interviews, usability testing, diary study, survey, A/B testing, etc.).\n* Explain **why** that method is appropriate for the question and research goal.\n* Ensure your reasoning is clear, concise, and practical.\n\n**Output format**\n\nReturn your final answer **only** as a list, with each item containing:\n\n1. The **question**\n2. The **recommended method(s)**\n3. A brief **rationale** for why the method was chosen\n\nDo **not** include markdown formatting, bullet points, or extra text — only the numbered list in plain text.\n",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "9f14a352-e490-43d9-8b90-e0df4379bfcc",
"name": "스티커 메모",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
592
],
"parameters": {
"height": 384,
"content": "## Get Information about Organisation\n"
},
"typeVersion": 1
},
{
"id": "a981eb5a-12a7-4783-8ff6-ae76d5e18be5",
"name": "스티커 메모1",
"type": "n8n-nodes-base.stickyNote",
"position": [
656,
592
],
"parameters": {
"width": 496,
"height": 384,
"content": "## Using AI to Write a Research Plan\n"
},
"typeVersion": 1
},
{
"id": "cb8bdd33-627c-4a57-a879-9ee50dc5f9e6",
"name": "스티커 메모2",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
992
],
"parameters": {
"color": 2,
"height": 384,
"content": "## Questions are checked by the user\n"
},
"typeVersion": 1
},
{
"id": "2985ebff-dc3d-42e7-9046-21835e8af4b3",
"name": "스티커 메모3",
"type": "n8n-nodes-base.stickyNote",
"position": [
656,
992
],
"parameters": {
"color": 2,
"width": 496,
"height": 384,
"content": "## Edit the questions based on the user's feedback and be rechecked by the user\n"
},
"typeVersion": 1
},
{
"id": "e0188e7d-ec2f-4ee2-a940-9636ab92a729",
"name": "스티커 메모4",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
1392
],
"parameters": {
"color": 3,
"width": 480,
"height": 384,
"content": "## Questions are regenerated "
},
"typeVersion": 1
},
{
"id": "85e322c2-7987-49cf-965e-59efdb1b733a",
"name": "스티커 메모5",
"type": "n8n-nodes-base.stickyNote",
"position": [
896,
1392
],
"parameters": {
"color": 3,
"width": 256,
"height": 384,
"content": "## Design methods are proposed for each question"
},
"typeVersion": 1
},
{
"id": "9adff9a5-cbfd-4ecc-8a75-b0e75666c2c8",
"name": "질문 결합",
"type": "n8n-nodes-base.code",
"position": [
704,
1104
],
"parameters": {
"jsCode": "const inputData = items[0].json.data;\nlet combined = {};\nlet questionCount = 1;\n\nfor (let key in inputData) {\n // Skip edit keys\n if (key.startsWith(\"If Question\")) continue;\n\n // Main question\n const editKey = `If Question ${questionCount} needs editing, how should it be edited?`;\n\n combined[`Question ${questionCount}`] = key; // question text\n combined[`status ${questionCount}`] = inputData[key]; // status\n combined[`edit ${questionCount}`] = inputData[editKey] || \"\"; // edit suggestion\n\n questionCount++;\n}\n\nreturn [{ json: combined }];\n"
},
"typeVersion": 2
},
{
"id": "5db3754b-8720-4fce-9aa3-93ed878b540d",
"name": "AI 에이전트",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1472,
1504
],
"parameters": {
"text": "=You are given a research plan generated by AI, which includes UX research methods and related details.\n\nYour task is to transform this raw content into a **visually appealing, well-structured HTML report** suitable for conversion into a Google Doc.\n\nRequirements:\n- Organize the report into clear, logical sections (e.g., <h1>Title</h1>, <h2>Introduction</h2>, <h2>Objectives</h2>, <h2>Research Questions</h2>, <h2>Methods</h2>, <h2>Expected Outcomes</h2>, <h2>Timeline</h2>, <h2>References</h2>).\n- Use clean, semantic HTML (<h1>, <h2>, <p>, <ul>, <ol>, <strong>, <em>).\n- Make the layout **visually appealing**: \n - Add light visual hierarchy (consistent heading sizes and spacing).\n - Use short paragraphs, bullet points, and bold for emphasis where helpful.\n - Keep style elegant and minimal — suitable for academic or professional presentation.\n- Ensure it looks **polished, readable, and ready to paste into Google Docs**.\n- Do not include scripts or external CSS; use inline styling only if needed for visual clarity (e.g., font-weight, spacing, or color).\n\nInput content:\n{{ $('AI Agent: Request Methods').item.json.output }}\n",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "d4eacca7-a927-4b49-b7c1-5dd6eadb5b38",
"name": "Gemini ChatAssis",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
1472,
1648
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "yV24yp5FKJPWnLlP",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "3ebf7abd-96a7-49ef-96b8-2859a7d4a2fd",
"name": "스티커 메모6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1200,
1424
],
"parameters": {
"color": 4,
"width": 528,
"height": 352,
"content": "## Prepare the Report"
},
"typeVersion": 1
},
{
"id": "41a3d493-2ffa-4674-86da-603ec94b455b",
"name": "보고서 승인",
"type": "n8n-nodes-base.gmail",
"position": [
2000,
1504
],
"webhookId": "5952cd6a-8670-41bd-9b64-a89aba96683e",
"parameters": {
"sendTo": "={{ $('On form submission').item.json['Which email address would you prefer to receive the email at?'] }}",
"message": "=Dear Designer,\n\nI hope this email finds you well.\n\nHere you can find the planning research question and the proposed method: \n{{ 'https://docs.google.com/document/d/' + $('Create a Report').item.json.id + '/view' }}\n\nPlease take a look and share your feedback.\n\nThank you very much for your time and support.\n\nBest regards,\nYour UX Assistant",
"options": {},
"subject": "Feedback on Research Question and Proposed Method",
"operation": "sendAndWait",
"formFields": {
"values": [
{
"fieldType": "textarea",
"fieldLabel": "In what ways should the report be changed?"
}
]
},
"responseType": "customForm"
},
"credentials": {
"gmailOAuth2": {
"id": "FyKU6TD2Hbf3tjG3",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "acd40e18-6b97-4def-ac96-5f62ac5717fe",
"name": "스티커 메모7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1744,
1424
],
"parameters": {
"color": 4,
"width": 432,
"height": 352,
"content": "## Get and Send the Report"
},
"typeVersion": 1
},
{
"id": "c6cb50d3-32ed-411f-b12b-1bcdbd9b0322",
"name": "Google GeminiChat",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
1280,
1280
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "yV24yp5FKJPWnLlP",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "54ca1d28-b042-4630-be9f-689c6d479295",
"name": "스티커 메모8",
"type": "n8n-nodes-base.stickyNote",
"position": [
1200,
1072
],
"parameters": {
"color": 5,
"width": 528,
"height": 336,
"content": "## Edit the Report"
},
"typeVersion": 1
},
{
"id": "1a478b88-3d92-48c8-95d9-e67e10501e31",
"name": "AI 에이전트: 보고서 편집기",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1280,
1136
],
"parameters": {
"text": "=You are given a research plan generated by an AI, which includes UX research methods and related details.\n\nRead the report below:\n{{ $('AI Agent').item.json.output }}\n\nThen read the user’s feedback:\n{{ $json.data[\"In what ways should the report be changed?\"] }}\n\nRevise the research plan according to the user’s feedback. Keep the structure and clarity of the report while making the requested changes.",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "4cb275cd-c95d-43f9-8d9d-61c0c2e36b96",
"name": "HTTP 요청: 보고서",
"type": "n8n-nodes-base.httpRequest",
"position": [
1824,
1504
],
"parameters": {
"url": "https://script.google.com/macros/s/AKfycbycCRkQRMw2hQPRKvBq-8fPSTlrWsHt3rNd5qjuCytZavI66m1ovif4HEoW9TtuUaar/exec",
"method": "POST",
"options": {},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "docId",
"value": "={{ $('Create a Report').item.json.id }}"
},
{
"name": "mode",
"value": "append"
},
{
"name": "HTML",
"value": "={{ $json.output }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "f220a797-73af-4dbb-a696-66c218e9e65b",
"name": "HTTP 요청: 편집된 보고서",
"type": "n8n-nodes-base.httpRequest",
"position": [
1824,
1136
],
"parameters": {
"url": "https://script.google.com/macros/s/AKfycbycCRkQRMw2hQPRKvBq-8fPSTlrWsHt3rNd5qjuCytZavI66m1ovif4HEoW9TtuUaar/exec",
"method": "POST",
"options": {},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "docId",
"value": "={{ $json.id }}"
},
{
"name": "mode",
"value": "append"
},
{
"name": "HTML",
"value": "={{ $('AI Agent: Report Editor').item.json.output }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "f71091c1-74b5-4b6f-8840-2978a0cf0163",
"name": "보고서 생성",
"type": "n8n-nodes-base.googleDocs",
"position": [
1280,
1504
],
"parameters": {
"title": "=Research Plan {{ new Date().toLocaleString('en-GB', { hour12: false }).replace(/[/,: ]/g, '.').replace(',', '').slice(0, 16).replace(' ', '.') }}",
"folderId": "default"
},
"credentials": {
"googleDocsOAuth2Api": {
"id": "DUa7OagoEpcdsDb5",
"name": "Google Docs account"
}
},
"typeVersion": 2
},
{
"id": "1a235927-f553-4e5f-b027-1d10abb14fd4",
"name": "최종 보고서 생성",
"type": "n8n-nodes-base.googleDocs",
"position": [
1584,
1136
],
"parameters": {
"title": "=Final Research Plan {{ new Date().toLocaleString('en-GB', { hour12: false }).replace(/[/,: ]/g, '.').replace(',', '').slice(0, 16).replace(' ', '.') }}",
"folderId": "default"
},
"credentials": {
"googleDocsOAuth2Api": {
"id": "DUa7OagoEpcdsDb5",
"name": "Google Docs account"
}
},
"typeVersion": 2
},
{
"id": "83b8608e-1431-461d-b515-a296de5b02f6",
"name": "스티커 메모9",
"type": "n8n-nodes-base.stickyNote",
"position": [
1744,
1072
],
"parameters": {
"color": 5,
"width": 432,
"height": 336,
"content": "## Create the Final Report"
},
"typeVersion": 1
},
{
"id": "e43ceaa3-8b69-4d04-b822-5280cda43c43",
"name": "스티커 메모10",
"type": "n8n-nodes-base.stickyNote",
"position": [
112,
592
],
"parameters": {
"color": 6,
"height": 1184,
"content": "## Planning Research Workflow\n\nThis automation streamlines the process of designing and refining a research plan using AI and human feedback. It integrates Google Gemini, Gmail, and HTTP requests to coordinate each stage—from gathering information to delivering a finalized report.\n\nGet Information – Collects key details about the organization or project through a form submission.\n\nAI-Assisted Planning – Gemini generates an initial research plan and breaks it into structured questions.\n\nUser Review Loop – The questions are sent to the user via email for review, edits, or approval. Feedback triggers AI refinement.\n\nQuestion Regeneration & Method Design – If needed, the system regenerates improved questions and proposes appropriate design methods for each.\n\nReport Preparation – The approved content is compiled into a structured research report.\n\nFinal Editing & Delivery – Gemini edits the report, creates the final document, and sends it automatically for approval or sharing."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "42a5e2bf-c3cc-4926-87a2-2d8351885fe3",
"connections": {
"c73b6880-dc9c-4678-a2cf-b092a2b52eef": {
"ai_languageModel": [
[
{
"node": "68573d63-98b1-42f0-83d3-9bce7d364a11",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"5db3754b-8720-4fce-9aa3-93ed878b540d": {
"main": [
[
{
"node": "4cb275cd-c95d-43f9-8d9d-61c0c2e36b96",
"type": "main",
"index": 0
}
]
]
},
"feac9d2d-23be-42d8-ad97-90757c98748f": {
"main": [
[
{
"node": "e859a1db-874f-475f-8d06-957a544938fd",
"type": "main",
"index": 0
}
]
]
},
"f0cdc45b-6a52-44c0-a9cd-cbeef08f8d58": {
"ai_languageModel": [
[
{
"node": "70af22d2-8bda-479c-a1d0-2b3f166a31b8",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"f71091c1-74b5-4b6f-8840-2978a0cf0163": {
"main": [
[
{
"node": "5db3754b-8720-4fce-9aa3-93ed878b540d",
"type": "main",
"index": 0
}
]
]
},
"41a3d493-2ffa-4674-86da-603ec94b455b": {
"main": [
[
{
"node": "1a478b88-3d92-48c8-95d9-e67e10501e31",
"type": "main",
"index": 0
}
]
]
},
"d4eacca7-a927-4b49-b7c1-5dd6eadb5b38": {
"ai_languageModel": [
[
{
"node": "5db3754b-8720-4fce-9aa3-93ed878b540d",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"9adff9a5-cbfd-4ecc-8a75-b0e75666c2c8": {
"main": [
[
{
"node": "70af22d2-8bda-479c-a1d0-2b3f166a31b8",
"type": "main",
"index": 0
}
]
]
},
"c6cb50d3-32ed-411f-b12b-1bcdbd9b0322": {
"ai_languageModel": [
[
{
"node": "1a478b88-3d92-48c8-95d9-e67e10501e31",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"1bc75236-67a4-4d5f-934f-c868287be67d": {
"main": [
[
{
"node": "9adff9a5-cbfd-4ecc-8a75-b0e75666c2c8",
"type": "main",
"index": 0
}
]
]
},
"77e4a8bc-c953-461e-86e8-79d869a6ce72": {
"ai_languageModel": [
[
{
"node": "d07287cb-de97-453a-861b-a76d6c414883",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"a92f96d8-42fd-498e-bc7d-60d9bfb0e191": {
"main": [
[
{
"node": "68573d63-98b1-42f0-83d3-9bce7d364a11",
"type": "main",
"index": 0
}
]
]
},
"88aececb-21da-4a47-a23c-1cc7eb1172d4": {
"main": [
[
{
"node": "1bc75236-67a4-4d5f-934f-c868287be67d",
"type": "main",
"index": 0
}
]
]
},
"4cb275cd-c95d-43f9-8d9d-61c0c2e36b96": {
"main": [
[
{
"node": "41a3d493-2ffa-4674-86da-603ec94b455b",
"type": "main",
"index": 0
}
]
]
},
"1a478b88-3d92-48c8-95d9-e67e10501e31": {
"main": [
[
{
"node": "1a235927-f553-4e5f-b027-1d10abb14fd4",
"type": "main",
"index": 0
}
]
]
},
"e859a1db-874f-475f-8d06-957a544938fd": {
"main": [
[
{
"node": "d07287cb-de97-453a-861b-a76d6c414883",
"type": "main",
"index": 0
}
]
]
},
"1a235927-f553-4e5f-b027-1d10abb14fd4": {
"main": [
[
{
"node": "f220a797-73af-4dbb-a696-66c218e9e65b",
"type": "main",
"index": 0
}
]
]
},
"68573d63-98b1-42f0-83d3-9bce7d364a11": {
"main": [
[
{
"node": "88aececb-21da-4a47-a23c-1cc7eb1172d4",
"type": "main",
"index": 0
}
]
]
},
"5c37ff3e-1433-4bd4-a6d8-588e406e56ce": {
"ai_languageModel": [
[
{
"node": "e859a1db-874f-475f-8d06-957a544938fd",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"70af22d2-8bda-479c-a1d0-2b3f166a31b8": {
"main": [
[
{
"node": "feac9d2d-23be-42d8-ad97-90757c98748f",
"type": "main",
"index": 0
}
]
]
},
"d07287cb-de97-453a-861b-a76d6c414883": {
"main": [
[
{
"node": "f71091c1-74b5-4b6f-8840-2978a0cf0163",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 문서 추출, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
제 작업流程5
Gemini AI, 네트워크 검색 및 PDF 배달 기반의 전면적인 연구 보고서 생성기
Set
Code
Html
+
Set
Code
Html
102 노드Hichul
콘텐츠 제작
AI 경쟁자 분석을 사용하여 브랜드 입력에서 AEO 전략 생성
Firecrawl、Gemini와 OpenAI를 사용하여 답변 엔진 최적화 전략 생성
Set
Code
Wait
+
Set
Code
Wait
25 노드Hemanth Arety
시장 조사
AI 의료 보고서 생성기
Gemini AI와 Google Workspace를 사용하여 이메일에서 의료 보고서 생성
Set
Code
Gmail
+
Set
Code
Gmail
21 노드Abdullah Alshiekh
문서 추출
AI-Deepseek-R1t 회사 출장 승인 및 경비 승인 요청
Deepseek AI, Gmail, Google Sheets를 통한 회의 출장 승인 자동화
If
Set
Code
+
If
Set
Code
24 노드Cheng Siong Chin
문서 추출
PDF에서 주문으로
AI를 사용한 PDF 구매 주문서를 Adobe Commerce 판매 주문서로 자동 변환
If
Set
Code
+
If
Set
Code
96 노드JKingma
문서 추출
Claude AI, GoMarble MCP 및 Google 프레젠테이션을 사용한 주간 마케팅 요약 프레젠테이션 자동 생성 사본
Claude AI, GoMarble MCP 및 Google Slides를 사용한 주간 Meta 광고 보고서 자동화
Set
Code
Gmail
+
Set
Code
Gmail
15 노드Sankalp Dev
문서 추출