Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

BeeWeather

Задача Разработать отказоустойчивый сервис для оповещения абонентов Beeline о прогнозе погоды
Аналитик @Останин Владимир
Системы db.BeeWeather, kazhydromet, BeeWeather systems
-- --

User story

  1. Я как абонент компании Beeline Хочу иметь возможность подписаться на рассылку о прогнозе погоды Для того чтобы оперативно корректировать свои ежедневные планы сразу же после пробуждения

  2. Я как абонент компании Beeline Хочу иметь возможность отключения рассылки Для того чтобы не засорять телефон не актуальной для меня в данный момент времени информацией

  3. Я как клиент компании Beeline Хочу получать SMS-рассылки о прогнозе погоды вне зависимости от своего местоположения Для того чтобы наверняка знать как правильно одеться и на чем будет лучше добраться, находясь в путешествии или в командировке

Activity diagram (прикреплено к сообщению)

Описание сервисов

(при смене страны мы как система понимаем в какой стране в данный момент находится Клиент, как правило в момент пересечения границы, когда появляется связь Клиент получает сообщение о предложении подключить роуминг)

  • Сервис для получения данных от Клиента Метод: POST (PATCH) REQUEST: { "counterpartyId": "5ba50bae-3dda-11eb-aaaf-001dd8b71ef5", "FIO": "Останин Владимир Олегович", "city": "Astana", "country": "Kazakhstan", "smsWeather": "true" }

  • Сервис для получения информации о погоде из Казгидромета Метод: GET REQUEST: { "country": "Kazakhstan" "city": "Astana", } RESPONSE: 200 OK: { "country": "Kazakhstan", "city": "Astana", "temp": "-5", - текущая температура в указанных ед. изм "feels_like": "-10", - температура по ощущениям "temp_min": "-7", - минимальная температура "temp_max": "-3", - максимальная температура "pressure": "743", - атмосферное давление (опционально) "humidity": "81%", - влажность воздуха (опционально) "wind": "18", - скорость ветра в указанных ед. изм. "precipitation": "false", - вероятность выпадения осадков "weather_description": "sunny", - описание погоды }

  • Сервис для отправки SMS-рассылок о погоде Если мы смогли получить информацию о погоде по городу, в котором на данный момент находится наш абонент, то отправляем один из шаблонов сообщений, пример: "Добрый день! Сегодня в вашем городе {city} ожидается {weather_description}. Текущая температура воздуха {temp}. Минимальная температура {temp_min}, максимальная температура {temp_max}, ветер {wind} м/с, осадков не ожидается. Сегодня отличный шанс начать день с пробежки! С заботой о вас, BeeWeather."

Если мы не смогли получить информации о погоде в нужном городе (не отвечает сервер, либо сервер не смог обработать наш запрос, но исходя из исторических данных мы знаем что абонент сменил местоположение в ближайшие дни, предположим что абонент улетел в Грузию) то отправляем один из шаблонов сообщений, пример: "Доброе утро! Доброе пожаловать в "страну вина и хачапури"! Приятной поездки. С прогнозом погоды вернемся завтра :)"

Если мы не смогли получить информации о погоде в нужном городе (не отвечает сервер, либо сервер не смог обработать наш запрос, местоположение абонента не изменялось) то отправляем один из шаблонов сообщений, пример:

"Уважаемый клиент! Мы не смогли определить Ваше текущее местоположение, мы постараемся разобраться и уже завтра продолжить уведомлять о погоде, а пока Вы можете установить наше приложение и узнать погоду в нем, приложение BeeWeather: https://beeweather/appdownload"

Дополнительное описание логики по работе сервисов

  1. Внутренние сервисы получают данные от клиента при смене одного из ключевых параметров, на вход получаем уникальный идентификатор абонента, страну, город, и признак типа boolean (хочет ли абонент получать от нас SMS рассылку о погоде или нет) -> записываем данные в бд
  2. Планировщик по заданному расписанию обращается к бд для того чтобы забрать списки абонентов (участвующих в рассылке), далее отправляет последовательно очередью сообщений запросы в Казгидромет, где на вход отдает такие параметры как "Страна", "Город", в ответ получает детальную информацию о погоде (ОК:200) - после чего данные отправляются на вход следующего планировщика который парсит данные и отправляет SMS-рассылку адресно каждому абоненту. В случае получения "плохого ответа" от сервисов Казгидромета - данные отправляются на вход следующему планировщику который обрабатывает данные и с помощью openAI (подпроцесс не описанный в данной документации) генерирует SMS-сообщения, после чего отправляет адресно каждому абоненту.

About

Информационная система предназначенная для оповещения абонентов Beeline о прогнозе погоды

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors