
BusTicket это административная система автобусного перевозчика. Всё, что происходит после того, как пассажир нажал «Купить билет»: рейсы и расписания, автобусы и схемы салона, цены по отрезкам маршрута, брони, входящие звонки, деньги партнёров, агентов и диспетчеров. Пассажир видит сайт с поиском рейса и выбором места, а перевозчик видит вот это.
Система работает за сайтами перевозчиков, для которых мы её делали, поэтому на скриншотах встречается брендинг Svit BUS и Bus Prestige. Данные на экранах тестовые: «ФОП Перевізникович» реального автобуса не водит. Собирали систему на нашем генераторе Fractal: схема данных, API с документацией и базовая админка генерируются, а руками пишется то, что делает перевозку перевозкой. Маршруты, места, цены, брони и деньги.
Видео-обзор (старая версия)
Ниже три записи прототипа. Первая снята на четвёртом месяце разработки, это общий обзор. Вторая показывает бронирование глазами пассажира, третья работу администратора. Интерфейс с тех пор подрос, логика та же.
Прототип: 4-й месяц разработки
Прототип: процесс бронирования
https://www.youtube.com/watch?v=aIUdo1nllLM
Прототип: процесс администрирования (звук, честно скажем, так себе, зато всё видно)
https://youtu.be/IJ0R05LkxnE?si=3utWHFMUWiLsjSUh
Админка BusTicket построена на типовой теме AdminLTE (Bootstrap 4). Это быстро, недорого и привычно операторам: таблицы, фильтры, формы, всё на своих местах. Если бизнесу нужен свой фирменный интерфейс, мы делаем и индивидуальный дизайн административной системы, не по шаблону. Пример другого оформления нашей разработки:
platFORMA, система для отделов компании

Список функций административной системы
Систему мы разложили по рабочим местам. Собственник (администратор), менеджер рейсов, перевозчик-партнёр, диспетчер и агент заходят в одну и ту же систему, но каждый видит только своё меню. Меньше лишних кнопок, меньше случайных ошибок, проще обучать новых людей. Вот что в ней есть:
- Корпоративная защищенная многопользовательская система
- Панель собственника: все цифры и пульс компании
- Панель броней и история броней с поиском и фильтрами по параметрам
- Панель партнёров-перевозчиков
- Панель менеджеров
- Панель операторов
- Панель водителя (маршрут, проверка билетов)
- Конструктор любых типов автобусов и удобств
- Конструктор рейсов, остановок, пересадок
- Конструктор скидок
- Конструктор опций (удобства, багаж, …)
- Автоматическая генерация по выездам с интервалами
- Расчёт цен по отрезкам и остановкам
- Автоматическое и продвинутое ценообразование
- Расчёт зарплат сотрудникам, выплаты
- Финансы, доходы, расходы
- Статистика продаж по направлениям
- Телефония (фиксация приёма звонков, информация о звонке, текст звонка)
- Отслеживание поведения клиентов на сайте (клики, движения мышью)
- Справочник рейсов, города, остановки, конструктор удобств
Полный перечень функциональности
Теперь по порядку, что стоит за каждой строчкой списка.
Корпоративная защищенная многопользовательская система
Вход по телефону и паролю. Дальше система по роли решает, какие разделы показать. Права разложены по ролям до уровня действий: для каждого раздела отдельно «смотреть», «редактировать» и «полный доступ». Диспетчер не удалит рейс, перевозчик не увидит чужие брони, агент не залезет в зарплаты.
Всё, что происходит в системе, пишется в хронику. На втором скриншоте слева лента событий: кто зарегистрировался, кого удалили и когда. Справа список броней. Когда через полгода кто-то спросит «а кто это сделал?», ответ будет не «наверное, Вася», а конкретная запись с датой.


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

Панель броней и история броней с поиском и фильтрами по параметрам
Брони это сердце системы, всё остальное существует ради них. В списке номер брони, пассажиры, телефон, количество мест, рейс, время отправления и прибытия. Искать можно по номеру, пассажиру и телефону, сортировать по времени. Новые брони оператор берёт в работу кнопкой «Обработать».
Карточка брони собирает всё в одном месте: заказ, рейс, конкретный выезд, сумма, статус, способ и статус оплаты, промокод, дата создания. Ниже маршрут пассажира с точками, временем в пути и ценой, перевозчик, детали рейса, условия перевозки и фото автобуса. Отменить бронь можно тремя кнопками: по вине перевозчика, перевозчиком или клиентом. Это три разные истории, и система их не смешивает. Сколько вернуть пассажиру, подсказывают правила из справочника «Условия возврата»: процент зависит от того, за сколько времени до отправления отменена поездка.

