Бот для агрегации писем с электронной почты в популярные мессенджеры. На текущий момент реализована работа с мессенджерами Вконтакте и Telegram
Сервис, отвечающий за обработку и отслеживание обновлений на электронных почтах пользователей. В данном сервисе также производится регистрация пользователей и их эллектронных почт.
Для корректного запуска сервиса, необходимо сначала настроить конфигурацию в файле application.properties:
app.vkBotBaseUrl=${VK_BOT_BASE_URL} //URL для обмена сообщениями с сервисом бота Вконтакте через HTTP
app.tgBotBaseUrl=${TG_BOT_BASE_URL} //URL для обмена сообщениями с сервисом бота Telegram через HTTP
app.test.email=${TESTING_EMAIL} //Для запуска тестов, необязательное поле
app.test.host=${TESTING_HOST} //Для запуска тестов, необязательное поле
app.test.password=${TESTING_PASSWORD} //Для запуска тестов, необязательное поле
server.port=8080
#openApi
springdoc.swagger-ui.path=/swagger-ui
#postgres //Настраивается в соответсвии с данными для подключения к БД
spring.datasource.driver-class-name= org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5443/emailService?stringtype=unspecified
spring.datasource.username=postgres
spring.datasource.password=ememebot
#migrations
spring.liquibase.enabled=true
spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.yaml
#kafka
spring.kafka.bootstrap-servers=${KAFKA_SERVER:localhost:9092} //Сервер, для асинхронного взаимодействия сервисов (Сервер с запущенным Apache Kafka)
spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
spring.kafka.producer.properties.spring.json.add.type.headers=false
kafka.isEnabled=true //Если true, то сервисы общаются асинхронно, с помощью Kafka, при false, сервисы общаются через HTTP
kafka.vkBotTopic=VkUpdate
kafka.tgBotTopic=TelegramUpdate
#S3
aws.accessKey=${AWS_ACCESS_KEY} //Ключ доступа к облачному хранилищу S3
aws.secretKey=${AWS_SECRET_KEY} //Секретный ключ
aws.bucketName=${AWS_BUCKET_NAME} //Название бакета, в который будут загружаться файлы с почты
aws.region=${AWS_REGION:ru-central1} //Автоматически настроены на сервера Яндекс.Cloud
aws.endpoint=${AWS_ENDPOINT:storage.yandexcloud.net}
После завершения конфигурации можно собрать проект.
Обработка и агрегация писем с почты происходит автоматически. Удаления файлов из облачного хранилища так же происходит регулярно. Для регистрации пользователей и получения от них почтовых данных, которые будут проверяться ботом, нужно взаимодействовать с сервисом через REST-API.
Список и краткое описание всех методов API:

Более подробные описания методов API и DTO, которыми они оперируют, можно получить по пути {host}/swagger-ui или
в open-api спецификации в файле EmemeEmail.yaml, который можно найти по пути: /EmemeEmail/src/main/resources/EmemeEmail.yaml
После регистрации пользователя и получения обновления с зарегистрированных им почт, сервис отправляет информацию об обновлении с помощью Apache Kafka или с помощью Rest-API ботов, в зависимости от параметра kafka.isEnabled из application.properties.
Вспомогательный модуль-библеотека был сконструирован для общей реализации функционала микросервисов типа Sender(VkBot, TelegramBot, ...) отвечающих за пользовательское взаимодействие с чат-ботом в определенной социальной сети. (ВК, Телеграмм, ...)
Абстрактный класс BotCommand<MESSAGE> с абстрактным методом execute(MESSAGE message) и полем String command вместе с конструктором который нужно будет переопределить классу наследнику, сделаны для более удобного добавления команд чат-бота и их выполнения, а класс CommandHandler<MESSAGE> реализован с конструктором со списком комманд и функцией определения имени комманды по классу MESSAGE public CommandHandler(List<BotCommand<MESSAGE>> commands, Function<MESSAGE, String> commandNameFunction) для добавления комманд и их соответствующей обработки.

Для работоспособности проекта нужно определить некоторые общие обязательные конфигурации, такие как: Конфигурационные настройки доступа к облачному хранилищу AWS S3
- AWS_ACCESS_KEY
- AWS_SECRET_KEY
- AWS_BUCKET_NAME
Однако у каждого микросервиса есть свои отдельные необходимые настройки доступа:
- BOT_TOKEN - Токен телеграмм бота
server:
port: 9999
service:
emailUrl: ${EMAIL_URL:http://localhost:8080}
bot:
telegram:
token: ${BOT_TOKEN} // Токен телеграмм бота
springdoc:
swagger-ui:
path: swagger-ui
kafka:
serverUrl: ${KAFKA_SERVER_URL:localhost:9092}
groupId: ${KAFKA_MESSAGE_GROUP_ID:"letter_message"}
topicName: ${KAFKA_TOPIC_NAME:TelegramUpdate}
isEnabled: true
http:
controller:
isEnabled: true
aws:
accessKey: ${AWS_ACCESS_KEY}
secretKey: ${AWS_SECRET_KEY}
bucketName: ${AWS_BUCKET_NAME}
region: ${AWS_REGION:ru-central1}
endpoint: ${AWS_ENDPOINT:storage.yandexcloud.net}
- token: BOT_TOKEN - Токен ВК бота
- groupId: 220038078 - ID группы сообщества-бота
- confirmationCode: SERVER_RESPONSE - Callback настройка ответа микросервиса на подтверждение webhook адреса
- secret: ${SECRET} // Callback секретный ключ для идентификации получаемых обновлений
server:
port: 9090
springdoc:
swagger-ui:
path: "/swagger-ui"
vk:
bot:
config:
token: ${BOT_TOKEN} // Токен ВК бота
groupId: 220038078 // ID группы сообщества-бота
callback:
confirmationCode: ${SERVER_RESPONSE} // Callback настройка ответа микросервиса на подтверждение webhook адреса
secret: ${SECRET} // Callback секретный ключ для идентификации присылаемых обновлений
kafka:
serverUrl: ${KAFKA_SERVER_URL:localhost:9092}
groupId: ${KAFKA_MESSAGE_GROUP_ID:"letter_message"}
topicName: ${KAFKA_TOPIC_NAME:VkUpdate}
isEnabled: true
http:
controller:
isEnabled: true
service:
emailUrl: http://localhost:8080/
aws:
accessKey: ${AWS_ACCESS_KEY}
secretKey: ${AWS_SECRET_KEY}
bucketName: ${AWS_BUCKET_NAME}
region: ${AWS_REGION:ru-central1}
endpoint: ${AWS_ENDPOINT:storage.yandexcloud.net}
Ручка /tgbot/updates/{chatId} - предназначен для получения новых сообщений с почты пользователей чат-бота Телеграм
Ручка / - для обработки входящих обновлений с Телеграмм сервера с помощью Webhook

Урл /vkbot/updates/{chatId} - необходим при получении новых писем с почты пользователей чат-бота Вконтакте


