![](https://habrastorage.org/getpro/habr/post_images/152/3d7/68d/1523d768de87f054149f8e2d07532249.png)
Центральный хаб CarPrice — это не просто охраняемая территория, куда мы сваливаем машины в ожидании, пока кто-нибудь за ними приедет. Все поступившие на склад авто проходят технический осмотр, по ним готовят документы и их самих приводят в порядок — заряжают аккумуляторы, доливают топливо, омывающую жидкость и т.п. А еще перед продажей организуют дополнительные осмотры для дилеров.
Дилеры приезжают непредсказуемо — поток был очень непостоянный. Сотрудники склада то бегали высунув языки от машины к машине, то «курили бамбук», не зная, чем себя занять. Бывало, что один дилер забирал сразу десяток автомобилей — это занимало целый день, от раннего утра до глубокой ночи.
Букинг-система
Чтобы упорядочить работу, мы создали простой универсальный сервис записи на услуги (он же букинг, он же электронная очередь). В нем получение автомобиля разделено на два шага — осмотр и выдача. Первый включает в себя подготовку к осмотру и сам осмотр автомобиля дилером в присутствии менеджера склада. Далее дилер оплачивает автомобиль и переходит к шагу выдачи, на котором подписываются документы и передаются ключи. Осмотр и выдача могут проходить в разные дни, некоторые дилеры записываются сразу на выдачу без осмотра, а некоторые осматривают один автомобиль несколько раз.
Сервис записи поначалу не представлял собой сложную систему, решал простые и понятные задачи — рассчитывал свободные слоты в зависимости от типа и продолжительности услуги (этапа), с учетом графика работы сотрудников склада.
Дилер заходит в личный кабинет, выбирает один из выигранных на аукционе автомобилей с конечного склада, тип услуги (осмотр или выдачу) и записывается на свободный слот.
![](https://habrastorage.org/webt/q9/n5/cm/q9n5cmllf0rvg95lgknobl_bosa.png)
![](https://habrastorage.org/webt/rs/3q/do/rs3qdo4tzuj8kau3wwosumt-_qy.png)
Это можно сделать как с десктопа, так и через мобильное приложение. Если дилер по каким-то причинам не может записаться самостоятельно, его может записать персональный менеджер или сотрудник склада.
![](https://habrastorage.org/webt/uc/9p/v9/uc9pv9p3dnojocgrfqjjupjjbwg.png)
Такие схемы успешно работают во многих компаниях, и мы надеялись, что как только интегрируем сервис, все проблемы пропадут.
Проблемы не пропадают
Через некоторое время мы понимаем, что система на практике не работает. Причина в том, что большинство дилеров не очень пунктуальны: приезжают без предварительной записи, значительно позже или раньше назначенного времени, а иногда вообще в другой день. При этом записываются на выдачу, а приезжают на осмотр. Указывали осмотр одной машины, а требуют показать еще пять других. Некоторые дилеры хотят работать только с конкретным менеджером склада. При этом многие дилеры весьма эмоциональны и мириться с несостыковками не способны. При такой непредсказуемости сотрудники склада не понимают, кого из толпы разъяренных дилеров нужно брать в работу, какие авто готовить к осмотру. Мы подумали-подумали и решили внедрить новое решение.
Электронная очередь
Задумка была многообещающей. Менеджерам не нужно думать кого взять в работу, — нажал кнопку «следующий», и вперед. Дилеры понимают, как загружен склад, видят свою позицию в очереди и знают, сколько примерно ждать. По итогам мониторинга времени обслуживания можно динамически корректировать слоты, а в случае нарушения SLA — оповещать руководство. А на осмотр/выдачу можно записаться прямо с терминала на складе.
На бэкенде должна быть реализована вся логика работы приложений, включая распределение заданий между операторами. Составляющие фронта:
- Терминал с авторизацией по номеру телефона, записью на услуги, просмотром доступных авто, подключением платных услуг и выдачей талонов на запись
- Дашборд с визуализацией очереди и текущих талонов в работе
- Пульт оператора (менеджера склада)
С технической точки зрения, дилер, записываясь на осмотр авто в своем личном кабинете, делает запрос к сервису букинга на бэкенде, в ответ получая список возможных машин для записи, свободные дни и время. Помимо основного, система должна была обрабатывать другие, «жизненные» кейсы:
- Дилер записался, приехал/не приехал
- Дилер записался, приехал вовремя, уложился в слот 30 мин
- Дилер записался, приехал позже/раньше на 15, 40, 100 мин
- Дилер записывается/приехал на VIP-выдачу
- Дилер записался на слот в 30 мин — по факту получилось 10 мин/2 часа
- Дилер записался на осмотр, приехал, осмотрел, ушел оплатить, через 40 мин вернулся забрать машину
Было и несколько дополнительных требований:
- Гибкая настройка расписания сотрудников склада с указанием услуг, которые может оказывать каждый. И все это в условиях пересекающихся графиков работы сотрудников — у нас две смены, с 9 до 18 и с 13 до 22
- Быстрое подключение к системе новых складов
- Интеграция с другими сервисами — текущим букингом, авторизацией дилера и т.д.
- Легкое вертикальное и горизонтальное масштабирование
- Реалтайм-интерфейсы
Требования не казались заоблачными, так что погружаться в это с головой и набивать шишки не хотелось. Мы подумали, что электронная очередь — это уже хорошо разработанная тема, и решили найти подрядчика с готовым коробочным решением, знающего, как подойти к заданным бизнес-кейсам.
Разрабатываем сами
Поиск подрядчика ничего не дал. Большинство готовых решений имеют очень примитивный алгоритм. Талоны складываются в одну общую очередь или с разбивкой по категориям, а затем операторы поочередно талоны из очереди вытаскивают. Всё. Гибкой настройки нет, логики распределения талонов между операторами нет, еще и работает система обычно лишь в Windows. Про легкую интеграцию с внутренними сервисами я даже говорить не буду. При этом ценники у всех космические. Мы все-таки начали работать с одним подрядчиком, но из нужных функций у него было процентов десять, а все остальное пришлось бы долго пилить. Так что мы расстались и решили написать электронную очередь самостоятельно.
К этому моменту мы уже четко понимали свои потребности со всеми нюансами и сразу приступили к реализации. Бэкэнд сделали на основе уже ранее созданного сервиса букинга — с использованием Laravel, PHP 7, RabbitMQ, Percona, Websocket, и все в Docker. Весь фронт реализовали на вебсокетах, что позволило сделать реалтайм-интерфейсы.
Терминал собрали из металлического корпуса, в котором прячется iPad. Корпус защищает планшет от кражи и фиксирует его в нужном положении.
![](https://habrastorage.org/webt/j0/ob/0z/j0ob0z9kbvt58m3rwp1igvgncek.png)
На планшете активирован гид-доступ и в полноэкранном браузере без элементов управления запущено стороннее приложение на Vue.js (SPA). Сначала дилер авторизуется в терминале по SMS (JWT). После авторизации он может посмотреть свои записи на осмотр/выдачу и получить талоны для них. Дилерам доступны VIP-услуги с блокировкой средств в личном кошельке.
![](https://habrastorage.org/webt/8v/2x/f7/8v2xf7tdhkmdy3x4ssmgaf7xv88.png)
Каждая запись на осмотр и выдачу заранее привязывается к конкретному менеджеру склада и, если возможно, автоматически группируется с другими записями этого же дилера. При привязке менеджера учитываются расписание и загруженность сотрудников, наличие у дилера других запланированных записей и прочие факторы.
![](https://habrastorage.org/webt/qf/kg/pe/qfkgpeht3t9gdxeg_zfs9p3c6dm.png)
При записи на встречу на счете дилера деньги блокируются, а при получении талона — возвращаются. Записи, по которым не был вовремя получен талон, автоматически отменяются, а со счета дилера списываются деньги за ложную запись. Из полученных талонов формируется очередь, которая распределяется между работающими менеджерами, с учетом времени записи и ожидания дилера, типа записи и пр.
Для VIP выделена отдельная очередь — дилер может взять талон на «прямо сейчас» и сразу пойти на встречу с менеджером, если нет очереди из таких же VIP. Услуга хоть и платная, но пользуется большим спросом у дилеров, которые приехали без записи или опоздали и не хотят ждать.
![](https://habrastorage.org/webt/qb/em/5l/qbem5lkc3emy78d85iciywu9xne.png)
Другой компонент системы — дашборд — показывает, какой талон у какого оператора обслуживается. Кроме того, он выводит текущую очередь и голосом приглашает дилера проследовать к оператору. По факту это обычный телевизор с подключенным неттопом, на котором запущен полноэкранный браузер и открыто приложение Vue.js (SPA) с параметрами конкретного склада.
![](https://habrastorage.org/webt/eg/ah/8u/egah8uumdnsfjzeyewwwkst6gm4.png)
У оператора для работы есть пульт — ноутбук на рабочем месте.
![](https://habrastorage.org/webt/_s/if/wb/_sifwb2gci4vdcfldyurff-pjxc.png)
На ноутбуке открыт интерфейс оператора, в котором он после авторизации может создавать, изменять и отменять записи, фиксировать результат обслуживания, передавать клиентов и откладывать работу с ними. С помощью этого интерфейса при наличии определенных прав можно настраивать расписание работы менеджеров и их возможные услуги.
![](https://habrastorage.org/webt/u-/ne/z9/u-nez9mvcstyso7re_dittbsluq.png)
![](https://habrastorage.org/webt/w-/yr/l2/w-yrl2ovi3orc83hcjjamcws07i.png)
Через этот же интерфейс на каждом складе в отдельности можно подробно настраивать SLA. Это позволяет легко масштабировать нашу электронную очередь на любое количество новых складов.
![](https://habrastorage.org/webt/in/-t/re/in-tre_ypqyc5ks5pafn3ytqcai.png)
Разных настроек для SLA много, мы отслеживаем работу складов по многим показателям.
![](https://habrastorage.org/webt/-l/nw/pn/-lnwpno1lxeosn4efyp_9atcy_y.png)
![](https://habrastorage.org/webt/jv/xs/29/jvxs29yzvhrh--ziesdfmpmtnom.png)
Новая система электронной очереди помогает разрулить разные непростые кейсы. Вот несколько для примера:
- Дилер записался на несколько авто, сильно опоздал и половина из них стали просрочены. Получается, что запись просрочена частично, так что дилер все равно видит ее в терминале и может получить по ней талон. Менеджер в пульте оператора видит, что часть услуг просрочена, может завершить работу с талоном без них, либо удалить часть активных и добавить вместо них просроченные услуги.
- Дилер приехал на осмотр и выдачу авто, но у машины обнаружились дефекты. Теперь дилеру нужна не выдача, а формирование претензии на возврат. В пульте оператора менеджер может сделать это одной кнопкой — изменить тип услуги с выдачи на претензию.
- Дилер приехал на осмотр одной машины, а хочет осмотреть другую. Менеджер в пульте оператора может в талоне заменить машину для осмотра.
Мониторинг SLA через Telegram
Если вы внимательно посмотрели на скриншоты настройки SLA выше, то видели там строчки, связанные с мессенджером. Раньше бывало, что сотрудники склада вместо работы уходили покурить на час, а их коллегам приходилось переключаться в авральный режим. Теперь, если сотрудник вышел на работу и не берет дилеров длительное время, руководству приходит уведомление такого вида:
![](https://habrastorage.org/getpro/habr/post_images/2ab/812/78e/2ab81278e6727f7b93a449b685e079e0.png)
Или вот такие предупреждения о дилерах:
![](https://habrastorage.org/getpro/habr/post_images/0ed/f3e/d96/0edf3ed967fca51807d057b944dacf6e.png)
Помимо менеджеров, работающих с дилерами, на складе есть техники, которые готовят машину к назначенному времени осмотра: откапывают из сугроба, заливают топливо, омывайку, заряжают аккумулятор, прогревают двигатель и перегоняют автомобиль с закрытой парковки. Отдельный канал помогает им узнавать об особенностях запуска двигателя и быстрее завершать подготовку. Вот несколько интересных сообщений:
![](https://habrastorage.org/getpro/habr/post_images/37f/c92/035/37fc92035e345ee7f023a113ce14fa9b.png)
![](https://habrastorage.org/getpro/habr/post_images/fb5/765/4ba/fb57654baee4dc53f39c1bedd6583664.png)
![](https://habrastorage.org/getpro/habr/post_images/313/fb3/5e2/313fb35e2d5aee747a10fa90d6de26e0.png)
Но вот этот вариант, пожалуй, самый оригинальный:
![](https://habrastorage.org/getpro/habr/post_images/7fc/308/16e/7fc30816e4999eab25f0e0ffeb17008f.png)
Итоги
С помощью новой электронной очереди мы победили хаос на складе, упростили жизнь дилерам и дали им ряд дополнительных услуг. Если перечислять бизнес-показатели, то время ожидания дилеров уменьшилось втрое, количество негативного фидбека — вчетверо, а склад при том же количестве сотрудников теперь может пропускать не 700, а 3000 машин в день. Пока мы наблюдаем за системой и в планах разве что поставить принтер, который будет печатать талоны на бумаге.
Сейчас мы ищем в наш московский офис QA-специалиста и бэкенд-разработчика. Будем рады вашим откликам!
Комментарии (12)
mvngr
15.05.2018 20:05+3У вас не бывало ситуаций, когда в сторону вашего офиса огромная пробка и поголовно все клиенты опаздывают, у них слетают брони, списываются деньги за неявку? Приезжая, они уже довольно злые, а регистрация на месте, как указана в статье, работает только для VIP.
vozhd99
15.05.2018 22:23На ком-то же нужно зарабатывать. :) Думаю, что это «детские болезни», которые решат в будущем.
Shihov Автор
16.05.2018 18:20Кейс теоретически возможный, но на практике мы с таким не сталкивались.
Опоздав, дилер может записаться бесплатно прямо на складе на свободный слот (если такой есть).
Например: была запись на 12:00, опоздал на 15 минут, есть свободный слот на 17:00. Берем талон в терминале, обозначив свое присутствие на складе. И если есть свободные менеджеры, его возьмут в работу прямо сейчас. Деньги за опоздание возвращены не будут, это да.
Доступных слотов всегда чуть меньше, чем могут обслужить менеджеры. Например, есть менеджеры, к которым могут записаться только VIP клиенты, но эти менеджеры могут брать в работу обычные слоты, если нет приоритетных VIP'ов.
А еще время услуг разное, и это тоже добавляет гибкость.
JC_IIB
С магнитами — решение на герконах, видимо. Видел такое кустарное. Только непонятно, зачем из руки в руку перекладывать.
tangro
Пауза, видимо, в 2 секунды нужна.
TimsTims
Это всё противоугонные системы? То есть будущий владелец каждый раз такую магию должен будет проводить?
vozhd99
Угу, видел такое, видел. Более того, что это занятно глючит иногда. :) Даже на новый авто не ставил сигналку, так как иммобилайзер ещё никто не смог взломать, машина никому не интересна на рынке угона.
ilumiel
Да, это противоугонные системы, и эту магию нужно проделать единожды дабы запустить подачу топлива к мотору. Эти действия нужно повторить, только если машину попытаются угнать и снова сработает противоугонка.
Ztare
Так он как ему удобно перекодирует, любо демонтирует полностью. Код же уже получается много народу знает
DjoBlack
Думаю, что да. Как и любая более простая с условным «двойным закрытием заднего левого окна». В любом случае к таким манипуляциям привыкаешь очень быстро и делаешь все на автомате. Неудобно только объяснять, если за руль часто садится кто-то другой. А вот при угоне может реально помочь, человек вряд ли в спешке будет разбираться что именно нужно сделать, потому что вариантов может быть штук 100.
vozhd99
Это только от школьников поможет. Профи имеют свой пучок проводов нужных. И их эти «хитрости» мало интересуют, так как не ищут их, а обходят своим крабом. :)
roscomtheend
На некоторых машинах лет 20 назад бывали такие сигнализации (единственные). От честных людей. Во-первых комбинаций там ограничпенное количество, а во-вторых подсмотреть её не так и сложно (пульт под ветровым стеклом). Другое дело что нормальная сигнализация стоила дороже той машины и такая вполне была достаточна. Здесь, смотрю, такое не только на угоняемом TLC, но и на Сонате3… Их ещё угоняют?