- Приветствует пользователя при первом входе в диалог и предлагает варианты: «Интересует / Продолжить», «Не интересует / Прекратить», «Другой вопрос».
- Ветка интереса: меню с «Задать вопрос боту» (FAQ) и «Перейти в беседу кандидатов» (ссылка-инвайт).
- Ветка отказа: мягкое возражение + «Ответы на вопросы» или «Связать с наставником» (ссылка-инвайт) или «Прекратить».
- FAQ: 4 категории + фолбэк «Другое» с попыткой автоответа; если не получилось — приглашение в беседу.
- Кнопка «Запустить бота заново» доступна в ключевых местах.
- Node.js 18+
- Токен сообщества ВК с правами: messages, groups.
- Включены «Сообщения сообщества» и Long Poll API.
cd "bot"
npm install
copy .\env.sample .\.env
notepad .env # вставьте значения переменных
npm run devVK_GROUP_TOKEN— токен доступа сообщества (group access token)VK_GROUP_ID— числовой ID сообществаCHAT_INVITE_URL— ссылка-приглашение в беседу кандидатовLOG_LEVEL— уровень логирования (info|debug|warn|error)ADMIN_IDS— ID администраторов через запятую (для админ-команд)MAX_LOG_SIZE_BYTES— размер логов перед ротацией (по умолчанию 5242880 = 5 МБ)SENTRY_DSN— опционально, DSN для Sentry (мониторинг ошибок)PORT— порт для healthcheck (по умолчанию 3000)RATE_LIMIT_MS— минимальная задержка между сообщениями от одного пользователя (по умолчанию 1000)
Пример: смотрите файл env.sample.
-
Админ-панель: команды для администраторов в ЛС сообщества
stats day/stats week— статистика и конверсииset chat <url>— быстрая смена ссылки на беседуpush <user_id> <текст>— отправка сообщения пользователю
-
Модерация: автоматический фильтр токсичности (настраивается в
data/moderation.json) -
Внешний FAQ: редактирование ответов в
data/faq.yamlбез пересборки -
Аналитика: автоматический сбор событий в
data/analytics.jsonl, экспорт черезnpm run report -
Мониторинг: healthcheck HTTP (
/health), интеграция Sentry (опционально)
src/bot.js— основной файл бота (Long Poll, обработчики payload).src/keyboards.js— клавиатуры.src/faq.js/src/faq_loader.js— загрузка FAQ из YAML.src/config.js— чтение.envи валидация.src/admin.js— админ-команды.src/moderation.js— фильтры модерации.src/storage.js— персистентное хранилище состояния.src/analytics.js— трекинг событий.
- В сообществе включите «Сообщения сообщества».
- Получите токен: Управление → Работа с API → Создать ключ доступа (отметьте сообщения).
- Включите Long Poll API: Управление → Long Poll API → Включить, Версия 5.199.
- Права бота: подписать на события
message_new.
- Запуск dev:
npm run dev - Прод:
npm start - Аналитика:
npm run report(опционально:npm run report week)
- Docker и Docker Compose установлены
- Файл
.envс необходимыми переменными
-
Подготовка переменных окружения
cp env.sample .env # Отредактируйте .env и заполните все значения -
Сборка и запуск через docker-compose
docker-compose up -d --build
-
Проверка работы
# Проверка логов docker-compose logs -f # Проверка healthcheck curl http://localhost:3000/health # Должен вернуть: {"ok":true}
-
Остановка
docker-compose down
-
Скопируйте проект на сервер:
scp -r . user@server:/opt/vk-bot/ -
На сервере:
cd /opt/vk-bot # Создайте .env с реальными значениями docker-compose up -d --build
-
Настройка автозапуска (systemd): Создайте файл
/etc/systemd/system/vk-bot.service:[Unit] Description=VK Bot Ya v Dele Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/opt/vk-bot ExecStart=/usr/bin/docker-compose up -d ExecStop=/usr/bin/docker-compose down [Install] WantedBy=multi-user.target
Затем:
sudo systemctl daemon-reload sudo systemctl enable vk-bot sudo systemctl start vk-bot
# Сборка образа
docker build -t vk-bot-ya-v-dele .
# Запуск контейнера
docker run -d \
--name vk-bot \
--restart unless-stopped \
-p 3000:3000 \
-v $(pwd)/data:/app/data \
--env-file .env \
vk-bot-ya-v-dele-
Volumes (данные):
- Директория
./dataмонтируется в контейнер для сохранения состояния, аналитики и конфигов - Убедитесь, что
data/существует и доступна для записи - Для production рекомендуется бэкапить
data/регулярно
- Директория
-
Healthcheck:
- Бот слушает HTTP на порту
PORT(по умолчанию 3000) - Endpoint:
GET /healthвозвращает{"ok":true} - Можно настроить мониторинг через nginx/haproxy или внешний сервис
- Бот слушает HTTP на порту
-
Логи:
- Логи приложения идут в stdout/stderr контейнера
- Просмотр:
docker-compose logs -f - Для production: настройте ротацию через docker logging driver или внешний сервис
-
Обновление:
git pull docker-compose up -d --build # Или docker-compose restart -
Админ-команды (после деплоя):
- Отправьте в ЛС сообщества команды:
stats day,set chat <url>,push <user_id> <текст> - Требуется указать
ADMIN_IDSв.env
- Отправьте в ЛС сообщества команды:
.
├── Dockerfile # Образ контейнера
├── docker-compose.yml # Конфигурация compose
├── .env # Переменные окружения (не коммитить!)
├── data/ # Данные (создаётся автоматически)
│ ├── user-state.json # Состояние пользователей
│ ├── analytics.jsonl # Аналитика
│ ├── faq.yaml # FAQ (редактируется без пересборки)
│ └── moderation.json # Словарь модерации
├── src/ # Код бота
└── scripts/ # Утилиты (report.js)
- Контейнер не запускается: проверьте
.envи логи (docker-compose logs) - Healthcheck не отвечает: проверьте, что порт 3000 открыт и не занят
- Бот не отвечает: проверьте
VK_GROUP_TOKENи настройки Long Poll API в ВК - Данные не сохраняются: проверьте права на директорию
data/
- ВК не позволяет писать первым без разрешения пользователя. Поэтому приветствие приходит при первом входе в «Сообщения сообщества».
- «Автодобавить» в беседу нельзя — используется ссылка-приглашение.
- FAQ и словарь модерации можно редактировать в
data/faq.yamlиdata/moderation.jsonбез пересборки контейнера (автоперезагрузка включена).