Панель партнёров-перевозчиков
Перевозчик-партнёр заходит в свой кабинет и видит только свою часть: настройки своих рейсов, свои автобусы, справочник рейсов и брони. Так можно подключать к продажам других перевозчиков и не открывать им всю кухню.
Рейс партнёра проходит модерацию. У рейса есть перевозчик, статус модерации, комментарий и флажок «Продажа разрешена»: партнёр заводит рейс, администратор проверяет его и только потом включает продажи. Ни один «кривой» рейс не попадёт на сайт сам по себе.

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

Панель операторов
Оператор (диспетчер) получает ещё более узкий набор: справочник рейсов и брони. Чем меньше кнопок, тем меньше ошибок и тем быстрее новый человек выходит на смену. У каждого оператора своя учётная запись, поэтому видно, кто какую бронь обработал, а зарплата считается по конкретному человеку, а не «на отдел».

Панель водителя (маршрут, проверка билетов)
Водителю в рейсе не нужна вся админка. Ему нужны маршрут с остановками и временем и пассажиры, чтобы сверить билеты при посадке. Это рабочее место живёт в том же контуре, что и кабинет перевозчика: рейс, автобус и брони одни и те же, просто показаны под задачу человека за рулём. На скриншоте автобусы перевозчика со схемами салона и количеством мест, к ним привязываются рейсы.

Конструктор любых типов автобусов и удобств
Автобусы бывают какие угодно: двухэтажные, с туалетом посередине, со столиками и кофемашиной. Поэтому схему салона здесь не рисуют картинкой, а собирают конструктором. Задаёте ряды, колонки и количество этажей, получаете сетку и каждой ячейке назначаете тип: место, проход, двери, туалет, водитель, кофе, стол, телевизор. Места нумеруются автоматически.
Схема привязывается к автобусу, автобус к рейсу, и пассажир на сайте видит ровно этот салон. На первом скриншоте так выглядит выбор места на сайте: легенда типов мест, этажи, выбранное место. Удобства рейса (Wi-Fi, розетки, напитки и прочее) показываются иконками в деталях рейса.



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

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


Конструктор опций (удобства, багаж, …)
Удобства и багаж ведутся справочниками с иконками: «Сервисы» и «Типы багажа». В рейсе вы отмечаете, какие сервисы в нём есть, и какие типы багажа можно взять, причём у багажа в рейсе своя цена. Общие условия провоза багажа пишутся текстом в карточке рейса, и пассажир читает их до покупки, а не на посадке.
Автоматическая генерация по выездам с интервалами
Никто не хочет вручную создавать рейс на каждую дату. Вы выбираете тип расписания: по дням недели, по чётным или нечётным дням, через день, через два, три, четыре или пять дней. Указываете период «с даты» и «до даты», и система сама создаёт выезды, то есть конкретные даты, на которые продаются билеты.
Дальше работают два ограничителя. Глубина продаж задаёт, на сколько дней вперёд открыта продажа. Закрытие продаж задаёт, за сколько времени до отправления она прекращается. В той же форме отметки «Можно не печатать» (билет не обязательно распечатывать) и «Мы рекомендуем».

