Skip to main content
ГлавнаяБлогСтатус доставки Shipping API: коды статусов, вебхуки и уведомления об исключениях

Статус доставки Shipping API: коды статусов, вебхуки и уведомления об исключениях

17TRACK

Статус доставки в Shipping API описывает продвижение посылки, а не то, был ли API-запрос выполнен успешно. Чтобы создать надежное отслеживание, разделяйте коды HTTP-ответов и статусы отправлений, обрабатывайте вебхуки, не предполагая, что они поступают один раз и по порядку, а исключения, требующие действий, превращайте в оповещения с четко назначенными ответственными. Для инженерных и операционных команд электронной коммерции цель заключается в создании записи об отправлении, которая остается достоверной, даже когда обновления перевозчика задерживаются, дублируются или исправляются.

Статусы доставки Shipping API, коды статусов, вебхуки и оповещения об исключениях

В этом руководстве объясняется, как структурировать такую запись, обрабатывать входящие события отслеживания и отличать проблему с доставкой от проблемы интеграции отслеживания.

Разделяйте HTTP-коды, результаты API и статусы отправлений

Термин «код статуса» может относиться к трем различным уровням. Их смешивание приводит к вводящим в заблуждение панелям мониторинга и ненужным уведомлениям клиентов.

УровеньЧто он сообщаетПример интерпретации
HTTP-ответРезультат HTTP-запросаОтвет 200 указывает на успех на уровне HTTP; это не означает, что посылка доставлена.
Бизнес-результат APIБыла ли запрошенная операция успешной в соответствии с прикладными правилами провайдераТело ответа может сообщить, что регистрация отслеживания отклонена, в том числе в составе успешного HTTP-ответа, если API использует такую схему.
Статус отправленияСообщаемое физическое или операционное состояние посылкиВ пути, ожидает получения или доставлено.

Стандарт семантики HTTP определяет значения HTTP-ответов. Например, 202 Accepted означает, что запрос принят на обработку, но обработка еще не обязательно завершена. Это не свидетельствует о том, что перевозчик принял посылку.

Аналогично, неудачный запрос отслеживания не доказывает, что отправление перестало двигаться. Ваше приложение может временно потерять видимость отправления, пока физическая доставка продолжается в обычном режиме. Отслеживайте эти уровни независимо друг от друга.

Создайте модель статусов, не отказываясь от деталей перевозчика

Не существует универсального числового кода статуса доставки, общего для всех Shipping API и перевозчиков. Значение из одной интеграции не следует интерпретировать с использованием соответствия другого провайдера. Используйте документацию конкретной версии API, которую вы реализуете.

Практическая внутренняя модель сочетает небольшой набор нормализованных статусов с исходным событием перевозчика. Нормализация обеспечивает единообразную отчетность, а исходное событие сохраняет детали, необходимые для расследования.

Пример внутреннего статусаЗначениеОперационная осторожность
Информация полученаСуществует электронная информация об отправлении.Не считайте создание этикетки подтверждением физической передачи посылки.
В путиЗапись отслеживания указывает на перемещение по сети доставки.Эта широкая категория может включать различные этапы перевозки.
Передано курьеру для доставкиСообщается, что посылка находится на маршруте доставки.Не превращайте этот статус в безусловную гарантию доставки.
Ожидает полученияОжидается, что получатель заберет посылку.Добавляйте инструкции или сроки получения только при наличии подтверждения в источнике.
ДоставленоИсточник отслеживания сообщает о доставке.Само по себе сканирование доставки не разрешает заявление клиента о неполучении.
ИсключениеСобытие может требовать внимания или прервать обычное продвижение.Сохраняйте причину, а не считайте каждое исключение потерей отправления.
Возврат выполняется или выполненПосылка движется обратно или сообщается о завершении возврата.Отделяйте ход возврата от доставки первоначальному получателю.
НеизвестноДоступную информацию нельзя уверенно сопоставить.Исследуйте соответствие или пробел в данных, а не придумывайте состояние доставки.

