Intelligenter Interview-Assistent: Maßgeschneiderte Fragen basierend auf Lebenslauf, Stellenbeschreibung und Runde
Dies ist ein HR, Multimodal AI-Bereich Automatisierungsworkflow mit 26 Nodes. Hauptsächlich werden Set, Code, Merge, EmailSend, FormTrigger und andere Nodes verwendet. Generieren maßgeschneiderter Interviewfragen basierend auf Lebenslauf, Stellenbeschreibung und Runde mit GPT-4
- •Google Drive API-Anmeldedaten
- •Google Sheets API-Anmeldedaten
- •OpenAI API Key
Verwendete Nodes (26)
Kategorie
{
"id": "zbggnEhKUnzCjVEY",
"meta": {
"instanceId": "4a2e6764ba7a6bc9890d9225f4b21d570ce88fc9bd57549c89057fcee58fed0f",
"templateId": "5453",
"templateCredsSetupCompleted": true
},
"name": "Smart Interview Assistant: Tailored Questions Based on CV, JD, and Round",
"tags": [
{
"id": "OcQfoQT2ejtrpKfF",
"name": "HR Workflow",
"createdAt": "2025-07-30T05:57:04.113Z",
"updatedAt": "2025-07-30T05:57:04.113Z"
}
],
"nodes": [
{
"id": "951cb8f8-c122-42fb-929a-7008fd545e5c",
"name": "Haftnotiz1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1168,
1856
],
"parameters": {
"width": 748,
"height": 176,
"content": "## 1. Hiring manager select candidate profile, applied position and interview round\n- Profile will be candidate resume in PDF format\n- Job role from dropdown list (configurable), need match with list in the positions sheet\n- Interview round (From Initial Screening to Final Interview"
},
"typeVersion": 1
},
{
"id": "02b35afe-c7ee-425f-95d7-5e22489d4445",
"name": "Bewerbungsformular",
"type": "n8n-nodes-base.formTrigger",
"position": [
-560,
2112
],
"webhookId": "f29214cd-588d-4116-8d56-7d0f91cfda9d",
"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": "Smart Interview Prep Assistant",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "CV",
"multipleFiles": false,
"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
},
{
"fieldType": "dropdown",
"fieldLabel": "Interview Round",
"fieldOptions": {
"values": [
{
"option": "Initial Screening"
},
{
"option": "Technical/Functional Interview"
},
{
"option": "Managerial/Team Fit Interview"
},
{
"option": "Final Interview"
}
]
}
}
]
},
"formDescription": "Effortlessly generate tailored interview questions based on the candidate’s resume, job description, and interview round. Perfect for recruiters, hiring managers, and interviewers who want to save time while staying sharp and relevant."
},
"typeVersion": 2.2
},
{
"id": "fede7d7a-9e6b-4f41-8faa-11bc18385a1e",
"name": "Profil extrahieren",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-144,
1776
],
"parameters": {
"options": {},
"operation": "pdf",
"binaryPropertyName": "CV"
},
"typeVersion": 1
},
{
"id": "89b76cb0-9ac8-40c5-a305-cee3914be9dc",
"name": "json parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
304,
1968
],
"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": "bdab7446-ab5a-4bde-9f05-5d9eea6c392d",
"name": "gpt4-1 model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
112,
1968
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "PPSwAKeLQYgAPobT",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "e81e164b-2f0a-44be-ae52-66b1de95a0f2",
"name": "Stellenbeschreibung abrufen",
"type": "n8n-nodes-base.googleSheets",
"position": [
-304,
2256
],
"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": "8ef88c1b-16d1-4984-87a2-3fe10d98646c",
"name": "Datei herunterladen",
"type": "n8n-nodes-base.googleDrive",
"position": [
-80,
2256
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "url",
"value": "={{ $json['Job Description'] }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "fC471es5gk5Mm900",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "b9d5fe39-af88-419e-bdf8-4646a324f892",
"name": "Stellenbeschreibung extrahieren",
"type": "n8n-nodes-base.extractFromFile",
"position": [
240,
2256
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "d9c3fd9b-ca77-4c39-b4fe-1e5f51d0aebf",
"name": "Profil-Analyse-Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
112,
1776
],
"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": "d2e82f1b-7d55-4588-8f5b-28f6fef8ed48",
"name": "gpt-4-1 model 2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1376,
2272
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "PPSwAKeLQYgAPobT",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "ceaca356-c885-44ed-8976-291f29550f7c",
"name": "Haftnotiz7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2512,
928
],
"parameters": {
"width": 1312,
"height": 2896,
"content": "# 🤖 Smart Interview Assistant: Tailored Questions Based on CV, JD, and Round\n\n## 📌 Who’s it for\nThis workflow is designed for:\n- **Recruiters** and **Talent Acquisition Specialists** who want to automate candidate interview prep.\n- **Hiring Managers** conducting multiple interviews and needing personalized question sets.\n- **Technical Interviewers** who want to save time and be well-prepared with relevant questions.\n\n## ⚙️ How it works / What it does\nThe Smart Interview Assistant automates the interview preparation process in a few clicks:\n\n1. Accepts:\n - **Multiple resumes (PDFs)**\n - **Selected job role**\n - **Chosen interview round**\n2. Extracts structured data from:\n - The candidate’s **CV**\n - The corresponding **Job Description (JD)**\n3. Uses **GPT-4** to analyze:\n - Candidate profile\n - Role requirements\n - Interview round context\n4. Generates:\n - **Tailored interview questions**\n - **Expected answers**\n - **A summarized interview prep report**\n5. Sends the report directly to the **hiring team via email (SMTP)**\n\n## 📁 Google Drive Structure\n\n```\n📂 Root Folder\n├── 📁 jd/ # Stores all job descriptions in PDF format\n│ ├── Backend_Engineer.pdf\n│ ├── Azure_DevOps_Lead.pdf\n│ └── ...\n└── 📄 Positions (Google Sheet) # Maps Job Role ↔ JD File Link\n```\n\n📝 **Sample Mapping Sheet**: \n[Positions Sheet](https://docs.google.com/spreadsheets/d/1pW0muHp1NXwh2GiRvGVwGGRYCkcMR7z8NyS9wvSPYjs/edit?usp=sharing)\n\n**Columns:**\n- `Job Role`\n- `Job Description File URL` (pointing to PDF in `jd/` folder)\n\n## 🛠️ How to Set Up\n\n### Step 1: Configure API Integrations\n- ✅ Connect your **OpenAI GPT-4 API Key**\n- ✅ Enable **Google Cloud APIs**:\n - Google Sheets API (to read job roles)\n - Google Drive API (to access CV and JD files)\n- ✅ Set up **SMTP** credentials (for email delivery)\n\n### Step 2: Prepare Google Drive & Mapping Sheet\n\n1. Create a root folder on Google Drive \n2. Inside the root folder:\n - Create a folder named `/jd/` and upload all **job descriptions (PDFs)** \n3. Create a **Google Sheet** named `Positions` with the following format:\n\n```\n| Job Role | Job Description File URL |\n|-----------------------------|--------------------------------------------|\n| Azure DevOps Engineer | https://drive.google.com/xxx/jd1.pdf |\n| Full-Stack Developer (.NET) | https://drive.google.com/xxx/jd2.pdf |\n```\n\n### Step 3: Build the Application Form\n\nUse any form tool (e.g., Typeform, Tally, or custom HTML) that collects:\n- 📎 Resume file (PDF)\n- 🧾 Job Role (dropdown)\n- 🔄 Interview Round (dropdown)\n\n### Step 4: Resume & JD Extraction\n\n- 🔍 Use `Extract from PDF` to parse the resume content\n- 📄 Retrieve the JD link from the `Positions` sheet based on the selected Job Role\n- 🔗 Use `Download file` to pull the PDF for processing\n\n### Step 5: Analyze with GPT-4\n\n- Run both Resume and JD through a **Profile Analyzer Agent** (GPT-4 with JSON output)\n- Merge results\n- Add manual input or mapping for the **Interview Round metadata**\n\n### Step 6: Generate Interview Report\n\n- Use a second GPT-4 agent (e.g., `HR Expert Agent`) to:\n - Generate 6–8 tailored interview questions\n - Include expected answers and rationale\n\n### Step 7: Deliver Final Report\n\n- Format the content as:\n - 📄 PDF (optional)\n - 📨 Email body\n- Send the report to the **recruiter, hiring manager, or interviewer** via **SMTP**\n\n## ✅ Requirements\n\n- 🔑 **OpenAI GPT-4 API Key**\n- 📁 Google Drive (for resume and JD storage)\n- 📊 Google Sheet (job role mapping)\n- 📬 SMTP credentials (host, username, password)\n- 🧰 n8n self-hosted or cloud instance with:\n - PDF Parser\n - Google Sheets node\n - HTTP Download node\n - Email node\n\n## ✏️ How to Customize the Workflow\n\n| Part | Customization Options |\n|----------------------------|-------------------------------------------------------------|\n| **Form UI** | Modify the design, dropdown options, or input validations |\n| **Job Description Source** | Replace Google Sheet with Notion, Airtable, or database |\n| **Interview Metadata** | Add job level, region, or language preference |\n| **AI Prompt Tuning** | Adjust prompt phrasing or temperature in GPT nodes |\n| **Report Format** | Generate PDF instead of email body using PDF node |\n| **Delivery Method** | Add internal HR portal webhook or generate downloadable link |"
},
"typeVersion": 1
},
{
"id": "0c6aa881-8155-444f-9cb2-0a5ba0ea968e",
"name": "Haftnotiz3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
2048
],
"parameters": {
"width": 556,
"height": 708,
"content": ""
},
"typeVersion": 1
},
{
"id": "0833bd6f-9ea5-450e-9818-628082b8b762",
"name": "Haftnotiz4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
2464
],
"parameters": {
"width": 736,
"height": 128,
"content": ""
},
"typeVersion": 1
},
{
"id": "7ae138fa-8739-4eee-80c0-91e357e40054",
"name": "Interviewrunden-Metadaten",
"type": "n8n-nodes-base.set",
"position": [
992,
2112
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "caac3f3e-06a2-4095-91e3-41910f80b1ea",
"name": "Initial Screening",
"type": "string",
"value": "Purpose: Quickly assess whether the candidate meets the basic qualifications and is a potential fit for the role and company culture. Conducted by: Recruiter or Talent Acquisition (TA) Specialist. Focus Areas: \t•\tResume walkthrough and career summary \t•\tMotivation for applying \t•\tSalary expectations and availability \t•\tBasic qualification and communication skills \t•\tClarifying job responsibilities and candidate’s interest Goal for Agent: Generate light, conversational questions that verify resume claims, screen for red flags, and confirm role alignment."
},
{
"id": "9baaec07-ddaa-4d10-a80f-33a0dd200fcc",
"name": "Technical/Functional Interview",
"type": "string",
"value": "Purpose: Evaluate the candidate’s core technical or functional skills required for the job. Conducted by: Team members, senior engineers, or functional managers. Focus Areas: \t•\tRole-specific skills (e.g., coding, data analysis, sales strategy) \t•\tProblem-solving and past project experience \t•\tUnderstanding of tools, frameworks, or domain knowledge \t•\tScenario-based or behavioral questions related to their role Goal for Agent: Generate targeted, skill-assessing questions with a mix of practical scenarios and behavioral prompts."
},
{
"id": "672e2623-81b8-4e2a-959d-3e1ec9886cf8",
"name": "Managerial/Team Fit Interview",
"type": "string",
"value": "Purpose: Assess collaboration skills, ownership, team dynamics, and alignment with team culture. Conducted by: Hiring Manager or Team Lead. Focus Areas: \t•\tCommunication and stakeholder management \t•\tDecision-making and conflict resolution \t•\tPast team experiences and leadership style \t•\tCareer growth and adaptability Goal for Agent: Generate behavioral and situational questions that test emotional intelligence, leadership, and problem ownership."
},
{
"id": "516ca9b8-de86-41a8-b398-f14e746ed414",
"name": "Final Interview (Executive/Leadership Round)",
"type": "string",
"value": "Purpose: Validate overall fit with company values, long-term potential, and alignment with business goals. May include negotiation. Conducted by: Director, VP, or C-level executives. Focus Areas: \t•\tVision alignment and strategic thinking \t•\tLong-term career goals and role alignment \t•\tBusiness acumen and cross-functional collaboration \t•\tSalary/compensation discussion (if applicable) Goal for Agent: Generate questions around strategic vision, values alignment, and leadership potential."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "9634847d-288d-4c09-824d-b0a391ace376",
"name": "Zusammenführen",
"type": "n8n-nodes-base.merge",
"position": [
544,
2112
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "5867643e-e996-43bd-b025-ba4ad6308289",
"name": "Ausgabe transformieren",
"type": "n8n-nodes-base.code",
"position": [
768,
2112
],
"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// 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 interview_round: $('Application form').first().json['Interview Round']\n }\n });\n}\n\nreturn results;"
},
"typeVersion": 2
},
{
"id": "61e4c089-30a5-4b93-af09-75f2c68d6fb6",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1568,
2288
],
"parameters": {
"jsonSchemaExample": "{\n \"candidate_summary\": {\n \"name\": \"string\",\n \"position_applied\": \"string\",\n \"years_of_experience\": \"number\",\n \"key_skills\": [\"string\"],\n \"highlights\": \"string\"\n },\n \"job_description_summary\": {\n \"role_title\": \"string\",\n \"team\": \"string\",\n \"core_requirements\": [\"string\"]\n },\n \"interview_round\": {\n \"round_type\": \"string\",\n \"round_purpose\": \"string\",\n \"conducted_by\": \"string\",\n \"focus_areas\": [\"string\"]\n },\n \"interview_questions\": [\n {\n \"question\": \"string\",\n \"expected_answer\": \"string\"\n }\n ]\n}"
},
"typeVersion": 1.3
},
{
"id": "530851ff-f0c3-47a1-abdd-01d13f1875e4",
"name": "Interviewvorbereitungsbericht erstellen",
"type": "n8n-nodes-base.code",
"position": [
1984,
2112
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const data = $json.output;\n\nconst candidate = data.candidate_summary;\nconst jd = data.job_description_summary;\nconst round = data.interview_round;\nconst questions = data.interview_questions;\n\nlet html = `\n <html>\n <head>\n <style>\n body { font-family: Arial, sans-serif; line-height: 1.5; padding: 20px; }\n h1, h2 { color: #2c3e50; }\n h3 { color: #34495e; }\n ul { padding-left: 20px; }\n .section { margin-bottom: 25px; }\n .question { margin-bottom: 15px; }\n .q-label { font-weight: bold; color: #2c3e50; }\n .a-label { font-style: italic; color: #7f8c8d; }\n </style>\n </head>\n <body>\n <h1>Interview Prep Report</h1>\n\n <div class=\"section\">\n <h2>Candidate Summary</h2>\n <p><strong>Name:</strong> ${candidate.name}</p>\n <p><strong>Position Applied:</strong> ${candidate.position_applied}</p>\n <p><strong>Experience:</strong> ${candidate.years_of_experience}</p>\n <p><strong>Highlights:</strong> ${candidate.highlights}</p>\n <p><strong>Key Skills:</strong></p>\n <ul>${candidate.key_skills.map(skill => `<li>${skill}</li>`).join('')}</ul>\n </div>\n\n <div class=\"section\">\n <h2>Job Description Summary</h2>\n <p><strong>Role:</strong> ${jd.role_title}</p>\n <p><strong>Team:</strong> ${jd.team}</p>\n <p><strong>Requirements:</strong></p>\n <ul>${jd.core_requirements.map(req => `<li>${req}</li>`).join('')}</ul>\n </div>\n\n <div class=\"section\">\n <h2>Interview Round</h2>\n <p><strong>Round Type:</strong> ${round.round_type}</p>\n <p><strong>Purpose:</strong> ${round.round_purpose}</p>\n <p><strong>Conducted By:</strong> ${round.conducted_by}</p>\n <p><strong>Focus Areas:</strong></p>\n <ul>${round.focus_areas.map(item => `<li>${item}</li>`).join('')}</ul>\n </div>\n\n <div class=\"section\">\n <h2>Interview Questions</h2>\n ${questions.map((q, index) => `\n <div class=\"question\">\n <p class=\"q-label\">Q${index + 1}: ${q.question}</p>\n <p class=\"a-label\">Expected Answer: ${q.expected_answer}</p>\n </div>\n `).join('')}\n </div>\n </body>\n </html>\n`;\n\nreturn { json: { html }}"
},
"typeVersion": 2
},
{
"id": "2e188bfa-db80-4493-9ec3-6853ead3e3c1",
"name": "Interviewvorbereitungsbericht an Einstellungsteam senden",
"type": "n8n-nodes-base.emailSend",
"position": [
2208,
2112
],
"webhookId": "bb7abbfe-9fd9-495c-8a6c-89701389b4d6",
"parameters": {
"html": "={{ $json.html }}",
"options": {},
"subject": "=Interview Preparation Guide for [{{ $('Interview Expert Agent').item.json.output.candidate_summary.name }}] – [{{ $('Interview Expert Agent').item.json.output.candidate_summary.position_applied }}]",
"toEmail": "hiring-team@example.com",
"fromEmail": "no-reply@example.com"
},
"credentials": {
"smtp": {
"id": "Cqc9p9Z5PHj2MHzn",
"name": "SMTP account"
}
},
"typeVersion": 2.1
},
{
"id": "3e49e6fa-0dab-4f73-bd7f-8f6473d0559c",
"name": "Haftnotiz",
"type": "n8n-nodes-base.stickyNote",
"position": [
-336,
2128
],
"parameters": {
"width": 780,
"height": 304,
"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": "aabd3e08-605e-4fe2-b687-78eccefc1103",
"name": "Haftnotiz2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-336,
1648
],
"parameters": {
"width": 780,
"height": 432,
"content": "## 2.1. Candidate profile analyzer\n- Extract candidate information from PDF file\n- Transform candidate information to expected JSON format for later use (send message, add to evaluation sheet)"
},
"typeVersion": 1
},
{
"id": "17f5f597-3bf3-4314-82a8-67fc654ac144",
"name": "Haftnotiz5",
"type": "n8n-nodes-base.stickyNote",
"position": [
512,
1952
],
"parameters": {
"width": 652,
"height": 336,
"content": "## 3. Prepare material for Interview Expert Agent\n- Candidate profile\n- Applied position job description\n- Interview round (description, target...)"
},
"typeVersion": 1
},
{
"id": "84d88fdb-f333-45c9-94ae-eb5545b2087c",
"name": "Interview-Experten-Agent",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1376,
2112
],
"parameters": {
"text": "=Generate interview prep document based on the following:\n- Applied Position: {{ $('Transform output').item.json.applied_position }}\n- Job Description: {{ $('Transform output').item.json.job_description }}\n- Candidate Profile: {{ $('Transform output').item.json.candidate_profile.toJsonString() }}\n- Interview Round: {{ $('Transform output').item.json.interview_round }}\n- Interview Round Description: {{ $json[$('Transform output').item.json.interview_round] }}",
"messages": {
"messageValues": [
{
"message": "You are an AI Interview Prep Assistant supporting Talent Acquisition (TA) teams. Your job is to generate relevant, role-specific interview questions based on three inputs: the candidate’s profile, the job description (JD), and the selected interview round. You must first analyze the candidate profile to understand key skills, experiences, and career highlights. Then extract the core requirements and responsibilities from the JD. Based on the specified interview round, adjust the tone, focus, and style of your questions appropriately. Your output must include: \t•\tA summary of the candidate and applied position, including name, role, years of experience, and notable skills or achievements. \t•\tA summary of the job description, highlighting the core role requirements and expectations. \t•\tThe interview round type, along with its purpose and focus areas. \t•\tA list of 5 to 8 high-quality interview questions, each with a brief explanation of the expected answer or evaluation criteria. Questions should reflect the intent of the selected round: \t•\tFor screening rounds, keep them light and conversational to verify fit and clarify resume details. \t•\tFor technical or functional rounds, generate questions that evaluate skill depth and practical knowledge. \t•\tFor managerial or leadership rounds, focus on behavior, decision-making, and collaboration. \t•\tFor executive rounds, assess strategic thinking, long-term alignment, and business perspective."
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.5
},
{
"id": "64389790-9976-4905-a09b-416dbc445588",
"name": "Haftnotiz6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1216,
1952
],
"parameters": {
"width": 652,
"height": 496,
"content": "## 4. Interview Expert Agent generate interview prep report\n- Generate interview prep report with candidate summary, interview round note, interview questions.\n- All tailored with input parameters (profile, resume, interview round)"
},
"typeVersion": 1
},
{
"id": "f0f1a9f5-92a6-4ac4-8c4c-fc65cbb4d32a",
"name": "Haftnotiz8",
"type": "n8n-nodes-base.stickyNote",
"position": [
1904,
2048
],
"parameters": {
"width": 572,
"height": 224,
"content": "## 5. Parse the output and send email to hiring team"
},
"typeVersion": 1
},
{
"id": "ebf2fcc0-19bd-4d7e-aa49-875952463f52",
"name": "Haftnotiz9",
"type": "n8n-nodes-base.stickyNote",
"position": [
2512,
1776
],
"parameters": {
"width": 736,
"height": 768,
"content": "\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "eb364707-bf93-475b-abd4-5105515732a1",
"connections": {
"9634847d-288d-4c09-824d-b0a391ace376": {
"main": [
[
{
"node": "5867643e-e996-43bd-b025-ba4ad6308289",
"type": "main",
"index": 0
}
]
]
},
"89b76cb0-9ac8-40c5-a305-cee3914be9dc": {
"ai_outputParser": [
[
{
"node": "d9c3fd9b-ca77-4c39-b4fe-1e5f51d0aebf",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"bdab7446-ab5a-4bde-9f05-5d9eea6c392d": {
"ai_languageModel": [
[
{
"node": "d9c3fd9b-ca77-4c39-b4fe-1e5f51d0aebf",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"8ef88c1b-16d1-4984-87a2-3fe10d98646c": {
"main": [
[
{
"node": "b9d5fe39-af88-419e-bdf8-4646a324f892",
"type": "main",
"index": 0
}
]
]
},
"fede7d7a-9e6b-4f41-8faa-11bc18385a1e": {
"main": [
[
{
"node": "d9c3fd9b-ca77-4c39-b4fe-1e5f51d0aebf",
"type": "main",
"index": 0
}
]
]
},
"e81e164b-2f0a-44be-ae52-66b1de95a0f2": {
"main": [
[
{
"node": "8ef88c1b-16d1-4984-87a2-3fe10d98646c",
"type": "main",
"index": 0
}
]
]
},
"d2e82f1b-7d55-4588-8f5b-28f6fef8ed48": {
"ai_languageModel": [
[
{
"node": "84d88fdb-f333-45c9-94ae-eb5545b2087c",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"02b35afe-c7ee-425f-95d7-5e22489d4445": {
"main": [
[
{
"node": "e81e164b-2f0a-44be-ae52-66b1de95a0f2",
"type": "main",
"index": 0
},
{
"node": "fede7d7a-9e6b-4f41-8faa-11bc18385a1e",
"type": "main",
"index": 0
}
]
]
},
"5867643e-e996-43bd-b025-ba4ad6308289": {
"main": [
[
{
"node": "7ae138fa-8739-4eee-80c0-91e357e40054",
"type": "main",
"index": 0
}
]
]
},
"84d88fdb-f333-45c9-94ae-eb5545b2087c": {
"main": [
[
{
"node": "530851ff-f0c3-47a1-abdd-01d13f1875e4",
"type": "main",
"index": 0
}
]
]
},
"d9c3fd9b-ca77-4c39-b4fe-1e5f51d0aebf": {
"main": [
[
{
"node": "9634847d-288d-4c09-824d-b0a391ace376",
"type": "main",
"index": 0
}
]
]
},
"b9d5fe39-af88-419e-bdf8-4646a324f892": {
"main": [
[
{
"node": "9634847d-288d-4c09-824d-b0a391ace376",
"type": "main",
"index": 1
}
]
]
},
"7ae138fa-8739-4eee-80c0-91e357e40054": {
"main": [
[
{
"node": "84d88fdb-f333-45c9-94ae-eb5545b2087c",
"type": "main",
"index": 0
}
]
]
},
"61e4c089-30a5-4b93-af09-75f2c68d6fb6": {
"ai_outputParser": [
[
{
"node": "84d88fdb-f333-45c9-94ae-eb5545b2087c",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"530851ff-f0c3-47a1-abdd-01d13f1875e4": {
"main": [
[
{
"node": "2e188bfa-db80-4493-9ec3-6853ead3e3c1",
"type": "main",
"index": 0
}
]
]
}
}
}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?
Experte - Personalwesen, Multimodales KI
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
Trung Tran
@trungtranHelps small and medium businesses grow with intelligent automation and practical AI tools, no heavy tech team needed.
Diesen Workflow teilen