Перейти к содержимому

Интеграция доставки: сквозной процесс

TL;DR: доставка — это цепочка из десяти шагов, на каждом из которых у магазина и оператора своя зона ответственности. Интеграция сводится к тому, чтобы магазину вовремя отдать отправление и данные, а оператору — вовремя вернуть статусы, ярлыки и факты вручения.

Страница описывает сквозной процесс работы с любым оператором доставки: от подключения по договору до ежедневной сверки. Один и тот же процесс применим к курьерке, ПВЗ и постаматам; различаются только детали шагов (например, точка выдачи вместо адреса). Интеграционные коды, вебхуки и справочники — часть контура интеграций; здесь зафиксирован процесс и распределение ролей.

  • Какие продукты оператора подключаются (курьер, ПВЗ, постаматы) и для каких регионов.
  • Кто платит за доставку в заказе: покупатель, магазин или смешанная схема.
  • Габаритно-весовые границы каталога и что делать с товарами «на грани».
  • Формат вручения отказа: продолжение продажи или стоп до решения по клиенту.
  • Как в витрине обещаются сроки: строго по расчёту оператора или с запасом.

Сквозной процесс и распределение ответственности

Заголовок раздела «Сквозной процесс и распределение ответственности»
#ШагРешает магазинРешает оператор
1Договор и матрица услугВыбирает оператора, подписывает договор, фиксирует продукты (курьер/ПВЗ/постамат) и тарифную сеткуПредоставляет личный кабинет, доступы, документацию API
2Весогабариты и склады оператораПроверяет, что товары проходят ограничения по весу и габаритам; узнаёт, на каких складах принимает операторПубликует ограничения по продуктам, список приёмных складов/терминалов
3Расчёт тарифа и срока в checkoutПоказывает покупателю варианты и стоимости на checkout, закладывает доставку в ценуДаёт калькулятор тарифа и сроков по направлениям
4Создание отправленияФормирует заказ на доставку: адрес/точка выдачи, габариты, содержимое, стоимостьПринимает заявку, возвращает идентификатор отправления
5ПодтверждениеПроверяет итоговую стоимость и номер, фиксирует отправление в системеПодтверждает заявку, закрепляет тариф
6ЯрлыкиПечатает и наклеивает ярлыки на упаковкуГенерирует печатные формы по данным отправления
7Забор / сдачаВызывает курьера на забор или отвозит отправления на склад/терминалПриём по заранее опубликованному графику складов
8ТрекингТранслирует статусы оператора в свой жизненный цикл заказа, информирует покупателяОтдаёт историю статусов (polling) или события (вебхуки)
9Вручение / невыкупПринимает факт вручения или невыкупа, запускает возврат товараДоставляет до адреса/точки, хранит в ПВЗ установленный срок, фиксирует результат
10СверкаСверяет выставленный счёт с фактически исполненными отправлениями, оспаривает расхожденияПредоставляет акты и реестры исполненных услуг

Правило распределения простое: магазин отвечает за данные и готовность отправления, оператор — за перемещение и факт результата.

  • Шаг 3. Срок доставки показан без учёта дня оформления (зовут «доставка за 2 дня», а работает только с понедельника по пятницу) — покупатель разочарован до вручения.
  • Шаг 4. Адрес введён с ошибкой вручную; валидация адреса до создания отправления дешевле изменения в пути.
  • Шаг 7. Отправление собрано, но курьер не вызван, а склад оператора закрыт — отправление лежит на складе магазина и «висит» в неопределённом статусе.
  • Шаг 8. Статусы приходят позже, чем покупатель пишет в поддержку, — задержка трансляции события в уведомление.
  • Шаг 10. Сверка не сравнивает тариф подтверждения с тарифом расчёта: расхождения всплывают на счёте через месяц, оспорить их сложнее.
  • Идентификатор точки и оффера. Выбор ПВЗ/постамата передаётся идентификатором точки, а выбранного тарифа — идентификатором оффера, полученного при расчёте. Код точки действителен, пока справочник оператора актуален.
  • Срок расчёта тарифа. Калькулятор вызывается на checkout, где важна скорость ответа; расчёт кешируется на уровне витрины с учётом зоны и веса.
  • Fallback при недоступном калькуляторе. Если расчёт недоступен, checkout обязан показать доставку по сохранённым тарифным правилам или «уточнит менеджер», а не блокировать оформление.
  • Единые внутренние статусы. Статусы операторов маппятся в единый внутренний набор магазина (собран → передан → в пути → в пункте выдачи → вручён), чтобы витрина и персонал работали без знания специфики каждого оператора.
  • Повторные события. Каждый входящий статус должен обрабатываться идемпотентно: вебхуки и polling дублируются, и повторное событие не должно создавать второй записи или уведомления.
  • Асинхронность. Создание отправления может подтверждаться позже запроса: система должна хранить промежуточное состояние «создан, ожидает подтверждения» и обрабатывать отказ.
  • Отдельный вызов курьера. Заявка на забор — самостоятельная операция, а не следствие создания отправления; у неё свои дата, интервал и статус.

