mirror of
https://github.com/hempyhemp/hh-auto-reply.git
synced 2026-06-08 18:04:57 +00:00
112 lines
6.0 KiB
Markdown
112 lines
6.0 KiB
Markdown
# 🤖 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
|
||
```
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
# 1. Установить зависимости
|
||
yarn
|
||
|
||
# 2. Создать .env
|
||
echo 'DATABASE_URL="file:./dev.db"' > .env
|
||
|
||
# 3. Применить миграции
|
||
yarn db-migrate
|
||
|
||
# 4. Запустить в dev-режиме
|
||
yarn dev
|
||
```
|
||
|
||
## Команды разработки
|
||
|
||
```bash
|
||
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-процессов. Для имитации человеческого поведения используются случайные задержки и скроллы.
|