Расчёт цен по отрезкам и остановкам
Цена задаётся не на рейс целиком, а на пару точек маршрута. Билет от начальной до конечной и билет на промежуточный отрезок стоят по-разному, как в жизни. Бронь хранит, где пассажир садится и где выходит, поэтому место занято только на его отрезке. Когда пассажир вышел на полпути, место можно продать дальше. Для перевозчика это прямые деньги: автобус меньше ездит с пустыми креслами.
Автоматическое и продвинутое ценообразование
Итоговая цена билета складывается из нескольких слоёв. Базовая цена отрезка, скидка по типу пассажира, акция или наценка на период, промокод. У рейса есть дополнительный процент, а отметка «Мы рекомендуем» добавляет к комиссии за проданные билеты процент, который указывает модератор. Пассажир видит итог и старую цену зачёркнутой, если действует скидка (на скриншоте выбора места выше так и есть). Считает всё это система, а не оператор с калькулятором.
Расчёт зарплат сотрудникам, выплаты
Начисления и выплаты ведутся одним журналом по людям: кому, сколько, за что и когда. На этом журнале построены разделы «Зарплата» для диспетчеров и «Агенты» для тех, кто продаёт билеты за комиссию. Агент у себя в кабинете видит собственный баланс и не видит чужих. Меньше вопросов «а почему так мало», больше прозрачности.
Финансы, доходы, расходы
Раздел «Финансы» про взаиморасчёты с перевозчиками. Билеты продаются в одной системе, а рейсы возят разные партнёры, поэтому нужно понимать, сколько денег чьих и сколько кому перечислить. Суммы приходят из броней, начисления и выплаты фиксируются тем же журналом, что и зарплаты. Деньги компании видно в одном месте, а не в трёх таблицах у трёх людей.
Статистика продаж по направлениям
Статистика строится на тех же бронях. Какие направления продаются, на какие даты, по какой цене, сколько пассажиров. Отсюда понятно, где добавить выезды, где поднять цену, а где акция нужнее нового автобуса. Решения на цифрах, а не на ощущении «вроде бы в Одессу едут неплохо».
Телефония (фиксация приёма звонков, информация о звонке, текст звонка)
Система подключена к телефонии Ringostat через вебхук. Каждый входящий звонок сам появляется в разделе «Входящие звонки»: номер, время, данные звонка от телефонии целиком (например, на какой номер звонили). Ответ телефонии хранится в карточке полностью, так что всё, что передаёт провайдер, остаётся под рукой.
Главное в карточке звонка: список броней этого номера с суммами и статусами. Оператор берёт трубку и уже видит, что этот человек ездил Харьков-Житомир и что у него сейчас в работе. Не нужно переспрашивать фамилию по буквам.
Отслеживание поведения клиентов на сайте (клики, движения мышью)
Это не экран админки, а подключаемый сервис аналитики поведения класса Hotjar: тепловые карты кликов и записи сессий с движениями мыши. Он показывает, где пассажир спотыкается при покупке: не нашёл кнопку, бросил на выборе места, ушёл со страницы оплаты. Иногда одна такая запись полезнее десятка совещаний.
Справочник рейсов, города, остановки, конструктор удобств
«Справочник рейсов» внутри админки это тот же поиск, что видит пассажир. Оператор ищет поездку так же, как клиент на сайте, и может оформить бронь за того, кто позвонил. Рядом справочники, из которых собираются рейсы: города (с отметками «активный» и «популярный»), остановки с адресами, типы пассажиров, сервисы, типы багажа и условия возврата. Завели один раз, дальше выбираете из списка.
Клиентская версия: так выглядит сайт перевозчика на этом движке. Поиск в одну сторону или туда и обратно, популярные направления с ценой «от», бронирование. Ниже админка на смартфоне и карточка входящего звонка со списком броней звонившего.



Технологии
Основа сгенерирована Fractal, нашим генератором: по описанию схемы данных он порождает базу, API с документацией, административные разделы и инфраструктуру. Дальше PHP и Yii2, MySQL, админка на AdminLTE и Bootstrap 4, окружение в Docker Compose, вебхуки телефонии Ringostat. Отдельный сервис API с документацией для клиентских приложений. Генератор забирает рутину, а команда тратит время на то, что отличает этот бизнес от любого другого.
Чем это полезно
Автобусный бизнес только снаружи выглядит как «откуда, куда, когда». Внутри отрезки, места, этажи, партнёры, возвраты, комиссии и звонки. Пока всё это живёт в таблицах и в голове у диспетчера, компания не масштабируется: каждый новый рейс добавляет ручной работы. BusTicket переносит эту работу в систему, и собственник управляет компанией, а не тушит пожары.
Весь опыт по автобусным перевозкам мы собрали в сводном кейсе Автобусный букинг. Там чек-лист функций и с чего начать. Смежные кейсы: Svit BUS (сайт, приложение и учёт, от проекта до запуска) и LEX (проектирование сервиса бронирования).
Где посмотреть
Публичной демо-версии BusTicket сейчас нет: админка работает за авторизацией перевозчиков, а исходный код на нашем демо-сервере не развёрнут. Поэтому показываем систему на видео выше и на созвоне. Клиентскую часть на этом движке можно открыть на сайте перевозчика Bus Prestige: bus-prestige.com.ua.