Начать проект

Приложение для бортпроводников c 12 интеграциями и работой без интернета

Высшая оценка от бортпроводников S7 Airlines

Перед нами стояла задача — разработать мощный сервис (12 интеграций, backend, frontend, analytics, design), который решил бы сразу несколько проблем авиакомпании S7 и ее бортпроводников.

Цели проекта

  • Сократить время на ведение отчетности: до, во время и после рейса.
  • Улучшить клиентский сервис: бортпроводник должны иметь постоянный доступ к информации о каждом пассажире бизнес-класса, чтобы оказать уникальный, персонализированный сервис.
  • Предоставить доступ к актуальной информации даже при плохом интернет-соединении: позволит бортпроводникам не брать в самолет по 10 килограмм бумаги.
  • Дать возможность собирать аналитическую информацию для развития компании.

Вызов проекта

Наш продукт должен предоставлять актуальную информацию о рейсе в режиме онлайн. Проблема в том, что большую часть времени его будут использовать над землей — в оффлайне или при низком качестве соединения, но при этом этом сервис должен хранить более 200 мегабайт данных, необходимых для совершения рейса.

Еще одной сложностью стали интеграции с 12 динамически развивающимися сервисами.

До KOTELOV

Бортпроводники испытывали трудности в ознакомлении с новыми документами, а еще тратили от 20 до 60 минут на заполнение массы бумажных отчетов. Старший бортпроводник носил с собой около десяти килограмм документации на рейс.

Кроме того, администраторам было сложно обработать полученную информацию — например, из-за непонятного почерка.

Также экипаж получал перед вылетом все данные на бумажном брифинге, и если во время рейса ситуация менялась, например, с задержками, он не мог узнавать об изменениях.

Процесс работы

Мы поселили наших системных и бизнес-аналитиков рядом с Домодедово, чтобы они в течение года ежедневно ходили в офис S7 и изучали процессы компании.

В офисе заказчика они провели множество интервью с главами различных служб, включая пассажирский сервис, логистику, безопасность, бортпроводников и маркетинг. Определили бизнес-требования, нашли проблемы бизнеса, его потребности и определили текущие процессы, которые нуждаются в оптимизации. В итоге мы составили спецификацию требований и разработали отдельные технические задания по каждому блоку:

  • функционал библиотеки;
  • информативный календарь рейсов;
  • питание пассажиров эконом-класса, бизнес-класса и спецпитание;
  • блок общей информации о рейсе;
  • система оповещений о дефектах пассажирского судна;
  • отображение всевозможных грузов;
  • схемы аварийно-спасательного оборудования;
  • анкетирование пассажиров;
  • два вида чатов для коммуникации с service desk и центром обслуживания пассажиров;
  • работа с отчетами;
  • блок работы с пассажирами;
  • информация об экипаже рейса.

Результат

Мы разработали специальный сервис Cabin Crew Pad — основной рабочий инструмент для бортпроводников до рейса, во время и после него. Он включает в себя приложение на iPad для старших бортпроводников с расширенным функционалом.

Также программа имеет портал администратора — веб-сервис для настроек и загрузки данных для устройств, анализа послерейсовой отчетности.

А еще мы разрабатываем Android-версию приложения для рядовых проводников. Приложение включает электронную библиотеку нормативных, накладных актов и других данных по отчетности. Помогает в адресном обслуживании пассажиров, содержит информацию по категориям пассажиров.

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

Приложение для iPad

Вот как выглядит и что включает приложение для старших бортпроводников.

Календарь рейсов

Удобный календарь рейсов с возможностью отобразить время по UTC, аэропорту базирования, месту прилета.

Приложение для бортпроводников c 12 интеграциями и работой без интернета

Рейс

Приложение для бортпроводников сообщает информацию о рейсе на дашборде по принципу атомарности.

Приложение для бортпроводников S7 Airlines имеет календарь

Отчеты

Теперь бортпроводнику нет необходимости после рейса нести отчеты администратору, все разместили в удобный интерфейс, который отправляет отчеты в админку. Провели кучу юзабилити-тестов, чтобы это было удобно и быстро.

