Files
vk-sales-bot/README.md
T
User bf89e671d8
CI/CD / Test (push) Failing after 4m32s
CI/CD / Deploy (push) Has been skipped
Initial clean history
2026-05-11 16:46:25 +03:00

161 lines
6.4 KiB
Markdown

# VK Sales Bot
VK-бот для сбора заявок в личных сообщениях сообщества. Бот проводит пользователя по сценарию диалога, сохраняет лиды в Excel, пишет логи и делает резервные копии.
## Что умеет
- запрашивает согласие на обработку персональных данных;
- собирает ФИО, телефон и удобное время звонка;
- умеет сохранить данные родителя или опекуна;
- обрабатывает базовые возражения пользователя;
- сохраняет заявки в `data/leads.xlsx`;
- делает резервные копии в `data/backups/`;
- поддерживает административные команды в VK.
## Как работает сценарий
Диалог построен на FSM и проходит по шагам:
`согласие -> ФИО -> данные родителя (опционально) -> телефон -> удобное время -> подтверждение`
После подтверждения лид записывается в Excel-файл. При отказе или возражениях бот может сохранить заявку со статусом `postponed` или `rejected`.
## Требования
- Python 3.11+
- access token сообщества VK с правами `messages` и `groups`
- ID группы VK
## Быстрый старт
1. Создайте виртуальное окружение и установите зависимости:
```powershell
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
```
2. Скопируйте пример конфигурации:
```powershell
Copy-Item .env.example .env
```
3. Заполните `.env`.
4. При желании проверьте токен:
```powershell
python start.py
```
5. Запустите бота:
```powershell
python main.py
```
## Переменные окружения
| Переменная | Описание |
| --- | --- |
| `VK_GROUP_ID` | ID сообщества VK |
| `VK_TOKEN` | токен группы VK |
| `ADMIN_IDS` | список ID администраторов через запятую |
| `DATA_DIR` | директория для рабочих данных |
| `LEADS_FILE` | путь к Excel-файлу с лидами |
| `BACKUP_DIR` | директория для резервных копий |
| `LOG_LEVEL` | уровень логирования |
| `TIMEZONE` | часовой пояс приложения |
Пример уже есть в [.env.example](./.env.example).
## Административные команды
Команды доступны только пользователям из `ADMIN_IDS`:
- `/status` — проверить, что бот работает;
- `/export` — создать копию файла с лидами;
- `/backup` — создать резервную копию вручную;
- `/stats` — показать статистику по лидам;
- `/reload` — перезагрузить тексты из `config/phrases.py` без перезапуска.
## Docker
Для запуска через Docker:
```powershell
docker compose up --build -d
```
Контейнер монтирует локальные каталоги:
- `./data -> /app/data`
- `./logs -> /app/logs`
## CI/CD
В репозитории добавлен workflow для Gitea Actions: [`.gitea/workflows/ci-cd.yml`](./.gitea/workflows/ci-cd.yml).
Что делает pipeline:
- на `push` и `pull_request` запускает тесты;
- если у runner есть доступ к Docker, дополнительно проверяет сборку образа;
- на `push` в `main` деплоит проект на сервер по `SSH` и выполняет `docker compose up -d --build`.
Что нужно настроить в Gitea:
1. Включить `Repository Actions` в настройках репозитория.
2. Поднять runner с меткой `ubuntu-latest`.
Если у runner другая метка, замените `runs-on` в workflow.
3. Добавить secrets репозитория:
- `SSH_PRIVATE_KEY` — приватный ключ для входа по SSH;
- `SSH_KNOWN_HOSTS` — публичный host key сервера, рекомендуется для безопасной проверки хоста.
Требования на сервере:
- установлен `docker` и `docker compose`;
- установлен `rsync`;
- проект деплоится в `/opt/vk-sales-bot`;
- в `/opt/vk-sales-bot` уже есть рабочий `.env`, потому что workflow его не перезаписывает;
- workflow подключается как `root` на `infocyber.pro`.
Важно:
- workflow уже привязан к `root@infocyber.pro` и пути `/opt/vk-sales-bot`;
- локальный alias для подключения к серверу у вас называется `ea2go`;
- бот не публикует порты в `compose.yaml`, поэтому сам по себе не должен конфликтовать с Gitea на том же сервере.
## Тесты
В репозитории есть базовые тесты для валидации и логики проекта.
```powershell
pip install pytest
pytest tests/
```
## Структура проекта
- [main.py](./main.py) — основная точка входа;
- [start.py](./start.py) — быстрая проверка токена VK;
- [config](./config) — настройки и текстовые фразы;
- [core](./core) — FSM, модели, валидация и экспорт;
- [services](./services) — интеграция с VK API;
- [utils](./utils) — логирование, middleware и бэкапы;
- [tests](./tests) — тесты;
- [docs](./docs) — дополнительные инструкции.
## Данные и логи
- лиды сохраняются в `data/leads.xlsx`;
- резервные копии создаются в `data/backups/`;
- логи пишутся в `logs/bot.log`.
## Документация
- [Руководство оператора](./docs/user_guide.md)
- [Документация разработчика](./docs/developer_guide.md)