Эти обозначения являются предлагаемой моделью приложения, а не официальным списком кодов 17TRACK. Сохраняйте код статуса провайдера, подстатус, описание, время события, сведения о часовом поясе, местоположение и время получения, если они доступны. Также сохраняйте версию соответствия, чтобы последующие изменения можно было проверять.

Для реализации с несколькими перевозчиками 17TRACK Tracking API является подходящим вариантом интеграции. Используйте его официальную документацию API, чтобы определить контракт реализации, а не копируйте демонстрационные обозначения в поля, специфичные для провайдера. До создания адаптера подтвердите применимые определения статусов, конфигурацию вебхуков, требования к аутентификации и семантику ответов.

Стройте обработку вебхуков вокруг надежного получения

Вебхук — это HTTP-запрос, отправляемый на вашу конечную точку для сообщения о событии. Он может сократить необходимость постоянного опроса, но его не следует считать гарантией немедленной, упорядоченной или однократной доставки. Проектируйте приемник так, чтобы он выдерживал повторы, прерывания и неожиданные полезные нагрузки, если провайдер явно не гарантирует обратное.

  1. Аутентифицируйте запрос. Применяйте документированный провайдером метод проверки. Если поддерживаются подписи, проверяйте их с использованием указанного алгоритма и необработанных байтов запроса. Не придумывайте заголовок подписи и не предполагайте, что каждый сервис использует HMAC.
  2. Проверьте полезную нагрузку. Проверяйте обязательные поля, типы, размер полезной нагрузки и связь с отправлением, которым управляет ваша учетная запись. Обрабатывайте неизвестные необязательные поля, не нарушая без необходимости обратную совместимость.
  3. Сохраняйте данные до подтверждения. Сохраните принятое событие или поместите его в надежную очередь до отправки документированного успешного ответа. Если сохранение не удалось, не подтверждайте безопасное получение события.
  4. Обрабатывайте асинхронно. По возможности выполняйте сопоставление статусов, обновление заказов и принятие решений об уведомлениях вне обработчика запроса.
  5. Делайте побочные эффекты идемпотентными. Повторное событие не должно создавать еще одну заявку в службу поддержки или отправлять копию того же сообщения клиенту.

Точный код подтверждения, тайм-аут, расписание повторных попыток и поведение воспроизведения зависят от провайдера. Явно проверьте эти детали. Общее указание «верните 200» не заменяет контракт вебхука.

Используйте HTTPS и не помещайте учетные данные в URL и обычные журналы. Применяйте средства контроля доступа к сохраненным полезным нагрузкам, поскольку данные отслеживания могут содержать персональную информацию. Памятка OWASP по безопасности REST содержит рекомендации по защите транспорта, проверке входных данных и безопасности конечных точек.

Удаляйте дубликаты событий, не подавляя реальные обновления

При наличии используйте документированный стабильный идентификатор события. В противном случае создавайте ключ дедупликации на основе тщательно выбранного сочетания идентификатора отправления, времени события, кода события и местоположения. Проверяйте этот подход на реальных полезных нагрузках: два легитимных события могут иметь одинаковую отметку времени, а одно и то же событие может поступить с немного отличающимся описательным текстом.

Используйте отдельные средства дедупликации для приема событий и последующих действий. Обновление статуса может потребоваться сохранить повторно как исправление, тогда как уведомление клиента следует оставить подавленным. Каждому уведомлению или действию по заявке назначайте собственный надежный идентификатор.

Разделяйте время события и время получения

Представьте, что событие «в пути» достигает вашей системы после события «передано курьеру для доставки», но временная отметка перевозчика у него более ранняя. Сохраните его в истории, не изменяя автоматически текущий статус обратно на «в пути».

Одной сортировки по времени недостаточно для каждого случая. Отсутствующие часовые пояса, исправленные сканирования и противоречивые источники требуют явных правил. Сохраняйте точность и смещения временных отметок, записывайте момент получения каждого события вашей системой и используйте документированную информацию о последовательности провайдера, если она доступна. Не вводите жесткую иерархию статусов только с движением вперед: попытки доставки, перенаправления, возвраты и исправления могут создавать легитимные переходы, которые выглядят как движение назад.

