# πŸ€– 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-процСссов. Для ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ чСловСчСского повСдСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ случайныС Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ скроллы.