Sistema de cribado y programación de entrevistas de candidatos con IA
Este es unHR, AI Summarizationflujo de automatización del dominio deautomatización que contiene 18 nodos.Utiliza principalmente nodos como If, Code, Webhook, EmailSend, GoogleSheets. cribado de candidatos y programación de entrevistas basado en AI (GPT de OpenAI y Google Workspace)
- •Punto final de HTTP Webhook (n8n generará automáticamente)
- •Credenciales de API de Google Sheets
- •Clave de API de OpenAI
Nodos utilizados (18)
Categoría
{
"id": "pHbBtdjeo2u8avrY",
"meta": {
"instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
"templateCredsSetupCompleted": true
},
"name": "AI Candidate Screening & Interview Scheduler",
"tags": [],
"nodes": [
{
"id": "6bb2e121-0353-43a0-96f3-1e881f9ea9e9",
"name": "Webhook - Recibir Solicitud",
"type": "n8n-nodes-base.webhook",
"notes": "📥 ENTRY POINT\n\nThis webhook receives job applications from candidates.\n\nExpected data:\n- Candidate Name\n- Email\n- Phone\n- Resume (URL or text)\n- Cover Letter\n- Years of Experience\n- Skills\n\nURL: https://your-n8n-instance.com/webhook/job-application",
"position": [
-1008,
1552
],
"webhookId": "job-application-webhook",
"parameters": {
"path": "job-application",
"options": {},
"responseMode": "responseNode"
},
"typeVersion": 1
},
{
"id": "8fa4ef36-d737-446c-a4aa-ca7eef8654dc",
"name": "Nota Adhesiva - Descripción del Flujo de Trabajo",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
576
],
"parameters": {
"color": 3,
"width": 350,
"height": 400,
"content": "## 📋 Workflow Overview\n\nThis workflow automates the complete recruitment process:\n\n1️⃣ Receive applications via webhook\n2️⃣ Store in database/spreadsheet\n3️⃣ AI evaluates candidate fit\n4️⃣ Score and rank candidates\n5️⃣ Send notifications\n6️⃣ Schedule interviews for qualified candidates\n\n**Role:** Automation Specialist\n**AI Used:** OpenAI GPT for evaluation"
},
"typeVersion": 1
},
{
"id": "a34130de-94c4-4760-8883-3b778afe6319",
"name": "Google Sheets - Almacenar Solicitud",
"type": "n8n-nodes-base.googleSheets",
"notes": "💾 DATA STORAGE\n\nStores all application data in Google Sheets for:\n- Easy tracking and management\n- Historical record keeping\n- Team collaboration\n- Backup of all applications\n\nAlternative: Can use Airtable, PostgreSQL, or MySQL instead",
"position": [
-784,
1552
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "=Applications"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "=34yuhedwqre"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4
},
{
"id": "47f948e2-6945-4b41-95fb-7ffc04d488af",
"name": "Nota Adhesiva - Información de Almacenamiento",
"type": "n8n-nodes-base.stickyNote",
"position": [
-848,
1136
],
"parameters": {
"color": 5,
"width": 220,
"height": 584,
"content": "## 📊 Database Storage\n\nApplications are stored with:\n- Timestamp\n- Contact information\n- Experience details\n- Skills list\n- Resume link\n- Current status\n\nThis creates an applicant tracking system (ATS)"
},
"typeVersion": 1
},
{
"id": "dc349940-72dc-49bf-b44f-68510c5e923a",
"name": "OpenAI - Evaluación de Candidatos por IA",
"type": "@n8n/n8n-nodes-langchain.openAi",
"notes": "🤖 AI EVALUATION ENGINE\n\nUses GPT-4 to:\n- Analyze candidate qualifications\n- Match skills against job requirements\n- Identify strengths and gaps\n- Provide objective scoring (0-100)\n- Generate hiring recommendation\n\nBenefits:\n- Consistent evaluation criteria\n- Unbiased initial screening\n- Faster processing\n- Detailed insights",
"position": [
-560,
1552
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "id",
"value": "=add your model"
},
"options": {
"temperature": 0.3
},
"messages": {
"values": [
{
"content": "=Your name is Rayan and you are an expert technical recruiter evaluating candidates for an Automation Specialist position.\n\nJob Requirements:\n- 3+ years of experience in automation\n- Strong skills in n8n, Make.com, or Zapier\n- Programming: Python, JavaScript\n- API integration experience\n- Workflow design expertise\n- Problem-solving abilities\n\nCandidate Information:\nName: {{ $json.body.name }}\nExperience: {{ $json.body.experience }} years\nSkills: {{ $json.body.skills }}\nResume Summary: {{ $json.body.resume }}\n\nEvaluate this candidate and provide:\n1. Overall Score (0-100)\n2. Strengths (3-5 points)\n3. Weaknesses (2-3 points)\n4. Recommendation (Strong Hire / Hire / Maybe / Reject)\n5. Key concerns or highlights\n\nFormat your response as JSON:\n{\n \"score\": 85,\n \"recommendation\": \"Hire\",\n \"strengths\": [\"...\"],\n \"weaknesses\": [\"...\"],\n \"summary\": \"...\"\n}"
}
]
}
},
"credentials": {
"openAiApi": {
"id": "CDQ16eImh6D4tY15",
"name": "OpenAi account 2 - test"
}
},
"typeVersion": 1
},
{
"id": "a99cf7ab-03db-4a7e-98fe-4a8025a03cd2",
"name": "Nota Adhesiva - Proceso de IA",
"type": "n8n-nodes-base.stickyNote",
"position": [
-608,
1136
],
"parameters": {
"color": 5,
"width": 204,
"height": 584,
"content": "## 🧠 AI Evaluation\n\nThe AI analyzes:\n✓ Experience level match\n✓ Technical skills alignment\n✓ Automation tool proficiency\n✓ Programming capabilities\n✓ Overall candidate fit\n\nOutput: Structured evaluation report"
},
"typeVersion": 1
},
{
"id": "2a7f8223-ee02-4c1a-90c4-9cda4ac86831",
"name": "Código - Procesar Evaluación",
"type": "n8n-nodes-base.code",
"notes": "⚙️ DATA PROCESSING\n\nThis node:\n- Parses AI evaluation response\n- Extracts structured data (score, recommendation)\n- Combines candidate + evaluation data\n- Determines next step (Interview or Reject)\n- Handles errors gracefully\n\nThreshold: Score ≥ 70 → Interview",
"position": [
-336,
1552
],
"parameters": {
"jsCode": "// Parse AI response and structure data\nconst aiResponse = $input.first().json.message.content;\nlet evaluation;\n\ntry {\n // Extract JSON from AI response\n const jsonMatch = aiResponse.match(/\\{[\\s\\S]*\\}/);\n evaluation = JSON.parse(jsonMatch[0]);\n} catch (error) {\n // Fallback if JSON parsing fails\n evaluation = {\n score: 50,\n recommendation: \"Needs Review\",\n strengths: [\"Unable to parse\"],\n weaknesses: [\"AI response format error\"],\n summary: aiResponse\n };\n}\n\n// Get original application data\nconst applicationData = $('Webhook - Receive Application').first().json.body;\n\n// Combine all data\nreturn {\n json: {\n candidate: {\n name: applicationData.name,\n email: applicationData.email,\n phone: applicationData.phone,\n experience: applicationData.experience,\n skills: applicationData.skills\n },\n evaluation: {\n score: evaluation.score,\n recommendation: evaluation.recommendation,\n strengths: evaluation.strengths,\n weaknesses: evaluation.weaknesses,\n summary: evaluation.summary,\n evaluatedAt: new Date().toISOString()\n },\n decision: evaluation.score >= 70 ? \"Interview\" : \"Reject\"\n }\n};"
},
"typeVersion": 2
},
{
"id": "890d9265-4b7c-4cee-8541-08ac6dd7832d",
"name": "IF - Verificar Umbral de Puntuación",
"type": "n8n-nodes-base.if",
"notes": "🔀 DECISION POINT\n\nRoutes candidates based on evaluation:\n\n✅ TRUE (Score ≥ 70):\n- Send interview invitation\n- Schedule meeting\n- Update status to 'Interview Scheduled'\n\n❌ FALSE (Score < 70):\n- Send rejection email\n- Update status to 'Rejected'\n- Archive application",
"position": [
-112,
1552
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.decision }}",
"value2": "Interview",
"operation": "equals"
}
]
}
},
"typeVersion": 1
},
{
"id": "d9d8619f-79bf-47d8-b0fd-7f7e9d1054e1",
"name": "Nota Adhesiva - Lógica de Decisión",
"type": "n8n-nodes-base.stickyNote",
"position": [
-368,
1216
],
"parameters": {
"color": 5,
"width": 380,
"height": 496,
"content": "## 🎯 Scoring Logic\n\nScore ≥ 70: Qualified for interview\nScore < 70: Not a fit\n\nThis threshold can be adjusted based on:\n- Role requirements\n- Application volume\n- Hiring urgency"
},
"typeVersion": 1
},
{
"id": "5ee3c07a-d3b2-4c73-aadc-54ef03bf7ec9",
"name": "Email - Invitación a Entrevista",
"type": "n8n-nodes-base.emailSend",
"notes": "✉️ INTERVIEW INVITATION\n\nSends personalized email to qualified candidates:\n- Congratulatory message\n- Evaluation highlights\n- Next steps information\n- Request for confirmation\n\nAlternative: Use SendGrid, Gmail, or Outlook node",
"position": [
112,
1456
],
"webhookId": "e0dcc54e-4b72-4a8f-af17-f5dd7843f753",
"parameters": {
"text": "=Dear {{ $json.candidate.name }},\n\nCongratulations! We were impressed with your application for the Automation Specialist position.\n\nEvaluation Summary:\n- Overall Score: {{ $json.evaluation.score }}/100\n- Recommendation: {{ $json.evaluation.recommendation }}\n\nStrengths:\n{{ $json.evaluation.strengths.join('\\n- ') }}\n\nWe would like to invite you for an interview. Our team will reach out shortly to schedule a convenient time.\n\nPlease reply to confirm your continued interest.\n\nBest regards,\nHR Team",
"options": {},
"subject": "Interview Invitation - Automation Specialist Position",
"toEmail": "={{ $json.candidate.email }}",
"fromEmail": "hr@company.com"
},
"credentials": {
"smtp": {
"id": "3QSx1pWoS0BZcK4c",
"name": "SMTP account"
}
},
"typeVersion": 2
},
{
"id": "695c0973-9c31-47a2-88ec-24b7989089b4",
"name": "Email - Notificación de Rechazo",
"type": "n8n-nodes-base.emailSend",
"notes": "✉️ REJECTION NOTICE\n\nSends professional rejection email:\n- Respectful and kind tone\n- Thanks candidate for interest\n- Encourages future applications\n- Maintains company reputation\n\nBest practice: Always send closure to candidates",
"position": [
336,
1648
],
"webhookId": "1c10023a-2b19-46de-a049-c4fb38cb13a0",
"parameters": {
"text": "=Dear {{ $json.candidate.name }},\n\nThank you for your interest in the Automation Specialist position at our company.\n\nAfter careful review of your application, we have decided to move forward with other candidates whose experience more closely matches our current requirements.\n\nWe appreciate the time you invested in your application and encourage you to apply for future opportunities that align with your skills.\n\nWe wish you the best in your job search.\n\nBest regards,\nHR Team",
"options": {},
"subject": "Application Update - Automation Specialist Position",
"toEmail": "={{ $json.candidate.email }}",
"fromEmail": "hr@company.com"
},
"credentials": {
"smtp": {
"id": "3QSx1pWoS0BZcK4c",
"name": "SMTP account"
}
},
"typeVersion": 2
},
{
"id": "37081a08-cac7-403e-a6a1-f67b00efd078",
"name": "Google Calendar - Programar Entrevista",
"type": "n8n-nodes-base.googleCalendar",
"notes": "📅 INTERVIEW SCHEDULING\n\nAutomatically creates calendar event:\n- Scheduled 3 days in advance\n- 1-hour duration\n- Includes candidate details\n- Adds evaluation summary\n- Invites candidate + hiring manager\n- Sends calendar invites\n\nAlternative: Use Calendly API integration",
"position": [
336,
1456
],
"parameters": {
"end": "={{ $now.plus(3, 'days').set({ hour: 11, minute: 0 }).toISO() }}",
"start": "={{ $now.plus(3, 'days').set({ hour: 10, minute: 0 }).toISO() }}",
"calendar": {
"__rl": true,
"mode": "id",
"value": "=9ikjnhy65trfdser4"
},
"additionalFields": {}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "6ldLmzzYtaqng4pw",
"name": "Google Calendar account - test"
}
},
"typeVersion": 1
},
{
"id": "56ed8c49-514c-47e2-a83e-e453ce7894ea",
"name": "Nota Adhesiva - Lógica de Email",
"type": "n8n-nodes-base.stickyNote",
"position": [
64,
1152
],
"parameters": {
"color": 5,
"width": 428,
"height": 656,
"content": "## 📧 Email Notifications\n\nTwo paths:\n\n1️⃣ HIGH SCORE:\n- Interview invitation\n- Positive feedback\n- Schedule interview\n\n2️⃣ LOW SCORE:\n- Professional rejection\n- Kind closure\n- Future encouragement"
},
"typeVersion": 1
},
{
"id": "56eeb778-14d9-41db-b9a6-279d8c4d9027",
"name": "Actualizar Hoja - Estado de Entrevista",
"type": "n8n-nodes-base.googleSheets",
"notes": "📝 STATUS UPDATE - INTERVIEW\n\nUpdates Google Sheet with:\n- Status: 'Interview Scheduled'\n- AI evaluation score\n- Recommendation level\n- Interview date\n\nThis keeps the ATS current for HR team tracking",
"position": [
560,
1456
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": "Applications",
"documentId": {
"__rl": true,
"mode": "id",
"value": "=koi8uhbvfgtyuj"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4
},
{
"id": "7e36df56-3674-4f34-af49-e3809b946f4b",
"name": "Actualizar Hoja - Estado de Rechazo",
"type": "n8n-nodes-base.googleSheets",
"notes": "📝 STATUS UPDATE - REJECTION\n\nUpdates Google Sheet with:\n- Status: 'Rejected'\n- AI evaluation score\n- Recommendation (for records)\n- Rejection date\n\nMaintains complete audit trail",
"position": [
560,
1648
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "id",
"value": "=Applications"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "=hgt567ikmnhjuio9"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4
},
{
"id": "140accea-6390-4317-ae76-cfad1da6b1ee",
"name": "Responder a Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"notes": "📤 WEBHOOK RESPONSE\n\nSends confirmation back to application form:\n- Success status\n- Confirmation message\n- Processing status\n\nThis closes the webhook connection and confirms receipt to the applicant",
"position": [
784,
1552
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={{ {\"success\": true, \"message\": \"Application received and processed\", \"candidateName\": $json.candidate.name, \"status\": $json.decision} }}"
},
"typeVersion": 1
},
{
"id": "2611d5c3-fedf-4a2b-ac0b-21a42ad532eb",
"name": "Nota Adhesiva - Finalización",
"type": "n8n-nodes-base.stickyNote",
"position": [
528,
1088
],
"parameters": {
"color": 5,
"width": 396,
"height": 728,
"content": "## 🎉 Workflow Complete!\n\nFinal steps:\n1. Status updated in database\n2. Emails sent to candidate\n3. Calendar scheduled (if interview)\n4. Response sent to form\n\n**Metrics to Track:**\n- Applications received\n- Average AI score\n- Interview rate\n- Time to process"
},
"typeVersion": 1
},
{
"id": "80c5dc1a-90c0-4323-8fa9-a92811241fba",
"name": "Nota Adhesiva - Instrucciones de Configuración",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
672
],
"parameters": {
"color": 4,
"width": 398,
"height": 412,
"content": "## 🔧 Configuration Required\n\n**Environment Variables:**\n- GOOGLE_SHEET_ID: Your Google Sheet ID\n\n**Credentials Needed:**\n1. Google Sheets OAuth2\n2. OpenAI API Key\n3. SMTP Email Account\n4. Google Calendar OAuth2\n\n**Customize:**\n- Job requirements in AI prompt\n- Score threshold (currently 70)\n- Email templates\n- Interview scheduling time"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "1f088f30-607a-4797-9576-0dd517138820",
"connections": {
"695c0973-9c31-47a2-88ec-24b7989089b4": {
"main": [
[
{
"node": "7e36df56-3674-4f34-af49-e3809b946f4b",
"type": "main",
"index": 0
}
]
]
},
"2a7f8223-ee02-4c1a-90c4-9cda4ac86831": {
"main": [
[
{
"node": "890d9265-4b7c-4cee-8541-08ac6dd7832d",
"type": "main",
"index": 0
}
]
]
},
"890d9265-4b7c-4cee-8541-08ac6dd7832d": {
"main": [
[
{
"node": "5ee3c07a-d3b2-4c73-aadc-54ef03bf7ec9",
"type": "main",
"index": 0
}
],
[
{
"node": "695c0973-9c31-47a2-88ec-24b7989089b4",
"type": "main",
"index": 0
}
]
]
},
"5ee3c07a-d3b2-4c73-aadc-54ef03bf7ec9": {
"main": [
[
{
"node": "37081a08-cac7-403e-a6a1-f67b00efd078",
"type": "main",
"index": 0
}
]
]
},
"6bb2e121-0353-43a0-96f3-1e881f9ea9e9": {
"main": [
[
{
"node": "a34130de-94c4-4760-8883-3b778afe6319",
"type": "main",
"index": 0
}
]
]
},
"56eeb778-14d9-41db-b9a6-279d8c4d9027": {
"main": [
[
{
"node": "140accea-6390-4317-ae76-cfad1da6b1ee",
"type": "main",
"index": 0
}
]
]
},
"7e36df56-3674-4f34-af49-e3809b946f4b": {
"main": [
[
{
"node": "140accea-6390-4317-ae76-cfad1da6b1ee",
"type": "main",
"index": 0
}
]
]
},
"dc349940-72dc-49bf-b44f-68510c5e923a": {
"main": [
[
{
"node": "2a7f8223-ee02-4c1a-90c4-9cda4ac86831",
"type": "main",
"index": 0
}
]
]
},
"a34130de-94c4-4760-8883-3b778afe6319": {
"main": [
[
{
"node": "dc349940-72dc-49bf-b44f-68510c5e923a",
"type": "main",
"index": 0
}
]
]
},
"37081a08-cac7-403e-a6a1-f67b00efd078": {
"main": [
[
{
"node": "56eeb778-14d9-41db-b9a6-279d8c4d9027",
"type": "main",
"index": 0
}
]
]
}
}
}¿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
Oneclick AI Squad
@oneclick-aiThe AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.
Compartir este flujo de trabajo