Превращайте исключения в действия с назначенными ответственными

Оповещение об исключении должно объяснять, что произошло, какие действия необходимы и кто отвечает за следующий шаг. Общее сообщение «исключение при отправлении» заставляет операционных сотрудников повторять одно и то же расследование и может тревожить клиентов, не помогая им.

Начните с небольшой политики маршрутизации:

  • Проблема с адресом или доступом: Направьте обращение в службу поддержки, чтобы проверить проблему и доступный у перевозчика процесс исправления. Не обещайте изменение адреса, пока не убедитесь, что это возможно.
  • Требуется получение: Уведомите получателя, когда источник предоставляет пригодную для использования инструкцию по получению. Сохраните любой подтвержденный срок.
  • Требуется действие по таможне: Назначьте дело в соответствии с тем, кто должен предоставить запрошенные документы или информацию. Одно лишь событие, связанное с таможней, не подтверждает необходимость оплаты.
  • Неудачная попытка доставки: Проверьте указанный следующий шаг, прежде чем рекомендовать повторную доставку или получение.
  • Возврат отправителю: Откройте операционную проверку. Не оформляйте возврат средств автоматически только на основании общего ярлыка отслеживания, если ваша политика прямо этого не разрешает.
  • Утрата или повреждение, о которых сообщил перевозчик: Направьте дело ответственному за претензии и сохраните доказательства события. Отделяйте решения по претензии от общего обнаружения задержек.

Каждое оповещение должно содержать идентификатор отправления, ссылку на заказ, причину события, временную отметку источника, последнее известное состояние, назначенного ответственного и следующее действие. В общих каналах обмена сообщениями добавляйте ссылку на соответствующую внутреннюю запись вместо раскрытия лишних сведений о клиенте.

Рассматривайте отсутствие обновлений как отдельное состояние

Отправление без недавнего сканирования не считается автоматически потерянным. Оно может находиться между контрольными точками, ожидать первого физического сканирования или столкнуться с пробелом в видимости.

Определяйте пороги бездействия по сервису, маршруту, этапу доставки и бизнес-обязательствам, а не применяйте один универсальный таймер. Отличайте посылку, которая никогда не получила сканирование приема, от посылки, обновления по которой прекратились после входа в сеть. Если исторических данных недостаточно, используйте порог для запуска расследования, а не для объявления утраты.

Подавляйте повторные оповещения, пока неизмененное дело остается открытым. Повышайте приоритет, когда появляются новые доказательства, пропущен согласованный срок последующей проверки или обязательство по доставке клиенту требует вмешательства.

Отслеживайте работоспособность интеграции отдельно от эффективности доставки

Мониторинг API отвечает на вопрос, работает ли ваша интеграция отслеживания. Мониторинг доставки отвечает на вопрос, что происходит с отправлениями. Исправная конечная точка может получать устаревшие данные перевозчика, а недоступная конечная точка может пропустить обновления по посылкам, которые нормально перемещаются.

  • Состояние запросов: Отслеживайте ошибки аутентификации, тайм-ауты, ответы об ограничении частоты, серверные ошибки и отклонения на уровне приложения.
  • Состояние вебхуков: Отслеживайте ошибки проверки, задержку подтверждения, ошибки сохранения, дублирующиеся доставки и ошибки обработки.
  • Состояние обработки: Контролируйте возраст очереди, необработанные события, ошибки сопоставления и ошибки уведомлений.
  • Свежесть отслеживания: Измеряйте время с момента последнего события источника отдельно от времени с момента последнего успешного приема вашей системой.
  • Операционные результаты: Отслеживайте нерешенные исключения, время до назначения ответственного и просроченные последующие действия.

При повторных попытках запросов следуйте рекомендациям провайдера по ограничениям частоты и повторам. Не повторяйте бездумно операции, которые могут создать дублирующиеся регистрации или другие побочные эффекты; используйте документированные механизмы идемпотентности, если они доступны.

