취업 도우미 Agent
고급
이것은Miscellaneous, Multimodal AI분야의자동화 워크플로우로, 16개의 노드를 포함합니다.주로 Set, Code, Gmail, FormTrigger, Agent 등의 노드를 사용하며. Gemini와 Google Jobs을 사용하여 이상한 일자리를 찾고 맞춤형 취업 서신을 생성합니다.
사전 요구사항
- •Google 계정 및 Gmail API 인증 정보
- •Google Gemini API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "jDUtQ2fgs8EOqU95",
"meta": {
"instanceId": "c2650793f644091dc80fb900fe63448ad1f4b774008de9608064d67294f8307c",
"templateCredsSetupCompleted": true
},
"name": "JOB Hunter Agent",
"tags": [],
"nodes": [
{
"id": "c6d0bc1b-bd78-4eea-84ed-6bed5c999d45",
"name": "Sticky Note - 작동 방식",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
-288
],
"parameters": {
"color": 5,
"width": 500,
"height": 864,
"content": "## 🎯 SMART JOB HUNTER + COVER LETTER GENERATOR\n\n### 🚀 What This Workflow Does:\n\n1. **User Submission**\n - User upload CV (PDF) + preferences (location, job type, salary, etc.)\n - Triggered by Form node\n\n2. **Extract CV**\n - PDF text extracted\n - Stored in `cvData`\n\n3. **Prepare Data**\n - Collects all form fields (location, work setting, job type, salary, email)\n - Normalized into JSON variables\n\n4. **Job Hunter Agent**\n - Uses SerpAPI + Gemini LLM\n - System prompt forces **ONLY 1 job result**\n - Returns structured JSON with cover letter\n\n5. **Parse Agent Output**\n - Cleans JSON (removes ```json fences)\n - Ensures valid JSON for downstream\n\n6. **Generate HTML Email**\n - Builds clean email template\n - Inserts candidate profile + job match + cover letter + application tips\n\n7. **Send via Gmail**\n - Sends final email to user’s address\n - Subject: *Your Job MATCH!*\n"
},
"typeVersion": 1
},
{
"id": "ef02ff8f-9fa8-4f8a-a66f-d81003fe3915",
"name": "Sticky Note - 설정 가이드",
"type": "n8n-nodes-base.stickyNote",
"position": [
-384,
48
],
"parameters": {
"color": 4,
"width": 380,
"height": 528,
"content": "## ⚙️ SETUP GUIDE (Updated)\n\n### 1. Google Gemini (Required)\n* Go to [Google AI Studio](https://aistudio.google.com/)\n* Create Gemini API key\n* Add it to n8n credentials (`Google Palm / Gemini`)\n* Model used: **Gemini 2.5 Pro**\n\n### 2. SerpAPI (Required)\n* Go to [SerpAPI Dashboard](https://serpapi.com/)\n* Create API key\n* Add it to n8n credentials (`SerpAPI`)\n* Used by workflow to fetch **Google Jobs search results**\n\n### 3. Form Configuration\n* Form webhook auto-generated by n8n\n* Share form link directly with users\n* Or embed form in your website\n"
},
"typeVersion": 1
},
{
"id": "d776ebde-2cda-4b59-a0aa-a6ee0925d4f9",
"name": "Sticky Note - 전문가 팁",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
48
],
"parameters": {
"color": 3,
"width": 360,
"height": 528,
"content": "## 🛠️ Customization Tips\n\n- **Prompt**:\n Adjust system message in Job Hunter Agent to refine tone/length of cover letter.\n\n- **Email Branding**:\n Update footer in HTML email (currently: *Generated by khmuhtadin.com*).\n\n- **Job Filters**:\n Extend Prepare Data node to pass blacklist, industries, or company size.\n\n- **LLM Model**:\n Currently using Google Gemini (Gemini 2.5 Pro).\n Switch to GPT-4o or Claude 3.5 Sonnet if available for better reasoning.\n\n- **Attachments**:\n Optionally attach parsed CV summary as PDF for user reference.\n"
},
"typeVersion": 1
},
{
"id": "027c527d-90c0-4aec-b3f5-7ca212c72b1d",
"name": "양식 제출 시",
"type": "n8n-nodes-base.formTrigger",
"position": [
-1200,
-256
],
"webhookId": "smart-job-hunter-v2",
"parameters": {
"options": {},
"formTitle": "🎯 Smart Job Hunter + Cover Letter Generator",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "CV/Resume (PDF)",
"multipleFiles": false,
"requiredField": true,
"acceptFileTypes": ".pdf"
},
{
"fieldLabel": "Preferred Location",
"placeholder": "e.g., Jakarta, Bandung, Remote, Anywhere",
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Job Type",
"fieldOptions": {
"values": [
{
"option": "Full Time"
},
{
"option": "Part Time"
},
{
"option": "Freelance"
},
{
"option": "Contract"
},
{
"option": "Internship"
}
]
},
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Work Setting",
"fieldOptions": {
"values": [
{
"option": "On Site"
},
{
"option": "Remote"
},
{
"option": "Hybrid"
}
]
},
"requiredField": true
},
{
"fieldLabel": "Minimum Salary Expectation (Optional)",
"placeholder": "e.g., 10 juta, 15-20 juta, negotiable"
},
{
"fieldType": "textarea",
"fieldLabel": "Additional Preferences (Optional)",
"placeholder": "e.g., startup culture, specific companies, must have BPJS"
},
{
"fieldType": "email",
"fieldLabel": "Email",
"placeholder": "We will send the results to this email",
"requiredField": true
}
]
},
"formDescription": "Upload your CV and let AI find perfect jobs with custom cover letters!"
},
"typeVersion": 2.3
},
{
"id": "c84aae8d-0731-4158-ae47-74cbf7a3fb92",
"name": "PDF에서 이력서 추출",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-976,
-256
],
"parameters": {
"options": {},
"operation": "pdf",
"binaryPropertyName": "CV_Resume__PDF_"
},
"typeVersion": 1
},
{
"id": "6fa762f1-f99a-4436-b975-7583e5456ddd",
"name": "데이터 준비",
"type": "n8n-nodes-base.set",
"position": [
-752,
-256
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "ce5f3a96-c63d-40fa-b02c-8d763bfa2ed1",
"name": "cvData",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "51623c31-dacf-4828-b1ac-f03f67e00d54",
"name": "location",
"type": "string",
"value": "={{ $('On form submission').item.json['Preferred Location'] }}"
},
{
"id": "068b13d5-6941-415d-935b-4936e42df913",
"name": "workSetting",
"type": "string",
"value": "={{ $('On form submission').item.json['Work Setting'] }}"
},
{
"id": "e1636d57-472b-4886-b631-5deb45b103a3",
"name": "jobType",
"type": "string",
"value": "={{ $('On form submission').item.json['Job Type'] }}"
},
{
"id": "salary-expectation",
"name": "salaryExpectation",
"type": "string",
"value": "={{ $('On form submission').item.json['Minimum Salary Expectation (Optional)'] || 'Not specified' }}"
},
{
"id": "additional-prefs",
"name": "additionalPreferences",
"type": "string",
"value": "={{ $('On form submission').item.json['Additional Preferences (Optional)'] || 'None' }}"
},
{
"id": "user-email",
"name": "userEmail",
"type": "string",
"value": "={{ $('On form submission').item.json['Email'] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "7ace28c0-f3d0-4d89-b250-8896817dbac5",
"name": "Job Hunter Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-528,
-256
],
"parameters": {
"text": "={{ \n`ANALYZE CV AND FIND JOBS:\n\nCV Content:\n${$json.cvData}\n\nUser Preferences:\n- Location: ${$json.location}\n- Work Setting: ${$json.workSetting}\n- Job Type: ${$json.jobType}\n- Salary: ${$json.salaryExpectation}\n- Additional: ${$json.additionalPreferences}\n\nTASKS:\n1. Extract key info from CV (name, skills, experience, achievements)\n2. Search for 3 best matching jobs using tools\n3. Generate personalized cover letter for each job\n4. Format everything as structured JSON for email template`\n}}",
"options": {
"systemMessage": "=You are an expert Job Hunter specializing in the Indonesian job market. \nUse Decodo Scrapper and SerpAPI to find a real job. \n\n## YOUR MISSION:\n1. Analyze the CV to extract skills, experience, and achievements. \n2. Search for exactly 1 best matching job using the tools. \n - Return the first high-quality match you find. \n - Do not attempt multiple searches or retries. \n3. Generate one personalized cover letter for that job (250–350 words). \n4. Output everything as structured JSON.\n\n## OUTPUT FORMAT:\nYou MUST output a valid JSON object with this exact structure:\n\n{\n \"candidateName\": \"[Name from CV]\",\n \"candidateExperience\": \"[X years in Y field]\",\n \"candidateSkills\": \"[Top 3 skills]\",\n \"candidateLevel\": \"[Junior/Mid/Senior]\",\n \"candidateStrength\": \"[Key differentiator]\",\n \"searchSummary\": \"[Platform searched and result]\",\n \"job\": {\n \"title\": \"[Job title]\",\n \"company\": \"[Company name]\",\n \"location\": \"[City/Remote]\",\n \"salary\": \"[Range or estimate]\",\n \"postedDate\": \"[X days ago]\",\n \"applyUrl\": \"[URL]\",\n \"whyMatch\": [\"Reason 1\",\"Reason 2\",\"Reason 3\"],\n \"coverLetter\": \"Dear Hiring Manager at [Company],\\n\\n[250-350 word letter]\\n\\nBest regards,\\n[Name]\"\n },\n \"applicationTips\": {\n \"bestTime\": \"Monday-Wednesday, 9-11 AM\",\n \"keywords\": \"[List of keywords from the job]\",\n \"followUp\": \"After 1 week\",\n \"interviewPrep\": \"[Focus areas]\"\n }\n}\n\n## IMPORTANT:\n- Use real job data from the tools (no imaginary jobs). \n- Stop after finding **one** matching job. \n- Output ONLY valid JSON, no extra text.\n"
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "da5ec126-74e9-4708-8ec6-bc0136cf6fa2",
"name": "HTML 이메일 생성",
"type": "n8n-nodes-base.code",
"position": [
0,
-256
],
"parameters": {
"jsCode": "const jobData = $json;\nconst job = jobData.job || null;\n\n// Build HTML email\nconst htmlEmail = `\n<!DOCTYPE html>\n<html lang=\"id\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Your Job Match</title>\n</head>\n<body style=\"margin:0; padding:0; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color:#f4f7fa;\">\n <table role=\"presentation\" width=\"100%\" style=\"background-color:#f4f7fa;\">\n <tr>\n <td align=\"center\" style=\"padding:40px 20px;\">\n <table role=\"presentation\" width=\"600\" style=\"background:#fff; border-radius:10px; box-shadow:0 4px 6px rgba(0,0,0,0.1);\">\n\n <!-- Header -->\n <tr>\n <td style=\"background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:40px; border-radius:10px 10px 0 0; text-align:center;\">\n <h1 style=\"margin:0; color:#fff; font-size:28px;\">🎯 Your Job Match Is Ready!</h1>\n </td>\n </tr>\n\n <!-- Profile Summary -->\n <tr>\n <td style=\"padding:30px;\">\n <div style=\"background:#f8f9fa; border-radius:8px; padding:20px; margin-bottom:30px;\">\n <h2 style=\"margin:0 0 15px 0;\">👤 Profile Summary</h2>\n <p><strong>Name:</strong> ${jobData.candidateName || 'N/A'}</p>\n <p><strong>Experience:</strong> ${jobData.candidateExperience || 'N/A'}</p>\n <p><strong>Skills:</strong> ${(jobData.candidateSkills || []).join(', ')}</p>\n <p><strong>Level:</strong> ${jobData.candidateLevel || 'N/A'}</p>\n </div>\n\n <!-- Job Match -->\n ${job ? `\n <div style=\"border:1px solid #e0e0e0; border-radius:8px; padding:20px; margin-bottom:25px;\">\n <div style=\"background:linear-gradient(135deg,#f093fb 0%,#f5576c 100%); color:white; padding:8px 16px; border-radius:20px; font-weight:600; font-size:14px; display:inline-block; margin-bottom:15px;\">\n 🥇 BEST MATCH\n </div>\n\n <h3>${job.title}</h3>\n <p>🏢 ${job.company} | 📍 ${job.location}</p>\n <p>💰 ${job.salary} | 📅 Posted ${job.postedDate}</p>\n\n <div style=\"background:#f8f9fa; padding:12px; border-radius:6px; margin:15px 0;\">\n <p style=\"margin:0 0 8px 0; font-weight:600;\">Why this matches:</p>\n <ul>${(job.whyMatch || []).map(r => `<li>${r}</li>`).join('')}</ul>\n </div>\n\n <a href=\"${job.applyUrl}\" style=\"display:inline-block; background:#00a8e8; color:white; padding:10px 24px; text-decoration:none; border-radius:5px; font-weight:600;\">\n Apply Now →\n </a>\n\n <!-- Cover Letter -->\n <div style=\"margin-top:20px; padding-top:20px; border-top:1px solid #e0e0e0;\">\n <h4>💌 Your Cover Letter</h4>\n <div style=\"background:#fff; border:1px solid #e0e0e0; padding:20px; border-radius:6px; white-space:pre-line; line-height:1.6;\">\n ${job.coverLetter}\n </div>\n </div>\n </div>\n ` : '<p>No job found.</p>'}\n\n <!-- Tips -->\n ${jobData.applicationTips ? `\n <div style=\"background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); color:white; border-radius:8px; padding:20px;\">\n <h3 style=\"margin:0 0 15px 0;\">💡 Application Tips</h3>\n <p>📅 Best Time: ${jobData.applicationTips.bestTime}</p>\n <p>🎯 Keywords: ${(jobData.applicationTips.keywords || []).join(', ')}</p>\n <p>📧 Follow-up: ${jobData.applicationTips.followUp}</p>\n </div>\n ` : ''}\n </td>\n </tr>\n\n <!-- Footer -->\n <tr>\n <td style=\"background:#f8f9fa; padding:30px; text-align:center; border-radius:0 0 10px 10px;\">\n <p style=\"margin:0; color:#999; font-size:12px;\">\n Generated by khmuhtadin.com | ${new Date().toLocaleDateString()}\n </p>\n </td>\n </tr>\n\n </table>\n </td>\n </tr>\n </table>\n</body>\n</html>\n`;\n\n// Ambil email user dari workflow sebelumnya\nconst userEmail = $('Prepare Data').first().json.userEmail;\n\nreturn {\n htmlEmail,\n userEmail,\n jobData\n};\n"
},
"typeVersion": 2
},
{
"id": "4496a0d1-5bc3-4155-9b7f-5760f997da15",
"name": "메시지 보내기",
"type": "n8n-nodes-base.gmail",
"position": [
192,
-256
],
"webhookId": "f8fd58d8-4038-4e45-b7df-261ab2cfcddc",
"parameters": {
"sendTo": "={{ $('On form submission').item.json.Email }}",
"message": "={{ $json.htmlEmail }}",
"options": {
"appendAttribution": false
},
"subject": "=Your Job MATCH!"
},
"credentials": {
"gmailOAuth2": {
"id": "8p11S7abjY8KddB9",
"name": "contactmuhtadin"
}
},
"typeVersion": 2.1
},
{
"id": "7c1caa4d-d9f2-4404-a7e1-497ea55c87b5",
"name": "에이전트 출력 파싱",
"type": "n8n-nodes-base.code",
"position": [
-208,
-256
],
"parameters": {
"jsCode": "let raw = $json.output || \"\";\n\n// Clean markdown fences if they exist\nraw = raw.replace(/```json/g, '').replace(/```/g, '').trim();\n\nlet parsed;\ntry {\n parsed = JSON.parse(raw);\n} catch (e) {\n parsed = { error: \"Failed to parse JSON\", raw };\n}\n\nreturn parsed;\n"
},
"typeVersion": 2
},
{
"id": "bb0c881a-0185-4de3-ba10-97d1e5e91f7b",
"name": "SerpAPI",
"type": "@n8n/n8n-nodes-langchain.toolSerpApi",
"position": [
-384,
-96
],
"parameters": {
"options": {}
},
"credentials": {
"serpApi": {
"id": "RnX2LOB0xs45mOEw",
"name": "Login w Github"
}
},
"typeVersion": 1
},
{
"id": "08df6d1a-16fd-47aa-9c42-5a88e7184b59",
"name": "Sticky Note - 작동 방식1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
48
],
"parameters": {
"color": 7,
"width": 420,
"height": 528,
"content": "## ⚠️ Known Limitations\n\n- **Job Sources**:\n Currently only SerpAPI (Google Jobs) + Decodo supported.\n Can add LinkedIn, Jobstreet, Indeed with API/connector.\n\n- **Result Count**:\n Hard-limited to **1 job** per run (by system prompt).\n Change prompt if you want multiple jobs.\n\n- **Parsing**:\n If AI fails to return valid JSON → fallback is `{ error: ... }`.\n Email will show \"No job found\".\n\n- **Email Output**:\n Gmail API required in n8n.\n Make sure OAuth2 refresh tokens are valid.\n"
},
"typeVersion": 1
},
{
"id": "19c63f7b-d693-495d-94ec-5195c17df88a",
"name": "Gemini 2.5 Pro",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-528,
-96
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.5-pro"
},
"credentials": {
"googlePalmApi": {
"id": "KMIkjDkgwnQFlQ9j",
"name": "dev.uratalier"
}
},
"typeVersion": 1
},
{
"id": "d3684fdb-1701-400b-b6fc-1bab7bc6f2e3",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2256,
32
],
"parameters": {
"width": 432,
"height": 912,
"content": "\n"
},
"typeVersion": 1
},
{
"id": "c9019277-17de-4099-a76f-a73742e42142",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1792,
32
],
"parameters": {
"width": 432,
"height": 912,
"content": "\n"
},
"typeVersion": 1
},
{
"id": "5f1f23db-4681-4473-a0e6-1f142853e68f",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1344,
32
],
"parameters": {
"width": 432,
"height": 912,
"content": ""
},
"typeVersion": 1
}
],
"active": false,
"pinData": {
"On form submission": [
{
"json": {
"Email": "khmuhtadin@proton.me",
"Job Type": "Freelance",
"formMode": "test",
"submittedAt": "2025-09-11T23:14:58.671+07:00",
"Work Setting": "Remote",
"CV/Resume (PDF)": {
"size": 4430,
"filename": "Dummy_ATS_Programmer_CV.pdf",
"mimetype": "application/pdf"
},
"Preferred Location": "USA",
"Additional Preferences (Optional)": "",
"Minimum Salary Expectation (Optional)": ""
},
"binary": {
"CV_Resume__PDF_": {
"data": "JVBERi0xLjQKJZOMi54gUmVwb3J0TGFiIEdlbmVyYXRlZCBQREYgZG9jdW1lbnQgaHR0cDovL3d3dy5yZXBvcnRsYWIuY29tCjEgMCBvYmoKPDwKL0YxIDIgMCBSIC9GMiAzIDAgUgo+PgplbmRvYmoKMiAwIG9iago8PAovQmFzZUZvbnQgL0hlbHZldGljYSAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyAvTmFtZSAvRjEgL1N1YnR5cGUgL1R5cGUxIC9UeXBlIC9Gb250Cj4+CmVuZG9iagozIDAgb2JqCjw8Ci9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL05hbWUgL0YyIC9TdWJ0eXBlIC9UeXBlMSAvVHlwZSAvRm9udAo+PgplbmRvYmoKNCAwIG9iago8PAovQ29udGVudHMgOSAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA4IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9Db250ZW50cyAxMCAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA4IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago2IDAgb2JqCjw8Ci9QYWdlTW9kZSAvVXNlTm9uZSAvUGFnZXMgOCAwIFIgL1R5cGUgL0NhdGFsb2cKPj4KZW5kb2JqCjcgMCBvYmoKPDwKL0F1dGhvciAoXChhbm9ueW1vdXNcKSkgL0NyZWF0aW9uRGF0ZSAoRDoyMDI1MDkxMTE2MTM1OCswMCcwMCcpIC9DcmVhdG9yIChcKHVuc3BlY2lmaWVkXCkpIC9LZXl3b3JkcyAoKSAvTW9kRGF0ZSAoRDoyMDI1MDkxMTE2MTM1OCswMCcwMCcpIC9Qcm9kdWNlciAoUmVwb3J0TGFiIFBERiBMaWJyYXJ5IC0gd3d3LnJlcG9ydGxhYi5jb20pIAogIC9TdWJqZWN0IChcKHVuc3BlY2lmaWVkXCkpIC9UaXRsZSAoXChhbm9ueW1vdXNcKSkgL1RyYXBwZWQgL0ZhbHNlCj4+CmVuZG9iago4IDAgb2JqCjw8Ci9Db3VudCAyIC9LaWRzIFsgNCAwIFIgNSAwIFIgXSAvVHlwZSAvUGFnZXMKPj4KZW5kb2JqCjkgMCBvYmoKPDwKL0ZpbHRlciBbIC9BU0NJSTg1RGVjb2RlIC9GbGF0ZURlY29kZSBdIC9MZW5ndGggMTkwOQo+PgpzdHJlYW0KR2F0VXQ/JEchXiY7S1pGLyo6SGlUcG49RmFpQF4+cS5NXz8sVUowI2hXLi9ZX0dPZklYcz5CK0osUEM8VEcxVHFoOD1kR2EwcDRfUmVONTQ+XUIyb1JhM0FhXDx0LC5IUF1vdEFkYFIxPzMlO25cPVQ3PTRgT1BJJVljXCw4JW1sIzFyTGQyIV4+VV03V0lzTGJXTD8wIipyZmNINkM4QDZpcnEmO0AiJidCcGxmUDlHJVYtVCVBYXUxPFl0O1NrV1c7R1RvXEU7PVAtLj9SZFg+I2FrUi5oUGZOSj9UV1QzTkxucyFTbmpQVG04cy1MMUFdJU9MXm1bUzBuVXBzJ3BtXVxadGFWS1ghWWwqV1RjR2cvP09pIVVTc2NjNy9dXk00aFpZYUhmYW9qIi5RdCYwUGkxVm8kJF1bM0JRVlQwUWIiMissJ1VcP29XMyMuaVhHS2I1LWFWYjNqTEInXVhJRWdiIWRwNkJPKDZhXlw6Jyk7MjNybW9uNkY8YF44PWE3OiNiaF9fOSliblpRMW9mUW1fXFImdXE3LyQ5VVghQElZQ1wqIV9sRT41Nz0uKGM4PmdBPkstQG8zW1kkSWpQZiFZakciZEtfUFJcVlcrWHE3alM1WTcwMkUrSEBta1peMV4zbm84QVJcMio6VyZHbktjb2Jfc1Yjb0xtXGZhK2gscGJrWj9OQyUqOnItZmQ7LilDOGF1JktYN0E6VFNrcG9KUk9qUkcsQC9AYWdQZkVRY0gtJnQuTT9NZiJnXVdCRUZcI0IqWEBkTz9WOjppNUpaaV5jRiVdaV0xX1FsZEJDTl1IZ0E8KT9pIklDS3JbKW4hUEdMU1JuI2wrXlYtKjtRYEthS0NVbGk1TUlTOkhEJzFxOlRlNVBPWjNJU1AlSypka28mXykzQ2tCWHFKL3RVcWVyX2o/MTJjQztJclA6SSUuNlldX2IsaGM6byZmbEAkNDlnMVpqaTojODI6KmdgP0ZoYFVJZHAjLTFkQG0hTVY+TnB0ITI2Xj0+UFlUVlwncWhTQm05NFkqVSNbazRbRkY3SE9uJl1cTGVDRiluNUMua0V1bm04TV9wSUkkVGFEMSpNR2F1Mi06N0JEYk1CUWNeZkpiZz8tJ0gpM1dGOC1zZD0mc2tCNDJoaVhHLjheYTQ5Q2JiJDEkXWtCTUkrZmg7TzZraGM3bjY+Si5fSyZeVGM+dCxYNS5YMmRULjRSLmImSm9CaC00Q0xFRkgpKHBuK0NxWFYoIUQ8Tz9sI2MmVStWUUg+TVJmMmQ9IjElK2h0Ny1MZCZlOU4vR0MkY09tcCspOlk0KVlkS04nLVJcY05RWGw1XGVSRSlTQV1xUjs0JyJQUDdUXmdlYVRxMTAkZUUjaztXUSVgSD9hNTxzRTVPPiUqNiFAWGdjZjRLVjQ1TjIoLVk6WjcxJDAzJEdgJF01JDgoIWdoWiZYR2wuUWIocmw+IXA/cURndV86SidldHMsdTUsdEhuMlpJYS5PaiZacVFjIy5GbUVtaU5FQCFlWUgrLUFVYHEiaV0hcUZiNXJcNCliU0BAW2VnL1JOO14zUGFhNz1LVmwkdS1ySFRxbXJRbi5lNUEzXD9BRWpsUCpNUlhGP1pNYi9LWVxNOT1uMitjZSNwb1lAc1JBOjxmbSxgPkVJWyxXVEwxZGcqdEhAczc1bUxFMzRmYFNiQGA5U0BHJjhbIzk+Y21UNlo9Lm9OKVc+Z3VwaiRZQ0xFMmU+JChYUyJWR2MkKyRzPElhWF5xIWZAVElfOjRoa2VpXyFxJSE7WCEiKjE7IT08KFwsPjNscl00XEFdLGZgLnNBMnRmSSIpckA4KV8zaysuT1ttI0w8O01YQ3BDLUNbO2UjRTJFZmwvM2hMMChXVnIlQSVJQjhtW1YsNEk9c00udS5rU1N1Vi4sUj9SKW5HTi1SLSEwXzwhSyhjKSl0a2tAc1xRJiJHJCJXZkIkNUElRFFLMiI8bV9lTkU6OmFTZVtIPUlhcWZSOio5T1w1OUsxV2Q4KlVXYWJpSkdhVVpdS1dFPW1kTVthPWJbPV0lNikiJEgmW2lsQ21PUCZOOCRxQkxCK05GLU1zZj1UQjNhZGZUa1k7JT1MbWdaSVkkNydVSl1BW0UpMSEpb2ZuPUVtQ0hcTEJWaS4hQk1FP20iaFZbMGcsTzUwaVZSY2lYamhPM3A9KC1WUD5wKUgpPSkxLFJVK2xhQHBRSltdNlFJNUNQIkNUX2pwdGZmRG1ZRV1ac1RCWDtSSGlXPlpHXGA0c0lnNDQiRz0lIShfP1dzQFt0ZUVNS2w5I0ZeKUY/UTFfQiYjciVwYCk2PF0odC89biJxYWNsQVk9OkUjLChQTzQxIk4jRENpbT1rdDxgPWR0KiVnWTVuUUZvWGF1LmRTQEJEdTBJOEw+TitzVltALXNyIi1GZidBUTIlTHNMTlw0IzViKHFROCsoL0lUZmo8MSdyQGJqLzMiUFU3WVpyalgmZlJHYlNXMGMjb0VtTC42OWNzYyc6Vm1fbC9gdExILip0ZnBhLjB+PmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKPDwKL0ZpbHRlciBbIC9BU0NJSTg1RGVjb2RlIC9GbGF0ZURlY29kZSBdIC9MZW5ndGggNzM2Cj4+CnN0cmVhbQpHYXRuJDlsbyNCJjtLWk9NRVEqVEZURUEwNV07JUg4SHInal1ALi0oYD4xcVpRRGU+LXEiSidgUFxDNT8pLEVhWXAzUSlVNS1KJTY3QSxRa1BoLjtjKGtwPkkrW0JpTD0kVzphIjVzWmNASDBrMV1SSyw+XzA4Sl9oXU1KRiIoLEZDM1IqLyQ9ZF9GakgjK1ZaQFwuSHQ8ISg8WV1TZ0lLVi5gMGlJJnA6ciFURXBNYXMycV0ubG0kc2RiQGo6aEdrLUokdDtXIjIrc2JJXFVxKjFbXyYlWSNVN1BeYCpoOTInLl4lO1VsNy0oN0RdNDxNTWwjdS5bYzlsW1ZtR1kpRyxjYU5WWkI9NF1AZzQ8KCJfYjZEY05zRSRvKkRSLSMqS1tkQV8nLSt0TW5NVEEiWlJSayxDT2pyXi8yJmRMP0JKIkhzO1s+OUQ6JWFlTXAmJ0InYFVkbT1wRVI9T3MsR106LiUpS1BBXzlKPjszQzNZX1hzYGJOKHBnW0hRIzswRGZdLmZlJWtqYkNnIXUlakQtNDZJXzJnLEdhcWQ6IW1gKVw0ak4hI2wrJyk3bSYqZiUlSVlGKDE7K2dtLyMsc1pfI28mK2dXcGM/KTcpKWNeMitQNShzSnFRSF43XD9FZEMyQF4kQXFdKUY1JSpkak0uSzIuXzZQVDhwWm5sOSVxRk45PShhRVxhcHNBJ0InUV5NUGU9TzQ2JUskaUZpQEFRcSEkU0I+LGIvbi0kIiU5IiRpazUiRTQkJjI9OUpfNVM1cFY4aVBYQVonI1s/Umg2aG4mZD8lV2VkYWM+XlY/VjovXTdhIlpJJGxlalxTQUpUcl8kMWN0cmBma28rTnBFMilddDFYbmc8PFhwTlUlTV1gY15TRGMsbCdkZD8sTz9vW201aGRyZ1VFaVMqc3EhWTtBc2xoKGhsRC9ZK2kqTEBdQEVxLXJnNmdkYltCKWZGJVUlJk45Li06N34+ZW5kc3RyZWFtCmVuZG9iagp4cmVmCjAgMTEKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDczIDAwMDAwIG4gCjAwMDAwMDAxMTQgMDAwMDAgbiAKMDAwMDAwMDIyMSAwMDAwMCBuIAowMDAwMDAwMzMzIDAwMDAwIG4gCjAwMDAwMDA1MzYgMDAwMDAgbiAKMDAwMDAwMDc0MCAwMDAwMCBuIAowMDAwMDAwODA4IDAwMDAwIG4gCjAwMDAwMDEwOTEgMDAwMDAgbiAKMDAwMDAwMTE1NiAwMDAwMCBuIAowMDAwMDAzMTU2IDAwMDAwIG4gCnRyYWlsZXIKPDwKL0lEIApbPDg0OTg1YmZkMjE4MjNjZDU2OTYwODI5MmZhYzMwMmFhPjw4NDk4NWJmZDIxODIzY2Q1Njk2MDgyOTJmYWMzMDJhYT5dCiUgUmVwb3J0TGFiIGdlbmVyYXRlZCBQREYgZG9jdW1lbnQgLS0gZGlnZXN0IChodHRwOi8vd3d3LnJlcG9ydGxhYi5jb20pCgovSW5mbyA3IDAgUgovUm9vdCA2IDAgUgovU2l6ZSAxMQo+PgpzdGFydHhyZWYKMzk4MwolJUVPRgo=",
"fileName": "Dummy_ATS_Programmer_CV.pdf",
"fileSize": "4.43 kB",
"fileType": "pdf",
"mimeType": "application/pdf",
"fileExtension": "pdf"
}
}
}
]
},
"settings": {
"executionOrder": "v1"
},
"versionId": "1ec8485f-2772-409f-bb99-f834cbb7c390",
"connections": {
"bb0c881a-0185-4de3-ba10-97d1e5e91f7b": {
"ai_tool": [
[
{
"node": "7ace28c0-f3d0-4d89-b250-8896817dbac5",
"type": "ai_tool",
"index": 0
}
]
]
},
"6fa762f1-f99a-4436-b975-7583e5456ddd": {
"main": [
[
{
"node": "7ace28c0-f3d0-4d89-b250-8896817dbac5",
"type": "main",
"index": 0
}
]
]
},
"19c63f7b-d693-495d-94ec-5195c17df88a": {
"ai_languageModel": [
[
{
"node": "7ace28c0-f3d0-4d89-b250-8896817dbac5",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"7ace28c0-f3d0-4d89-b250-8896817dbac5": {
"main": [
[
{
"node": "7c1caa4d-d9f2-4404-a7e1-497ea55c87b5",
"type": "main",
"index": 0
}
]
]
},
"027c527d-90c0-4aec-b3f5-7ca212c72b1d": {
"main": [
[
{
"node": "c84aae8d-0731-4158-ae47-74cbf7a3fb92",
"type": "main",
"index": 0
}
]
]
},
"7c1caa4d-d9f2-4404-a7e1-497ea55c87b5": {
"main": [
[
{
"node": "da5ec126-74e9-4708-8ec6-bc0136cf6fa2",
"type": "main",
"index": 0
}
]
]
},
"c84aae8d-0731-4158-ae47-74cbf7a3fb92": {
"main": [
[
{
"node": "6fa762f1-f99a-4436-b975-7583e5456ddd",
"type": "main",
"index": 0
}
]
]
},
"da5ec126-74e9-4708-8ec6-bc0136cf6fa2": {
"main": [
[
{
"node": "4496a0d1-5bc3-4155-9b7f-5760f997da15",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 기타, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
경쟁사 콘텐츠 격차 분석기: 자동화된 웹사이트 주제 매핑
Gemini AI, Apify, Google Sheets를 사용한 경쟁사 콘텐츠 격차 분석
If
Set
Code
+
If
Set
Code
30 노드Mychel Garzon
기타
PDF에서 주문으로
AI를 사용한 PDF 구매 주문서를 Adobe Commerce 판매 주문서로 자동 변환
If
Set
Code
+
If
Set
Code
96 노드JKingma
문서 추출
시각화 참조 라이브러리에서 n8n 노드를 탐색
可视化 참조 라이브러리에서 n8n 노드를 탐색
If
Ftp
Set
+
If
Ftp
Set
113 노드I versus AI
기타
✨🩷자동화소셜 미디어콘텐츠게시工厂 + 系统提示组合
基于动态系统提示및GPT-4o의AI驱动多平台소셜 미디어콘텐츠工厂
If
Set
Code
+
If
Set
Code
100 노드Amit Mehta
콘텐츠 제작
제 작업流程5
Gemini AI, 네트워크 검색 및 PDF 배달 기반의 전면적인 연구 보고서 생성기
Set
Code
Html
+
Set
Code
Html
102 노드Hichul
콘텐츠 제작
팟캐스트 노트 기록기
사용하여 GPT와 Gemini를 결합하여 높은 전환율 Meta 광고 스크립트를 생성합니다.
If
S3
Code
+
If
S3
Code
24 노드Daniel Rosehill
청구서 처리