8
n8n 中文网amn8n.com

AI候选人筛选与面试安排系统

高级

这是一个HR, AI Summarization领域的自动化工作流,包含 18 个节点。主要使用 If, Code, Webhook, EmailSend, GoogleSheets 等节点。 基于AI的候选人筛选与面试安排(OpenAI GPT与Google套件)

前置要求
  • HTTP Webhook 端点(n8n 会自动生成)
  • Google Sheets API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "pHbBtdjeo2u8avrY",
  "meta": {
    "instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
    "templateCredsSetupCompleted": true
  },
  "name": "AI 候选人筛选与面试安排系统",
  "tags": [],
  "nodes": [
    {
      "id": "6bb2e121-0353-43a0-96f3-1e881f9ea9e9",
      "name": "Webhook - 接收申请",
      "type": "n8n-nodes-base.webhook",
      "notes": "📥 ENTRY POINT\n\nThis webhook receives job applications from candidates.\n\nExpected data:\n- Candidate Name\n- Email\n- Phone\n- Resume (URL or text)\n- Cover Letter\n- Years of Experience\n- Skills\n\nURL: https://your-n8n-instance.com/webhook/job-application",
      "position": [
        -1008,
        1552
      ],
      "webhookId": "job-application-webhook",
      "parameters": {
        "path": "job-application",
        "options": {},
        "responseMode": "responseNode"
      },
      "typeVersion": 1
    },
    {
      "id": "8fa4ef36-d737-446c-a4aa-ca7eef8654dc",
      "name": "便签 - 工作流概览",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        576
      ],
      "parameters": {
        "color": 3,
        "width": 350,
        "height": 400,
        "content": "## 📋 工作流概览"
      },
      "typeVersion": 1
    },
    {
      "id": "a34130de-94c4-4760-8883-3b778afe6319",
      "name": "Google Sheets - 存储申请",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "💾 DATA STORAGE\n\nStores all application data in Google Sheets for:\n- Easy tracking and management\n- Historical record keeping\n- Team collaboration\n- Backup of all applications\n\nAlternative: Can use Airtable, PostgreSQL, or MySQL instead",
      "position": [
        -784,
        1552
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "=Applications"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "=34yuhedwqre"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "ScSS2KxGQULuPtdy",
          "name": "Google Sheets- test"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "47f948e2-6945-4b41-95fb-7ffc04d488af",
      "name": "便签 - 存储信息",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -848,
        1136
      ],
      "parameters": {
        "color": 5,
        "width": 220,
        "height": 584,
        "content": "## 📊 数据库存储"
      },
      "typeVersion": 1
    },
    {
      "id": "dc349940-72dc-49bf-b44f-68510c5e923a",
      "name": "OpenAI - AI 候选人评估",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "notes": "🤖 AI EVALUATION ENGINE\n\nUses GPT-4 to:\n- Analyze candidate qualifications\n- Match skills against job requirements\n- Identify strengths and gaps\n- Provide objective scoring (0-100)\n- Generate hiring recommendation\n\nBenefits:\n- Consistent evaluation criteria\n- Unbiased initial screening\n- Faster processing\n- Detailed insights",
      "position": [
        -560,
        1552
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "id",
          "value": "=add your model"
        },
        "options": {
          "temperature": 0.3
        },
        "messages": {
          "values": [
            {
              "content": "=Your name is Rayan and you are an expert technical recruiter evaluating candidates for an Automation Specialist position.\n\nJob Requirements:\n- 3+ years of experience in automation\n- Strong skills in n8n, Make.com, or Zapier\n- Programming: Python, JavaScript\n- API integration experience\n- Workflow design expertise\n- Problem-solving abilities\n\nCandidate Information:\nName: {{ $json.body.name }}\nExperience: {{ $json.body.experience }} years\nSkills: {{ $json.body.skills }}\nResume Summary: {{ $json.body.resume }}\n\nEvaluate this candidate and provide:\n1. Overall Score (0-100)\n2. Strengths (3-5 points)\n3. Weaknesses (2-3 points)\n4. Recommendation (Strong Hire / Hire / Maybe / Reject)\n5. Key concerns or highlights\n\nFormat your response as JSON:\n{\n  \"score\": 85,\n  \"recommendation\": \"Hire\",\n  \"strengths\": [\"...\"],\n  \"weaknesses\": [\"...\"],\n  \"summary\": \"...\"\n}"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "CDQ16eImh6D4tY15",
          "name": "OpenAi account 2 - test"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a99cf7ab-03db-4a7e-98fe-4a8025a03cd2",
      "name": "便签 - AI 处理流程",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -608,
        1136
      ],
      "parameters": {
        "color": 5,
        "width": 204,
        "height": 584,
        "content": "## 🧠 AI 评估"
      },
      "typeVersion": 1
    },
    {
      "id": "2a7f8223-ee02-4c1a-90c4-9cda4ac86831",
      "name": "代码 - 处理评估",
      "type": "n8n-nodes-base.code",
      "notes": "⚙️ DATA PROCESSING\n\nThis node:\n- Parses AI evaluation response\n- Extracts structured data (score, recommendation)\n- Combines candidate + evaluation data\n- Determines next step (Interview or Reject)\n- Handles errors gracefully\n\nThreshold: Score ≥ 70 → Interview",
      "position": [
        -336,
        1552
      ],
      "parameters": {
        "jsCode": "// Parse AI response and structure data\nconst aiResponse = $input.first().json.message.content;\nlet evaluation;\n\ntry {\n  // Extract JSON from AI response\n  const jsonMatch = aiResponse.match(/\\{[\\s\\S]*\\}/);\n  evaluation = JSON.parse(jsonMatch[0]);\n} catch (error) {\n  // Fallback if JSON parsing fails\n  evaluation = {\n    score: 50,\n    recommendation: \"Needs Review\",\n    strengths: [\"Unable to parse\"],\n    weaknesses: [\"AI response format error\"],\n    summary: aiResponse\n  };\n}\n\n// Get original application data\nconst applicationData = $('Webhook - Receive Application').first().json.body;\n\n// Combine all data\nreturn {\n  json: {\n    candidate: {\n      name: applicationData.name,\n      email: applicationData.email,\n      phone: applicationData.phone,\n      experience: applicationData.experience,\n      skills: applicationData.skills\n    },\n    evaluation: {\n      score: evaluation.score,\n      recommendation: evaluation.recommendation,\n      strengths: evaluation.strengths,\n      weaknesses: evaluation.weaknesses,\n      summary: evaluation.summary,\n      evaluatedAt: new Date().toISOString()\n    },\n    decision: evaluation.score >= 70 ? \"Interview\" : \"Reject\"\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "890d9265-4b7c-4cee-8541-08ac6dd7832d",
      "name": "IF - 检查分数阈值",
      "type": "n8n-nodes-base.if",
      "notes": "🔀 DECISION POINT\n\nRoutes candidates based on evaluation:\n\n✅ TRUE (Score ≥ 70):\n- Send interview invitation\n- Schedule meeting\n- Update status to 'Interview Scheduled'\n\n❌ FALSE (Score < 70):\n- Send rejection email\n- Update status to 'Rejected'\n- Archive application",
      "position": [
        -112,
        1552
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.decision }}",
              "value2": "Interview",
              "operation": "equals"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d9d8619f-79bf-47d8-b0fd-7f7e9d1054e1",
      "name": "便签 - 决策逻辑",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        1216
      ],
      "parameters": {
        "color": 5,
        "width": 380,
        "height": 496,
        "content": "## 🎯 评分逻辑"
      },
      "typeVersion": 1
    },
    {
      "id": "5ee3c07a-d3b2-4c73-aadc-54ef03bf7ec9",
      "name": "邮件 - 面试邀请",
      "type": "n8n-nodes-base.emailSend",
      "notes": "✉️ INTERVIEW INVITATION\n\nSends personalized email to qualified candidates:\n- Congratulatory message\n- Evaluation highlights\n- Next steps information\n- Request for confirmation\n\nAlternative: Use SendGrid, Gmail, or Outlook node",
      "position": [
        112,
        1456
      ],
      "webhookId": "e0dcc54e-4b72-4a8f-af17-f5dd7843f753",
      "parameters": {
        "text": "=Dear {{ $json.candidate.name }},\n\nCongratulations! We were impressed with your application for the Automation Specialist position.\n\nEvaluation Summary:\n- Overall Score: {{ $json.evaluation.score }}/100\n- Recommendation: {{ $json.evaluation.recommendation }}\n\nStrengths:\n{{ $json.evaluation.strengths.join('\\n- ') }}\n\nWe would like to invite you for an interview. Our team will reach out shortly to schedule a convenient time.\n\nPlease reply to confirm your continued interest.\n\nBest regards,\nHR Team",
        "options": {},
        "subject": "Interview Invitation - Automation Specialist Position",
        "toEmail": "={{ $json.candidate.email }}",
        "fromEmail": "hr@company.com"
      },
      "credentials": {
        "smtp": {
          "id": "3QSx1pWoS0BZcK4c",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "695c0973-9c31-47a2-88ec-24b7989089b4",
      "name": "邮件 - 拒绝通知",
      "type": "n8n-nodes-base.emailSend",
      "notes": "✉️ REJECTION NOTICE\n\nSends professional rejection email:\n- Respectful and kind tone\n- Thanks candidate for interest\n- Encourages future applications\n- Maintains company reputation\n\nBest practice: Always send closure to candidates",
      "position": [
        336,
        1648
      ],
      "webhookId": "1c10023a-2b19-46de-a049-c4fb38cb13a0",
      "parameters": {
        "text": "=Dear {{ $json.candidate.name }},\n\nThank you for your interest in the Automation Specialist position at our company.\n\nAfter careful review of your application, we have decided to move forward with other candidates whose experience more closely matches our current requirements.\n\nWe appreciate the time you invested in your application and encourage you to apply for future opportunities that align with your skills.\n\nWe wish you the best in your job search.\n\nBest regards,\nHR Team",
        "options": {},
        "subject": "Application Update - Automation Specialist Position",
        "toEmail": "={{ $json.candidate.email }}",
        "fromEmail": "hr@company.com"
      },
      "credentials": {
        "smtp": {
          "id": "3QSx1pWoS0BZcK4c",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "37081a08-cac7-403e-a6a1-f67b00efd078",
      "name": "Google日历 - 安排面试",
      "type": "n8n-nodes-base.googleCalendar",
      "notes": "📅 INTERVIEW SCHEDULING\n\nAutomatically creates calendar event:\n- Scheduled 3 days in advance\n- 1-hour duration\n- Includes candidate details\n- Adds evaluation summary\n- Invites candidate + hiring manager\n- Sends calendar invites\n\nAlternative: Use Calendly API integration",
      "position": [
        336,
        1456
      ],
      "parameters": {
        "end": "={{ $now.plus(3, 'days').set({ hour: 11, minute: 0 }).toISO() }}",
        "start": "={{ $now.plus(3, 'days').set({ hour: 10, minute: 0 }).toISO() }}",
        "calendar": {
          "__rl": true,
          "mode": "id",
          "value": "=9ikjnhy65trfdser4"
        },
        "additionalFields": {}
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "6ldLmzzYtaqng4pw",
          "name": "Google Calendar account - test"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "56ed8c49-514c-47e2-a83e-e453ce7894ea",
      "name": "便签 - 邮件逻辑",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        1152
      ],
      "parameters": {
        "color": 5,
        "width": 428,
        "height": 656,
        "content": "## 📧 邮件通知"
      },
      "typeVersion": 1
    },
    {
      "id": "56eeb778-14d9-41db-b9a6-279d8c4d9027",
      "name": "更新表格 - 面试状态",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "📝 STATUS UPDATE - INTERVIEW\n\nUpdates Google Sheet with:\n- Status: 'Interview Scheduled'\n- AI evaluation score\n- Recommendation level\n- Interview date\n\nThis keeps the ATS current for HR team tracking",
      "position": [
        560,
        1456
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": "Applications",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "=koi8uhbvfgtyuj"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "ScSS2KxGQULuPtdy",
          "name": "Google Sheets- test"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "7e36df56-3674-4f34-af49-e3809b946f4b",
      "name": "更新表格 - 拒绝状态",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "📝 STATUS UPDATE - REJECTION\n\nUpdates Google Sheet with:\n- Status: 'Rejected'\n- AI evaluation score\n- Recommendation (for records)\n- Rejection date\n\nMaintains complete audit trail",
      "position": [
        560,
        1648
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "=Applications"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "=hgt567ikmnhjuio9"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "ScSS2KxGQULuPtdy",
          "name": "Google Sheets- test"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "140accea-6390-4317-ae76-cfad1da6b1ee",
      "name": "响应 Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "notes": "📤 WEBHOOK RESPONSE\n\nSends confirmation back to application form:\n- Success status\n- Confirmation message\n- Processing status\n\nThis closes the webhook connection and confirms receipt to the applicant",
      "position": [
        784,
        1552
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ {\"success\": true, \"message\": \"Application received and processed\", \"candidateName\": $json.candidate.name, \"status\": $json.decision} }}"
      },
      "typeVersion": 1
    },
    {
      "id": "2611d5c3-fedf-4a2b-ac0b-21a42ad532eb",
      "name": "便签 - 完成",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        528,
        1088
      ],
      "parameters": {
        "color": 5,
        "width": 396,
        "height": 728,
        "content": "## 🎉 工作流完成!"
      },
      "typeVersion": 1
    },
    {
      "id": "80c5dc1a-90c0-4323-8fa9-a92811241fba",
      "name": "便签 - 设置说明",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -400,
        672
      ],
      "parameters": {
        "color": 4,
        "width": 398,
        "height": 412,
        "content": "## 🔧 所需配置"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1f088f30-607a-4797-9576-0dd517138820",
  "connections": {
    "Email - Rejection Notice": {
      "main": [
        [
          {
            "node": "Update Sheet - Rejection Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code - Process Evaluation": {
      "main": [
        [
          {
            "node": "IF - Check Score Threshold",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF - Check Score Threshold": {
      "main": [
        [
          {
            "node": "Email - Interview Invitation",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Email - Rejection Notice",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Email - Interview Invitation": {
      "main": [
        [
          {
            "node": "Google Calendar - Schedule Interview",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook - Receive Application": {
      "main": [
        [
          {
            "node": "Google Sheets - Store Application",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Sheet - Interview Status": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Sheet - Rejection Status": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI - AI Candidate Evaluation": {
      "main": [
        [
          {
            "node": "Code - Process Evaluation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets - Store Application": {
      "main": [
        [
          {
            "node": "OpenAI - AI Candidate Evaluation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Calendar - Schedule Interview": {
      "main": [
        [
          {
            "node": "Update Sheet - Interview Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

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

需要付费吗?

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

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

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

作者
Oneclick AI Squad

Oneclick AI Squad

@oneclick-ai

The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.

外部链接
在 n8n.io 查看

分享此工作流