Соблюдение этих условий важно и при смене оператора: единый внутренний статусный слой и отделённые от оператора данные заказа позволяют добавить новый канал без переписывания витрины и отчётности.

Интеграция доставки — операционно критичная и потому нуждается в наблюдении, а не только в настройке:

Наблюдаемая величинаТревожный признакДействие
Доступность калькулятораРост ошибок расчёта на checkoutВключить fallback, оповестить витринную команду
Доля необработанных вебхуковСобытия приходят, но обработка падаетРетрай и разбор ошибок обработчика
Свежесть справочника ПВЗОбновление не приходило более сутокПринудительный запрос и проверка содержимого
Отказы создания заказовРост доли отвергнутых заявокПроверка данных отправлений и лимитов продукта
Задержка статусовПокупатель знал раньше системыПроверить очередь событий обработчика

Один и тот же интеграционный каркас обслуживает оба сценария, но данные, которые передаются оператору, различаются:

  • B2C. Плательщик — физлицо; на витрине передаются адрес или код ПВЗ, контакт, габариты и стоимость отправления; вручение подтверждается курьером или точкой выдачи.
  • B2B. Плательщик — юрлицо; вместе с данными отправления передаются товаросопроводительные документы, доверенность на получение и требования приёмки. Процесс приёмки расписан в разделе ниже.
  • Отказ расчёта тарифа — направление не обслуживается или габариты вне продукта; витрина скрывает недоступный вариант, а не продаёт невозможное.
  • Невручение — истечение срока хранения в ПВЗ или два неудачных визита курьера; отправление возвращается оператором, магазин фиксирует проблемную отгрузку и решает вопрос с клиентом.
  • Изменение адреса — правка отправления в пути возможна не для всех продуктов; дешевле проверить данные до создания отправления, чем править после.
  • Частичный выкуп — в заказе из нескольких позиций покупатель принимает часть; товары, не принятые покупателем, проходят процесс возврата (фулфилмент и возвраты), а деньги — платёжный контур.
  • Повторное вручение — курьерская попытка не удалась, назначается новая; каждый повтор — отдельное событие трекинга, и уведомления покупателю не должны дублироваться.
  • Ошибочные данные содержимого — расхождение заявленных позиций с фактом на приёмке оператора задерживает отправление: данные содержимого сверяются до сдачи.

Сверка (шаг 10) — единственный контроль, что подтверждённые тарифы совпали со счётом. Она строится на данных интеграции:

ИсточникДанныеЧто сверяется
История статусовФакт вручения, датаОтправление исполнено и когда
Акты / реестрыПартии, отправления, тарифыТариф подтверждения против тарифа расчёта
Собственные записиСоздание, содержание, габаритыПозиции счёта против отправлений магазина

Сверка ищет три класса расхождений: исполнено, но не выставлено; выставлено, но не исполнено; исполнено по другому тарифу. Периодичность — по циклу счёта оператора, но не реже месяца, иначе споры накапливаются.

Доставка между юрлицами требует большего, чем «курьер довёз»:

  • Документы. Отправление сопровождается товаросопроводительными документами; комплект и подписи согласуются между контрагентами.
  • Приёмка по количеству и качеству. Получатель проверяет комплектность и состояние; расхождения оформляются актом приёмки, а не устной претензией курьеру.
  • Экспедирование. Допускается согласование погрузки/разгрузки, подъём на этаж, работа в интервал; тарифицируется отдельно.
  • Планирование. Отгрузки идут по графику договора, а не по одному заказу; интеграция должна поддерживать плановые заявки.

B2C-правила дистанционной продажи (например, автоматическое право отказаться от покупки) на B2B-поставки не переносятся — см. различия в фулфилменте и возвратах.