智能简历提取器: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
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 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": "![替代文本](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-08-02+at+12.27.16%E2%80%AFPM.png \"可选标题文本\")"
      },
      "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": "![替代文本](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-08-02+at+12.39.47%E2%80%AFPM.png \"可选标题文本\")"
      },
      "typeVersion": 1
    },
    {
      "id": "6a1b49d5-3c95-4e20-9b39-404d4cbba960",
      "name": "### 需要帮助?",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1312,
        1632
      ],
      "parameters": {
        "width": 1020,
        "height": 340,
        "content": "![替代文本](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-08-02+at+12.40.23%E2%80%AFPM.png \"可选标题文本\")"
      },
      "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)可能需要您自行付费。

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

适合高级用户,包含 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 上查看 →

分享此工作流