Задача было крайне сложной, так как в самолете нет интернета и в аэропортах отображается обычно только «ешка». Пол года мы потратили на то, чтобы тяжелые отчеты с фотографиями и видео инцидентов перестали теряться и всегда доходили до админки.

Приложение для бортпроводников S7 Airlines помогает создавать отчеты

Карта салона

Бортпроводник теперь получает самую актуальную информацию о пассажирах – видит, тех кто опоздал и не попал на рейс. Также выделены особые пассажиры, например с малой мобильностью, животными.

Бортпроводник имеет возможность оперативно найти каждого пассажира с помощью текстового поиска или кликнуть по месту в салоне на своем планшете:

Карточка пассажира Содержит в себе информацию об особенности его перевозки и ведет к дополнительной информации о нем:

Меню

Показывает предпочтения пассажира по питанию в бизнес классе, также помогает бортпроводнику не забыть заказы:

Анкета и обратная связь

Приложение для бортпроводников включает возможность заанкетировать пассажира или получить обратную связь, которая отобразится у руководителя службы бортпроводников:

Компенсации

На рейсе пассажир может получить компенсацию за косяки авиакомпании:

Приложение для бортпроводников S7 Airlines помогает оформить компенсацию пассажиру из-за ошибок авиакомпании

Накладные

Накладные помогают в учете потраченного на рейсе имущества, что помогает экономить на закупках:

Приложение для бортпроводников S7 Airlines помогает оформить накладные

Экипаж

Приложение для бортпроводников отображает коллег на рейсе, также старший бортпроводник имеет возможность сменить позиции экипажа:

Приложение для бортпроводников S7 Airlines показывает ваших коллег

Чат

Внедрен чат с экипажем и наземными службами:

Библиотека

Десять килограмм бумаги перевели в удобный интерфейс с поиском, интерактивным оглавлением и закладками:

Виджет

Приложение для бортпроводников включает даже виджет.

UI-kit

Собрали красивый ui-kit

Архитектура Backend

Основная архитектура нашего Backend представляет собой монолитное приложение. В его основе лежат технология PHP 7.4 с фреймворком Yii, кеширование осуществляется с помощью Redis, данные хранятся в базе данных PostgreSQL, а в качестве веб-сервера используется NGINX Unit. До конца 2024 года у нас запланирован переход на PHP версии 8.1 или 8., что позволит улучшить производительность и безопасность системы.

Backend также включает унифицированные интеграции для взаимодействия с различными сервисами. Это интеграции с сервисами авторизации и внешними службами через REST API, включая Kafka REST. Кроме того, используются Kafka-коннекторы для обеспечения надежного обмена данными и интеграции с удаленными базами данных.

Абсолютная безопасность данных

Все корпоративные устройства, которыми владеют бортпроводники, управляются с помощью MDM (Mobile Device Management). Даже если планшет потеряется, администратор может удаленно его заблокировать и стереть все данные.

На каждом из них установлен корпоративный VPN для шифрования всего канала связи, а это гарантирует безопасный обмен данными в любой среде.

Весь трафик проходит через серверы корпоративной службы безопасности. Авторизация — с использованием сервиса WSO2, machine to machine (m2m).

Важный момент: вся авторизация, весь Backend стоит на инфраструктуре заказчика и контролируется dpi-системой службы безопасности S7.

Тестирование и производительность Backend

Чтобы приблизиться к 100-процентному SLA, мы должны обеспечить соответствующее тестирование и мониторинг системы. Для этого используются юнит-тесты и функциональные тесты, которые помогают выявлять и устранять ошибки на ранних стадиях разработки.

Наша система обладает высокой масштабируемостью благодаря семи контейнерам, работающим в режиме Master-Slave в реальном времени. Эти контейнеры постоянно мониторятся системой Zabbix, что обеспечивает поддержание 100-процентного SLA. База данных является распределенной, что способствует повышению надежности и производительности системы.

Для взаимодействия с клиентами у нас разработаны три отдельных приложения. Еще три приложения используются для планирования задач, а одно приложение предназначено для сбора метрик. Этот комплексный подход позволяет эффективно управлять всеми аспектами работы системы и обеспечивать высокое качество обслуживания.

