8
n8n 中文网amn8n.com

TalentFlow AI - 批量简历筛选与职位描述匹配

高级

这是一个HR, AI Summarization领域的自动化工作流,包含 30 个节点。主要使用 If, Code, Merge, Slack, Filter 等节点。 使用GPT-4为HR团队进行批量简历筛选与职位描述匹配

前置要求
  • Slack Bot Token 或 Webhook URL
  • Google Drive API 凭证
  • Google Sheets API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "Q2sJeZnm8cbDfiEP",
  "meta": {
    "instanceId": "4a2e6764ba7a6bc9890d9225f4b21d570ce88fc9bd57549c89057fcee58fed0f",
    "templateId": "5453",
    "templateCredsSetupCompleted": true
  },
  "name": "TalentFlow AI – 批量简历筛选与职位描述匹配",
  "tags": [
    {
      "id": "OcQfoQT2ejtrpKfF",
      "name": "HR Workflow",
      "createdAt": "2025-07-30T05:57:04.113Z",
      "updatedAt": "2025-07-30T05:57:04.113Z"
    }
  ],
  "nodes": [
    {
      "id": "f007fbd5-f154-4497-ad34-6f90c3e78631",
      "name": "便签 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        1936
      ],
      "parameters": {
        "width": 748,
        "height": 80,
        "content": "## 1. HR/TA 上传多份简历并选择职位(工作角色)"
      },
      "typeVersion": 1
    },
    {
      "id": "23581b43-6d12-4868-818c-f267ae9535c1",
      "name": "便签 5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        976,
        1920
      ],
      "parameters": {
        "width": 632,
        "height": 768,
        "content": "## 3. HR AI Agent 基于个人资料和职位描述评估候选人匹配度"
      },
      "typeVersion": 1
    },
    {
      "id": "31815a99-970e-45dd-9eac-19b04fe6afbe",
      "name": "申请表",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -528,
        2176
      ],
      "webhookId": "c0275bde-d427-49f0-b497-a648da2788e7",
      "parameters": {
        "options": {
          "customCss": ":root {\n\t--font-family: 'Open Sans', sans-serif;\n\t--font-weight-normal: 400;\n\t--font-weight-bold: 600;\n\t--font-size-body: 12px;\n\t--font-size-label: 14px;\n\t--font-size-test-notice: 12px;\n\t--font-size-input: 14px;\n\t--font-size-header: 20px;\n\t--font-size-paragraph: 14px;\n\t--font-size-link: 12px;\n\t--font-size-error: 12px;\n\t--font-size-html-h1: 28px;\n\t--font-size-html-h2: 20px;\n\t--font-size-html-h3: 16px;\n\t--font-size-html-h4: 14px;\n\t--font-size-html-h5: 12px;\n\t--font-size-html-h6: 10px;\n\t--font-size-subheader: 14px;\n\n\t/* Colors */\n\t--color-background: #fbfcfe;\n\t--color-test-notice-text: #e6a23d;\n\t--color-test-notice-bg: #fefaf6;\n\t--color-test-notice-border: #f6dcb7;\n\t--color-card-bg: #ffffff;\n\t--color-card-border: #dbdfe7;\n\t--color-card-shadow: rgba(99, 77, 255, 0.06);\n\t--color-link: #7e8186;\n\t--color-header: #525356;\n\t--color-label: #555555;\n\t--color-input-border: #dbdfe7;\n\t--color-input-text: #71747A;\n\t--color-focus-border: rgb(90, 76, 194);\n\t--color-submit-btn-bg: #0000FF; /* Changed to blue */\n\t--color-submit-btn-text: #ffffff;\n\t--color-error: #ea1f30;\n\t--color-required: #ff6d5a;\n\t--color-clear-button-bg: #7e8186;\n\t--color-html-text: #555;\n\t--color-html-link: #ff6d5a;\n\t--color-header-subtext: #7e8186;\n\n\t/* Border Radii */\n\t--border-radius-card: 8px;\n\t--border-radius-input: 6px;\n\t--border-radius-clear-btn: 50%;\n\t--card-border-radius: 8px;\n\n\t/* Spacing */\n\t--padding-container-top: 24px;\n\t--padding-card: 24px;\n\t--padding-test-notice-vertical: 12px;\n\t--padding-test-notice-horizontal: 24px;\n\t--margin-bottom-card: 16px;\n\t--padding-form-input: 12px;\n\t--card-padding: 24px;\n\t--card-margin-bottom: 16px;\n\n\t/* Dimensions */\n\t--container-width: 448px;\n\t--submit-btn-height: 48px;\n\t--checkbox-size: 18px;\n\n\t/* Others */\n\t--box-shadow-card: 0px 4px 16px 0px var(--color-card-shadow);\n\t--opacity-placeholder: 0.5;\n}\n",
          "appendAttribution": false
        },
        "formTitle": "Resume Review Form",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "CV",
              "requiredField": true,
              "acceptFileTypes": ".pdf"
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Job Role",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Talent acquisition Specialist (Intermediate)"
                  },
                  {
                    "option": "Senior Tester/QC (Web Apps, Mobile, API, Database)"
                  },
                  {
                    "option": "Lead Full-stack Developer (.NET, Angular/React.js)"
                  },
                  {
                    "option": "Manual Tester/QC (Senior level)"
                  }
                ]
              },
              "requiredField": true
            }
          ]
        },
        "formDescription": "Upload all applicant resumes below and select the corresponding job positions. Our SmartHR Agent will review each submission and provide a detailed evaluation for your consideration."
      },
      "typeVersion": 2.2
    },
    {
      "id": "ff46db6c-5f77-4c45-b0a2-d8997760f363",
      "name": "提取个人资料",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -192,
        2064
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "4e80f14b-b866-4966-ad8b-b92276dfc676",
      "name": "json 解析器",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        80,
        2208
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"full_name\": \"\",\n  \"job_title\": \"\",\n  \"summary\": \"\",\n  \"contact\": {\n    \"email\": \"\",\n    \"phone\": \"\",\n    \"address\": \"\",\n    \"linkedin\": \"\",\n    \"website\": \"\"\n  },\n  \"education\": [\n    {\n      \"degree\": \"\",\n      \"field_of_study\": \"\",\n      \"institution\": \"\",\n      \"location\": \"\",\n      \"start_year\": \"\",\n      \"end_year\": \"\"\n    }\n  ],\n  \"certifications\": [\n    {\n      \"name\": \"\",\n      \"issuer\": \"\",\n      \"date_obtained\": \"\",\n      \"expiration_date\": \"\"\n    }\n  ],\n  \"work_experience\": [\n    {\n      \"company\": \"\",\n      \"position\": \"\",\n      \"location\": \"\",\n      \"start_date\": \"\",\n      \"end_date\": \"\",\n      \"responsibilities\": [\n        \"\"\n      ],\n      \"achievements\": [\n        \"\"\n      ]\n    }\n  ],\n  \"skills\": {\n    \"technical_skills\": [\n      \"\"\n    ],\n    \"soft_skills\": [\n      \"\"\n    ],\n    \"languages\": [\n      {\n        \"language\": \"\",\n        \"proficiency\": \"\"\n      }\n    ],\n    \"tools_and_technologies\": [\n      \"\"\n    ]\n  },\n  \"projects\": [\n    {\n      \"name\": \"\",\n      \"description\": \"\",\n      \"technologies_used\": [\n        \"\"\n      ],\n      \"role\": \"\",\n      \"duration\": \"\"\n    }\n  ],\n  \"awards\": [\n    {\n      \"title\": \"\",\n      \"issuer\": \"\",\n      \"date\": \"\",\n      \"description\": \"\"\n    }\n  ],\n  \"volunteer_experience\": [\n    {\n      \"organization\": \"\",\n      \"role\": \"\",\n      \"description\": \"\",\n      \"start_date\": \"\",\n      \"end_date\": \"\"\n    }\n  ],\n  \"additional_information\": {\n    \"availability\": \"\",\n    \"preferred_location\": \"\",\n    \"salary_expectation\": \"\",\n    \"work_authorization\": \"\",\n    \"other_notes\": \"\"\n  }\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "8a0d545c-b28d-4a0b-ba77-d3533597d155",
      "name": "gpt4-1 模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -48,
        2208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "PPSwAKeLQYgAPobT",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "291e6b3e-0a21-459c-9340-291effc1d941",
      "name": "获取职位 JD",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -304,
        2592
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $('Application form').item.json['Job Role'] }}",
              "lookupColumn": "Job Role"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/15CZPMbxmz-RVYji1fev_6vYeEwpPa3MjewGEPf6aSoA/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "15CZPMbxmz-RVYji1fev_6vYeEwpPa3MjewGEPf6aSoA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/15CZPMbxmz-RVYji1fev_6vYeEwpPa3MjewGEPf6aSoA/edit?usp=drivesdk",
          "cachedResultName": "Positions"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "L670Nly6gZGo71br",
          "name": "Google Sheets account 2"
        }
      },
      "typeVersion": 4.6,
      "alwaysOutputData": true
    },
    {
      "id": "02ccf47d-e039-477c-9028-7ccf08f7b58f",
      "name": "下载文件",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -112,
        2592
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $json['Job Description'] }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "fC471es5gk5Mm900",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "bffa78db-6f40-488f-a4ef-fce685acc8cc",
      "name": "提取职位描述",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        112,
        2592
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "ec4ff009-360f-4ff6-943b-3cf87a6b87e5",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        1648
      ],
      "parameters": {
        "width": 588,
        "height": 676,
        "content": "## 2.1. 候选人个人资料分析器"
      },
      "typeVersion": 1
    },
    {
      "id": "8aac80ce-2afd-4b28-a5c1-67319dc7c3b8",
      "name": "便签 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        2400
      ],
      "parameters": {
        "width": 636,
        "height": 372,
        "content": "## 2.2. 下载选定的职位描述"
      },
      "typeVersion": 1
    },
    {
      "id": "15ce288c-a8e6-4016-a26c-059de23ba6d6",
      "name": "便签6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1744,
        1920
      ],
      "parameters": {
        "width": 1032,
        "height": 768,
        "content": "## 4. 将评估结果更新到目标平台"
      },
      "typeVersion": 1
    },
    {
      "id": "1e3e7898-f264-4446-b2a0-c0d6445a6637",
      "name": "HR 专家 Agent",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1264,
        2272
      ],
      "parameters": {
        "text": "=Evaluate the candidate for the following position ({{ $json.position }}) with job description: {{ $json.job_description }}\n------------------------\nBelow is the extracted candidate profile:\n{{ $json.candidate_profile.toJsonString() }}",
        "messages": {
          "messageValues": [
            {
              "message": "You are a professional AI hiring assistant tasked with evaluating job candidates based on their structured resume data and a provided job description. Your goal is to assess the candidate’s suitability for the role, identifying key matches and gaps in skills, experience, and qualifications.  You will receive: - `candidate_profile`: a JSON object containing extracted information from the candidate's resume. - `job_description`: a plain text description of the role.  Your job is to: 1. Parse and understand the key job requirements (e.g., required skills, years of experience, qualifications). 2. Match the candidate's profile to the job requirements. 3. Provide a structured evaluation with ratings and reasoning.  Always be objective, use professional language, and format your output clearly using markdown."
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.5
    },
    {
      "id": "8e4f9f63-86ac-43f3-a535-4c49b4ea3863",
      "name": "个人资料分析器 Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -48,
        2064
      ],
      "parameters": {
        "text": "=Please extract all relevant information from this candiadte:\nCV Content:\n===\n{{ $json[\"text\"] }}\n===",
        "options": {
          "systemMessage": ""
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.1
    },
    {
      "id": "e637352c-bc2c-4c50-a217-f7072c4515a6",
      "name": "更新评估表",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2224,
        2528
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "overall_fit_score",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "overall_fit_score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "recommendation",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "recommendation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "required_experience",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "required_experience",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "skill_match",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "skill_match",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "education_certifications",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "education_certifications",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "soft_skills_traits",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "soft_skills_traits",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "strengths",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "strengths",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "concerns_or_gaps",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "concerns_or_gaps",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "final_notes",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "final_notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "output"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1gpuTL7iK2LoDJAdHE-LBFiBEU6hLqSTxWjThMJyi7SY/edit?usp=drive_link"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "L670Nly6gZGo71br",
          "name": "Google Sheets account 2"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "1cfcfbec-2206-4d24-985c-5a7307f045a8",
      "name": "映射列",
      "type": "n8n-nodes-base.code",
      "position": [
        1808,
        2272
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const evaluationResult = item.json.output;\n\nreturn {\n    json: {\n      full_name: evaluationResult.full_name || '',\n      email: evaluationResult.email || '',\n      phone: evaluationResult.phone || '',\n      position: evaluationResult.applied_position,\n      overall_fit_score: evaluationResult.overall_fit_score,\n      recommendation: evaluationResult.recommendation,\n      strengths: Array.isArray(evaluationResult.strengths) ? evaluationResult.strengths.join(', ') : '',\n      concerns_or_gaps: Array.isArray(evaluationResult.concerns_or_gaps) ? evaluationResult.concerns_or_gaps.join(', ') : '',\n      final_notes: evaluationResult.final_notes || '',\n      submitted_date: $now.toFormat(\"yyyyLLdd-HHmmss\")\n    }\n  };"
      },
      "typeVersion": 2
    },
    {
      "id": "8b7ae83f-27ac-4ecc-8180-fd46ce375cc2",
      "name": "上传到 Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -80,
        1808
      ],
      "parameters": {
        "name": "=cv-{{ $now.toFormat(\"yyyyLLdd-HHmmss\") }}-{{$binary.data.fileName}}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive",
          "cachedResultName": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "url",
          "value": "https://drive.google.com/drive/u/0/folders/1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "fC471es5gk5Mm900",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "bc0cc422-0789-466f-a485-9615bea31687",
      "name": "gpt-4-1 模型 2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1248,
        2496
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "PPSwAKeLQYgAPobT",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a9f1c1b2-b75b-49c8-84e2-e3b328824c1a",
      "name": "json 解析器 2",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1456,
        2496
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"full_name\":\"\",\n  \"phone\":\"\",\n  \"address\":\"\",\n  \"email\":\"\",\n  \"applied_position\":\"\",\n  \"overall_fit_score\": 0,\n  \"recommendation\": \"\", \n  \"job_match_summary\": {\n    \"required_experience\": \"\",\n    \"skill_match\": \"\",\n    \"education_certifications\": \"\",\n    \"soft_skills_traits\": \"\"\n  },\n  \"strengths\": [\n    \"\"\n  ],\n  \"concerns_or_gaps\": [\n    \"\"\n  ],\n  \"final_notes\": \"\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "9f431dbc-4b1a-45cc-b8f8-d68d7ad74536",
      "name": "便签7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2096,
        1856
      ],
      "parameters": {
        "width": 912,
        "height": 1760,
        "content": "## TalentFlow AI – 批量简历筛选与职位描述匹配"
      },
      "typeVersion": 1
    },
    {
      "id": "6bd0f5cc-8830-49a6-9003-4e74c84a56b2",
      "name": "便签 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        2800
      ],
      "parameters": {
        "width": 640,
        "height": 128,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-07-29+at+12.54.54%E2%80%AFPM.png \"可选标题文本\")"
      },
      "typeVersion": 1
    },
    {
      "id": "ea2175ea-cc01-48d7-8e2f-604ec2673e94",
      "name": "便签8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1792,
        2736
      ],
      "parameters": {
        "width": 960,
        "height": 512,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/SmartHR+form+3.jpg \"示例评估表数据\")"
      },
      "typeVersion": 1
    },
    {
      "id": "cd0c42ec-c281-4132-a6c0-009cd92f7779",
      "name": "向候选人发送结果邮件",
      "type": "n8n-nodes-base.sendGrid",
      "disabled": true,
      "position": [
        2560,
        2320
      ],
      "parameters": {
        "subject": "=Update on Your Application for {{ $json.position }}",
        "toEmail": "={{ $json.email }}",
        "fromName": "Hiring Team",
        "resource": "mail",
        "fromEmail": "sender@example.com",
        "contentType": "text/html",
        "contentValue": "=<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <title>Application Update</title>\n  <style>\n    body {\n      font-family: Arial, sans-serif;\n      background-color: #f4f6f9;\n      color: #333;\n      padding: 20px;\n    }\n    .container {\n      max-width: 600px;\n      background-color: #ffffff;\n      margin: auto;\n      padding: 30px;\n      border-radius: 8px;\n      box-shadow: 0 0 10px rgba(0,0,0,0.05);\n    }\n    .header {\n      font-size: 20px;\n      font-weight: bold;\n      color: #2b5cb8;\n      margin-bottom: 20px;\n    }\n    .footer {\n      font-size: 12px;\n      color: #999;\n      text-align: center;\n      margin-top: 40px;\n    }\n  </style>\n</head>\n<body>\n  <div class=\"container\">\n    <div class=\"header\">Application Update</div>\n\n    <p>Hi {{ $json.full_name }},</p>\n\n    <p>Thank you for applying for the <strong>{{ $json.position }}</strong> position.</p>\n\n    <p>We appreciate your interest and the time you took to apply. After careful review, we’ve decided not to move forward with your application at this time.</p>\n\n    <p>We wish you the best in your job search and future opportunities.</p>\n\n    <p>Kind regards,<br>\n    Recruitment Team</p>\n\n    <div class=\"footer\">\n      This is an automated message. Please do not reply.\n    </div>\n  </div>\n</body>\n</html>",
        "additionalFields": {}
      },
      "credentials": {
        "sendGridApi": {
          "id": "O1IzegT4JdKjrzrj",
          "name": "SendGrid account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "46086f32-5a6c-4f3e-9539-34ac476283b7",
      "name": "通过 Slack 向招聘团队发送消息",
      "type": "n8n-nodes-base.slack",
      "position": [
        2560,
        2080
      ],
      "webhookId": "09bb1ad8-915e-4bd1-b7aa-e8f796381745",
      "parameters": {
        "text": "=🎯 *Candidate Evaluation Update*\n\nHi team,  \nWe've completed the initial screening and have a qualified candidate for the *{{ $json.position }}* position:\n\n👤 *Candidate:* **{{ $json.full_name }}**  \n📝 *Summary:*  \n• *Fit Score:* {{ $json.overall_fit_score }}/10  \n• *Recommendation:* {{ $json.recommendation }}  \n• *Key Strengths:*  \n  {{ $json.strengths }}\n\n📎 *Full evaluation is available in the tracking sheet.*\n\n👉 Please advise on next steps (e.g., schedule technical interview, team round, etc.).",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C098LDNAG1E",
          "cachedResultName": "hiring-channel"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "id": "fDHHxMgQm69z0h5T",
          "name": "Slack account"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "df5ab265-1b74-4f89-9d01-db9b4d5e26f2",
      "name": "候选人合格?",
      "type": "n8n-nodes-base.if",
      "position": [
        2224,
        2192
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a69c879b-ebf6-4237-b19a-4bb1e4686746",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $('HR Expert Agent').item.json.output.overall_fit_score }}",
              "rightValue": 8
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "99d34017-e9b7-4802-8f69-9b77a90ec9f2",
      "name": "代码",
      "type": "n8n-nodes-base.code",
      "position": [
        -336,
        1936
      ],
      "parameters": {
        "jsCode": "const data = $input.item.json;\nconst binaryData = $input.item.binary;\n\nlet output = [];\n\nObject.keys(binaryData)\n  .filter(label => label.startsWith(\"CV_\"))\n  .forEach(label => {\n    output.push({\n      json: data,\n      binary: { data: binaryData[label] }\n    });\n  });\n\nreturn output;"
      },
      "typeVersion": 2
    },
    {
      "id": "9067e3d6-34a4-4c04-a785-a929aa32b912",
      "name": "合并",
      "type": "n8n-nodes-base.merge",
      "position": [
        768,
        2272
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "787c7622-3f48-4b73-83c1-5eee7f8c3c4a",
      "name": "便签 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        2048
      ],
      "parameters": {
        "width": 556,
        "height": 580,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-07-30+at+2.45.53%E2%80%AFPM.png \"可选标题文本\")"
      },
      "typeVersion": 1
    },
    {
      "id": "3b30fd6b-489a-4050-8ff0-74d3e257b477",
      "name": "代码1",
      "type": "n8n-nodes-base.code",
      "position": [
        1008,
        2272
      ],
      "parameters": {
        "jsCode": "// Raw merged input (first N items are candidate profiles, last item is JD)\nconst items = $input.all();\n\n// Extract job description (assuming it's the last element)\nconst jdItem = items[items.length - 1];\nconst job_description = jdItem.json.text;\n\n// Prepare output array\nconst results = [];\n\n// Loop through all items except the last one (JD)\nfor (let i = 0; i < items.length - 1; i++) {\n  const candidate = items[i].json.output;\n  results.push({\n    json: {\n      candidate_profile: candidate,\n      job_description: job_description,\n      applied_position: $('Application form').first().json['Job Role']\n    }\n  });\n}\n\nreturn results;"
      },
      "typeVersion": 2
    },
    {
      "id": "e6ce2613-5dbc-4005-a939-982af7e75d3f",
      "name": "移除不良数据简历",
      "type": "n8n-nodes-base.filter",
      "position": [
        416,
        2128
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "82f62f61-ceaa-4ff2-8493-da82d0165729",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.output.full_name }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "a24dd36a-0a96-4e1c-8af9-ac84f8811a77",
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "Upload to Google Drive",
            "type": "main",
            "index": 0
          },
          {
            "node": "Extract profile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code1": {
      "main": [
        [
          {
            "node": "HR Expert Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Code1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map Columns": {
      "main": [
        [
          {
            "node": "Update evaluation sheet",
            "type": "main",
            "index": 0
          },
          {
            "node": "Candidate qualified?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "json parser": {
      "ai_outputParser": [
        [
          {
            "node": "Profile Analyzer Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "gpt4-1 model": {
      "ai_languageModel": [
        [
          {
            "node": "Profile Analyzer Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Download file": {
      "main": [
        [
          {
            "node": "Extract Job Description",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "json parser 2": {
      "ai_outputParser": [
        [
          {
            "node": "HR Expert Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Extract profile": {
      "main": [
        [
          {
            "node": "Profile Analyzer Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get position JD": {
      "main": [
        [
          {
            "node": "Download file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HR Expert Agent": {
      "main": [
        [
          {
            "node": "Map Columns",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "gpt-4-1 model 2": {
      "ai_languageModel": [
        [
          {
            "node": "HR Expert Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Application form": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get position JD",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove bad data CV": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Candidate qualified?": {
      "main": [
        [
          {
            "node": "Send message via Slack to the hiring team",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send email to candidate about the result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Profile Analyzer Agent": {
      "main": [
        [
          {
            "node": "Remove bad data CV",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to Google Drive": {
      "main": [
        []
      ]
    },
    "Extract Job Description": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Update evaluation sheet": {
      "main": [
        []
      ]
    },
    "Send email to candidate about the result": {
      "main": [
        []
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 人力资源, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

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

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

作者
Trung Tran

Trung Tran

@trungtran

Helps small and medium businesses grow with intelligent automation and practical AI tools, no heavy tech team needed.

外部链接
在 n8n.io 查看

分享此工作流