Если это поддерживается, используйте процесс сверки для получения последней записи отслеживания после сбоев или предполагаемых пропущенных событий. Устанавливайте его частоту в пределах договорных ограничений и лимитов частоты. Вебхуки и сверка служат разным целям: первый доставляет изменения, а вторая помогает обнаруживать и устранять пробелы.

Проверяйте сценарии сбоев до включения уведомлений клиентов

Начните с обработки только для внутренних целей и изучите репрезентативные отправления, прежде чем разрешать изменения статусов, отправляющие сообщения клиентам. Тестируйте не только обычное продвижение от «в пути» до «доставлено».

  • Дублирующийся вебхук создает одно предусмотренное уведомление клиента.
  • Поздно поступившее более старое событие не заменяет ошибочно текущее состояние.
  • Неизвестный статус сохраняется и помечается, а не преобразуется без уведомления в «доставлено».
  • Неудачная надежная запись не приводит к успешному подтверждению.
  • Временный сбой последующей системы оставляет события доступными для повторной обработки.
  • После события «доставлено» поступившее исправление остается доступным для аудита.
  • Заказ с несколькими посылками не становится полностью доставленным, если доставлена только одна посылка.
  • Сбой API уведомляет инженеров, но автоматически не сообщает клиентам о задержке их посылок.

Критерием выпуска должна быть операционная согласованность: запись об отправлении, сообщение клиенту и действие службы поддержки должны соответствовать одним и тем же исходным доказательствам. Один лишь успешный ответ вебхука не доказывает, что процесс доставки работает.

Часто задаваемые вопросы

Означает ли HTTP 200, что посылка доставлена?

Нет. Он указывает на успех запроса на уровне HTTP. Отдельно изучайте бизнес-результат API и поля статуса отправления. Для вебхука успешное подтверждение относится к получению уведомления, а не к физической доставке посылки.

Следует ли использовать вебхуки или опрос для обновлений отслеживания?

Используйте вебхуки для обновлений, управляемых событиями, если провайдер их поддерживает. Если это поддерживается и оправдано с операционной точки зрения, добавьте ограниченный опрос для сверки, чтобы восстанавливать пропуски. Один только опрос может быть уместен, когда вебхуки недоступны, но его частота должна соответствовать ограничениям провайдера и вашим требованиям к свежести данных.

Почему статус отслеживания может измениться после статуса «доставлено»?

Источник может исправить событие, либо ваша интеграция может получить задержанную или противоречивую информацию. Сохраняйте историю и оценивайте более новые доказательства, а не считайте статус «доставлено» технически неизменяемым. Сообщение о доставке и подтверждение получения клиентом также являются разными фактами.

Как быстро следует отправлять оповещение об исключении?

Определяйте срочность по требуемому действию и любому подтвержденному сроку. Проблема, требующая действий получателя, должна обрабатываться иначе, чем информационная задержка. Скорость обработки не компенсирует поздно опубликованное перевозчиком событие, поэтому сохраняйте и временную отметку источника, и временную отметку получения.

Следует ли показывать клиентам исходный статус перевозчика?

Обычно клиентам полезнее понятное объяснение и поддерживаемый следующий шаг, чем необъяснимый код. Сохраняйте исходные детали для поддержки и аудита. Никогда не упрощайте статус до более сильного обещания, чем допускает исходное событие.

Источники

  • RFC 9110: HTTP Semantics — справочник по значениям HTTP-кодов статуса, включая 200 и 202.
  • OWASP REST Security Cheat Sheet — рекомендации по безопасности, относящиеся к конечным точкам API и вебхуков.
  • 17TRACK Tracking API — официальный источник информации о продукте для рассматриваемого варианта интеграции отслеживания.
  • 17TRACK API Documentation — официальный источник требований к интеграции, специфичных для провайдера; демонстрационные схемы и рекомендации по рабочему процессу в этом руководстве не заменяют данный контракт.
Loading