智能简历提取器:Google Drive到Sheet + 招聘人员Slack更新
高级
这是一个HR、AI Summarization领域的自动化工作流,包含 19 个节点。主要使用 Code、Slack、Filter、GoogleDrive、GoogleSheets 等节点。 AI驱动简历提取器:GPT-4处理Google Drive到Sheet,Slack通知招聘人员
前置要求
- •Slack Bot Token 或 Webhook URL
- •Google Drive API 凭证
- •Google Sheets API 凭证
- •OpenAI API Key
使用的节点 (19 个)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "l2jNtECwrtbXGgzk",
"meta": {
"instanceId": "4a2e6764ba7a6bc9890d9225f4b21d570ce88fc9bd57549c89057fcee58fed0f",
"templateId": "5453",
"templateCredsSetupCompleted": true
},
"name": "智能简历提取器:Google Drive到Sheet + 招聘人员Slack更新",
"tags": [
{
"id": "OcQfoQT2ejtrpKfF",
"name": "HR Workflow",
"createdAt": "2025-07-30T05:57:04.113Z",
"updatedAt": "2025-07-30T05:57:04.113Z"
}
],
"nodes": [
{
"id": "2adb6bb1-927a-41f3-ab79-8fb4a5e7e348",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
1680
],
"parameters": {
"width": 604,
"height": 528,
"content": "## 1. 新简历上传/编辑时触发工作流(每5分钟)"
},
"typeVersion": 1
},
{
"id": "b11ef3a7-c2d9-4fb0-b50d-cdf94430de7b",
"name": "json解析器",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
240,
2096
],
"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": "ab8a9c8d-02a9-4ea2-875d-e797398c1f18",
"name": "gpt4-1模型",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
96,
2096
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "PPSwAKeLQYgAPobT",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "71ea426d-de83-47ec-9a91-8203197f0767",
"name": "简历分析器智能体",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
80,
1904
],
"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": "ee3f6000-fece-4c7c-9793-f11087feb23f",
"name": "## 试试看!",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2528,
1392
],
"parameters": {
"width": 1312,
"height": 1568,
"content": "# 简历提取器:Google Drive到Sheet + 招聘人员Slack更新"
},
"typeVersion": 1
},
{
"id": "7fd3ae9f-c844-49c7-8e06-62361a6b38ed",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
2240
],
"parameters": {
"width": 1020,
"height": 340,
"content": ""
},
"typeVersion": 1
},
{
"id": "2cb3c62f-109a-4f60-a2eb-e1511fa403c5",
"name": "转换输出",
"type": "n8n-nodes-base.code",
"position": [
848,
1920
],
"parameters": {
"jsCode": "const profile = $input.first().json.output\n\n// Get most recent job\nconst work = profile.work_experience || [];\nconst latest = work.length > 0 ? work[0] : {};\n\nfunction formatDate(dateStr) {\n const date = new Date(dateStr);\n return isNaN(date) ? dateStr : `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}`;\n}\n\nfunction getExperienceYears(experiences) {\n if (experiences.length === 0) return '';\n const startDates = experiences.map(e => new Date(e.start_date)).filter(d => !isNaN(d));\n const endDates = experiences.map(e => new Date(e.end_date === 'Present' ? new Date() : e.end_date)).filter(d => !isNaN(d));\n if (startDates.length === 0 || endDates.length === 0) return '';\n const start = new Date(Math.min(...startDates));\n const end = new Date(Math.max(...endDates));\n const diffYears = (end - start) / (1000 * 60 * 60 * 24 * 365);\n return `${Math.floor(diffYears)} years`;\n}\n\nfunction formatEducation(edus) {\n if (!edus || edus.length === 0) return '';\n return edus.map(e => {\n const start = new Date(e.start_year);\n const end = new Date(e.end_year);\n const startYear = isNaN(start) ? '' : start.getFullYear();\n const endYear = isNaN(end) ? '' : end.getFullYear();\n const duration = (startYear && endYear) ? `(${startYear}–${endYear})` : '';\n return `${e.degree} of ${e.field_of_study} at ${e.institution} ${duration}`;\n }).join(' | ');\n}\n\nreturn [\n {\n json: {\n FullName: profile.full_name,\n JobTitle: profile.job_title,\n Email: profile.contact.email.toLowerCase(),\n Phone: profile.contact.phone,\n Location: profile.contact.address,\n LinkedIn: profile.contact.linkedin,\n Education: formatEducation(profile.education),\n Summary: profile.summary,\n MostRecentCompany: latest.company || '',\n MostRecentPosition: latest.position || '',\n StartDate: formatDate(latest.start_date || ''),\n EndDate: formatDate(latest.end_date || ''),\n Skills: (profile.skills?.technical_skills || []).slice(0, 3).join(', '),\n Experience: getExperienceYears(work), \n ProfileUrl: $('Get profile detail').first().json.webContentLink\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "5936caac-99d3-4f0f-8a12-c37986512879",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
1696
],
"parameters": {
"width": 364,
"height": 512,
"content": "## 2. 提取档案信息"
},
"typeVersion": 1
},
{
"id": "5279248a-4781-4886-bc50-d8ec4f7cd643",
"name": "便签5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
1696
],
"parameters": {
"width": 652,
"height": 512,
"content": "## 3. 档案分析器"
},
"typeVersion": 1
},
{
"id": "a7a8ec4a-dbd9-4c35-ab95-867f62e59605",
"name": "新简历上传到Drive文件夹",
"type": "n8n-nodes-base.googleDriveTrigger",
"position": [
-960,
1808
],
"parameters": {
"event": "fileCreated",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyX",
"unit": "minutes",
"value": 5
}
]
},
"triggerOn": "specificFolder",
"folderToWatch": {
"__rl": true,
"mode": "list",
"value": "1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7",
"cachedResultUrl": "https://drive.google.com/drive/folders/1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7",
"cachedResultName": "cv"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "fC471es5gk5Mm900",
"name": "Google Drive account"
}
},
"typeVersion": 1
},
{
"id": "b1fa9e0b-0316-4406-bf61-90b7708a6844",
"name": "获取档案详情",
"type": "n8n-nodes-base.googleDrive",
"position": [
-464,
1904
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "url",
"value": "={{ $json.webViewLink }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "fC471es5gk5Mm900",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "406d30ab-65c9-4146-b0f0-b08e37bd448c",
"name": "在表格中追加或更新行",
"type": "n8n-nodes-base.googleSheets",
"position": [
1072,
1824
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "FullName",
"type": "string",
"display": true,
"required": false,
"displayName": "FullName",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "JobTitle",
"type": "string",
"display": true,
"required": false,
"displayName": "JobTitle",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Location",
"type": "string",
"display": true,
"required": false,
"displayName": "Location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn",
"type": "string",
"display": true,
"required": false,
"displayName": "LinkedIn",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Education",
"type": "string",
"display": true,
"required": false,
"displayName": "Education",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"type": "string",
"display": true,
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "MostRecentCompany",
"type": "string",
"display": true,
"required": false,
"displayName": "MostRecentCompany",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "MostRecentPosition",
"type": "string",
"display": true,
"required": false,
"displayName": "MostRecentPosition",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "StartDate",
"type": "string",
"display": true,
"required": false,
"displayName": "StartDate",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "EndDate",
"type": "string",
"display": true,
"required": false,
"displayName": "EndDate",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Skills",
"type": "string",
"display": true,
"required": false,
"displayName": "Skills",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Experience",
"type": "string",
"display": true,
"required": false,
"displayName": "Experience",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "ProfileUrl",
"type": "string",
"display": true,
"required": false,
"displayName": "ProfileUrl",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"Email"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1snHIaidALBJbA_bAxm_SQQLG8vyZ9ZkWFaEOOo3PL6o/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1snHIaidALBJbA_bAxm_SQQLG8vyZ9ZkWFaEOOo3PL6o",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1snHIaidALBJbA_bAxm_SQQLG8vyZ9ZkWFaEOOo3PL6o/edit?usp=drivesdk",
"cachedResultName": "Processed Candidates"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "L670Nly6gZGo71br",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.6
},
{
"id": "9764a794-6d8b-4252-bc11-03fc0a046f4e",
"name": "现有简历已更新",
"type": "n8n-nodes-base.googleDriveTrigger",
"position": [
-960,
2032
],
"parameters": {
"event": "fileUpdated",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyX",
"unit": "minutes",
"value": 5
}
]
},
"triggerOn": "specificFolder",
"folderToWatch": {
"__rl": true,
"mode": "list",
"value": "1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7",
"cachedResultUrl": "https://drive.google.com/drive/folders/1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7",
"cachedResultName": "cv"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "fC471es5gk5Mm900",
"name": "Google Drive account"
}
},
"typeVersion": 1
},
{
"id": "2b27dcdd-d680-4fa7-957b-88f4962633bd",
"name": "验证档案邮箱",
"type": "n8n-nodes-base.filter",
"position": [
464,
1904
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "d03f5a71-8e0c-4196-a6e1-5d5ec7a86894",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.output.contact.email }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "6d0c5fdc-39ec-4258-9532-b0d046288689",
"name": "提取档案信息",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-240,
1904
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "b23cfccb-2b21-4a27-9f22-5153ddc533a5",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
672,
1696
],
"parameters": {
"width": 620,
"height": 512,
"content": "## 4. 在Google Sheet中插入或更新记录"
},
"typeVersion": 1
},
{
"id": "33016c65-9f8d-4bda-9c33-3e71d47873c5",
"name": "通知招聘团队",
"type": "n8n-nodes-base.slack",
"position": [
1072,
2016
],
"webhookId": "3e16b79d-e39e-461f-8718-510eab00b7ea",
"parameters": {
"text": "={{ $json.FullName }} profile has been processed and recorded in Google Drive!",
"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": "6967ec7b-270b-4902-ac58-ff1512a377a7",
"name": "便签4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1312,
2016
],
"parameters": {
"width": 1020,
"height": 228,
"content": ""
},
"typeVersion": 1
},
{
"id": "6a1b49d5-3c95-4e20-9b39-404d4cbba960",
"name": "### 需要帮助?",
"type": "n8n-nodes-base.stickyNote",
"position": [
1312,
1632
],
"parameters": {
"width": 1020,
"height": 340,
"content": ""
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "e3fa9819-0d17-4a7f-a5b8-59a016d9f6a2",
"connections": {
"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
}
]
]
},
"Transform output": {
"main": [
[
{
"node": "Append or update row in sheet",
"type": "main",
"index": 0
},
{
"node": "Let the hiring team know",
"type": "main",
"index": 0
}
]
]
},
"Get profile detail": {
"main": [
[
{
"node": "Extract profile information",
"type": "main",
"index": 0
}
]
]
},
"Verify profile email": {
"main": [
[
{
"node": "Transform output",
"type": "main",
"index": 0
}
]
]
},
"Profile Analyzer Agent": {
"main": [
[
{
"node": "Verify profile email",
"type": "main",
"index": 0
}
]
]
},
"Existing profile updated": {
"main": [
[
{
"node": "Get profile detail",
"type": "main",
"index": 0
}
]
]
},
"Extract profile information": {
"main": [
[
{
"node": "Profile Analyzer Agent",
"type": "main",
"index": 0
}
]
]
},
"New profile uploaded to drive folder": {
"main": [
[
{
"node": "Get profile detail",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
这是一个高级难度的工作流,适用于HR、AI Summarization等场景。适合高级用户,包含 16+ 个节点的复杂工作流
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
TalentFlow AI - 批量简历筛选与职位描述匹配
使用GPT-4为HR团队进行批量简历筛选与职位描述匹配
If
Code
Merge
+12
30 节点Trung Tran
HR
HireMind – AI驱动的简历智能处理流程
HR AI简历筛选与评估:GPT-4和Google Workspace
If
Code
Slack
+10
26 节点Trung Tran
HR
自动化差旅费用报销工作流
使用GPT-4.1-mini从差旅收据中提取数据,结合Google Sheets和邮件通知
Code
Email Send
Form Trigger
+7
20 节点Trung Tran
Invoice Processing
智能面试助手:基于简历、职位描述和轮次的定制问题
基于简历、职位描述和轮次使用GPT-4生成定制面试问题
Set
Code
Merge
+10
26 节点Trung Tran
HR
构建用于Slack候选人评估的AI驱动聊天机器人
AI简历分析与候选人评估:Slack和Google表格集成
If
Code
Slack
+12
29 节点Trung Tran
AI Chatbot
Decodo爬虫API工作流模板(n8n自动化亚马逊图书购买报告)
使用Decodo爬虫和GPT 4.1 mini提取亚马逊图书数据并生成购买报告
Set
Code
Slack
+7
22 节点Trung Tran
AI Summarization
工作流信息
难度等级
高级
节点数量19
分类2
节点类型11
作者
Trung Tran
@trungtranHelps small and medium businesses grow with intelligent automation and practical AI tools, no heavy tech team needed.
外部链接
在 n8n.io 上查看 →
分享此工作流