---
title: "Скрининг резюме HH через n8n и AI | Nodbot"
source_url: "https://nodbot.ru/workflows/hh-resume-screening/"
canonical_url: "https://nodbot.ru/workflows/hh-resume-screening/"
language: "ru"
content_type: "WorkflowTemplate"
section: "workflows"
generated_at: "2026-05-30"
word_count_source: 1076
---

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

## AI summary

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

## Best used for

Полноценный Problem/Solution-мануал для внедрения в n8n: импортировать workflow JSON, настроить API, выполнить production-тесты и передать решение команде.

## Table of contents

- Проблема: почему AI-скрининг резюме HH нельзя делать как автоотказ
- Архитектура workflow для скрининга резюме
- Контракт входных данных: резюме, вакансия и критерии
- Code Node: нормализация критериев и prompt-контракт
- Готовый workflow JSON: скачать и импортировать
- Пошаговая настройка HH, n8n и ATS
- Тесты перед production и проверка качества
- Production-риски HR automation и AI scoring
- Полезные ссылки и смежные workflow
- Критерии готовности

## Key topics

- HH resume screening
- AI scoring
- human review
- ATS
- HeadHunter API

## Source outline

Скрининг резюме HH через n8n: AI-оценка без автоотказов ¶ Обновлено: 2026-05-30 AI summary: Практический workflow для HR: взять резюме HH и критерии вакансии, извлечь только job-related факты, сформировать scoring с evidence, отправить спорные случаи рекрутеру и записать результат в ATS без автоматических отказов. Шаблон для внедрения Скачать workflow JSON Скачать test payload Скопировать curl Импортируйте workflow, замените credentials и прогоните тестовый payload до включения production. Содержание Проблема: почему AI-скрининг резюме HH нельзя делать как автоотказ Архитектура workflow для скрининга резюме Контракт входных данных: резюме, вакансия и критерии Code Node: нормализация критериев и prompt-контракт Готовый workflow JSON: скачать и импортировать Пошаговая настройка HH, n8n и ATS Тесты перед production и проверка качества Production-риски HR automation и AI scoring Полезные ссылки и смежные workflow Критерии готовности Проблема: AI-скрининг резюме может ускорить рекрутера, но при неправильной настройке превращается в непрозрачный автоотказ по неполным или чувствительным данным. Решение: workflow в n8n должен извлекать только job-related факты, сравнивать их с критериями вакансии, сохранять evidence и отправлять итог рекрутеру на review. 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 ¶ Опишите критерии вакансии до подключения AI: must-have, nice-to-have и недопустимые сигналы. Подключите источник резюме: HH API, ATS export, email с откликами или внутреннюю базу кандидатов. Добавьте Code Node для нормализации критериев и prompt-контракта. Настройте AI scoring так, чтобы он возвращал evidence, gaps и вопросы для интервью. Записывайте результат в 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 сложно объяснить, почему карточка изменилась. Полезные ссылки и смежные workflow ¶ См. также GigaChat support draft , права AI-агентов и уведомления об ошибках . Официальные документы: HeadHunter API и n8n HTTP Request . Результат должен быть проверяемой карточкой для рекрутера, а не скрытым автоотказом. Критерии готовности ¶ Каждый score содержит evidence и gaps. Негативные решения уходят на human review. Запрещенные признаки исключены из prompt и scoring. Результат записывается в ATS с audit_key и ссылкой на исходное резюме. Ошибки API/AI не меняют статус кандидата молча. Нужен безопасный AI-скрининг резюме? Nodbot настроит HR workflow с критериями вакансии, evidence, human review, ATS-записью, audit trail и мониторингом ошибок. Обсудить HR workflow

## Test payload

```json
{
  "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"
  }
}
```

## Key implementation snippet

```javascript
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}`
  }
}];
```

## Importable workflow structure

```json
{
  "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"
}
```

## Retrieval hints

- Использовать HTML как canonical source.
- Markdown удобен для LLM-ответов, извлечения workflow-контракта, кода и чеклистов.
- Для ссылок пользователю отдавать canonical URL.