Как обеспечить оффлайновый Backend

Нужна эффективная синхронизация данных до и после перехода в оффлайн-режим. Перед тем как система переходит в оффлайн, сервер должен обеспечить их максимальную полноту, чтобы пользователи имели доступ ко всей необходимой информации.

Синхронизация данных осуществляется по принципу диффов (Diffs), что позволяет загружать только изменения, а не весь объем данных целиком. Этот метод обеспечивает быструю и эффективную актуализацию данных, снижает затраты на передачу и обработку информации.

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

Архитектура мобильного приложения iOS

Наш проект стартовал на Objective-C, но со временем мы переехали на Swift, чтобы улучшить качество кода и упростить его поддержку. В процессе разработки мы используем следующие основные фреймворки и библиотеки: SwiftKeychainWrapper, Swinject, Then, AFNetworking, Kingfisher, ReachabilitySwift, Alamofire, GRDB, SnapKit, Firebase и SwiftGen.

Для старого кода используется архитектура MVC, которая уже считается устаревшей. Для нового функционала мы перешли на MVVM, поскольку эта архитектура помогает четко разделить логику представления, бизнес-логику и данные, что делает код более структурированным, с ней проще писать тесты для каждого компонента и привязывать данные из модели к представлению, а это ускоряет разработку и уменьшает количество ошибок.

Почему сначала разрабатывали на iOS

В 2016 году, когда начался проект, у нас был корпоративный сертификат разработки от Apple, который позволял нам устанавливать любое приложение на любое устройство без необходимости загрузки в Apple Store. Это дало нам значительное преимущество в начальной фазе разработки.

Еще плюсы iOS

  • Высокий уровень безопасности: iOS предоставляет надежные механизмы безопасности, что особенно важно для корпоративных приложений.
  • Наличие MDM-систем: Системы управления мобильными устройствами (MDM) позволяют централизованно управлять устройствами и обеспечивать их безопасность.
  • Хороший уровень UI: iOS славится качественным пользовательским интерфейсом, что способствует созданию удобных и привлекательных приложений.

Интеграции мобильного приложения iOS

Наше приложение интегрировано с различными системами и сервисами для обеспечения полной функциональности:

  • Интеграция с сервисом продаж на борту: Обеспечивает доступ к данным продаж и управлению ими во время полета.
  • API интеграции: Подключение к локальной сети на борту (MediaHub) для обмена данными.
  • Операции с данными в оффлайне: Поддержка создания, изменения и удаления данных в оффлайн-режиме.

Мы стремились использовать существующие API, которые уже были разработаны внутри компании заказчика. Это включало сервис продаж, систему развлечений и операции с данными в оффлайн-режиме. Такой подход позволил нам ускорить процесс разработки и интеграции, используя уже проверенные и надежные решения.

Оптимизация и производительность мобильного приложения iOS

Мы провели исследование и выяснили, что больше всего раздражает пользователей. Одной из главных проблем была долгая авторизация, так как все привыкли к быстрому входу. В ответ на это мы сократили время авторизации до двух секунд.

Также пользователей раздражал крутящийся значок до Full Load — полной загрузки на страницы. Мы реализовали фоновую загрузку с отображением прогресса.

Архитектура мобильного приложения Android (в разработке)

Архитектура нашего мобильного приложения для Android основана на принципах Clean Architecture. Основные компоненты архитектуры включают Navigation, MVVM (частично MVI), Coroutines, Room, WorkManager и Services. Для внедрения зависимостей используется Koin, а для работы с сетью — Retrofit. Дополнительно, в проекте используются библиотеки Glide и Firebase.

На данный момент Android-версия приложения всё ещё находится в разработке и пока не полностью повторяет функционал доступный в версии для iOS.

Интеграции мобильного приложения Android

Все ресурсы приложения проходят через API Backend. Для работы с системой продаж на борту (MediaHub) используется отдельное API. Важно отметить, что Backend рассматривает API сервисы одинаково как для Android, так и для iOS, что обеспечивает унифицированный подход к интеграциям.

