Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VK Bot — «Я в деле · Мурманская область»

Что делает

  • Приветствует пользователя при первом входе в диалог и предлагает варианты: «Интересует / Продолжить», «Не интересует / Прекратить», «Другой вопрос».
  • Ветка интереса: меню с «Задать вопрос боту» (FAQ) и «Перейти в беседу кандидатов» (ссылка-инвайт).
  • Ветка отказа: мягкое возражение + «Ответы на вопросы» или «Связать с наставником» (ссылка-инвайт) или «Прекратить».
  • FAQ: 4 категории + фолбэк «Другое» с попыткой автоответа; если не получилось — приглашение в беседу.
  • Кнопка «Запустить бота заново» доступна в ключевых местах.

Требования

  • Node.js 18+
  • Токен сообщества ВК с правами: messages, groups.
  • Включены «Сообщения сообщества» и Long Poll API.

Быстрый старт (Windows PowerShell)

cd "bot"
npm install
copy .\env.sample .\.env
notepad .env  # вставьте значения переменных
npm run dev

Переменные окружения (.env)

  • VK_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 — трекинг событий.

Настройка ВК

  1. В сообществе включите «Сообщения сообщества».
  2. Получите токен: Управление → Работа с API → Создать ключ доступа (отметьте сообщения).
  3. Включите Long Poll API: Управление → Long Poll API → Включить, Версия 5.199.
  4. Права бота: подписать на события message_new.

Типичные команды

  • Запуск dev: npm run dev
  • Прод: npm start
  • Аналитика: npm run report (опционально: npm run report week)

🐳 Деплой на Docker

Требования

  • Docker и Docker Compose установлены
  • Файл .env с необходимыми переменными

Быстрый старт

  1. Подготовка переменных окружения

    cp env.sample .env
    # Отредактируйте .env и заполните все значения
  2. Сборка и запуск через docker-compose

    docker-compose up -d --build
  3. Проверка работы

    # Проверка логов
    docker-compose logs -f
    
    # Проверка healthcheck
    curl http://localhost:3000/health
    # Должен вернуть: {"ok":true}
  4. Остановка

    docker-compose down

Деплой на сервер (production)

Вариант 1: Через docker-compose

  1. Скопируйте проект на сервер:

    scp -r . user@server:/opt/vk-bot/
  2. На сервере:

    cd /opt/vk-bot
    # Создайте .env с реальными значениями
    docker-compose up -d --build
  3. Настройка автозапуска (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

Вариант 2: Через Docker (без compose)

# Сборка образа
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

Важные моменты при деплое

  1. Volumes (данные):

    • Директория ./data монтируется в контейнер для сохранения состояния, аналитики и конфигов
    • Убедитесь, что data/ существует и доступна для записи
    • Для production рекомендуется бэкапить data/ регулярно
  2. Healthcheck:

    • Бот слушает HTTP на порту PORT (по умолчанию 3000)
    • Endpoint: GET /health возвращает {"ok":true}
    • Можно настроить мониторинг через nginx/haproxy или внешний сервис
  3. Логи:

    • Логи приложения идут в stdout/stderr контейнера
    • Просмотр: docker-compose logs -f
    • Для production: настройте ротацию через docker logging driver или внешний сервис
  4. Обновление:

    git pull
    docker-compose up -d --build
    # Или
    docker-compose restart
  5. Админ-команды (после деплоя):

    • Отправьте в ЛС сообщества команды: 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)

Troubleshooting

  • Контейнер не запускается: проверьте .env и логи (docker-compose logs)
  • Healthcheck не отвечает: проверьте, что порт 3000 открыт и не занят
  • Бот не отвечает: проверьте VK_GROUP_TOKEN и настройки Long Poll API в ВК
  • Данные не сохраняются: проверьте права на директорию data/

Примечания

  • ВК не позволяет писать первым без разрешения пользователя. Поэтому приветствие приходит при первом входе в «Сообщения сообщества».
  • «Автодобавить» в беседу нельзя — используется ссылка-приглашение.
  • FAQ и словарь модерации можно редактировать в data/faq.yaml и data/moderation.json без пересборки контейнера (автоперезагрузка включена).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages