求职助手 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": "求职助手 Agent",
"tags": [],
"nodes": [
{
"id": "c6d0bc1b-bd78-4eea-84ed-6bed5c999d45",
"name": "便利贴 - 工作原理",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
-288
],
"parameters": {
"color": 5,
"width": 500,
"height": 864,
"content": "## 🎯 智能求职助手 + 求职信生成器"
},
"typeVersion": 1
},
{
"id": "ef02ff8f-9fa8-4f8a-a66f-d81003fe3915",
"name": "便利贴 - 设置指南",
"type": "n8n-nodes-base.stickyNote",
"position": [
-384,
48
],
"parameters": {
"color": 4,
"width": 380,
"height": 528,
"content": "## ⚙️ 设置指南(已更新)"
},
"typeVersion": 1
},
{
"id": "d776ebde-2cda-4b59-a0aa-a6ee0925d4f9",
"name": "便利贴 - 专业提示",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
48
],
"parameters": {
"color": 3,
"width": 360,
"height": 528,
"content": "## 🛠️ 自定义提示"
},
"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": "求职助手 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": "解析 Agent 输出",
"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": "便利贴 - 工作原理1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
48
],
"parameters": {
"color": 7,
"width": 420,
"height": 528,
"content": "## ⚠️ 已知限制"
},
"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": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2256,
32
],
"parameters": {
"width": 432,
"height": 912,
"content": ""
},
"typeVersion": 1
},
{
"id": "c9019277-17de-4099-a76f-a73742e42142",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1792,
32
],
"parameters": {
"width": 432,
"height": 912,
"content": ""
},
"typeVersion": 1
},
{
"id": "5f1f23db-4681-4473-a0e6-1f142853e68f",
"name": "便签 2",
"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": {
"SerpAPI": {
"ai_tool": [
[
{
"node": "Job Hunter Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Prepare Data": {
"main": [
[
{
"node": "Job Hunter Agent",
"type": "main",
"index": 0
}
]
]
},
"Gemini 2.5 Pro": {
"ai_languageModel": [
[
{
"node": "Job Hunter Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Job Hunter Agent": {
"main": [
[
{
"node": "Parse Agent Output",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Extract CV from PDF",
"type": "main",
"index": 0
}
]
]
},
"Parse Agent Output": {
"main": [
[
{
"node": "Generate HTML Email",
"type": "main",
"index": 0
}
]
]
},
"Extract CV from PDF": {
"main": [
[
{
"node": "Prepare Data",
"type": "main",
"index": 0
}
]
]
},
"Generate HTML Email": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 杂项, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
优惠码搜寻器:通过SerpAPI、Gemini和Telegram自动查找优惠码
优惠码搜寻器:通过SerpAPI、Gemini和Telegram自动查找优惠码
If
Set
Gmail
+13
18 节点Khairul Muhtadin
内容创作
{模板} ATS优化简历和求职信生成器
使用Gemini AI和PDF.co优化简历并生成求职信
If
Set
Code
+10
23 节点Paul Abraham
个人效率
竞争对手内容差距分析器:自动化网站主题映射
使用Gemini AI、Apify和Google Sheets分析竞争对手内容差距
If
Set
Code
+10
30 节点Mychel Garzon
杂项
PDF 转订单
使用AI将PDF采购订单自动化转换为Adobe Commerce销售订单
If
Set
Code
+19
96 节点JKingma
文档提取
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+93
113 节点I versus AI
其他
多智能体Telegram机器人
使用Telegram和Google Gemini的多智能体个人助手机器人
Set
Code
Merge
+18
85 节点Akil A
杂项