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 – Bulk Resume Screening with JD Matching",
  "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 upload multiple resumes & select the position (job role)"
      },
      "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 evaluate candidate matching based on profile & job description\n- Evaluate candidate profile against the selected position job description (download from google drive)\n- Output follow structured template (defined by JSON)"
      },
      "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": "포지션 직무 설명 가져오기",
      "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. Candidate profiles analyzer\n- Upload all candidate profile to Google Drive folder for later processing\n- Extract each candidate information from PDF file\n- Transform each candidate information to expected JSON format for later use (send message, add to evaluation sheet)"
      },
      "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. Download selected job description\n- Get position name & job description URL from google sheet based on candidate application form\n- Download job description file from Google Drive\n- Extract data from job description PDF file to be used in the next steps"
      },
      "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. Update evaluation result to target platform\n- Candidate with overall fit score under 8 will be considered as unqualified, config in the \"Candidate qualified\" node\n- Send message to Slack, Email\n- Add new rows in CV evaluation tracking sheet (Google Drive), you need config \"Update evaluation sheet\" node with your own URL (empty sheet, column header and rows will be auto-populated)"
      },
      "typeVersion": 1
    },
    {
      "id": "1e3e7898-f264-4446-b2a0-c0d6445a6637",
      "name": "HR 전문가 에이전트",
      "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": "프로필 분석기 에이전트",
      "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 드라이브에 업로드",
      "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 – Bulk Resume Screening with JD Matching\n\n- Automatically extract, evaluate, and shortlist multiple resumes against a selected job description using GPT-4. This smart, scalable n8n workflow helps HR/TA teams streamline hiring decisions while keeping results structured, auditable, and easy to share.\n\n---\n\n## 👤 Who’s it for\n\nThis workflow is designed for:\n- HR or Talent Acquisition (TA) teams handling **multiple candidates** per role\n- Recruiters who want **AI-assisted resume screening** to save time and reduce bias\n- Organizations that want to **automatically log evaluations** and keep stakeholders updated in real-time via Slack or Sheets\n\n---\n\n## ⚙️ How it works / What it does\n\n1. HR/TA uploads multiple candidate resumes and selects a job role\n2. Each resume is:\n   - Uploaded to Google Drive\n   - Parsed with GPT-4 to extract structured profile data\n3. The job description for the selected role is:\n   - Retrieved from Google Sheets\n   - Downloaded from Drive and parsed\n4. The profile + JD are sent to an AI agent to generate:\n   - Fit score\n   - Strengths & gaps\n   - Final recommendation\n5. Results are:\n   - Appended to the evaluation tracking sheet\n   - Optionally shared with the hiring team on Slack\n   - Used to trigger emails to qualified or unqualified candidates\n\n---\n\n## 🛠️ How to set up\n\n1. **Clone or import the workflow** into your n8n instance\n2. **Connect your integrations**:\n   - Google Sheets (positions & evaluation form)\n   - Google Drive (CV & JD folders)\n   - OpenAI API (GPT-4)\n   - Slack (for notifications)\n   - (Optional) SendGrid or SMTP for email notifications\n3. **Update Google Sheets structure**:\n   - `Positions` sheet: maps Job Role → JD file link\n   - `Evaluation form`: stores evaluation results\n4. **Prepare Drive folders**:\n   - `/cv` folder for uploaded resumes\n   - `/jd` folder for job description PDFs\n\n---\n\n## 📋 Requirements\n\n- n8n (hosted or self-hosted)\n- OpenAI GPT-4 account (used in Profile & JD evaluator agents)\n- Google Drive + Google Sheets access\n- (Optional) Slack workspace + bot token\n- (Optional) SendGrid or email credentials for candidate follow-up\n\n---\n\n## 🎨 How to customize the workflow\n\n- Change the **fit score threshold** in the `Candidate qualified?` node\n- Edit Slack message content/formatting to match your company tone\n- Add additional candidate metadata to Sheets or Slack messages\n- Use a webhook trigger to integrate with your ATS or job board\n- Swap GPT-4 with Claude or Gemini if you prefer other AI services\n- Expand to include multi-position batch screening logic\n\n---\n\nHappy Hiring! 🚀  \n_Automated with love using [n8n](https://n8n.io)_"
      },
      "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 \"Optional title text\")"
      },
      "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 \"Sample evaluation sheet data\")"
      },
      "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 \"Optional title text\")"
      },
      "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": {
    "99d34017-e9b7-4802-8f69-9b77a90ec9f2": {
      "main": [
        [
          {
            "node": "8b7ae83f-27ac-4ecc-8180-fd46ce375cc2",
            "type": "main",
            "index": 0
          },
          {
            "node": "ff46db6c-5f77-4c45-b0a2-d8997760f363",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3b30fd6b-489a-4050-8ff0-74d3e257b477": {
      "main": [
        [
          {
            "node": "1e3e7898-f264-4446-b2a0-c0d6445a6637",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9067e3d6-34a4-4c04-a785-a929aa32b912": {
      "main": [
        [
          {
            "node": "3b30fd6b-489a-4050-8ff0-74d3e257b477",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1cfcfbec-2206-4d24-985c-5a7307f045a8": {
      "main": [
        [
          {
            "node": "e637352c-bc2c-4c50-a217-f7072c4515a6",
            "type": "main",
            "index": 0
          },
          {
            "node": "df5ab265-1b74-4f89-9d01-db9b4d5e26f2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4e80f14b-b866-4966-ad8b-b92276dfc676": {
      "ai_outputParser": [
        [
          {
            "node": "8e4f9f63-86ac-43f3-a535-4c49b4ea3863",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "8a0d545c-b28d-4a0b-ba77-d3533597d155": {
      "ai_languageModel": [
        [
          {
            "node": "8e4f9f63-86ac-43f3-a535-4c49b4ea3863",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "02ccf47d-e039-477c-9028-7ccf08f7b58f": {
      "main": [
        [
          {
            "node": "bffa78db-6f40-488f-a4ef-fce685acc8cc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a9f1c1b2-b75b-49c8-84e2-e3b328824c1a": {
      "ai_outputParser": [
        [
          {
            "node": "1e3e7898-f264-4446-b2a0-c0d6445a6637",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "ff46db6c-5f77-4c45-b0a2-d8997760f363": {
      "main": [
        [
          {
            "node": "8e4f9f63-86ac-43f3-a535-4c49b4ea3863",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "291e6b3e-0a21-459c-9340-291effc1d941": {
      "main": [
        [
          {
            "node": "02ccf47d-e039-477c-9028-7ccf08f7b58f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1e3e7898-f264-4446-b2a0-c0d6445a6637": {
      "main": [
        [
          {
            "node": "1cfcfbec-2206-4d24-985c-5a7307f045a8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bc0cc422-0789-466f-a485-9615bea31687": {
      "ai_languageModel": [
        [
          {
            "node": "1e3e7898-f264-4446-b2a0-c0d6445a6637",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "31815a99-970e-45dd-9eac-19b04fe6afbe": {
      "main": [
        [
          {
            "node": "99d34017-e9b7-4802-8f69-9b77a90ec9f2",
            "type": "main",
            "index": 0
          },
          {
            "node": "291e6b3e-0a21-459c-9340-291effc1d941",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e6ce2613-5dbc-4005-a939-982af7e75d3f": {
      "main": [
        [
          {
            "node": "9067e3d6-34a4-4c04-a785-a929aa32b912",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "df5ab265-1b74-4f89-9d01-db9b4d5e26f2": {
      "main": [
        [
          {
            "node": "46086f32-5a6c-4f3e-9539-34ac476283b7",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "cd0c42ec-c281-4132-a6c0-009cd92f7779",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8e4f9f63-86ac-43f3-a535-4c49b4ea3863": {
      "main": [
        [
          {
            "node": "e6ce2613-5dbc-4005-a939-982af7e75d3f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8b7ae83f-27ac-4ecc-8180-fd46ce375cc2": {
      "main": [
        []
      ]
    },
    "bffa78db-6f40-488f-a4ef-fce685acc8cc": {
      "main": [
        [
          {
            "node": "9067e3d6-34a4-4c04-a785-a929aa32b912",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "e637352c-bc2c-4c50-a217-f7072c4515a6": {
      "main": [
        []
      ]
    },
    "cd0c42ec-c281-4132-a6c0-009cd92f7779": {
      "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에서 보기

이 워크플로우 공유

카테고리

카테고리: 34