2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00
2026-05-26 10:17:55 +03:00

🤖 HH Auto-Apply Bot

Telegram-бот для автоматизации откликов на вакансии с hh.ru. Бот логинится на hh.ru от твоего имени, парсит вакансии по запросу и с помощью LLM генерирует персонализированное сопроводительное письмо под каждую вакансию — с учётом твоего резюме и описания позиции.

Стек

Слой Технология
Runtime Node.js 20+ (ESM), TypeScript
Telegram node-telegram-bot-api (long polling)
Браузерная автоматизация Playwright (headless Chromium)
LLM / AI Groq API — llama-3.3-70b-versatile
ORM Prisma 6 + SQLite
Планировщик node-cron
Пакетный менеджер Yarn 4

Как это работает

Пользователь → Telegram Bot
                    │
                    ├─ Авторизация на hh.ru (Playwright + OTP через бот)
                    │        └─ Сохранение сессии (cookies) в БД
                    │
                    ├─ Парсинг резюме с hh.ru → сохранение в БД
                    │
                    └─ Поиск вакансий по запросу
                              │
                              └─ Для каждой вакансии:
                                    ├─ Playwright парсит описание
                                    └─ LLM (Llama 3.3 70B) генерирует
                                       сопроводительное письмо на основе
                                       резюме + описания вакансии

AI / LLM

Сопроводительные письма генерирует Llama 3.3 70B через Groq API (OpenAI-совместимый интерфейс). Модель получает:

  • Системный промпт с инструкциями по стилю (настраивается пользователем)
  • Текст резюме пользователя (парсится с hh.ru)
  • Описание конкретной вакансии (парсится Playwright'ом в реальном времени)

На выходе — живое, не шаблонное письмо, адаптированное под конкретную позицию.

В коде также подключён Anthropic SDK (@anthropic-ai/sdk) для возможности использования Claude.

Возможности

  • Авторизация — вход на hh.ru через email + OTP-код, сессия сохраняется в БД и переиспользуется
  • Парсинг резюме — автоматически скачивает твоё резюме с hh.ru после логина
  • Поиск вакансий — поиск по настраиваемому запросу с лимитом откликов
  • AI-сопроводительные письма — уникальное письмо под каждую вакансию через LLM
  • Авто-режим — крон-задача (пн–пт, 10:00) для ежедневного автозапуска
  • Настройки через бот — поисковый запрос, макс. кол-во откликов — всё меняется прямо в чате

Команды бота

Кнопка / команда Действие
/start Регистрация, главное меню
💼 Меню Панель управления HH Auto-Apply
🚀 Откликнуться сейчас Запустить поиск и генерацию писем
🔍 Изменить запрос Сменить поисковый запрос
🔢 Макс откликов Установить лимит вакансий за сессию
⏰ Авто вкл / Авто выкл Включить/выключить ежедневный крон
🔑 Логин Авторизоваться на hh.ru
⚙️ Статус Текущие настройки и статус авторизации

База данных

User         — telegramId, hhEmail, session (cookies), AI-промпт
Resume       — текст резюме, привязан к пользователю
Settings     — searchQuery, maxApplies

Запуск

# 1. Установить зависимости
yarn

# 2. Создать .env
echo 'DATABASE_URL="file:./dev.db"' > .env

# 3. Применить миграции
yarn db-migrate

# 4. Запустить в dev-режиме
yarn dev

Команды разработки

yarn dev          # запуск с hot reload (tsx watch)
yarn build        # компиляция TypeScript → dist/
yarn start        # запуск скомпилированного кода
yarn lint         # проверка ESLint
yarn lint:fix     # автофикс ESLint
yarn db-view      # Prisma Studio (GUI для БД)
yarn db-migrate   # создать и применить миграцию
yarn db-deploy    # применить миграции на проде

Архитектура

Одиночный Node.js процесс без HTTP-сервера. Весь UI — Telegram inline-клавиатуры и сообщения. Два синглтона (TelegramBot, PrismaClient) шарятся через path-алиасы @bot и @prisma.

Playwright запускается headless для каждой операции с hh.ru и закрывается после — никаких persistent browser-процессов. Для имитации человеческого поведения используются случайные задержки и скроллы.

Description
No description provided
Readme 10 MiB
Languages
TypeScript 98.9%
Dockerfile 1%