8
n8n 中文网amn8n.com

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
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 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)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量34
分类2
节点类型15
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
David Olusola

David Olusola

@dae221

I 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 查看

分享此工作流