Automatisierung der Kandidatenbewertung mit GPT-4-Bewertung und Gmail-Benachrichtigung
Fortgeschritten
Dies ist ein HR, AI Summarization-Bereich Automatisierungsworkflow mit 12 Nodes. Hauptsächlich werden If, Set, Code, Gmail, Webhook und andere Nodes verwendet. Kandidatenbewertung mit GPT-4-Bewertung und Gmail-Benachrichtigungen automatisieren
Voraussetzungen
- •Google-Konto + Gmail API-Anmeldedaten
- •HTTP Webhook-Endpunkt (wird von n8n automatisch generiert)
- •Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
Verwendete Nodes (12)
Kategorie
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
"nodes": [
{
"id": "1",
"name": "Lebenslauf-Einreichung Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
240,
300
],
"parameters": {
"path": "cv-received",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 1
},
{
"id": "2",
"name": "Notizzettel",
"type": "n8n-nodes-base.stickyNote",
"position": [
140,
180
],
"parameters": {
"width": 240,
"height": 160,
"content": "## Recruitment AI Config\n\n⚙️ **Customize scoring:**\n- Technical skills weights\n- Experience requirements\n- Education priorities\n- Cultural fit criteria"
},
"typeVersion": 1
},
{
"id": "3",
"name": "Stellenanforderungen",
"type": "n8n-nodes-base.set",
"position": [
440,
300
],
"parameters": {
"values": {
"number": [
{
"name": "minExperience",
"value": 5
},
{
"name": "passingScore",
"value": 75
}
],
"string": [
{
"name": "requiredSkills",
"value": "JavaScript,React,Node.js,Python"
}
]
}
},
"typeVersion": 1
},
{
"id": "4",
"name": "Lebenslauf mit KI analysieren",
"type": "n8n-nodes-base.httpRequest",
"position": [
640,
300
],
"parameters": {
"url": "https://api.openai.com/v1/chat/completions",
"body": {
"model": "gpt-4",
"messages": [
{
"role": "system",
"content": "You are a CV parsing expert. Extract key information from CVs and return structured JSON data."
},
{
"role": "user",
"content": "Parse this CV and extract: name, email, phone, skills, experience_years, education, previous_roles. CV content: {{ $json.cv_content }}"
}
],
"response_format": {
"type": "json_object"
}
},
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{ $credentials.openai.apiKey }}"
}
},
"typeVersion": 1
},
{
"id": "5",
"name": "Kandidat bewerten",
"type": "n8n-nodes-base.code",
"position": [
840,
300
],
"parameters": {
"jsCode": "// Intelligent candidate scoring algorithm\nconst candidate = $json.choices[0].message.content;\nconst requirements = $node['Job Requirements'].json;\nconst candidateData = JSON.parse(candidate);\n\nlet totalScore = 0;\n\n// Skills matching (40% weight)\nconst requiredSkills = requirements.requiredSkills.split(',');\nconst candidateSkills = candidateData.skills || [];\nconst skillsMatch = requiredSkills.filter(skill => \n candidateSkills.some(cSkill => cSkill.toLowerCase().includes(skill.toLowerCase()))\n);\nconst skillsScore = (skillsMatch.length / requiredSkills.length) * 40;\ntotalScore += skillsScore;\n\n// Experience scoring (30% weight)\nconst experienceYears = candidateData.experience_years || 0;\nlet experienceScore = 0;\nif (experienceYears >= requirements.minExperience) {\n experienceScore = 30;\n} else if (experienceYears >= requirements.minExperience * 0.8) {\n experienceScore = 25;\n} else if (experienceYears >= requirements.minExperience * 0.6) {\n experienceScore = 20;\n} else {\n experienceScore = 10;\n}\ntotalScore += experienceScore;\n\n// Education scoring (20% weight)\nconst education = candidateData.education || '';\nlet educationScore = 0;\nif (education.toLowerCase().includes('master') || education.toLowerCase().includes('phd')) {\n educationScore = 20;\n} else if (education.toLowerCase().includes('bachelor') || education.toLowerCase().includes('degree')) {\n educationScore = 15;\n} else {\n educationScore = 10;\n}\ntotalScore += educationScore;\n\n// Role relevance (10% weight)\nconst previousRoles = candidateData.previous_roles || [];\nconst roleRelevance = previousRoles.some(role => \n role.toLowerCase().includes('engineer') || role.toLowerCase().includes('developer')\n) ? 10 : 5;\ntotalScore += roleRelevance;\n\n// Determine recommendation\nlet recommendation = 'reject';\nlet priority = 'low';\n\nif (totalScore >= 85) {\n recommendation = 'hire';\n priority = 'high';\n} else if (totalScore >= requirements.passingScore) {\n recommendation = 'interview';\n priority = 'medium';\n} else if (totalScore >= 60) {\n recommendation = 'phone_screen';\n priority = 'low';\n}\n\nreturn {\n candidateData,\n scoring: {\n skillsScore,\n experienceScore,\n educationScore,\n roleRelevance,\n totalScore: Math.round(totalScore),\n recommendation,\n priority\n },\n jobTitle: requirements.jobTitle,\n evaluatedAt: new Date().toISOString()\n};"
},
"typeVersion": 1
},
{
"id": "6",
"name": "Prüfen ob Top-Kandidat",
"type": "n8n-nodes-base.if",
"position": [
1040,
200
],
"parameters": {
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.scoring.recommendation }}",
"rightValue": "hire"
}
]
}
},
"typeVersion": 2
},
{
"id": "7",
"name": "HR-Team benachrichtigen",
"type": "n8n-nodes-base.gmail",
"position": [
1240,
100
],
"parameters": {
"sendTo": "={{ $node['Job Requirements'].json.hrEmail }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; background-color: #f8f9fa; }\n .container { max-width: 600px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; }\n .top-candidate { background: linear-gradient(45deg, #28a745, #20c997); color: white; padding: 20px; text-align: center; margin: 20px 0; border-radius: 10px; }\n .candidate-info { background: #d4edda; padding: 15px; margin: 15px 0; border-radius: 5px; }\n .score-breakdown { background: #f8f9fa; padding: 15px; margin: 15px 0; border-radius: 5px; }\n .cta { background: #007bff; color: white; padding: 15px 30px; text-decoration: none; border-radius: 5px; display: inline-block; margin: 20px 0; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"top-candidate\">\n <h2>🌟 EXCEPTIONAL CANDIDATE</h2>\n <p>High-priority candidate for {{ $json.jobTitle }}</p>\n </div>\n \n <div class=\"candidate-info\">\n <h3>👤 Candidate Profile</h3>\n <p><strong>Name:</strong> {{ $json.candidateData.name }}</p>\n <p><strong>Email:</strong> {{ $json.candidateData.email }}</p>\n <p><strong>Phone:</strong> {{ $json.candidateData.phone }}</p>\n <p><strong>Experience:</strong> {{ $json.candidateData.experience_years }} years</p>\n <p><strong>Education:</strong> {{ $json.candidateData.education }}</p>\n </div>\n \n <div class=\"score-breakdown\">\n <h3>📊 Scoring Breakdown</h3>\n <p><strong>Overall Score:</strong> {{ $json.scoring.totalScore }}/100</p>\n <p><strong>Skills Match:</strong> {{ $json.scoring.skillsScore }}/40</p>\n <p><strong>Experience:</strong> {{ $json.scoring.experienceScore }}/30</p>\n <p><strong>Education:</strong> {{ $json.scoring.educationScore }}/20</p>\n <p><strong>Role Relevance:</strong> {{ $json.scoring.roleRelevance }}/10</p>\n </div>\n \n <div style=\"text-align: center;\">\n <a href=\"mailto:{{ $json.candidateData.email }}\" class=\"cta\">📧 Contact Candidate</a>\n <a href=\"https://calendly.com/interview-{{ $json.candidateData.name }}\" class=\"cta\">📅 Schedule Interview</a>\n </div>\n \n <p style=\"color: #666; font-size: 14px; margin-top: 30px;\">\n Recommendation: {{ $json.scoring.recommendation }} | Priority: {{ $json.scoring.priority }}\n </p>\n </div>\n</body>\n</html>",
"options": {
"contentType": "html"
},
"subject": "🌟 Top Candidate Alert - {{ $json.jobTitle }}"
},
"typeVersion": 1
},
{
"id": "8",
"name": "Prüfen ob interviewwürdig",
"type": "n8n-nodes-base.if",
"position": [
1040,
300
],
"parameters": {
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.scoring.recommendation }}",
"rightValue": "interview"
}
]
}
},
"typeVersion": 2
},
{
"id": "9",
"name": "Interview-Einladung senden",
"type": "n8n-nodes-base.gmail",
"position": [
1240,
300
],
"parameters": {
"sendTo": "={{ $json.candidateData.email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; background-color: #f8f9fa; }\n .container { max-width: 600px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; }\n .interview-invite { background: #007bff; color: white; padding: 20px; text-align: center; margin: 20px 0; border-radius: 8px; }\n .next-steps { background: #e8f4f8; padding: 15px; margin: 15px 0; border-radius: 5px; }\n .cta { background: #28a745; color: white; padding: 15px 30px; text-decoration: none; border-radius: 5px; display: inline-block; margin: 20px 0; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"interview-invite\">\n <h2>🎉 Interview Invitation</h2>\n <p>Congratulations! We'd like to interview you for the {{ $json.jobTitle }} position.</p>\n </div>\n \n <p>Dear {{ $json.candidateData.name }},</p>\n \n <p>We were impressed by your profile and would like to invite you for an interview.</p>\n \n <div class=\"next-steps\">\n <h3>📅 Next Steps</h3>\n <ul>\n <li>Schedule your interview using the link below</li>\n <li>Prepare for technical questions about your experience</li>\n <li>Review our company culture and values</li>\n <li>Prepare questions about the role and team</li>\n </ul>\n </div>\n \n <div style=\"text-align: center;\">\n <a href=\"https://calendly.com/interview-{{ $json.candidateData.name }}\" class=\"cta\">\n 📅 Schedule Your Interview\n </a>\n </div>\n \n <p>Looking forward to meeting you!</p>\n \n <p style=\"color: #666; font-size: 14px; margin-top: 30px;\">\n Best regards,<br>\n HR Team\n </p>\n </div>\n</body>\n</html>",
"options": {
"contentType": "html"
},
"subject": "Interview Invitation - {{ $json.jobTitle }} Position"
},
"typeVersion": 1
},
{
"id": "10",
"name": "Prüfen ob abgelehnt",
"type": "n8n-nodes-base.if",
"position": [
1040,
400
],
"parameters": {
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.scoring.recommendation }}",
"rightValue": "reject"
}
]
}
},
"typeVersion": 2
},
{
"id": "11",
"name": "Ablehnungs-E-Mail senden",
"type": "n8n-nodes-base.gmail",
"position": [
1240,
400
],
"parameters": {
"sendTo": "={{ $json.candidateData.email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; background-color: #f8f9fa; }\n .container { max-width: 600px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; }\n .thank-you { background: #6c757d; color: white; padding: 20px; text-align: center; margin: 20px 0; border-radius: 8px; }\n .feedback { background: #f8f9fa; padding: 15px; margin: 15px 0; border-radius: 5px; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"thank-you\">\n <h2>Thank You for Your Interest</h2>\n <p>We appreciate you taking the time to apply for the {{ $json.jobTitle }} position.</p>\n </div>\n \n <p>Dear {{ $json.candidateData.name }},</p>\n \n <p>Thank you for your application. While your background is impressive, we have decided to move forward with other candidates who more closely match our current requirements.</p>\n \n <div class=\"feedback\">\n <h3>💡 For Future Opportunities</h3>\n <p>We encourage you to:</p>\n <ul>\n <li>Continue developing your technical skills</li>\n <li>Gain more relevant experience in your field</li>\n <li>Apply for future positions that match your expertise</li>\n </ul>\n </div>\n \n <p>We'll keep your resume on file and will reach out if a suitable position becomes available.</p>\n \n <p style=\"color: #666; font-size: 14px; margin-top: 30px;\">\n Best regards,<br>\n HR Team\n </p>\n </div>\n</body>\n</html>",
"options": {
"contentType": "html"
},
"subject": "Thank you for your application - {{ $json.jobTitle }}"
},
"typeVersion": 1
},
{
"id": "12",
"name": "Notizzettel1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1140,
60
],
"parameters": {
"width": 240,
"height": 160,
"content": "## AI-Powered Decisions\n\n🤖 **Automated actions:**\n- Top candidates: HR alert\n- Interview worthy: Auto-invite\n- Rejected: Polite decline\n- Phone screen: Initial contact"
},
"typeVersion": 1
}
],
"connections": {
"1": {
"main": [
[
{
"node": "3",
"type": "main",
"index": 0
}
]
]
},
"3": {
"main": [
[
{
"node": "4",
"type": "main",
"index": 0
}
]
]
},
"4": {
"main": [
[
{
"node": "5",
"type": "main",
"index": 0
}
]
]
},
"5": {
"main": [
[
{
"node": "6",
"type": "main",
"index": 0
},
{
"node": "8",
"type": "main",
"index": 0
},
{
"node": "10",
"type": "main",
"index": 0
}
]
]
},
"6": {
"main": [
[
{
"node": "7",
"type": "main",
"index": 0
}
]
]
},
"8": {
"main": [
[
{
"node": "9",
"type": "main",
"index": 0
}
]
]
},
"10": {
"main": [
[
{
"node": "11",
"type": "main",
"index": 0
}
]
]
}
}
}Häufig gestellte Fragen
Wie verwende ich diesen Workflow?
Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.
Für welche Szenarien ist dieser Workflow geeignet?
Fortgeschritten - Personalwesen, KI-Zusammenfassung
Ist es kostenpflichtig?
Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.
Verwandte Workflows
Management von Social-Media-Influencer-Kampagnen mit KI-Bewertung und Gmail-Promotion
Verwaltung von Social-Media-Influencer-Kampagnen mit KI-Bewertungen und Gmail-Promotion
If
Set
Code
+
If
Set
Code
15 NodesRodrigue
Soziale Medien
Automatisierung des Lieferanten-Risikoscores
Automatisierung des Lieferanten-Risikoscores mit D&B, NewsAPI und Gmail-Erinnerungen
If
Set
Code
+
If
Set
Code
16 NodesRodrigue
Verschiedenes
Automatisierte Bewerbungsanalyse und Kandidatenauswahl mit JotForm, Azure OCR, GPT-4.1 und Zoho CRM
Automatisierung der Resume-Analyse und Kandidatenauswahl mit JotForm, Azure OCR, GPT-4.1, Zoho CRM
If
Set
Code
+
If
Set
Code
25 Nodesmoosa
Personalwesen
KI-gesteuerter Automatisierter Jobsuche- und Bewerbungs-Workflow
KI-gesteuerter Automatisierter Jobsuche- und Bewerbungsprozess
If
Set
Code
+
If
Set
Code
21 NodesGerald Denor
Personalwesen
Wiedervorabestellungsfunktion für abandoniertes Einkaufswagen mit Gmail und Google Sheets-Analyse
Wiederverkaufsfunktion für verlassene Warenkörbe mit Gmail und Google Sheets-Analyse
If
Set
Code
+
If
Set
Code
13 NodesRodrigue
Soziale Medien
Konkurrenz-Analyse-Content-Inspector: Automatische Themen-Mapping von Websites
Analyse von Wettbewerbsinhalten und -lücken mit Gemini AI, Apify und Google Sheets
If
Set
Code
+
If
Set
Code
30 NodesMychel Garzon
Verschiedenes
Workflow-Informationen
Schwierigkeitsgrad
Fortgeschritten
Anzahl der Nodes12
Kategorie2
Node-Typen7
Autor
Rodrigue
@gbadouExterne Links
Auf n8n.io ansehen →
Diesen Workflow teilen