Клиенты звонят: где заказ или мастер
У вас собственная курьерская или выездная служба, а клиент видит только «в пути». Диспетчер отвечает на звонки вместо работы. Нужен экран, где статус и положение меняются сами.
Real-time веб-сервис с геолокацией — это приложение, где пользователь видит живые статусы и точки на карте без перезагрузки страницы: где курьер или мастер, сколько человек в очереди, какой пункт выдачи ближе. Делаем его как адаптивное веб-приложение с установкой на экран телефона (PWA), без магазинов приложений. Сначала выясняем, что браузер умеет на ваших устройствах, а что нет.
Обследование — от 200 000 ₽, вычитается из первого этапаЖивые статусы и карта в браузере, PWA вместо магазинов приложенийКоординаты хранятся минимально, код в вашем репозитории
У вас собственная курьерская или выездная служба, а клиент видит только «в пути». Диспетчер отвечает на звонки вместо работы. Нужен экран, где статус и положение меняются сами.
Данные устаревают: люди жмут «обновить», а сервер получает лишние запросы. Лечится способом доставки обновлений, а не кнопкой.
Магазины приложений, две платформы, установка у каждого клиента ради одного заказа. Часто хватает веб-приложения, которое открывается по ссылке и ставится на экран.
Позиция в фоне, уведомления, работа без сети: часть этого есть, часть нет, а часть зависит от телефона. Это выясняется до разработки, а не на приёмке.
Сервисы разные, ломаются они в предсказуемых местах. Общие решения — в статье «Геолокация и обновления в реальном времени в веб-сервисе».
Выбираем самый простой способ, который выдерживает задачу. Переход на более сложный не требует переписывать остальное, если состояние хранится на сервере.
Главное правило любого сервиса реального времени: потерять сообщение можно всегда, потерять состояние нельзя.
Сеть на телефоне пропадает, вкладка засыпает, балансировщик закрывает простаивающее соединение. Поэтому сервер хранит текущее состояние заказа, очереди или исполнителя в базе, а событие говорит клиенту «перечитай». Потерянное сообщение ничего не ломает: при возврате страница запрашивает актуальное состояние и дальше слушает изменения.
Подробнее о повторах и версиях — в статье «Проектирование API для интеграций».
Позиция из браузера хороша для карты и поиска «рядом». Для решений она требует проверки на сервере.
Координаты вместе с радиусом погрешности. Страница должна открываться по HTTPS, а человек должен дать согласие в системном запросе. Точность зависит от устройства: телефон со спутниковым приёмником определяет место лучше, чем компьютер по сетям Wi-Fi, а в здании и во дворах-колодцах точка уходит.
Позицию в фоне. Когда экран гаснет, а вкладка уходит в фон, обновления на телефоне могут остановиться, и это зависит от устройства и версии системы. Поэтому «следить за курьером с телефоном в кармане» веб-приложением надёжно не решается. Есть три выхода: исполнитель держит сервис открытым (телефон в держателе, экран включён), позицию присылает трекер в машине через его программный интерфейс, либо нужно нативное приложение, которое мы не делаем. Мы называем это на обследовании, а не после запуска.
Если человек отказал в доступе, есть ввод адреса и выбор точки на карте: сервис без позиции не блокируем. Рядом с точкой показываем возраст данных. Для важных решений сервер проверяет правдоподобие: скачки скорости, радиус погрешности, согласие с адресом.
PWA — это адаптивное веб-приложение, которое можно поставить на экран телефона. Нативные приложения для iOS и Android мы не делаем. Сравнение подходов — в статье «PWA или нативное приложение».
Позицию запрашиваем только когда сценарию она нужна. Для поиска ближайшей точки хватает разового запроса, постоянное слежение не включаем.
Маршрут хранится ограниченное время, срок записываем до запуска и удаляем по расписанию.
Клиент видит исполнителя по своему заказу, пока заказ активен. Просмотры истории диспетчером попадают в журнал.
Перед системным запросом человек видит, для чего нужна позиция. Текст согласия и статус оператора персональных данных решает юрист заказчика, мы даём технические меры.
Цены совпадают со страницей «Тарифы». Точная цена только у обследования, дальше вилка, которая сужается по его результатам. Остановиться можно после любой ступени.
Кто и зачем передаёт позицию, что видят остальные, какие устройства у людей. На выходе ограничения браузера на ваших телефонах, способ доставки обновлений, схема хранения и вилка бюджета. Вычитается из первого этапа, если продолжаете с нами.
Если статусы и наличие приходят из 1С, склада, CRM и системы маршрутизации: схема обменов и матрица источников истины.
Например, карта выезда мастера для одной группы заказов: один тип исполнителей, чтение из учёта, протокол испытаний на реальных устройствах. Показывает, нужен ли сервис людям и держит ли браузер ваш сценарий.
Роли, главный сценарий с картой и живыми статусами, обмен с учётом, уведомления, журнал, установка на экран, протокол испытаний. Это MVP, а не система в ежедневной эксплуатации.
Опытная эксплуатация, нагрузочные испытания по числу соединений, мониторинг, копии с проверкой восстановления, обучение, передача исходников.
Мониторинг, обращения, разбор инцидентов; плановые доработки с пакета на 60 000 ₽. Сверх пакета — 5 000 ₽ в час.
Разбираем сценарий на примерах: кто передаёт позицию, кто смотрит, как часто что меняется. Проверяем на ваших устройствах позицию, работу в фоне и уведомления.
Кликабельные макеты ключевых экранов на обезличенных данных, включая состояние «нет данных». Правим до написания кода.
Репозиторий, сборка, стенд, модель данных, права. Один способ доставки обновлений на одном сценарии, остальное позже.
Подключаем карту, обмен с учётом, уведомления и установку на экран. Раз в две недели показываем работающую версию.
Реальные устройства: отказ в доступе, погашенный экран, слабая связь, обрыв потока, расход батареи. Приёмка идёт по протоколу, согласованному заранее.
Нагрузочные испытания и новые сценарии идут этапами с отдельной приёмкой. Сопровождение у нас или у вас: решаете вы.
Клиент и один тип исполнителей — одно. Клиент, исполнитель, диспетчер и руководитель с разными правами на карту и историю — другое.
Позиция раз в минуту у нескольких десятков исполнителей и раз в секунды у многих — разные архитектуры.
Если статусы, адреса и наличие приходят из разных систем, часть работы уйдёт на обмен. Адреса без координат нужно сначала привести к координатам.
Список телефонов, на которых всё должно работать, определяет объём проверок.
Если вам нужен интерфейс для клиентов и сотрудников поверх учёта без живых данных и карты, достаточно личного кабинета. Если сервис имеет свою логику и данные, но живые статусы нужны только как мелкая деталь, это веб-сервис с обновлением по расписанию. Если вы продаёте доступ к сервису другим компаниям со своими пользователями и тарифами, это SaaS-платформа.
Если сервис будет расти по числу одновременных пользователей, это отдельный разбор архитектуры: см. страницы про микросервисы и высокую нагрузку и высоконагруженный B2C-сервис.
Граница нестрогая: сервис с картой может вырасти в платформу, поэтому права, разделение данных и хранение состояния закладываем так, чтобы расширять без переписывания.
Что умеет браузер, как запросить позицию, чему верить в координатах и как выбрать между опросом, SSE и WebSocket.
Когда хватает веб-приложения с установкой на экран, а когда нужна нативная программа.
Версии, повторы запросов и вебхуки: правила, нужные и интеграциям, и живым обновлениям.
Сорок минут созвона: кто передаёт позицию, кто смотрит, на каких устройствах и откуда берутся данные. По итогам скажем, что реально сделать в браузере и в какую вилку это укладывается.
Обследование стоит 200 000 ₽ (350 000 ₽, если сервис связан с несколькими системами). Лёгкий пилот одного сценария — 150 000–400 000 ₽ за 2–8 недель, первая версия — 400 000–1 200 000 ₽ за 2–3 месяца. Вывод в эксплуатацию от 1 500 000 ₽ этапами. Точную цену называем после обследования.
Для большинства сценариев с открытым экраном можно: карта, статусы, очередь, уведомления, установка на экран. Ограничения касаются позиции в фоне и поведения уведомлений на разных платформах. Мы проверяем их на ваших устройствах на обследовании. Нативные приложения мы не делаем.
Да, пока приложение открыто и экран включён. При погашенном экране обновления могут остановиться. Решения: телефон в держателе с включённым экраном, позиция из трекера в машине через его программный интерфейс или нативное приложение.
Самый простой способ, который выдерживает задачу. Статус раз в минуту — опрос. Позиция исполнителя у клиента — поток событий (SSE) или WebSocket. Диспетчерский экран с командами — WebSocket. Выбор подтверждаем на обследовании по частоте и числу слушателей.
Текущая позиция перезаписывается, маршрут хранится ограниченное время, срок записывается до запуска. Клиент видит исполнителя по своему заказу, диспетчер больше, просмотры пишутся в журнал. Юридические вопросы согласия решает юрист заказчика.
Нагрузку считаем по числу одновременных соединений и сообщений в секунду, а не по числу регистраций. Нагрузочные испытания проводим при выводе в эксплуатацию на обезличенных или сгенерированных данных.
Исходный код лежит в вашем репозитории с первого коммита. Сервис работает на ваших серверах или у выбранного вами хостера. Порядок передачи прав записывается в договоре. Персональные данные граждан России обычно должны храниться на серверах в России.
Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.