Asistente de entrevistas inteligentes: Preguntas personalizadas basadas en CV, descripción del puesto y rondas

Avanzado

Este es unHR, Multimodal AIflujo de automatización del dominio deautomatización que contiene 26 nodos.Utiliza principalmente nodos como Set, Code, Merge, EmailSend, FormTrigger. Usar GPT-4 para generar preguntas de entrevista personalizadas basadas en currículum, descripción del puesto y ronda de entrevista

Requisitos previos
  • Credenciales de API de Google Drive
  • Credenciales de API de Google Sheets
  • Clave de API de OpenAI
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "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": "Nota Adhesiva1",
      "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": "Formulario de solicitud",
      "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": "Extraer perfil",
      "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": "modelo gpt4-1",
      "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": "Obtener descripción del puesto",
      "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": "Descargar archivo",
      "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": "Extraer descripción del trabajo",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        240,
        2256
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "d9c3fd9b-ca77-4c39-b4fe-1e5f51d0aebf",
      "name": "Agente analizador de perfiles",
      "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": "modelo gpt-4-1 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": "Nota Adhesiva7",
      "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": "Nota Adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        2048
      ],
      "parameters": {
        "width": 556,
        "height": 708,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-08-01+at+2.29.54%E2%80%AFPM.png \"Optional title text\")"
      },
      "typeVersion": 1
    },
    {
      "id": "0833bd6f-9ea5-450e-9818-628082b8b762",
      "name": "Nota Adhesiva4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        2464
      ],
      "parameters": {
        "width": 736,
        "height": 128,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-07-29+at+12.54.54%E2%80%AFPM.png \"Optional title text\")"
      },
      "typeVersion": 1
    },
    {
      "id": "7ae138fa-8739-4eee-80c0-91e357e40054",
      "name": "Metadatos de ronda de entrevista",
      "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": "Combinar",
      "type": "n8n-nodes-base.merge",
      "position": [
        544,
        2112
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "5867643e-e996-43bd-b025-ba4ad6308289",
      "name": "Transformar salida",
      "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": "Analizador de salida estructurada",
      "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": "Construir informe de preparación de entrevista",
      "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": "Enviar informe de preparación al equipo de contratación",
      "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": "Nota Adhesiva",
      "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": "Nota Adhesiva2",
      "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": "Nota Adhesiva5",
      "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": "Agente experto en entrevistas",
      "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": "Nota Adhesiva6",
      "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": "Nota Adhesiva8",
      "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": "Nota Adhesiva9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2512,
        1776
      ],
      "parameters": {
        "width": 736,
        "height": 768,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/interview-prep-2.png \"Optional title text\")\n![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/interview-prep-3.png \"Optional title text\")"
      },
      "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
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿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, IA Multimodal

¿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

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos26
Categoría2
Tipos de nodos13
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Autor
Trung Tran

Trung Tran

@trungtran

Helps small and medium businesses grow with intelligent automation and practical AI tools, no heavy tech team needed.

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34