Как я сделал AI-бота, который ищет работу и пишет отклики

Telegram-бот, который скрейпит hh.ru и Habr Career, скорит вакансии под твой профиль и пишет сопроводительные письма через Claude AI. История создания, технические решения и первые результаты.

Как я сделал AI-бота, который ищет работу и пишет отклики

Поиск работы в IT — это отдельная работа. Каждое утро открываешь hh.ru, скроллишь ленту, пытаешься понять, подходит ли тебе вакансия «Middle/Senior фронтенд-разработчик в финтех-стартап с опытом React/Vue/Angular от 3 лет». Потом то же самое на Habr Career. Потом пишешь сопроводительное письмо, которое на третьей вакансии превращается в копипасту с подменой названия компании. К пятому дню поиска хочется всё бросить.

Я прошёл через это сам и подумал: а что если автоматизировать весь процесс? Не просто парсить вакансии, а реально оценивать, насколько каждая подходит именно мне — с учётом навыков, зарплатных ожиданий, формата работы и предпочтительной отрасли. И ещё генерировать персональные сопроводительные письма через AI, чтобы каждое было заточено под конкретную вакансию и мой опыт.

Так появился Hunter — Telegram-бот «AI Ловец вакансий».

Проблема: поиск работы — это воронка наоборот

Классическая воронка поиска работы выглядит так:

  1. Просмотр вакансий — десятки страниц в день
  2. Фильтрация — ручная, по ключевым словам
  3. Оценка релевантности — читаешь описание, сопоставляешь со своим опытом
  4. Отклик — пишешь письмо (или не пишешь, потому что лень)

На каждом этапе ты теряешь время и мотивацию. Особенно на первых двух: 80% просмотренных вакансий тебе не подходят, но ты это понимаешь только после того, как прочитал описание.

А ещё есть проблема «первого письма». Хорошее сопроводительное письмо увеличивает шанс получить ответ, но писать его под каждую вакансию — от 15 до 30 минут. Если откликаешься на 5 вакансий в день, это 1.5-2.5 часа только на письма.

Решение: бот, который делает шаги 1-4 за тебя

Ботик работает просто:

  1. Ты заполняешь профиль (4 шага за пару минут, или загружаешь резюме PDF/DOCX — бот извлечёт данные сам)
  2. Бот 3 раза в день скрейпит hh.ru и Habr Career
  3. Каждая вакансия оценивается алгоритмом скоринга — от 0 до 100 баллов
  4. Ты получаешь персонализированный дайджест лучших вакансий
  5. Нажимаешь кнопку — AI генерирует сопроводительное письмо за 5 секунд

Как работает скоринг

Это ядро всего продукта. Каждая вакансия получает оценку от 0 до 100 по формуле:

Навыки (40%) — взвешенное совпадение навыков. Навыки, которые ты указал первыми, весят больше. Если ты React-разработчик и указал React первым, TypeScript вторым, CSS третьим — вакансия с React и TypeScript получит высокий скор, даже если в ней нет CSS.

Зарплата (25%) — пересечение зарплатных диапазонов. Вакансия в твоём диапазоне — максимальный скор. Чуть выше — 75. Сильно выше ожиданий — 30 (потому что скорее всего не возьмут). Ниже — штраф пропорционально разнице.

Формат работы (20%) — удалёнка, офис, гибрид. Если ты хочешь remote, а вакансия строго в офисе — скор по этому параметру будет 0.

Отрасль (15%) — 21 отрасль от финтеха до геймдева. Keyword matching по описанию вакансии и названию компании.

Плюс штрафы:

  • Red flags — слова-маркеры, которые ты указываешь сам (например, «1С», «PHP», «стартап без финансирования»). Если вакансия содержит red flag — скор делится пополам.
  • Чёрный список компаний — скор = 0, вакансия не попадает в дайджест.
  • Нерелевантные должности — если ты дизайнер, а вакансия для backend-разработчика — тоже 0.

Сопроводительные письма: не шаблоны, а реальный AI

Это та фича, которая экономит больше всего времени. Нажимаешь кнопку «Письмо» под вакансией — через 5 секунд получаешь готовое сопроводительное письмо.

Но это не шаблон с подстановкой переменных. Claude (модель от Anthropic) получает:

  • Полное описание вакансии
  • Твой профиль (навыки, опыт, о себе)
  • Контекст компании

И генерирует письмо, которое адресно отвечает на требования конкретной вакансии и подчёркивает релевантный опыт из твоего профиля.

Не нравится стиль? Жмёшь «Другой вариант» — получаешь альтернативную версию. Бот даже чередует модели: быстрая (Haiku) для мгновенного результата и более качественная (Sonnet) для проработанных писем.

Как я сделал AI-бота, который ищет работу и пишет отклики

Техстек: почему именно так

Node.js 22 + TypeScript — типизация на всём проекте, от API-ответов до схемы БД. Zod для валидации входных данных.

grammY — фреймворк для Telegram-ботов. Лёгкий, типизированный, хорошо документированный. Поддержка инлайн-режима, платежей, middleware из коробки.

SQLite (better-sqlite3, WAL mode) — единственная база. Никакого Redis, никакого PostgreSQL. Для одного бота SQLite более чем достаточно. WAL mode даёт concurrent reads, busy_timeout решает проблему конкурентной записи.

Anthropic SDK — прямой вызов API Claude для генерации писем. Sonnet для качества, Haiku для скорости и парсинга резюме.

node-cron — планировщик внутри процесса. Скрейп 3 раза в день (09:00, 13:00, 17:00 МСК), утренний дайджест, еженедельная сводка по понедельникам.

Railway — хостинг. $5/мес за 24/7 работу, автодеплой из main, volume для SQLite-файла. Настроил и забыл.

Вся архитектура — один процесс, один файл базы, один сервер. Звучит просто, потому что это и есть просто. Для бота с парой тысяч пользователей этого хватает с запасом.

Как я сделал AI-бота, который ищет работу и пишет отклики

Что под капотом скрейперов

Пока что два источника: hh.ru API и Habr Career.

hh.ru — официальный API, но с нюансами. Бот-юзерагенты блокируются, поэтому используется ротация браузерных User-Agent. Фильтр по региону отключён (пользователи могут быть откуда угодно), фильтрация происходит через скоринг.

Habr Career — парсинг через cheerio, потому что API менее документировано.

Запросы к API генерируются автоматически на основе профиля пользователя: должность превращается в набор поисковых запросов. Между запросами — случайная задержка 1-3 секунды, чтобы не нагружать источники.

Дедупликация: вакансии хранятся в общем пуле (по source + external_id), а скоринг — на пользователя. Одна вакансия парсится один раз, но оценивается для каждого юзера отдельно.

Что дальше

В планах:

  • Дополнительные источники (Getmatch, Superjob, Telegram-каналы с вакансиями)
  • Подготовка к собеседованиям (/interview) — AI генерирует вопросы по стеку вакансии

Но главное сейчас — дать пользу тем, кто ищет работу прямо сейчас.

Попробовать

Бот бесплатный. 3 дня Pro при регистрации — чтобы попробовать все фичи без ограничений.

Telegram-бот: @jobhunt_ai_bot

Лендинг: diyoriko.github.io/hunter

Начать дискуссию