TalentFlow AI - Selección masiva de currículums y emparejamiento con descripciones de puestos
Este es unHR, AI Summarizationflujo de automatización del dominio deautomatización que contiene 30 nodos.Utiliza principalmente nodos como If, Code, Merge, Slack, Filter. cribado masivo de CVs y emparejamiento con descripciones de trabajos para el equipo de HR utilizando GPT-4
- •Bot Token de Slack o URL de Webhook
- •Credenciales de API de Google Drive
- •Credenciales de API de Google Sheets
- •Clave de API de OpenAI
Nodos utilizados (30)
Categoría
{
"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": "Nota adhesiva 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": "Nota adhesiva 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": "Formulario de solicitud",
"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": "Extraer perfil",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-192,
2064
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "4e80f14b-b866-4966-ad8b-b92276dfc676",
"name": "json parser",
"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": "modelo 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": "Obtener descripción del puesto",
"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": "Descargar archivo",
"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": "Extraer descripción del trabajo",
"type": "n8n-nodes-base.extractFromFile",
"position": [
112,
2592
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "ec4ff009-360f-4ff6-943b-3cf87a6b87e5",
"name": "Nota adhesiva",
"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": "Nota adhesiva 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": "Nota adhesiva 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": "Agente Experto en RRHH",
"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": "Agente Analizador de Perfiles",
"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": "Actualizar hoja de evaluación",
"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": "Mapear columnas",
"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": "Subir a Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
-80,
1808
],
"parameters": {
"name": "=cv-{{ $now.toFormat(\"yyyyLLdd-HHmmss\") }}-{{$binary.data.fileName}}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive",
"cachedResultUrl": "https://drive.google.com/drive/my-drive",
"cachedResultName": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "url",
"value": "https://drive.google.com/drive/u/0/folders/1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "fC471es5gk5Mm900",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "bc0cc422-0789-466f-a485-9615bea31687",
"name": "modelo 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 parser 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": "Nota adhesiva 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": "Nota adhesiva 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-352,
2800
],
"parameters": {
"width": 640,
"height": 128,
"content": ""
},
"typeVersion": 1
},
{
"id": "ea2175ea-cc01-48d7-8e2f-604ec2673e94",
"name": "Nota adhesiva 8",
"type": "n8n-nodes-base.stickyNote",
"position": [
1792,
2736
],
"parameters": {
"width": 960,
"height": 512,
"content": ""
},
"typeVersion": 1
},
{
"id": "cd0c42ec-c281-4132-a6c0-009cd92f7779",
"name": "Enviar correo al candidato con el resultado",
"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": "Enviar mensaje vía Slack al equipo de contratación",
"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": "¿Candidato calificado?",
"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": "Código",
"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": "Combinar",
"type": "n8n-nodes-base.merge",
"position": [
768,
2272
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "787c7622-3f48-4b73-83c1-5eee7f8c3c4a",
"name": "Nota adhesiva 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
2048
],
"parameters": {
"width": 556,
"height": 580,
"content": ""
},
"typeVersion": 1
},
{
"id": "3b30fd6b-489a-4050-8ff0-74d3e257b477",
"name": "Código 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": "Eliminar CV con datos erróneos",
"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": [
[]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado - Recursos Humanos, Resumen de IA
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Trung Tran
@trungtranHelps small and medium businesses grow with intelligent automation and practical AI tools, no heavy tech team needed.
Compartir este flujo de trabajo