GPT-4o与错误处理的自动化简历筛选 - Google表格与云端硬盘流程
高级
这是一个Content Creation, Multimodal AI领域的自动化工作流,包含 34 个节点。主要使用 If, Set, Gmail, Merge, Switch 等节点。 GPT-4o与错误处理的自动化简历筛选 - Google表格与云端硬盘流程
前置要求
- •Google 账号和 Gmail API 凭证
- •Google Drive API 凭证
- •可能需要目标 API 的认证凭证
- •Google Sheets API 凭证
- •OpenAI API Key
使用的节点 (34)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"meta": {
"instanceId": "2000c64071c20843606b95c63795bb0797c41036047055a6586498e855b96efc"
},
"nodes": [
{
"id": "548b4ba3-85c0-4e01-a89d-53c345910b22",
"name": "设置指南",
"type": "n8n-nodes-base.stickyNote",
"position": [
-4752,
-160
],
"parameters": {
"width": 600,
"height": 1152,
"content": "# 🎯 AI 简历筛选与候选人管道"
},
"typeVersion": 1
},
{
"id": "c84f6d81-dec5-458d-b298-617752318f87",
"name": "监控简历",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
-3952,
560
],
"parameters": {
"simple": false,
"filters": {},
"options": {
"downloadAttachments": true
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"credentials": {
"gmailOAuth2": {
"id": "LVRUgE95PAvkE1Mc",
"name": "Gmail account 2"
}
},
"typeVersion": 1.2
},
{
"id": "ddd0aa5e-dd9c-4658-9ccb-eb183bd75062",
"name": "邮件监控",
"type": "n8n-nodes-base.stickyNote",
"position": [
-4080,
320
],
"parameters": {
"color": 2,
"width": 350,
"height": 392,
"content": "## 📧 邮件监控"
},
"typeVersion": 1
},
{
"id": "e0a4d380-edc6-48c0-b655-f7ffc2d11603",
"name": "保存到 Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
-3728,
560
],
"parameters": {
"name": "={{ $json.subject.replace(/[^a-zA-Z0-9]/g, '_') }}_resume_{{ $now.format('yyyy-MM-dd_HH-mm') }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "root",
"cachedResultName": "/ (Root folder)"
},
"inputDataFieldName": "attachment_0"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "IPz4dCJVFC8uaoHw",
"name": "Google Drive account 2"
}
},
"typeVersion": 3
},
{
"id": "37bb352f-14f9-4286-9a0b-9b3e3680f733",
"name": "上传成功?",
"type": "n8n-nodes-base.if",
"position": [
-3504,
560
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "upload-success",
"operator": {
"type": "boolean",
"operation": "equals"
},
"leftValue": "={{ $json.id !== undefined && $json.webViewLink !== undefined }}",
"rightValue": true
}
]
}
},
"typeVersion": 2
},
{
"id": "6ee6f742-ce91-4bdc-a3ea-769a06cf2512",
"name": "按文件类型路由",
"type": "n8n-nodes-base.switch",
"position": [
-3280,
352
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "PDF",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "pdf-check",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.mimeType }}",
"rightValue": "application/pdf"
}
]
},
"renameOutput": true
},
{
"outputKey": "DOCX",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "docx-check",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.mimeType }}",
"rightValue": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
}
]
},
"renameOutput": true
},
{
"outputKey": "TXT",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "txt-check",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.mimeType }}",
"rightValue": "text/plain"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "899b217d-9258-4fd6-be41-fdd5fe52c5d3",
"name": "提取PDF文本",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-2864,
128
],
"parameters": {
"options": {
"maxPages": 10
},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "3f93e040-46e2-4c71-b0b2-548bcfe04235",
"name": "将 DOCX 转换为 Docs",
"type": "n8n-nodes-base.httpRequest",
"position": [
-3056,
368
],
"parameters": {
"url": "=https://www.googleapis.com/drive/v2/files/{{ $json.id }}/copy",
"method": "POST",
"options": {
"timeout": 30000
},
"jsonBody": "{\n \"title\": \"{{ $json.name }}_converted\",\n \"mimeType\": \"application/vnd.google-apps.document\"\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googleDriveOAuth2Api"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "IPz4dCJVFC8uaoHw",
"name": "Google Drive account 2"
}
},
"typeVersion": 4.2
},
{
"id": "64cf332a-2691-4181-a244-4cc18f9a1b13",
"name": "获取文档为文本",
"type": "n8n-nodes-base.googleDrive",
"position": [
-2832,
368
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {
"googleFileConversion": {
"conversion": {
"docsToFormat": "text/plain"
}
}
},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "IPz4dCJVFC8uaoHw",
"name": "Google Drive account 2"
}
},
"typeVersion": 3
},
{
"id": "6b5e1a57-2c26-4bbe-b104-99ef776f867c",
"name": "下载 TXT",
"type": "n8n-nodes-base.googleDrive",
"position": [
-3056,
576
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "IPz4dCJVFC8uaoHw",
"name": "Google Drive account 2"
}
},
"typeVersion": 3
},
{
"id": "2255b19e-1842-4e23-9fcf-0c69b036226b",
"name": "提取 TXT 内容",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-2832,
576
],
"parameters": {
"options": {},
"operation": "text",
"destinationKey": "resumeText"
},
"typeVersion": 1
},
{
"id": "ee8c0749-6302-420d-9fff-cb57dfef3b9e",
"name": "文本提取成功?",
"type": "n8n-nodes-base.if",
"position": [
-2544,
288
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "text-validation",
"operator": {
"type": "boolean",
"operation": "equals"
},
"leftValue": "={{ ($json.text && $json.text.length > 50) || ($json.data && $json.data.length > 50) || ($json.resumeText && $json.resumeText.length > 50) }}",
"rightValue": true
}
]
}
},
"typeVersion": 2
},
{
"id": "cd20f833-a887-46c4-9702-94e53780552d",
"name": "标准化简历数据",
"type": "n8n-nodes-base.set",
"position": [
-2320,
192
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "resume-text",
"name": "candidateResume",
"type": "string",
"value": "={{ $json.text || $json.data || $json.resumeText }}"
},
{
"id": "original-email",
"name": "originalEmail",
"type": "object",
"value": "={{ $('Monitor Resumes').item.json }}"
},
{
"id": "drive-link",
"name": "driveLink",
"type": "string",
"value": "={{ $('Save to Drive').item.json.webViewLink }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "87bae272-a305-4573-b651-8a0428d13fce",
"name": "简历质量检查",
"type": "n8n-nodes-base.if",
"position": [
-2096,
192
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "quality-check",
"operator": {
"type": "boolean",
"operation": "equals"
},
"leftValue": "={{ $json.candidateResume && $json.candidateResume.length > 100 && ($json.candidateResume.toLowerCase().includes('experience') || $json.candidateResume.toLowerCase().includes('skills') || $json.candidateResume.toLowerCase().includes('education')) }}",
"rightValue": true
}
]
}
},
"typeVersion": 2
},
{
"id": "0a211848-c56f-4602-a8f5-e0a63e9c0631",
"name": "职位描述",
"type": "n8n-nodes-base.set",
"position": [
-1872,
80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "job-description",
"name": "jobDescription",
"type": "string",
"value": "Job Title: Senior Software Engineer\n\nWe are seeking a Senior Software Engineer to join our growing team. The ideal candidate will have:\n\nRequired Skills:\n- 5+ years of software development experience\n- Strong proficiency in JavaScript, Python, or Java\n- Experience with cloud platforms (AWS, GCP, Azure)\n- Database design and optimization experience\n- Agile development methodology experience\n\nPreferred Skills:\n- Full-stack development experience\n- DevOps and CI/CD pipeline experience\n- Team leadership experience\n- Experience with microservices architecture\n\nResponsibilities:\n- Design and develop scalable software solutions\n- Collaborate with cross-functional teams\n- Mentor junior developers\n- Participate in code reviews\n- Contribute to technical decision making"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "53dbdfb5-0e9e-4e03-81d3-ed01714978ba",
"name": "AI 招聘分析",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1648,
80
],
"parameters": {
"text": "=**CANDIDATE RESUME:**\n\n{{ $('Extract PDF Text').item.json.text }}\n\n**JOB DESCRIPTION:**\n\n{{ $json.jobDescription }}",
"options": {
"systemMessage": "You are an expert technical recruiter and hiring manager with 15+ years of experience evaluating candidates across technology, business, and creative roles.\n\n# Your Mission\nAnalyze the candidate's resume against the provided job description and deliver a comprehensive, actionable screening report that helps hiring teams make informed decisions quickly.\n\n# Analysis Framework\nEvaluate the candidate across these dimensions:\n1. **Technical Skills Match** - Hard skills, tools, technologies\n2. **Experience Relevance** - Industry background, role progression\n3. **Cultural & Soft Skills Fit** - Leadership, communication, teamwork\n4. **Growth Potential** - Learning ability, adaptability, ambition\n5. **Red Flags** - Gaps, inconsistencies, concerns\n\n# Output Requirements\nProvide your analysis in this exact JSON structure - be specific and reference actual resume content.\n\n# Quality Standards\n- Reference specific resume content, not generalities\n- Consider both immediate needs and long-term potential\n- Balance optimism with realistic assessment\n- Provide actionable insights for hiring managers\n- Score from 1-10 where 8+ means \"definitely interview\""
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2
},
{
"id": "416be5d3-78da-4837-b312-5edd184216b5",
"name": "结构化输出解析器",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-1504,
304
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"candidate_strengths\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"List of candidate's key strengths with evidence\"\n },\n \"candidate_weaknesses\": {\n \"type\": \"array\", \n \"items\": { \"type\": \"string\" },\n \"description\": \"List of areas where candidate falls short\"\n },\n \"risk_assessment\": {\n \"type\": \"object\",\n \"properties\": {\n \"level\": {\n \"type\": \"string\",\n \"enum\": [\"Low\", \"Medium\", \"High\"]\n },\n \"explanation\": {\n \"type\": \"string\",\n \"description\": \"Detailed risk analysis\"\n }\n }\n },\n \"opportunity_assessment\": {\n \"type\": \"object\",\n \"properties\": {\n \"level\": {\n \"type\": \"string\", \n \"enum\": [\"Low\", \"Medium\", \"High\"]\n },\n \"explanation\": {\n \"type\": \"string\",\n \"description\": \"Upside potential analysis\"\n }\n }\n },\n \"overall_score\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 10,\n \"description\": \"Overall fit score 1-10\"\n },\n \"score_justification\": {\n \"type\": \"string\",\n \"description\": \"Detailed explanation of the score\"\n },\n \"next_steps_recommendation\": {\n \"type\": \"string\",\n \"description\": \"Recommended next actions\"\n }\n },\n \"required\": [\"candidate_strengths\", \"candidate_weaknesses\", \"risk_assessment\", \"opportunity_assessment\", \"overall_score\", \"score_justification\", \"next_steps_recommendation\"]\n}"
},
"typeVersion": 1.3
},
{
"id": "ea66c7e3-1572-4824-8eae-a5b637e5df33",
"name": "GPT-4o 模型",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1632,
304
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {
"maxTokens": 2000,
"temperature": 0.3
}
},
"credentials": {
"openAiApi": {
"id": "BXMUxnyGzjtZQOK4",
"name": "OpenAi account Dave"
}
},
"typeVersion": 1.2
},
{
"id": "101a971e-3fae-445e-96ac-878650a6d14a",
"name": "AI 分析成功?",
"type": "n8n-nodes-base.if",
"position": [
-1296,
80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ai-success",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.output && $json.output.overall_score && $json.output.candidate_strengths.join(\"/n/n\") }}",
"rightValue": true
}
]
}
},
"typeVersion": 2
},
{
"id": "df2d7bc1-4628-4a08-8a55-6de9111eea4c",
"name": "提取候选人信息",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
-1136,
-160
],
"parameters": {
"text": "={{ $('Standardize Resume Data').item.json.candidateResume }}",
"options": {},
"attributes": {
"attributes": [
{
"name": "full_name",
"required": true,
"description": "Candidate's full name (first and last name combined)"
},
{
"name": "email_address",
"required": true,
"description": "Primary email address of the candidate"
},
{
"name": "phone_number",
"description": "Phone number or mobile number"
},
{
"name": "current_title",
"description": "Current job title or most recent position"
},
{
"name": "years_experience",
"description": "Total years of relevant work experience"
},
{
"name": "key_skills",
"description": "Top 5 technical or professional skills mentioned"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "e5ac2a2d-bbdd-4582-b019-d8ba5ba6c57c",
"name": "最终数据有效?",
"type": "n8n-nodes-base.if",
"position": [
-784,
-160
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "data-validation",
"operator": {
"type": "number",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.output?.full_name && $json.output?.email_address && $('AI Recruiter Analysis').item.json.output?.overall_score }}",
"rightValue": true
}
]
}
},
"typeVersion": 2
},
{
"id": "168334bc-97c8-490b-a1fc-0acb8066912d",
"name": "记录成功处理",
"type": "n8n-nodes-base.googleSheets",
"position": [
-736,
-336
],
"parameters": {
"columns": {
"value": {
"Date": "={{ $('Save to Drive').item.json.createdTime }}",
"Email": "={{ $json.output.email_address || $json.originalEmail.from }}",
"Resume": "={{ $('Save to Drive').item.json.webViewLink }}",
"Full Name": "={{ $json.output.full_name }}",
"Strengths": "={{ $('AI Recruiter Analysis').item.json.output.candidate_strengths.join(' • ') }}",
"Key Skills": "={{ $json.output.key_skills }}",
"Weaknesses": "={{ $('AI Recruiter Analysis').item.json.output.candidate_weaknesses.join(' • ') }}",
"Overall Fit": "={{ $('AI Recruiter Analysis').item.json.output.overall_score }}",
"Risk Factor": "={{ $('AI Recruiter Analysis').item.json.output.risk_assessment.level }} \n{{ $('AI Recruiter Analysis').item.json.output.risk_assessment.explanation }}",
"Justification": "={{ $('AI Recruiter Analysis').item.json.output.score_justification }}",
"Reward Factor": "={{ $('AI Recruiter Analysis').item.json.output.opportunity_assessment.level }} \n{{ $('AI Recruiter Analysis').item.json.output.opportunity_assessment.explanation }}"
},
"schema": [
{
"id": "Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Resume",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Resume",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Full Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Full Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Strengths",
"type": "string",
"display": true,
"required": false,
"displayName": "Strengths",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Weaknesses",
"type": "string",
"display": true,
"required": false,
"displayName": "Weaknesses",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Risk Factor",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Risk Factor",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Reward Factor",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Reward Factor",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Overall Fit",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Overall Fit",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Justification",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Justification",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Key Skills",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Key Skills",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1vucZgBrULNToEQMAQrFyWczpOzXxBU6rzCX0waIZyeM/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1vucZgBrULNToEQMAQrFyWczpOzXxBU6rzCX0waIZyeM",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1vucZgBrULNToEQMAQrFyWczpOzXxBU6rzCX0waIZyeM/edit?usp=drivesdk",
"cachedResultName": "Resume Screener (file -> make a copy)"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "9bWZzYQ7NvMBs1Xg",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.6
},
{
"id": "95d4e4e5-63bd-4a2b-bc26-ea15144d76af",
"name": "设置上传错误",
"type": "n8n-nodes-base.set",
"position": [
-560,
752
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "error-type",
"name": "error_type",
"type": "string",
"value": "Upload Failed"
},
{
"id": "error-message",
"name": "error_message",
"type": "string",
"value": "Failed to upload resume to Google Drive"
},
{
"id": "original-data",
"name": "original_email",
"type": "object",
"value": "={{ $('Monitor Resumes').item.json }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "56635bec-8887-4b1d-90fd-a4cf35484f57",
"name": "设置提取错误",
"type": "n8n-nodes-base.set",
"position": [
-560,
528
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "error-type",
"name": "error_type",
"type": "string",
"value": "Text Extraction Failed"
},
{
"id": "error-message",
"name": "error_message",
"type": "string",
"value": "Unable to extract readable text from file"
},
{
"id": "file-info",
"name": "file_info",
"type": "object",
"value": "={{ $('Save to Drive').item.json }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "825c2125-1914-4e4b-9d6e-b67a2e3b11ce",
"name": "设置质量错误",
"type": "n8n-nodes-base.set",
"position": [
-560,
336
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "error-type",
"name": "error_type",
"type": "string",
"value": "Poor Resume Quality"
},
{
"id": "error-message",
"name": "error_message",
"type": "string",
"value": "Resume does not contain sufficient content for analysis"
},
{
"id": "resume-data",
"name": "resume_data",
"type": "string",
"value": "={{ $json.candidateResume?.substring(0, 200) }}..."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "57f8e9fb-3175-4975-9775-e134e94eb6e4",
"name": "设置 AI 错误",
"type": "n8n-nodes-base.set",
"position": [
-560,
112
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "error-type",
"name": "error_type",
"type": "string",
"value": "AI Processing Failed"
},
{
"id": "error-message",
"name": "error_message",
"type": "string",
"value": "AI analysis did not complete successfully"
},
{
"id": "ai-output",
"name": "ai_output",
"type": "object",
"value": "={{ $json }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f7b1385e-6a0a-470c-93cd-55ba1da56ee4",
"name": "设置验证错误",
"type": "n8n-nodes-base.set",
"position": [
-560,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "error-type",
"name": "error_type",
"type": "string",
"value": "Data Validation Failed"
},
{
"id": "error-message",
"name": "error_message",
"type": "string",
"value": "Missing required candidate information or AI analysis data"
},
{
"id": "available-data",
"name": "available_data",
"type": "string",
"value": "={{ JSON.stringify({ candidateInfo: $json.output, aiAnalysis: $('AI Recruiter Analysis').item.json.output }) }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3b4b6746-99e0-4d6b-a620-fc8c89974eee",
"name": "合并所有错误",
"type": "n8n-nodes-base.merge",
"position": [
-336,
352
],
"parameters": {
"mode": "combine",
"options": {}
},
"typeVersion": 3
},
{
"id": "5c692947-9802-43d7-848a-61d9fa01f02a",
"name": "发送错误通知",
"type": "n8n-nodes-base.gmail",
"position": [
-112,
352
],
"webhookId": "8b233cc7-a903-4afe-9179-14923fcad8a7",
"parameters": {
"sendTo": "your-error-notification-email@company.com",
"message": "=⚠️ **Resume Processing Failed**\n\n**Error Type:** {{ $json.error_type }}\n**Error Message:** {{ $json.error_message }}\n**Timestamp:** {{ $now.format('yyyy-MM-dd HH:mm:ss') }}\n\n**Original Email Details:**\n- From: {{ $json.original_email?.from || 'Unknown' }}\n- Subject: {{ $json.original_email?.subject || 'Unknown' }}\n- Date: {{ $json.original_email?.date || 'Unknown' }}\n\n**Next Steps:**\n- Review the error details above\n- Check file format and quality\n- Manually process if needed\n- Contact IT support if errors persist",
"options": {},
"subject": "=Resume Processing Error - {{ $json.error_type }}"
},
"credentials": {
"gmailOAuth2": {
"id": "Aecq49wES5aLVPPq",
"name": "Gmail account 4"
}
},
"typeVersion": 2.1
},
{
"id": "803eb0cb-f941-44cb-89dc-3813ec26d3c9",
"name": "记录错误到表格",
"type": "n8n-nodes-base.googleSheets",
"disabled": true,
"position": [
112,
352
],
"parameters": {
"columns": {
"value": {
"Status": "Requires Manual Review",
"File_Link": "={{ $json.file_info?.webViewLink || 'Not available' }}",
"Timestamp": "={{ $now.format('yyyy-MM-dd HH:mm:ss') }}",
"Error_Type": "={{ $json.error_type }}",
"Error_Message": "={{ $json.error_message }}",
"Original_From": "={{ $json.original_email?.from || 'Unknown' }}",
"Original_Subject": "={{ $json.original_email?.subject || 'Unknown' }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/your-error-sheet-id/edit#gid=0",
"cachedResultName": "Errors"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "your-error-log-spreadsheet-id",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/your-error-sheet-id/edit",
"cachedResultName": "Error Log Sheet"
}
},
"typeVersion": 4.6
},
{
"id": "52ea629f-2f47-4b03-9498-98701026de61",
"name": "文件处理",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3104,
-464
],
"parameters": {
"color": 6,
"width": 400,
"height": 1224,
"content": "## 🔄 文件处理"
},
"typeVersion": 1
},
{
"id": "82d07dc3-aac4-4d04-94ce-89555c5c5abd",
"name": "错误处理",
"type": "n8n-nodes-base.stickyNote",
"position": [
-592,
-480
],
"parameters": {
"color": 8,
"width": 400,
"height": 1340,
"content": "## ⚠️ 错误处理"
},
"typeVersion": 1
},
{
"id": "e14473a9-91b4-43b7-8279-de2e3a47711f",
"name": "AI 分析引擎",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1648,
-512
],
"parameters": {
"color": 5,
"width": 736,
"height": 828,
"content": "## 🤖 AI 分析引擎"
},
"typeVersion": 1
},
{
"id": "087335ab-ae10-46c5-8608-eafa51d47ed7",
"name": "获取文档",
"type": "n8n-nodes-base.googleDrive",
"position": [
-3088,
128
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {
"googleFileConversion": {
"conversion": {
"docsToFormat": "application/pdf"
}
}
},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "IPz4dCJVFC8uaoHw",
"name": "Google Drive account 2"
}
},
"typeVersion": 3
}
],
"pinData": {},
"connections": {
"Get Doc": {
"main": [
[
{
"node": "Extract PDF Text",
"type": "main",
"index": 0
}
]
]
},
"Download TXT": {
"main": [
[
{
"node": "Extract TXT Content",
"type": "main",
"index": 0
}
]
]
},
"GPT-4o Model": {
"ai_languageModel": [
[
{
"node": "AI Recruiter Analysis",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Extract Candidate Info",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Set AI Error": {
"main": [
[
{
"node": "Merge All Errors",
"type": "main",
"index": 1
}
]
]
},
"Save to Drive": {
"main": [
[
{
"node": "Upload Success?",
"type": "main",
"index": 0
}
]
]
},
"Get Doc as Text": {
"main": [
[
{
"node": "Text Extracted?",
"type": "main",
"index": 0
}
]
]
},
"Job Description": {
"main": [
[
{
"node": "AI Recruiter Analysis",
"type": "main",
"index": 0
}
]
]
},
"Monitor Resumes": {
"main": [
[
{
"node": "Save to Drive",
"type": "main",
"index": 0
}
]
]
},
"Text Extracted?": {
"main": [
[
{
"node": "Standardize Resume Data",
"type": "main",
"index": 0
}
],
[
{
"node": "Set Extraction Error",
"type": "main",
"index": 0
}
]
]
},
"Upload Success?": {
"main": [
[
{
"node": "Route by File Type",
"type": "main",
"index": 0
}
],
[
{
"node": "Set Upload Error",
"type": "main",
"index": 0
}
]
]
},
"Extract PDF Text": {
"main": [
[
{
"node": "Text Extracted?",
"type": "main",
"index": 0
}
]
]
},
"Merge All Errors": {
"main": [
[
{
"node": "Send Error Notification",
"type": "main",
"index": 0
}
]
]
},
"Set Upload Error": {
"main": [
[
{
"node": "Merge All Errors",
"type": "main",
"index": 0
}
]
]
},
"Final Data Valid?": {
"main": [
[
{
"node": "Log Successful Processing",
"type": "main",
"index": 0
}
],
[
{
"node": "Set Validation Error",
"type": "main",
"index": 0
}
]
]
},
"Set Quality Error": {
"main": [
[
{
"node": "Merge All Errors",
"type": "main",
"index": 1
}
]
]
},
"Route by File Type": {
"main": [
[
{
"node": "Get Doc",
"type": "main",
"index": 0
}
],
[
{
"node": "Convert DOCX to Docs",
"type": "main",
"index": 0
}
],
[
{
"node": "Download TXT",
"type": "main",
"index": 0
}
]
]
},
"Extract TXT Content": {
"main": [
[
{
"node": "Text Extracted?",
"type": "main",
"index": 0
}
]
]
},
"AI Analysis Success?": {
"main": [
[
{
"node": "Extract Candidate Info",
"type": "main",
"index": 0
}
],
[
{
"node": "Set AI Error",
"type": "main",
"index": 0
}
]
]
},
"Convert DOCX to Docs": {
"main": [
[
{
"node": "Get Doc as Text",
"type": "main",
"index": 0
}
]
]
},
"Resume Quality Check": {
"main": [
[
{
"node": "Job Description",
"type": "main",
"index": 0
}
],
[
{
"node": "Set Quality Error",
"type": "main",
"index": 0
}
]
]
},
"Set Extraction Error": {
"main": [
[
{
"node": "Merge All Errors",
"type": "main",
"index": 1
}
]
]
},
"Set Validation Error": {
"main": [
[
{
"node": "Merge All Errors",
"type": "main",
"index": 1
}
]
]
},
"AI Recruiter Analysis": {
"main": [
[
{
"node": "AI Analysis Success?",
"type": "main",
"index": 0
}
]
]
},
"Extract Candidate Info": {
"main": [
[
{
"node": "Final Data Valid?",
"type": "main",
"index": 0
}
]
]
},
"Send Error Notification": {
"main": [
[
{
"node": "Log Error to Sheet",
"type": "main",
"index": 0
}
]
]
},
"Standardize Resume Data": {
"main": [
[
{
"node": "Resume Quality Check",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Recruiter Analysis",
"type": "ai_outputParser",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 内容创作, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
AI简历筛选:Gmail、GPT-4o和Google表格 - 自动化招聘流程
AI简历筛选:Gmail、GPT-4o和Google表格 - 自动化招聘流程
Set
Switch
Google Drive
+9
23 节点David Olusola
内容创作
HR候选人解析与评估 - 使用GPT-4.1和LinkedIn数据的CSV/XLSX
HR候选人解析与评估 - 使用GPT-4.1和LinkedIn数据的CSV/XLSX
Set
Code
Gmail
+15
33 节点Elay Guez
内容创作
使用 OpenAI、QuickChart 和 Google Drive 将电子表格数据转换为智能图表
使用 OpenAI、QuickChart 和 Google Drive 将电子表格数据转换为智能图表
If
Set
Code
+18
82 节点LeeWei
内容创作
AI驱动的邮件分诊与自动回复系统,集成OpenAI代理和Gmail
AI驱动的邮件分诊与自动回复系统,集成OpenAI代理和Gmail
If
Set
Gmail
+20
68 节点Abdullahi Ahmed
内容创作
✨🩷自动化社交媒体内容发布工厂 + 系统提示组合
基于动态系统提示和GPT-4o的AI驱动多平台社交媒体内容工厂
If
Set
Code
+20
100 节点Amit Mehta
内容创作
自适应邮件自动回复器(GPT-4、RAG和人工反馈循环)
自适应邮件自动回复器(GPT-4、RAG和人工反馈循环)
If
Set
Gmail
+15
38 节点LeeWei
内容创作
工作流信息
难度等级
高级
节点数量34
分类2
节点类型15
作者
David Olusola
@dae221I design enterprise-grade automation systems that eliminate bottlenecks, cut manual work by 70%+, and unlock millions in lost revenue opportunities. My clients — typically achieve 5–10x ROI within the first 90 days. Currently partnering with select high-growth companies ready to scale faster with AI automation. david@daexai.com
外部链接
在 n8n.io 查看 →
分享此工作流