VkBot Application
VkBot — это бот для ВКонтакте, реализованный на Spring Boot. Приложение принимает входящие запросы от VK Callback API, обрабатывает их и отправляет эхо-ответы пользователям (например, «Вы сказали: …»). Приложение разделено на три основных слоя: контроллер, сервис и модели (DTO). Оно также использует глобальный обработчик исключений для централизованной обработки ошибок, а настройки конфигурации (например, ключи VK) задаются через переменные окружения, что повышает безопасность.
⸻
Основные компоненты
- Точка входа и конфигурация
VkBotApplication.java • Описание: Точка входа приложения. • Функционал: Запускает Spring Boot через SpringApplication.run().
JacksonConfig.java • Описание: Конфигурация для Jackson. • Функционал: Создает бин ObjectMapper с зарегистрированным KotlinModule для корректной работы с Kotlin data-классами.
⸻
- Контроллер
VkBotController.java • Описание: REST-контроллер для обработки запросов от VK Callback API. • Функционал: • При запросе с типом confirmation возвращает токен подтверждения. • При запросе message_new десериализует входящий JSON в объект VkMessageEvent, извлекает данные сообщения и передает их в сервис отправки ответа. • Выполняет базовую валидацию входящих данных и логирует полученные события.
⸻
- Модели (DTO)
ClientInfo.kt • Описание: Информация о клиенте, отправившем сообщение. • Функционал: Содержит свойства: button_actions, keyboard, inline_keyboard, carousel, lang_id.
GroupJoinEvent.kt • Описание: Событие присоединения к группе. • Функционал: Отражает структуру JSON для события (поля: type, event_id, v, group_id и вложенный объект).
GroupJoinObject.kt • Описание: Вложенный объект события присоединения к группе. • Функционал: Содержит user_id и join_type.
Message.kt • Описание: Сообщение от VK. • Функционал: Хранит текст, идентификаторы отправителя (from_id) и получателя (peer_id), дату, а также другие метаданные (например, attachments).
MessageContainer.kt • Описание: Контейнер для сообщения. • Функционал: Поддерживает две структуры: стандартный вариант с вложенным объектом message и альтернативный, когда поля (например, body, user_id) приходят напрямую.
VkMessageEvent.kt • Описание: Событие, получаемое от VK Callback API. • Функционал: Содержит поля type, event_id, v, group_id, secret и контейнер с данными сообщения (obj).
⸻
- Сервисы
VkBotService.java • Описание: Простой сервис для обработки входящих сообщений. • Функционал: Возвращает эхо-сообщение в виде строки «Вы сказали: …». Может быть расширен для дополнительной логики.
VkMessageService.java • Описание: Сервис отправки сообщений через VK API. • Функционал: • Инициализирует VkApiClient и GroupActor на основе параметров из конфигурации. • Проверяет входящие параметры (например, peerId, messageText) и генерирует уникальный идентификатор randomId для предотвращения дублирования сообщений. • Отправляет эхо-сообщение через метод sendDeprecated (выбранный для вашей версии VK SDK). • Обрабатывает ошибки, например, если пользователь не разрешил сообщения (код ошибки 901), и логирует исключения через SLF4J.
⸻
- Глобальный обработчик исключений
GlobalExceptionHandler.java • Описание: Глобальный обработчик исключений с помощью @ControllerAdvice. • Функционал: Перехватывает все необработанные исключения в контроллерах, логирует их и возвращает ответ с HTTP-статусом 500 (Internal Server Error).
⸻
- Конфигурация приложения
application.properties.example • Описание: Шаблонный файл конфигурации. • Функционал: Содержит перечень необходимых параметров, заданных через переменные окружения (например, ${VK_APP_ID}). Реальные значения не включаются в репозиторий, что повышает безопасность.
⸻
Итог
Приложение разделено на четкие слои: контроллер отвечает за прием и первичную обработку входящих запросов, сервисы — за бизнес-логику отправки сообщений, а модели структурируют данные из VK. Глобальный обработчик исключений обеспечивает единообразную обработку ошибок, а использование переменных окружения помогает безопасно хранить конфиденциальные данные.
