Перейти к содержанию

Скрининг резюме HH через n8n: AI-оценка без автоотказов

Обновлено: 2026-05-30

AI summary: Практический workflow для HR: взять резюме HH и критерии вакансии, извлечь только job-related факты, сформировать scoring с evidence, отправить спорные случаи рекрутеру и записать результат в ATS без автоматических отказов.
Шаблон для внедрения

Импортируйте workflow, замените credentials и прогоните тестовый payload до включения production.

Проблема: AI-скрининг резюме может ускорить рекрутера, но при неправильной настройке превращается в непрозрачный автоотказ по неполным или чувствительным данным.

Решение: workflow в n8n должен извлекать только job-related факты, сравнивать их с критериями вакансии, сохранять evidence и отправлять итог рекрутеру на review.

Схема скрининга резюме HH через n8n и AI
AI готовит карточку, но финальное решение остается у рекрутера.

Проблема: почему AI-скрининг резюме HH нельзя делать как автоотказ

Скрининг резюме HH через n8n часто начинается с простой идеи: получить отклик, отправить текст резюме в AI, поставить балл и автоматически решить, подходит кандидат или нет. Для HR это опасный сценарий. Резюме может быть неполным, модель может ошибиться в опыте, а чувствительные признаки вообще не должны попадать в scoring.

Правильный workflow не заменяет рекрутера. Он готовит структурированную карточку: совпадения с требованиями вакансии, недостающие факты, red flags, вопросы для интервью и объяснение оценки. Финальное решение остается у человека, а n8n отвечает за автоматизацию рутины, аудит и запись результата в ATS или CRM.

Архитектура workflow для скрининга резюме

НодаРольЧто проверить
Webhook inputПринимает resume_id, vacancy_id и критериинет лишних персональных данных в payload
Prepare criteriaРазделяет must-have и nice-to-haveзапрещенные признаки не участвуют в scoring
Fetch resume factsПолучает факты резюме HH или ATSссылка на исходник сохраняется для аудита
AI scoringСравнивает факты с критериямикаждый балл имеет evidence
Recruiter review gateОтправляет карточку человекунет автоматического отказа
Update ATSЗаписывает summary, score и вопросыстатусы не ломают воронку найма

Контракт входных данных: резюме, вакансия и критерии

{
  "resume_id": "hh-resume-812345",
  "vacancy_id": "backend-nodejs-remote",
  "candidate": {
    "name": "Мария",
    "source": "hh.ru",
    "resume_url": "https://hh.ru/resume/xxxx"
  },
  "vacancy_criteria": {
    "must_have": [
      "Node.js от 3 лет",
      "PostgreSQL",
      "REST API",
      "опыт production support"
    ],
    "nice_to_have": [
      "n8n",
      "Redis",
      "Docker"
    ],
    "exclude_from_scoring": [
      "возраст",
      "пол",
      "семейное положение",
      "фото"
    ]
  },
  "ats": {
    "candidate_id": "ats-1042",
    "pipeline": "backend-hiring"
  }
}

В payload важно передавать не “всё резюме целиком”, а ссылку или идентификатор источника, критерии вакансии и список признаков, которые запрещено использовать. Так скрипт n8n остается контролируемым, а HR-команда понимает, почему кандидат получил конкретный score.

Code Node: нормализация критериев и prompt-контракт

const input = $json.body ?? $json;
const criteria = input.vacancy_criteria ?? {};
const mustHave = Array.isArray(criteria.must_have) ? criteria.must_have : [];
const niceToHave = Array.isArray(criteria.nice_to_have) ? criteria.nice_to_have : [];
const excluded = new Set((criteria.exclude_from_scoring ?? []).map(v => String(v).toLowerCase()));

if (!input.resume_id || !input.vacancy_id) {
  throw new Error('resume_id and vacancy_id are required');
}

const promptContract = {
  role: 'HR screening assistant',
  task: 'Compare only job-related facts from resume with vacancy criteria',
  forbidden_signals: [...excluded],
  output_schema: {
    score: '0-100',
    must_have_match: 'array with evidence',
    gaps: 'array with missing evidence',
    interview_questions: 'array',
    decision: 'shortlist | recruiter_review',
    confidence: 'low | medium | high'
  },
  rule: 'Do not reject candidate automatically; send uncertain or negative cases to recruiter_review'
};

