3d709267ff
Бот: - Прогресс-бар (▰▰▱ Шаг N из 3) в шагах заявки - Быстрые ответы по ключевым словам (таблица custom_faq) — отвечают до зова оператора; редактирование через админ-панель (раздел «Быстрые ответы»: добавить/список/удалить) - Отклики в статистике: счётчик игроков/сотрудников по дисциплинам и должностям - Статусы кандидатов (новый/на собесе/отказ/принят) — раздел «Кандидаты» в админке - Несколько операторов: уведомления уходят всем из OPERATOR_PEER_IDS - Часы работы (WORK_HOUR_START/END): вне часов хендофф сообщает «ответим утром» - Временный бан при повторном флуде (усиление анти-DDoS) - Старт-пинг администратору «бот запущен» (лёгкий healthcheck) Док и зависимости: - README.md (запуск, .env, автозапуск, админ-команды, структура) - requirements.txt Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
94 lines
5.6 KiB
Markdown
94 lines
5.6 KiB
Markdown
# Чат-бот ИКП (ВКонтакте) + веб-форма заявок
|
|
|
|
Бот сообщества **ИКП — Игра. Киберспорт. Профессионалы** для приёма заявок на тренировки
|
|
(Counter-Strike 2, Dota 2, World of Tanks), набора игроков и сотрудников, FAQ и связи с оператором.
|
|
Плюс отдельная веб-форма заявки на бесплатный урок.
|
|
|
|
## Возможности
|
|
|
|
- **Заявка на тренировку** — пошаговая форма (имя → телефон → направление → удобное время), бот «помнит» клиента.
|
|
- **Карьера в ИКП** — набор игроков в состав и сотрудников (карусель с карточками).
|
|
- **FAQ** — цены, услуги, контакты, о компании, кнопки-ссылки на соцсети.
|
|
- **Оператор** — передача диалога живому человеку (учитываются часы работы, поддержка нескольких операторов).
|
|
- **Уведомления** — о заявках/откликах операторам в VK и на почту (SMTP).
|
|
- **Админ-панель** (в боте, по кнопке у админа): статистика, управление услугами, рассылка по подписчикам,
|
|
быстрые ответы по ключевым словам, кандидаты и их статусы.
|
|
- **Защита** — анти-флуд, временный бан, серверная валидация веб-формы, honeypot, rate-limit, CORS.
|
|
|
|
## Установка
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
Зависимости: `vk_api`, `requests`, `openpyxl`, `Pillow`.
|
|
|
|
## Настройка `.env`
|
|
|
|
Скопируйте `.env.example` в `.env` и заполните. Файл `.env` в git **не попадает** (см. `.gitignore`).
|
|
|
|
| Переменная | Назначение |
|
|
|---|---|
|
|
| `VK_TOKEN` | Токен сообщества ВК (права на сообщения) |
|
|
| `VK_GROUP_ID` | ID сообщества (цифры) |
|
|
| `OPERATOR_PEER_ID` | ID оператора по умолчанию для уведомлений |
|
|
| `OPERATOR_PEER_IDS` | Несколько операторов через запятую (опц.) |
|
|
| `ADMIN_IDS` | ID администраторов через запятую |
|
|
| `WORK_HOUR_START` / `WORK_HOUR_END` | Часы работы (по умолч. 9 и 21) |
|
|
| `ALLOWED_ORIGIN` | Домен сайта для CORS веб-формы |
|
|
| `PROMO_ENABLED` | Промокоды (по умолч. `false`) |
|
|
| `SMTP_HOST` / `SMTP_PORT` / `SMTP_USER` / `SMTP_PASSWORD` | SMTP для писем (для Яндекс/Gmail — пароль приложения) |
|
|
| `MAIL_FROM` / `MAIL_TO` | Отправитель и получатель уведомлений о заявках |
|
|
| `HR_MAIL_TO` | Куда слать отклики на вакансии (по умолч. = `MAIL_TO`) |
|
|
|
|
> Без SMTP письма просто не отправляются (тихо пропускаются) — на работу бота это не влияет.
|
|
|
|
## Запуск бота
|
|
|
|
**Просто:** двойной клик по `start_bot.bat` — он держит бота живым и перезапускает при сбое.
|
|
|
|
**Вручную:**
|
|
```bash
|
|
python bot.py
|
|
```
|
|
|
|
**Автозапуск при входе в Windows:** положите ярлык на `start_bot.bat` в папку `shell:startup`
|
|
(`Win+R` → `shell:startup`).
|
|
|
|
Без валидного `VK_TOKEN` бот стартует в режиме эмуляции (консоль) — удобно для локальных тестов.
|
|
|
|
## Веб-форма
|
|
|
|
```bash
|
|
python form/server.py
|
|
```
|
|
Откройте http://localhost:8000/index.html . Заявки пишутся в SQLite (источник правды) и дублируются в Excel.
|
|
|
|
## Админ-панель (в боте)
|
|
|
|
У администратора в главном меню есть кнопка **«Админка ⚙️»**. Разделы: Статистика, Кандидаты,
|
|
Управление услугами, Быстрые ответы, Рассылка. Доступ — строго по `ADMIN_IDS`.
|
|
|
|
Текстовые команды (альтернатива кнопкам):
|
|
- `стата` — статистика
|
|
- `ред [N] [поле] [значение]`, `доб [Имя] | [Цена] | [Описание]`, `удал [N]` — услуги
|
|
- `фак доб [слово] | [ответ]`, `фак удал [N]` — быстрые ответы
|
|
- `статус [N] [новый статус]` — статус кандидата
|
|
- `рассылка [текст]` → `рассылка подтвердить` — рассылка подписчикам
|
|
|
|
## Структура
|
|
|
|
```
|
|
bot.py — логика бота (FSM, клавиатуры, админка, рассылка, защита)
|
|
config.py — конфигурация из .env
|
|
database.py — SQLite (заявки, отклики, услуги, быстрые ответы, статистика)
|
|
mailer.py — отправка email
|
|
form/ — веб-форма (server.py, index.html, script.js, style.css)
|
|
help_img/ — картинки (логотип, дисциплины, карьера)
|
|
start_bot.bat — запуск с авто-перезапуском
|
|
```
|
|
|
|
## Данные
|
|
|
|
`bot_database.db`, `.env`, `*.xlsx`, `*.log` и бэкапы `help_img/_orig/` в репозиторий не попадают.
|