Оффлайн функциональность мобильного приложения Android

Для обеспечения оффлайн функциональности в приложении реализовано кэширование данных, что позволяет нивелировать различия между оффлайн и онлайн режимами. Принудительное обновление данных перед вылетом является одной из ключевых функций, которая позволяет загружать данные без участия Backend и пользователя с помощью AlarmManager. Синхронизация данных выполняется по окончании рейса, что обеспечивает актуальность информации.

Оптимизация и производительность мобильного приложения Android

Система iOS унифицирована, и разработка ведется под ограниченное количество устройств. В случае с Android — разнообразие процессоров, архитектур и доступных GPU. Основные узкие места включают работу с сетью, графикой и обработку больших массивов данных.

Для работы с сетью мы применяем подход оффлайн-first и минимизируем блокирующие операции. Обработка данных оптимизирована за счет предгенерации данных для ускорения доступа. Для работы с графикой проведена оптимизация карты салона и PDF-файлов, что улучшает производительность приложения и качество отображения.

Проблемы, с которыми мы столкнулись

Оказалось, что на iOS проще работать с графикой, поскольку графический ускоритель (GPU) унифицирован. Разнообразие процессоров, архитектур и GPU на устройствах Android затрудняет разработку и оптимизацию. Еще одной проблемой стало — ограниченное количество доступных библиотек: Нам пришлось создавать собственные «костыли» — части кода, которые заменяют недостающие функции, чтобы обеспечить нужную функциональность.

Тестирование мобильного приложения Android

Из-за высокой стоимости и значительной продолжительности проекта (восемь лет) мы отказались от прямолинейного тестирования, так как цена ошибки слишком велика. Вместо этого мы используем Firebase Crashlytics для отслеживания работы приложения и выявления ошибок. Кроме того, мы добавили Performance-метрику производительности, чтобы обеспечить высокое качество работы и своевременное выявление проблем в производительности приложения.

В итоге

  • Сократили время на ведение послерейсовой отчетности с 60 до 2 минут;
  • Сэкономили 60 тонн бумаги: теперь вся информация — на электронном носителе;
  • Экипаж имеет доступ к актуальным данным, даже во время полета;
  • Более 60 процентов задач выполняются на планшете.

Приложение для бортпроводников помогает планировать персоналу работу заранее с наглядной схемой салона, а также видят всю нужную информацию по пассажирам — кому предоставить специальное питание, где сидят инвалиды и семьи с младенцами, какие есть специальные требования у VIP-пассажиров.

А чтобы узнать абсолютно все подробности реализации проекта — переходите смотреть презентацию Валеры Котелова и Александры Соколовой (S7), где они объяснили каждое рабочее решение.

Результаты

Это уже вторая версия приложения CCP, первую мы начали делать 5 лет назад и развивали ее все эти годы. Сейчас новое приложение обрастает функционалом, переехало с iOS на Android, и будет только расти. 

- 10 кг
бумажной документации
1000
пользователей
12
систем интеграции
7800
отчетов оцифровываем в день
в 2 раза
Ускорили заполнение отчетов
на 520
рейсах в день используется софт
15 000 000
отчетов оцифровали за все время
14 000 000
расходников учитывается в год
- час работы
отчеты высылаются онлайн

Технологии

Swift
Kotlin
Postgress
Kafka
Angular
Yii2

Команда

Влад Савин
Руководитель проекта
Алексей Черногор
Бэкенд тимлид
Влад Богдашкин
Мобайл тимлид
Володя Вербицкий
Фронтенд тимлид
Артем Суслов
Дизайнер
Никита Опалинский
Дизайнер
Алексей Потапов
Фронтенд-разработчик
Антон Войтковский
бэкенд-разработчик
Леша Загороднев
Тестер
Дима Кушнер
Мобайл-разработчик

Ребята из Kotelov разработали масштабную систему, которая требовала крайне высокую техническую экспертность и позволила поднять сервис на борту самолетов на новый уровень

Александр Лукаш

Product owner S7 Airlines