Как я сделал AI-бота, который ищет работу и пишет отклики
Telegram-бот, который скрейпит hh.ru и Habr Career, скорит вакансии под твой профиль и пишет сопроводительные письма через Claude AI. История создания, технические решения и первые результаты.
Поиск работы в IT — это отдельная работа. Каждое утро открываешь hh.ru, скроллишь ленту, пытаешься понять, подходит ли тебе вакансия «Middle/Senior фронтенд-разработчик в финтех-стартап с опытом React/Vue/Angular от 3 лет». Потом то же самое на Habr Career. Потом пишешь сопроводительное письмо, которое на третьей вакансии превращается в копипасту с подменой названия компании. К пятому дню поиска хочется всё бросить.
Я прошёл через это сам и подумал: а что если автоматизировать весь процесс? Не просто парсить вакансии, а реально оценивать, насколько каждая подходит именно мне — с учётом навыков, зарплатных ожиданий, формата работы и предпочтительной отрасли. И ещё генерировать персональные сопроводительные письма через AI, чтобы каждое было заточено под конкретную вакансию и мой опыт.
Так появился Hunter — Telegram-бот «AI Ловец вакансий».
Проблема: поиск работы — это воронка наоборот
Классическая воронка поиска работы выглядит так:
- Просмотр вакансий — десятки страниц в день
- Фильтрация — ручная, по ключевым словам
- Оценка релевантности — читаешь описание, сопоставляешь со своим опытом
- Отклик — пишешь письмо (или не пишешь, потому что лень)
На каждом этапе ты теряешь время и мотивацию. Особенно на первых двух: 80% просмотренных вакансий тебе не подходят, но ты это понимаешь только после того, как прочитал описание.
А ещё есть проблема «первого письма». Хорошее сопроводительное письмо увеличивает шанс получить ответ, но писать его под каждую вакансию — от 15 до 30 минут. Если откликаешься на 5 вакансий в день, это 1.5-2.5 часа только на письма.
Решение: бот, который делает шаги 1-4 за тебя
Ботик работает просто:
- Ты заполняешь профиль (4 шага за пару минут, или загружаешь резюме PDF/DOCX — бот извлечёт данные сам)
- Бот 3 раза в день скрейпит hh.ru и Habr Career
- Каждая вакансия оценивается алгоритмом скоринга — от 0 до 100 баллов
- Ты получаешь персонализированный дайджест лучших вакансий
- Нажимаешь кнопку — 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) для проработанных писем.
Техстек: почему именно так
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-файла. Настроил и забыл.
Вся архитектура — один процесс, один файл базы, один сервер. Звучит просто, потому что это и есть просто. Для бота с парой тысяч пользователей этого хватает с запасом.
Что под капотом скрейперов
Пока что два источника: 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