1. Стандартизация адреса доставки
Для расчета стоимости перевозки логистическому сервису необходим корректный адрес получателя. Если пользователь вводит его в произвольной форме, допускает опечатки или указывает недостаточно данных, система может не распознать пункт назначения.
Чтобы снизить вероятность таких ошибок, перед отправкой запроса адрес разгрузки проверяется и стандартизируется с помощью DaData. Сервис помогает привести адрес к структурированному формату и получить идентификаторы адресных объектов, которые можно использовать при дальнейшей обработке.
После проверки система передает подготовленный адрес в логистический сервис. Это снижает риск ошибок, связанных с некорректным вводом данных, и повышает надежность расчета.
Важно учитывать, что стандартизация не заменяет проверку полноты адреса. Если определить место доставки невозможно, система должна запросить недостающие сведения или передать ситуацию на дополнительную обработку.
2. Автоматический подбор типа транспорта
Стоимость перевозки зависит не только от маршрута, но и от характеристик груза. Например, при доставке металлопродукции необходимо учитывать общую массу партии и длину изделий. Транспортное средство может подходить по грузоподъемности, но не соответствовать габаритам груза.
Чтобы исключить ручной подбор машины для каждого заказа, в проекте реализовали алгоритм определения типа транспорта на основе двух параметров: веса и максимальной длины груза.
Использовались следующие правила:
|
Тип транспорта
|
Вес груза
|
Длина груза
|
|
Легкий
|
До 7 т включительно
|
До 6 м
|
|
Средний
|
От 7 до 10 т
|
До 12 м
|
|
Тяжелый
|
От 10 до 20 т включительно
|
До 12 м
|
Эти параметры относятся к конкретной реализации и не являются универсальной классификацией транспорта. Для другого проекта правила необходимо адаптировать с учетом ассортимента, характеристик грузов и требований к перевозке.
При разработке алгоритма важно также предусмотреть граничные значения и нестандартные случаи. Например, система должна корректно обрабатывать грузы, масса или длина которых выходят за заданные диапазоны. Иначе автоматический подбор может привести к некорректному запросу и ошибочной оценке стоимости.
3. Получение рыночного тарифа через API
После проверки адреса и определения типа транспорта портал формирует запрос к сервису «АТРАКС». В запрос передаются адрес отправления со склада, адрес разгрузки и параметры, необходимые для определения подходящего транспорта.
Для расчета используется параметр avg_price, который отражает среднюю рыночную стоимость перевозки за последние три месяца по соответствующему направлению и типу транспорта.
Полученное значение выводится в корзине и на странице оформления заказа. Покупатель может оценить предполагаемые расходы на перевозку до отправки заявки, а не ждать отдельного расчета менеджера.
При проектировании подобного решения важно учитывать характер получаемых данных. Средняя рыночная цена является ориентиром и не обязательно совпадает с окончательной стоимостью конкретной перевозки. Поэтому интерфейс должен корректно отражать статус расчета и не создавать впечатления, что предварительный тариф всегда является подтвержденной ценой.
4. Обработка ошибок и нестандартных маршрутов
Внешний логистический сервис не всегда может рассчитать стоимость перевозки. Например, тариф может отсутствовать для конкретного направления или система не сможет обработать запрос.
Если в такой ситуации блокировать оформление заказа, автоматизация создаст дополнительное препятствие для клиента. Поэтому в проекте предусмотрели альтернативный сценарий.
Когда «АТРАКС» не возвращает стоимость, портал показывает сообщение: «Стоимость доставки будет рассчитана менеджером во время обработки интернет-заказа».
Покупатель может продолжить оформление, а сотрудники компании рассчитывают стоимость вручную при обработке заявки. Таким образом, отсутствие тарифа не становится причиной отказа от оформления заказа.
При реализации интеграции важно различать отсутствие данных для расчета и технические ошибки, например недоступность API. Для надежной работы системы полезно предусмотреть журналирование ошибок, контроль времени ответа и возможность повторной обработки запросов. Это помогает выявлять проблемы и упрощает сопровождение интеграции.
5. Передача стоимости доставки в учетную систему
Автоматический расчет полезен не только на стороне клиентского интерфейса. Полученная стоимость должна быть доступна сотрудникам, которые обрабатывают заказ внутри компании.
В рассматриваемом проекте для обмена данными между B2B-порталом и информационной системой «Спутник 2.0» использовалась шина сообщений RabbitMQ. Рассчитанная стоимость доставки передавалась вместе с данными заказа.
Благодаря этому менеджеры и логисты могли учитывать предварительную стоимость перевозки при дальнейшей обработке заявки. Необходимость повторно собирать информацию из интерфейса портала сокращалась, а данные о заказе и доставке становились доступны в учетной системе.
При проектировании подобного обмена важно определить состав передаваемых данных, правила их обновления и обработку ошибок. Например, если клиент изменит состав заказа, система должна корректно обработать изменение параметров груза и определить, требуется ли повторный расчет доставки.
Также необходимо учитывать ситуации, когда сообщение не удалось передать или обработать с первого раза. Продуманная обработка таких случаев помогает сохранять согласованность данных между системами.