return [{
  json: {
    resume_id: input.resume_id,
    vacancy_id: input.vacancy_id,
    ats_candidate_id: input.ats?.candidate_id,
    must_have: mustHave,
    nice_to_have: niceToHave,
    prompt_contract: promptContract,
    review_required: true,
    audit_key: `hh:${input.vacancy_id}:${input.resume_id}`
  }
}];
Почему evidence важнее общего score

Число 82/100 само по себе не объясняет решение. Evidence показывает, какая строка резюме подтверждает навык, а где модель сделала предположение. Это помогает рекрутеру быстро проверить карточку и не превращает AI screening в черный ящик.

Готовый workflow JSON: скачать и импортировать

Скачать готовый workflow JSON Скачать тестовый payload

{
  "name": "Nodbot - HH resume screening with human review",
  "nodes": [
    {
      "name": "Webhook input",
      "type": "n8n-nodes-base.webhook",
      "purpose": "Принять resume_id, vacancy_id и критерии вакансии"
    },
    {
      "name": "Prepare criteria and prompt",
      "type": "n8n-nodes-base.code",
      "purpose": "Нормализовать must-have/nice-to-have и запретить чувствительные признаки"
    },
    {
      "name": "Fetch resume facts",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Получить факты из HH/ATS или внутреннего парсера"
    },
    {
      "name": "AI scoring",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Сравнить факты с критериями и вернуть evidence"
    },
    {
      "name": "Recruiter review gate",
      "type": "n8n-nodes-base.if",
      "purpose": "Не делать автоотказ; отправить карточку рекрутеру"
    },
    {
      "name": "Update ATS",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Записать score, summary и вопросы в ATS"
    }
  ],
  "connections": "Webhook → Criteria → Resume facts → AI scoring → Review gate → ATS"
}

Пошаговая настройка HH, n8n и ATS

  1. Опишите критерии вакансии до подключения AI: must-have, nice-to-have и недопустимые сигналы.
  2. Подключите источник резюме: HH API, ATS export, email с откликами или внутреннюю базу кандидатов.
  3. Добавьте Code Node для нормализации критериев и prompt-контракта.
  4. Настройте AI scoring так, чтобы он возвращал evidence, gaps и вопросы для интервью.
  5. Записывайте результат в ATS только после проверки человеком или с явным статусом `recruiter_review`.

Тесты перед production и проверка качества

curl -X POST "https://YOUR-N8N-DOMAIN/webhook/hh-resume-screening" \
  -H "Content-Type: application/json" \
  --data @hh-resume-screening-payload.json

Проверьте сильное резюме, слабое резюме, неполное резюме, кандидата с нестандартным опытом и кейс без обязательного навыка. Негативные и спорные кейсы должны попадать на human review, а не создавать автоотказ.

Production-риски HR automation и AI scoring

  • Автоматический отказ. AI может помогать, но не должен самостоятельно закрывать кандидата без прозрачного правила.
  • Скоринг по чувствительным признакам. Возраст, пол, фото и семейное положение не должны попадать в критерии.
  • Нет evidence. Рекрутер не сможет проверить, откуда взялась оценка.
  • Разные вакансии используют один prompt. Критерии должны быть привязаны к vacancy_id.
  • История решений не хранится. Без audit_key сложно объяснить, почему карточка изменилась.

См. также GigaChat support draft, права AI-агентов и уведомления об ошибках. Официальные документы: HeadHunter API и n8n HTTP Request.

Карточка результата скрининга резюме HH в n8n
Результат должен быть проверяемой карточкой для рекрутера, а не скрытым автоотказом.

Критерии готовности

  1. Каждый score содержит evidence и gaps.
  2. Негативные решения уходят на human review.
  3. Запрещенные признаки исключены из prompt и scoring.
  4. Результат записывается в ATS с audit_key и ссылкой на исходное резюме.
  5. Ошибки API/AI не меняют статус кандидата молча.
Нужен безопасный AI-скрининг резюме?

Nodbot настроит HR workflow с критериями вакансии, evidence, human review, ATS-записью, audit trail и мониторингом ошибок.

Обсудить HR workflow