.github | ||
resource | ||
src | ||
.gitignore | ||
LICENSE | ||
pom.xml | ||
README.md | ||
renovate.json |
alert-tg-bot
Телеграм бот, представляющий собой интерфейс для взаимодействия пользователя с mayday. Позволяет добавлять пользователям необходимые алерты и получать нотификации от mayday.
Описание работы сервиса
Бот работает взаимодействуя с Telegram Bot Api. Для взаимодествия с Telegram Bot Api используется polling. Взаимодействие с ботом разрешается только для пользователей, состоящих в общем приватном чате.
Для работы бота необходимо указать параметры:
bot:
token: ${botToken}
name: botName
chatId: ${chatId}
- Для получения botToken и botName необходимо использовать телеграм бота @BotFather, там же ему необходимо установить инлайн-режим командой /setinline.
- chatId - приватный чат, пользователи которого смогут иметь доступ к боту. Бота необходимо добавить в приватный чат и дать ему права администратора. Узнать chatId можно, например, отправив любое сообщение в чат и посмотрев пришедшее событие.
При старте бота либо отправки любого сообщения в бот пользователем в первую очередь проверяется, есть ли у пользователя доступ к боту, для чего проверяется является ли пользователь участником в приватном чате. В случае если участник не состоит в чате либо у него изменился статус (например, пользователь был удален из чата), доступ к боту не разрешается, ранее созданные алерты удаляются.
Хендлеры
Каждый раз когда пользователь взаимодействует с ботом приходит событие с набором параметров, на основе которых выбирается обработчик сообщений:
-
MessageHandler - при получении команды /start либо при отправке любого сообщения в бот формирует главное меню. При формировании главного меню к клавиатуре добавляется callbackData, которая возвращается в событиях боту при нажатии кнопок пользователем.
-
CallbackHandler - обрабатывает сообщения, содержащие callbackData. В обработчике маппятся коллбэки каждой кнопки с действиями, которые необходимо выполнить при нажатии кнопок главного меню, либо после выбора параметра, для которого будет конфигурироваться алерт.
-
InlineHandler - обрабатывает события, которые приходят когда пользователь вводит данные для быстрого поиска из списка. Обработчик формирует список для поиска по введенным символам и показывает список пользователю.
-
ViaBotReplyHandler - обрабатывает событие, которое происходит после того как пользователь выбрал значение из списка.
-
ForceReplyHandler - обрабатывает сообщение, являющееся ответом на вопрос при создании алерта, которое пользователь вводит с клавиатуры вручную.
- ViaBotReplyHandler и ForceReplyHandler после получения значения от пользователя проверяют корректно ли введено значение пользователем и все ли значения конфигурации алерта заполнены. В случае если заполнены все, то формируется запрос в mayday на создание алерта, иначе запрашивается следующее значение для заполнения.
-
MyChatMemberHandler - обрабатывает событие, которое приходит, если пользователь самостоятельно заблокировал бота. В таком случае все алерты, ранее созданные пользователем, удаляются.
-
MainMenuHandler - дополнительный обработчик, который пропускает обработку сообщений в приватном чате, т.к. боту приходят и события из приватного чата, но на них реагировать не надо. Также формирует главное меню, если в бот пользователь просто отправит любое сообщение, не являющееся ответом на вопросы при заведении алерта.
Mayday
Обращение к mayday происходит в случае, когда необходимо сконфигурировать новые алерты, проверить существующие, либо удалить существующие алерты по протоколу
Mayday также обращается к alert-tg-bot по протоколу, когда необходимо отправить юзеру нотификацию в случае срабатывания алерта. Бот отправит нотификацию в чат с пользователем.
##Postgres
База используется для сохранения текущих параметров алерта и стейта пользователя, когда пользователь заполняет данные для создания алерта.
- в parameters_data сохраняется конфигурация алерта, который создает пользователь.
- в state_data сохраняется текущий стейт пользователя, маппятся параметры, которые ввел пользователь, для дальнейшей отправки в mayday сконфигурированного алерта.