Есть работа, у которой всегда есть «где». Куда ехать монтажнику. На каком объекте стоит техника. По какой трассе идёт рейс и не ушёл ли он с неё два часа назад. В таблице это выглядит как строка адреса, и по строке адреса не видно ничего: ни что три заказа стоят в одном квартале, ни что машина свернула не туда.
Карта в CraftYourCRM — не отдельный продукт рядом с CRM, а обычный вид раздела, такой же, как таблица, доска и календарь. Те же записи, те же фильтры, тот же клик по записи — только разложены не по строкам и не по дням, а по местности.
<!-- ★ КАДРЫ СТРАНИЦЫ НЕ СНЯТЫ (долг GEO-X С1 + волна GEO-ROUTE). Галерея приезжает капчер-прогоном на живом стенде: вид «Карта» раздела · полноэкранный редактор коридора · «Маршрут» в меню «⋯» шапки карточки рейса · демо-рейс Краснодар → Саратов, открытый в редакторе · секция «Параметры машины» · плашка построенного маршрута · диалог библиотеки · история версий · экран «Флот». Места кадров помечены ниже комментариями «КАДР:» — они же список для съёмки. До прогона страница читается текстом целиком: битая картинка на живой витрине хуже её отсутствия. -->Что уже работает
Одним списком — всё, что в продукте есть сегодня. Каждый пункт разобран ниже своим разделом; то, чего ещё нет, собрано отдельно в разделе «Дорожная карта» и никогда не смешивается с этим списком.
- Модуль «Маршруты и карта» — раздел «Рейсы» с полем-маршрутом включается из галереи модулей за минуту; у шаблона «Грузоперевозки» этот раздел уже есть, и модуль числится установленным, а сфере «Локальная доставка» он приезжает сразу при регистрации — включать ничего не нужно.
- Демо-рейс в коробке — у шаблона «Грузоперевозки» в кабинете с первого дня лежит рейс Краснодар → Саратов с проложенным маршрутом, двумя названными заездами и коридором: есть что открыть и на чём попробовать, не рисуя первую ломаную руками.
- Точка на карте — тип поля в любом разделе: нажали по карте в карточке, точка встала.
- Вид «Карта» — раздел на местности рядом с таблицей, доской и календарём (добавляете сами).
- Маршрут рейса руками — ломаная кликами по трассе и коридор шириной 1, 2, 3 или 5 км.
- Поиск адреса в редакторе — «Саратов» или «Краснодар, улица Северная» встаёт следующей точкой маршрута, а у точек, поставленных нажатием, появляется название места вместо пары чисел.
- Автопостроение по дорогам — маршрут прокладывается по дорожному графу с учётом высоты, ширины, длины, массы и нагрузки на ось вашей машины (требует подключённого движка маршрутов — см. ниже).
- Слои на карте маршрута — чипы в углу редактора: заправки, стоянки, сервис и шиномонтаж, еда. Три первых включены сразу, «Еда» — по нажатию; значки появляются, когда подъедете масштабом.
- Библиотека маршрутов — удачный маршрут сохраняется под именем и подставляется в новые рейсы.
- История версий маршрута — когда, кто и чем построил; к любой версии можно вернуться.
- Контроль коридора — машина, ушедшая из полосы и оставшаяся снаружи, сама меняет статус рейса.
- Флот — живая карта всех машин: где каждая, с какой скоростью идёт, как давно отвечала.
- Точки машин тремя путями — телефон водителя с бесплатным приложением-трекером, «железный» GPS-трекер через сервер трекеров или ваша система мониторинга по заявке.
- Экран «Трекеры» — ключ машине выписываете, проверяете и отзываете сами: «Настройки» → «Трекеры». Готовый адрес для приложения показывается один раз, отзыв действует мгновенно.
Рейсы включаются модулем из галереи
Маршрут, коридор и «Флот» живут вокруг раздела «Рейсы». Раньше этот раздел приезжал только с шаблоном «Грузоперевозки»: выбрали при регистрации другую нишу — и получить его было неоткуда. Теперь он ставится модулем: «Настройки» → «Конструктор» → «Модули» → карточка «Маршруты и карта» → кнопка «Включить». Ни выбора раздела-цели, ни настройки — модуль ни к чему не цепляется и заводит свой раздел с полями рейса, включая поле «Маршрут» с редактором и поле «Ключ трекера».
Если у вас шаблон «Грузоперевозки», включать нечего. Карточка модуля показывает «Установлен» — ваши «Рейсы» уже несут все его поля, и модуль их признаёт своими, а не пытается завести второй такой же раздел. Ничего нажимать не нужно и нечего сломать нажатием.
Если вы выбрали сферу «Локальная доставка», тоже включать нечего: этот модуль входит в её состав и приезжает вместе с кабинетом, вместе с прайсом доставки и строками чека. В галерее его карточка показывает «Установлен», а раздел «Рейсы» уже стоит в меню — маршрут курьера на смену рисуется в нём с первого дня.
Что этот раздел означает в работе каждой из двух сфер, разобрано отдельно. У перевозчика рейс — это запись под заявкой, с выездом и прибытием до часа, ГСМ и оплатой водителю, а перецепка и порожний перегон обратно живут своими рейсами под одной перевозкой: CRM для грузоперевозок. У службы доставки рейс — это смена курьера целиком, вроде «17:30–21:00, ГСМ 420 ₽, оплата курьеру 1 500 ₽», и там же названо, где кончается автопостроение: профилей у маршрутизатора четыре и все грузовые, а «Оптимизировать порядок» берёт до 25 точек за запрос — CRM для службы доставки.
Сразу после установки в меню слева появляется и пункт «Флот»: он показывается любому пространству, где есть поле-маршрут, — не важно, приехало оно модулем, шаблоном ниши или вы завели его сами в конструкторе. Появляется он в ту же секунду, на той же странице галереи: установка сама перечитывает состав меню, и перезагружать вкладку не нужно.
Модуль бесплатный, как и всё остальное, и его можно приостановить — тогда раздел «Рейсы» уходит из меню целиком вместе с рейсами и их маршрутами. Записи при этом целы и возвращаются включением обратно; что именно уносит пауза у транспортной компании — в «Честных ограничениях».
Демо-рейс в коробке: Краснодар → Саратов
Выбрали при регистрации сферу «Грузоперевозки» — и в разделе «Рейсы» вас уже ждёт рейс «#1002 Краснодар → Саратов» с проложенным маршрутом: линия идёт по трассе, вокруг неё нарисован коридор шириной 2 км, а в списке точек стоят четыре названных заезда — «Краснодар, загрузка», «Волгоград, частичная выгрузка», «Камышин, догруз» и «Саратов, выгрузка». Открывать нечего настраивать: выбрали в шапке карточки «⋯» → «Маршрут» — и полноэкранный редактор со всем, что описано ниже, уже полон.
Так сделано ради одной минуты — первой. Пустой редактор ничего не объясняет: чтобы понять, что такое коридор, зачем двигать вершину и как выглядят заправки вдоль трассы, нужен маршрут, а рисовать его руками до того, как продукт хоть что-то показал, никто не станет. Демо-рейс — это ваша запись: переименуйте, перерисуйте, удалите — он ничем не отличается от рейса, который вы заведёте сами.
Честно о нём. Дата выезда в нём проставлена фиксированная (это заготовка, а не план на завтра), машина и водитель — из того же демо-набора, а «Контроль маршрута» стоит в положении «Не наблюдаем»: без трекера на этой машине наблюдать нечего, и загораться тревогами демо-запись не будет. Сама ломаная посчитана дорожным маршрутизатором под фуру 20 т и затем прорежена до полутора сотен вершин, чтобы её было дёшево рисовать и дёшево проверять на отклонение (читаемость списка держит не прореживание, а свёртка вершин дороги — о ней ниже), — от осевой линии дороги она отходит не больше чем на полкилометра, то есть целиком лежит внутри своего же коридора.
Точка — это поле, а не отдельный сервис
В конструкторе появляется тип поля «Точка на карте». Заводится он так же, как «Дата» или «Сумма»: у раздела «Объекты» — поле «Место», у раздела «Рейсы» — «Погрузка» и «Разгрузка». В карточке записи это маленькая карта: нажали по нужному месту — точка встала, рядом два числа (широта и долгота) на случай, когда координаты пришли из чужой системы и их проще вставить, чем искать глазами.
Адрес при этом остаётся отдельным обычным полем рядом, и это главное решение, а не экономия. Спрячь мы адрес внутрь точки — запись стало бы видно на карте и невозможно найти поиском, отобрать фильтром «город = Казань» или проверить условием правила. Поэтому город — список, адрес — текст, точка — точка, и каждое из трёх умеет ровно то, что должно уметь.
Карта раздела: седьмой вид рядом с таблицей
Карту вы добавляете сами — так же, как доску или календарь: конструктор раздела → «Добавить вид» → тип «Карта». Ни один готовый шаблон ниши и ни один модуль — включая «Маршруты и карту» — вида «Карта» не приносит, и это осознанно: вид карты нужен только там, где у раздела есть поле-точка, а какое из полей класть на местность — знаете вы, а не шаблон. Настраивается вид за минуту: какое поле-точка кладёт запись на местность (первое подставится само), какое поле подписывает булавку, каким полем красить, что показать в окошке при нажатии на точку. После этого «Карта» встаёт вкладкой в переключателе видов рядом с таблицей.
Близкие точки схлопываются в кружок с числом — иначе пятьсот заказов одного города превращаются в кашу из перекрытых булавок. Записи, у которых точка не заполнена, не пропадают молча: над картой стоит честная плашка «Не на карте: столько-то» — это те записи, которые вы иначе искали бы глазами.
Подложка карты — наша, с наших же серверов: ни один кадр карты не уходит к стороннему картосервису и не тащит за собой его счётчики. Это не про идеологию, а про то, что кабинет с данными клиентов не должен ходить на чужие адреса.
Как завести поле-точку, поставить точку в записи и собрать сам вид — по шагам в справке: «Карта раздела: записи на местности и точка в карточке».
Эти же два шага — сначала поле, потом вид — расписаны под конкретную работу на странице CRM для агентства недвижимости: там названо, какие три настройки вида действительно нужны на объектах (что печатать у булавки, красить продажу и аренду разными цветами, собирать близкие точки в группы) и почему текстовый «Адрес» в точку сам не превращается.
Маршрут рейса и коридор вокруг него
У транспортной компании карта отвечает не на вопрос «где точки», а на вопрос «идёт ли рейс так, как договорились». Поэтому у поля «Маршрут» свой редактор: диспетчер ведёт ломаную кликами по трассе — десяток-полтора точек на магистральный рейс, — а вокруг неё на карте рисуется коридор выбранной ширины (1, 2, 3 или 5 км). Рядом живьём считается сводка: сколько точек, сколько километров по ломаной, какой коридор. Ту же строку показывает и колонка списка — «12 точек · 1 430,8 км · коридор 2 км»: в шаблоне «Грузоперевозки» она стоит в списке рейсов сразу, а разделу, приехавшему модулем, её добавляют одним движением в «Колонках таблицы» — модуль выносит в список первые шесть полей раздела.
Коридор идёт вдоль проведённой линии, и там, где линия прямая, это видно. Между двумя нажатиями диспетчера ломаная идёт напрямую, а настоящая дорога почти всегда уходит на объезд — именно на таком перегоне машина, едущая совершенно правильно, и может оказаться снаружи полосы. Поэтому прямые отрезки редактор рисует пунктиром и подписывает плашкой «Прямая, не дорога», а проложенное по дорожному графу — сплошной линией. Разница стоит у самого отрезка, а не одной фразой в настройках, и рядом названо лечение: построить автоматически (там, где маршрутизатор подключён) либо ставить точки чаще — на поворотах и развязках.
Редактор открывается на весь экран — и на компьютере, и на телефоне. Карта занимает всю площадь окна, а поиск адреса, список точек, параметры машины, ширина коридора и «Отменить» живут в компактной панели поверх неё: слева на широком экране, снизу — на узком; панель сворачивается в свой заголовок одной кнопкой, когда под ней оказалась нужная точка. Это не косметика: рейс Краснодар → Саратов в маленьком окне помещался только на таком масштабе, где не видно ни одной развязки, — а именно на развязках и ставят точки.
Адрес ищется прямо в панели. Диспетчер вводит «Саратов» или «Краснодар, улица Северная» — выбранный вариант встаёт следующей точкой маршрута, и карта перелетает к нему в масштабе города, где видно объездную и выезды на трассы. Это единственный случай, когда камера двигается сама: поставленная нажатием точка кадр не меняет — масштаб принадлежит человеку, а не программе. Справочник адресов наш собственный, по данным OpenStreetMap, и ни один набранный адрес не уходит с вашего сервера; честная цена такого решения названа в «Ограничениях».
Открыть редактор можно двумя дверями. В форме записи поле «Маршрут» показывает картинку — ломаную на подложке, по которой рейс узнаётся с одного взгляда, — и кнопку «Открыть редактор». А в шапке карточки рейса «Маршрут» стоит первым пунктом меню «⋯», слева от «Редактировать»: он открывает тот же полноэкранный редактор одним нажатием, не входя в правку записи и не трогая остальные поля рейса. Картинка в форме — именно превью: правится маршрут только в полном экране.
Оговорка для тех, кто уже работает. Вторая дверь приезжает вместе с самим разделом — и с модулем «Маршруты и карта», и с шаблоном «Грузоперевозки», — а раздел копируется в ваше пространство один раз: в момент установки модуля или регистрации по нише. Поэтому «Маршрут» в шапке есть там, где пространство собрано после этого обновления; в собранном раньше его пока нет — маршрут открывается первой дверью, из формы записи. Кнопки «обновить установленный модуль» в галерее сегодня не существует, так что добавляем вторую дверь в старое пространство мы — по вашей заявке.
Ломаная правится жестом, а не в два приёма. Вершину берут и ведут — карта под ней стоит на месте, пунктир показывает, куда ляжет линия, а маршрут пересчитывается в момент отпускания, а не сорок раз за жест. Потянув за саму линию между двумя точками, диспетчер добавляет вершину ровно между ними: так посреди готового рейса заводят заезд, не перерисовывая хвост, и порядок заездов не сбивается. Любое из этих движений — один шаг «Отменить». Прежний путь в два нажатия («выбрать точку → нажать на новое место») остался рядом: на трекпаде и при дрожащей руке он удобнее, а на телефоне палец не закрывает ту самую точку, которую ставит. На телефоне сам жест включается вместе с картой — тем же нажатием «Включить карту», которым вы отдаёте ей пальцы; приложенный посреди перетаскивания второй палец отменяет жест и просто меняет масштаб.
Точки в списке — это заезды, и у них есть имена и порядок. Карандаш в строке превращает «Ростов-на-Дону, улица Северная» в «Склад заказчика»: имя встаёт и на булавке карты, сохраняется вместе с маршрутом и держится за МЕСТО, а не за номер строки — переставляйте заезды сколько угодно, подпись останется на своей точке. Порядок меняется прямо в списке: строку берут за ручку и ведут (маршрут пересчитывается один раз, на отпускании) либо двигают стрелками «выше/ниже» — вторая дорога нужна там, где «нажать и вести» даётся тяжело, и она же единственная работает с клавиатуры. Сводка называет и потолок: «12 из 25 точек» стоит на экране с первой вершины, потому что двадцать пять — предел одного запроса к маршрутизатору, и узнавать о нём на двадцать шестой точке поздно.
После автопостроения список остаётся списком заездов, а не линией дороги. Маршрутизатор возвращает геометрию в сотни и тысячи вершин — печатать их по строке значило бы отдать панель под бесконечную прокрутку. Поэтому в списке остаются начало рейса, конец и те точки, которым вы дали имена, а вершины дороги между ними свёрнуты в одну строку «и ещё N вершин дороги — показать»: нажали — раскрылись следующие шестьдесят с адресами. Нужна конкретная вершина — нажмите по ней на карте, и она появится в списке своей строкой. Порядок заездов при этом выстраивают ДО построения: у готовой линии переставлять нечего, и кнопка «Оптимизировать порядок» об этом честно говорит.
Очередь заездов умеет считать сам маршрутизатор. Кнопка «Оптимизировать порядок» спрашивает у него, в каком порядке объезд выйдет короче, и переставляет строки списка — только по явному нажатию: диспетчер мог выстроить очередь намеренно (сначала забрать, потом отвезти), и менять её за его спиной нельзя. Первая и последняя точки при этом остаются на месте — это начало и конец рейса, — а предложенный порядок это ровно один шаг «Отменить». Геометрию кнопка не трогает: дорогу по новой очереди проложит следующее «Построить автоматически» — и порядок выстраивают именно ДО построения: после него в списке лежат вершины дороги, посчитанные маршрутизатором, а не ваши заезды, поэтому кнопка честно гаснет с объяснением, а не делает вид, что перемешать линию — это оптимизация. Честная граница: у перебора «каждая точка с каждой» пределы теснее, чем у обычного маршрута, поэтому очень длинную задачу маршрутизатор может не взять — тогда экран говорит об этом прямо, а порядок остаётся вашим. И ещё одна, из той же породы: если за время расчёта вы успели поставить точку или передвинуть вершину, посчитанная очередь не применяется вовсе — она была про другой список, и экран скажет об этом словами.
Ломаную при этом можно не рисовать вовсе — её проложит маршрутизатор по настоящим дорогам (следующий раздел). Коридор в обоих случаях устроен одинаково: полоса заданной ширины вокруг линии, и эта же полоса — порог тревоги.
<!-- КАДР: полноэкранный редактор маршрута — ломаная по трассе, коридор 2 км в масштабе, плавающая панель с поиском, списком точек и параметрами машины --> <!-- КАДР: карточка рейса — раскрытое меню «⋯» слева от «Редактировать», «Маршрут» первым пунктом -->Дальше в дело вступает наблюдение. Точки машины приходят в систему, и раз в полминуты рейс сверяет последнюю точку со своим коридором. Машина, вышедшая за порог и оставшаяся снаружи десять минут, переводит поле «Контроль маршрута» в «Отклонился». Всё остальное делает ваше правило автоматизации: уведомление диспетчеру, сообщение заказчику в его канал, письмо — набор собираете вы сами в конструкторе правил, а не выбираете из нашего списка.
Маршрут прокладывает маршрутизатор — под вашу машину
Ломаная из кликов не знает ни одной дороги: она честно подписана «по ломаной», и её километраж всегда меньше реального. Поэтому в редакторе есть кнопка «Построить автоматически», а над ней — сворачиваемая секция «Параметры машины» в той же панели: раскрыли, поправили числа, нажали «Построить» — карта при этом остаётся на экране целиком, и видно, по каким точкам роутер поведёт дорогу. Это главное, ради чего всё затевалось: маршрут прокладывается не вообще, а под конкретный грузовик.
Готовые профили — «Фура 20 т», «Еврофура 40 т», «Газель 3,5 т», «Негабарит» — стартовая точка, а не клетка: любое число правится руками и уезжает в расчёт.
| Что задаёте | Зачем это дорожному графу |
|---|---|
| высота, ширина, длина | низкие путепроводы, узкие улицы и запреты по габаритам обходятся |
| полная масса, нагрузка на ось, число осей | слабые мосты и ограничения по массе исключаются из пути |
| платные дороги, паромы, магистрали | шкалой «избегать ↔ предпочитать», а не грубым «да/нет» |
| опасный груз | дороги, закрытые для такого груза, в маршрут не попадут |
| максимальная скорость машины | влияет на расчётное время в пути |
| «кратчайший вместо быстрейшего» | когда километры дороже часов |
Фура высотой 4 метра и негабарит 4,5 метра получают разные маршруты — в этом весь смысл, и это проверяется у нас отдельным тестом, а не обещанием.
<!-- КАДР: раскрытая складка «Параметры машины» в панели редактора — чипы профилей, группы полей, группа «Покрытие дорог» -->Ответ приходит линией по дорожному графу, длиной по дороге и расчётным временем в пути. Результат остаётся черновиком: любую вершину можно перетащить — маршрут останется построенным, но система запомнит, что его правил человек, а «Отменить» вернёт всё к тому, что было до нажатия. Цена нажатия равна одному шагу назад — поэтому пробовать не страшно.
Честно про подключение. Автопостроение работает над отдельным сервисом маршрутизации, который разворачивается рядом с CRM на своём железе. Его включает оператор платформы, и на конкретном сервере его может не быть. Тогда кнопка стоит погашенной и объясняет, почему (а не исчезает, как будто такой возможности нет вовсе), а маршрут по-прежнему рисуется кликами — контроль коридора, статусы и правила при этом работают целиком.
Честно про покрытие. Автопостроение считает маршруты только по тому дорожному графу, который установлен на вашем сервере: карта дорог собирается по регионам, и точка в непокрытом регионе получает честный отказ с её номером («Точка №2 вне покрытия карты дорог»), а не выдуманный маршрут и не ложную жалобу на габариты машины. Расширение покрытия — на стороне оператора платформы.
<!-- КАДР: два состояния кнопки «Построить автоматически» — активная и погашенная с раскрытой подсказкой -->Заправки, стоянки и сервис прямо на маршруте
Маршрут прокладывают не по пустой местности. Диспетчер ведёт трассу и держит в голове одно и то же: где машина заправится, где водитель встанет на отдых, где ближайший шиномонтаж, если прихватит колесо. Раньше это решалось второй вкладкой с чужой картой.
Теперь в правом углу редактора маршрута стоят чипы слоёв: «Заправки», «Стоянки», «Сервис», «Еда». Нажали — на карте появились цветные значки, и у каждого своё имя, когда подъедете ближе. Нажали ещё раз — исчезли. Точка на чипе повторяет цвет значков на карте: не приходится гадать, что оранжевое, а что синее.
Три набора включены сразу, «Еда» — нет. Кафе и столовых в городе на порядок больше, чем заправок на трассе, и включёнными по умолчанию они закрывают собой ровно то, ради чего вы на карту смотрите. Нужны — одно нажатие.
Значки появляются не сразу, а с масштабом. Пока в кадре половина страны, точек на ней не будет: их там были бы десятки тысяч, и трассу под ними стало бы не видно. Приблизьтесь к участку — появятся; имена (АЗС какой сети, как называется стоянка) приезжают ещё ближе.
Камера при этом не двигается ни на пиксель. Включение слоя — это только «покажи», а не «покажи и перевези меня куда-нибудь»: кадр, который вы навели, остаётся вашим. Это то же правило, по которому редактор не дёргает масштаб при постановке точки.
Наборы — не жёсткий список «для перевозчиков». Их состав описан данными карты, поэтому нише, которой нужны аптеки или пункты выдачи, добавляется набор без единой правки программы.
<!-- КАДР: редактор маршрута с включёнными слоями — чипы в углу и значки заправок вдоль трассы -->Библиотека маршрутов: сохранили один раз — подставляете годами
Удачный маршрут — «Стандартный на Казань», зимний объезд, рейс с ограничением по высоте — сохраняется в библиотеку компании под своим названием и заметкой. В новом рейсе он загружается одним нажатием; если сохранённых маршрутов много, их отбирает поиск по названию.
Загружается копия, и это не деталь реализации, а защита. Дальнейшая правка маршрута рейса сохранённый эталон не изменит, а правка эталона не изменит рейсы, которые уже уехали. Будь это ссылкой, человек, поправивший «Стандартный на Казань», сузил бы коридор у всех машин, которые в эту минуту по нему едут, — и получил бы веер тревог «сошёл с маршрута», не трогая ни одного рейса.
Библиотека общая на пространство: маршрут на Казань — имущество компании, а не личная заметка. И сразу честная обратная сторона: переименовать или убрать сохранённый эталон из интерфейса пока нельзя — в библиотеке живут ровно два действия, «сохранить» и «загрузить». Пока эталон лежит в списке, его имя занято: второй маршрут с тем же названием система сохранить не даст и скажет об этом. Управление библиотекой стоит строкой в «Дорожной карте» ниже.
<!-- КАДР: диалог «Загрузить из библиотеки» — поиск и строки со сводкой маршрута -->У маршрута каждого рейса есть прошлое
Каждое сохранение рейса с изменённым маршрутом становится версией. В истории видно, когда, кто и чем построил маршрут — по дорогам, руками или по дорогам с правками, — какие габариты машины были заданы и какой ширины был коридор.
К любой версии можно вернуться, и возврат ничего не стирает: выбранный маршрут ложится в рейс, а после сохранения появляется ещё одной записью истории с пометкой, к какой версии вернулись. Это не формулировка ради мягкости — переписать историю не может даже наш собственный код: у рабочей роли базы нет права менять уже записанную версию.
Отличить «то, что записано» от «того, что лежит в рейсе прямо сейчас», экран умеет честно: если вы подвинули вершину и ещё не сохранили рейс, история так и скажет — эта правка попадёт в неё после сохранения, а не выдаст верхнюю строку за текущее состояние.
<!-- КАДР: история версий — строки «когда · кто · чем построен · длина», бейдж «текущая», плашка несохранённой правки -->Почему это не превращается в шквал ложных тревог
Главная жалоба на системы слежения за транспортом — не «не заметила», а «сообщает постоянно, поэтому уведомления отключили на второй день». Здесь на каждую причину шквала есть ответ, и все они встроены, а не настраиваются вами по наитию:
| Из-за чего обычно шумит | Что сделано здесь |
|---|---|
| Точка «дышит» вокруг порога | порогов два: выйти — дальше, вернуться — ближе, между ними мёртвая зона |
| Объехал ремонт за пять минут | сход объявляется только после выдержки в десять минут в стороне |
| Прибор выдал неточную отметку | отметки с большой погрешностью отбрасываются и не двигают таймеры |
| Машина ушла в тоннель | молчание трекера — своё состояние «Нет сигнала», а не «всё хорошо» |
| Сошёл, вернулся, снова сошёл | повторная тревога не раньше чем через полчаса после первой |
Главный порог — не наша константа. Ширина коридора живёт в самом маршруте: полоса, которую диспетчер нарисовал этому рейсу, и есть порог тревоги — выбрали пять километров, значит «Отклонился» скажется на пяти, а не на каком-то нашем числе. Выдержка, срок молчания и пауза между тревогами — про раздел целиком и лежат настройками поля «Маршрут»; экрана для них в конструкторе пока нет, поэтому меняем их мы по вашей просьбе — это же честно написано подсказкой под полем в карточке рейса и стоит отдельной строкой в «Дорожной карте» ниже. А отсев неточных отметок не настраивается вовсе: он встроен в само наблюдение.
Флот: где все машины прямо сейчас
Статус рейса отвечает на вопрос «всё ли идёт по плану». Диспетчеру нужен и второй, живой: где они все прямо сейчас. Для этого в кабинете есть отдельный экран «Флот» — карта на всю рабочую область, а сбоку список машин. Пункт «Флот» появляется в меню сам, как только в пространстве заводится поле-маршрут — модулем, шаблоном ниши или вашими руками в конструкторе; у парикмахерской или магазина его не будет, потому что показывать там нечего.
На карте каждая машина — своя булавка, подписанная номером или именем ключа, и цвет говорит о состоянии сразу: идёт по маршруту, отклонился, молчит, свободна, трекер не подключён. Рядом с булавкой лежит линия маршрута того рейса, которым машина занята. В списке у каждой машины своя строка: где она, с какой скоростью идёт (или что стоит), как давно отвечала — «12 сек назад», — и насколько отошла от коридора, если отошла. Оттуда же одним нажатием открывается карточка рейса.
Экран живой: позиции подтягиваются сами, пока он открыт, — сервер сообщает вкладке, что точки поехали, и она обновляет карту. Никаких «нажмите обновить».
<!-- КАДР: экран «Флот» — карта с машинами и линиями маршрутов, список машин со скоростью и свежестью --> <!-- КАДР: режим наблюдения — камера следует за машиной, остальные приглушены, плашка «Наблюдаем» -->Управление ровно двумя вещами, и обе — про внимание:
- галочка у машины убирает её (и её маршрут) с карты, не теряя из списка. Рядом — «показать все» и «скрыть все», потому что снимать полсотни галочек по одной никто не станет. Выбор запоминается: после перезагрузки спрятанные машины остаются спрятанными;
- «наблюдать» — карта начинает следовать за выбранной машиной, остальные приглушаются, но с карты не исчезают: важно видеть, что вокруг. Выход из наблюдения — явной кнопкой, само оно не отпустит.
Машина попадает в список, даже если у неё нет ни одной точки: и та, которой ключ выписали, но трекер ещё не поставили, и та, которую назвал рейс, а ключ ей забыли выписать вовсе. Второе — самая частая ошибка настройки, и экран говорит о ней прямо, вместо того чтобы молча не показать машину.
Откуда берутся точки машины
Это первый вопрос любого разговора про наблюдение за транспортом, и ответ на него скучный в хорошем смысле: машина шлёт точки сама, в один наш адрес, и путей к этому адресу три. Своего приложения-трекера мы не пишем и прошивок приборов не разбираем — и не собираемся: чем меньше нашего кода стоит между грузовиком и картой, тем меньше здесь ломается и тем шире список приборов, которые просто работают.
| Что у вас уже есть | Что нужно сделать | Когда поедут точки |
|---|---|---|
| Только телефон водителя | поставить бесплатное приложение-трекер (Android и iOS) и вписать в него две строки — адрес и ключ | в тот же день; покупать нечего |
| «Железный» GPS-трекер в кабине | направить прибор на бесплатный сервер трекеров, а его — на нас, одной настройкой пересылки | как только прибор перенастроят — обычно это делает тот, кто его ставил |
| Своя система мониторинга (например, Wialon) | сказать нам: подключаем по заявке, вместе с вашим поставщиком | по договорённости; кнопки «подключить в один клик» пока нет |
Ни один из трёх путей не требует от вас ни строчки кода и не требует менять то, что уже работает: приборы остаются теми же, договор с оператором связи — тем же, водитель не учится ничему новому.
Адрес не надо собирать руками. В момент, когда машине выписывается ключ, система показывает готовую строку — ровно ту, что вставляется в поле «Адрес сервера» приложения-трекера, и ключ в ней уже внутри. Скопировали, вставили — поехали.
Почему «а наш трекер вы поддерживаете?» почти всегда «да»
Дешёвые GPS-приборы говорят каждый на своём двоичном протоколе, и разбор полутора сотен таких протоколов — это отдельный продукт, а не строка в дорожной карте. Мы его и не пишем. Между прибором и нами стоит бесплатный сервер трекеров с открытым исходным кодом (Traccar Server) — он и есть тот, кто знает эти полторы сотни протоколов. Ставится один раз, рядом с CRM или у вас, не требует ни лицензии, ни абонентской платы, и наружу его не публикуют: это внутренняя шестерёнка, а не второй кабинет, в который придётся ходить диспетчеру.
Нам он шлёт обычный веб-запрос с координатами, и приёмник у нас намеренно всеядный — вашему
программисту следующая строка скажет всё: принимаются и одиночная точка, и конверт события, и массив;
и полные имена полей (latitude, longitude), и короткие (lat, lon); время — секундами,
миллисекундами или строкой стандартного формата. Следствие ровно то, ради которого это сделано:
подключается всё, что умеет отправить координаты обычным запросом — сервер трекеров, бортовой
компьютер, скрипт вашего подрядчика, чужая платформа слежения. Новый источник — это настройка на той
стороне, а не наш релиз.
Ключ машины: персональный, показывается один раз, отзывается одним действием
Ключ выдаётся на конкретную машину и разрешает ровно одно — писать её точки. Прочитать им нельзя ничего: ни рейсов, ни истории, ни настроек. В базе лежит не сам ключ, а его отпечаток, поэтому «покажите ещё раз» — просьба невыполнимая по построению, и мы говорим это заранее, а не после.
Отзыв — одно действие, и после него точки от этого ключа не принимаются вовсе. Это не формальность: трекер теряется вместе с грузовиком, и ключ, который нельзя отозвать, был бы дырой на весь срок жизни машины. Ни один параметр запроса при этом не может назвать чужую машину или чужой кабинет: и то и другое система берёт из самого ключа.
Ключи вы выписываете сами, в кабинете. «Настройки» → «Трекеры» → «Выписать ключ»: вписали номер машины — и экран показал готовый адрес для приложения-трекера, с ключом уже внутри. Там же список выписанных ключей и отзыв одним нажатием. Вкладка видна тому, у кого есть право «Каналы: подключение и настройка», и только в пространстве, где заведено поле-маршрут. Заявки на выписку нам больше не нужны — это ваша настройка, а не наша работа.
Тоннели, лесополосы и сломанные часы прибора
Грузовик едет через тоннели и районы без сети — это норма, а не сбой, и историю на этом терять нельзя. Поэтому приёмник берёт пачку точек, а не только последнюю: приложение и сервер трекеров копят точки офлайн и отдают их одним запросом, когда связь вернулась (за раз принимается до двух тысяч точек). Время каждой точки берётся от прибора, а не от момента приёма, — иначе весь накопленный кусок лёг бы на карту одной секундой.
От сбитых часов прибора защита с обеих сторон: точка «из послезавтра» переписывается на «сейчас» (иначе она навсегда осталась бы последней и заморозила бы наблюдение за этой машиной), а координаты проверяются дважды — и нашим кодом, и самой базой, которая мусор просто не примет.
Молчание трекера — своё состояние, а не «всё хорошо»: машина, переставшая отвечать дольше заданного срока, отмечается на «Флоте» как «Нет сигнала». История точек хранится месяц и вычищается сама.
Что дальше происходит с точкой
Точка, попавшая в систему, живёт обычной жизнью кабинета, а не отдельным «модулем слежения»:
- экран «Флот» показывает её сразу — карта обновляется сама, пока экран открыт;
- раз в полминуты рейс сверяет последнюю точку со своим коридором: ушёл и остался снаружи — поле «Контроль маршрута» становится «Отклонился»;
- дальше это обычное изменение поля, и его подхватывает конструктор правил — уведомление диспетчеру в кабинете и на телефон, письмо, сообщение заказчику в его канал, вебхук в вашу учётную систему; набор собираете вы, а не выбираете из нашего списка (чего в этом наборе нет — в честных ограничениях ниже).
Поэтому подключение трекера — это настройка, а не стройка: всё, что происходит после точки, уже построено и работает одинаково, откуда бы точка ни пришла.
Посмотреть до покупки первого трекера
Показать контроль рейса без движущейся машины невозможно, а движущаяся машина — это прибор, водитель и полторы тысячи километров дороги. Поэтому у нас есть демонстрационный прогон: грузовик едет по настоящей ломаной Ростов-на-Дону → Казань (двадцать опорных точек трассы, 1475,5 км), в середине длинного прямого плеча уходит из коридора на 3,1 км, детектор выдерживает паузу, статус рейса меняется, правило шлёт уведомление — и машина возвращается на трассу. Всё, кроме источника точек, в этом прогоне боевое: симулятор пишет тем же контрактом, что живой трекер.
Прогон включаем мы, на демонстрации, — это инструмент показа, а не функция вашего кабинета. Зато после него вопрос «а заработает ли у нас» сводится к одной строке в приложении на телефоне водителя.
Дорожная карта: что доделаем
Это вторая полоса страницы, и она нужна ровно затем, чтобы первую можно было читать буквально. Всё, что стоит здесь с меткой «В плане», ещё не выпущено — мы не обещаем сроков и не продаём это ни на одном тарифе. Как только пункт выходит, он переезжает наверх, в «Что уже работает», тем же заходом, что и код.
| Что появится | Что это даст | Статус |
|---|---|---|
| Прогноз времени в пути по вашим же поездкам | сегодня время в пути — плановое, посчитанное по скоростям дорог. Накопив реальные проходы этого коридора вашими машинами, мы сможем поправлять прогноз по ним | В плане |
| Зоны на карте и отбор по расстоянию | «уведомить, когда машина въехала в зону погрузки», «показать заказы в радиусе от склада» — сегодня ни того, ни другого нет | В плане |
| Готовые подключения к платформам слежения | сегодня Wialon и родню подключаем по заявке — руками, вместе с вашим поставщиком; кнопка в настройках, которая делает это сама, — следующий шаг | В плане |
| Пройденный след машины на «Флоте» | сейчас видно, где машина сейчас, и плановый маршрут её рейса; «как она сюда ехала последний час» — нет. Сами точки хранятся, так что это вопрос отдельного шага | В плане |
| Управление библиотекой маршрутов | переименовать и убрать сохранённый эталон из интерфейса пока нельзя — только сохранить и загрузить | В плане |
| Экран порогов наблюдения | ширину коридора вы уже задаёте сами, в редакторе; выдержку, срок молчания трекера и паузу между тревогами пока меняем мы по заявке — своего экрана в конструкторе у них нет | В плане |
| Легковые маршруты | все профили машин сегодня грузовые: легковой автомобиль — другой режим маршрутизации, а не грузовик с маленькими габаритами, и подделывать его габаритами мы не станем | В плане |
Чего в этом списке нет намеренно. Живых пробок — то есть данных о заторах и перекрытиях прямо сейчас — мы не обещаем: это чужой платный сервис, и пока такого договора нет, писать о нём на витрине значило бы продавать несуществующее.
Сколько стоит
Бесплатно и навсегда — как и всё остальное. Модуль «Маршруты и карта», сама карта, маршрут, автопостроение по дорогам, библиотека маршрутов, история версий, наблюдение за коридором, уведомления и экран «Флот» входят в бесплатный тариф целиком: у нас платный тариф продаёт объём (места, записи, файлы, глубину истории), а не список возможностей. Построений маршрута мы не считаем и не продаём поштучно.
Честные ограничения
- Модуль не приносит связей с «Заявкой», «Грузовиком» и «Водителем». В шаблоне «Грузоперевозки» рейс связан с этими тремя разделами; модуль их не заводит и связать рейс с ними не может — этих разделов вне транспортного шаблона просто нет, а ссылку в никуда поставить нельзя. Модуль даёт рейс с маршрутом, коридором, контролем и ключом трекера; диспетчерская связка «заявка — грузовик — водитель» остаётся принадлежностью транспортной ниши. Нужны обе стороны — выбирайте шаблон «Грузоперевозки» при создании пространства или заводите нужные разделы и ссылки в конструкторе сами.
- Пауза модуля убирает раздел «Рейсы» целиком. У транспортной компании это её боевой раздел: «Приостановить» уносит из меню и сами рейсы, и маршруты, и контроль — а не только то, что модуль «добавил». Записи при этом целы, продолжают считаться в объёме тарифа и возвращаются кнопкой «Включить обратно»; но нажимать паузу «чтобы прибраться в галерее» у перевозчика не стоит.
- Установленный модуль не приносит ни одной записи. У нетранспортного пространства раздел «Рейсы» открывается пустым: первый рейс вы заводите сами. Демо-рейс осмыслен только с готовым маршрутом, а маршрут — это ломаная по конкретной трассе; для парикмахерской, добавившей себе рейсы, такой трассы не существует, и выдумывать её мы не стали. У шаблона «Грузоперевозки» трасса есть — там демо-рейс Краснодар → Саратов лежит в кабинете с первого дня (см. «Демо-рейс в коробке»).
- Новое в модуле не догоняет уже собранные пространства. Состав модуля — разделы, поля, их настройки — копируется к вам в момент установки и дальше живёт своей жизнью: вы его правите, мы в него не лезем. Обратная сторона — обновления модуля (например, «Маршрут» в шапке карточки рейса) сами собой в старом пространстве не появляются, а кнопки «обновить модуль» в галерее нет. Пишите — донесём руками, это минуты.
- Вида «Карта» модуль не заводит. Карта маршрута живёт в редакторе поля «Маршрут» и на экране «Флот»; чтобы увидеть на местности сам список рейсов, нужно завести разделу поле «Точка на карте» и добавить вид «Карта» руками (минута в конструкторе, см. выше).
- Слои показывают то, что есть в OpenStreetMap, и только его. Заправки, стоянки, сервис и еда — не наш справочник: это точки открытой карты, которую мы отдаём как подложку. Ни сети АЗС, ни цен, ни часов работы, ни «сколько мест на стоянке» там нет, а на глухих участках трассы может не оказаться и самой точки, хотя заправка там стоит. Планировать по ним удобно, звонить и бронировать — нечем.
- Слои живут в редакторе маршрута, а выбор — пока открыт редактор. Чипы стоят на карте полноэкранного редактора рейса; на виде «Карта» раздела и на экране «Флот» их сегодня нет. Закрыли редактор и открыли снова — снова три набора по умолчанию: выбор не запоминается ни за вами, ни за пространством.
- Искать по расстоянию нельзя. Карта показывает записи, но фильтра «в радиусе 50 км от склада» и уведомления «въехал в зону» не существует: по координатам нельзя ни отобрать, ни отсортировать. Отбирайте городом и адресом — это обычные поля рядом.
Что дальше
Если вы пришли сюда за наблюдением за грузовиками, задача разобрана целиком на отдельной странице — контроль маршрутов и GPS-мониторинг: что придётся настроить, откуда берутся координаты и где проходят границы.
Как устроены остальные представления данных — пять видов раздела; кто именно отправляет уведомление после смены статуса — правила автоматизации; как завести своё поле-точку в любом разделе — конструктор.
Как этим пользоваться
Пошаговый разбор с картинками — в справке.
Открыть инструкциюОткрыто целиком, без регистрации.
Что рядом
- Видеть работу так, как удобно: таблица, канбан, календарь, карточкаОдни и те же данные в пяти представлениях: таблица для разбора, канбан для движения, календарь для времени, карточка для одного клиента, компактный список для телефона. Что когда выбирать и где границы каждого.
- Правила «когда → если → то»: рутина без вашего участияПоявился заказ — назначить мастера. Этап стал «Готов» — отправить клиенту акт. Подходит срок — поставить задачу. Правило собирается одной фразой, работает само и показывает, почему сработало или промолчало.
- Конструктор: меняете систему сами, без программиста и без ТЗНовое поле — за минуту, новый раздел — за пять, прямо в работающем кабинете и без остановки работы. То, за что интеграторы берут десятки тысяч, здесь делает владелец между двумя заказами.
Соберите свою CRM под свою нишу — бесплатно и без карты.
Собрать мою CRM →