Отслеживание отправлений через вебхуки: как работают вебхуки отслеживания по сравнению с опросом (полезные нагрузки, повторные попытки и настройка)
Вебхуки отслеживания отправлений отправляют HTTP-запрос вашему приложению, когда служба отслеживания получает обновление для отчёта. Опрос работает в противоположном направлении: ваше приложение неоднократно запрашивает последнюю информацию об отслеживании. Для разработчиков, подключающих данные об отправлениях к системе управления заказами, магазину или службе уведомлений клиентов, вебхуки обычно являются лучшим основным механизмом обновлений, если они поддерживаются; целевой опрос может помочь восстановить пропущенные обновления и согласовать записи.

Ни один из методов не заставляет перевозчика быстрее отсканировать посылку. Оба зависят от того, когда источник отслеживания получает и предоставляет новую информацию. Практическое различие заключается в том, как ваше приложение узнаёт об этой информации, какой объём трафика запросов оно создаёт и что происходит при сбое доставки.
Вебхуки отслеживания и опрос: операционные различия
Это интеграционные шаблоны, а не конкурирующие базы данных отслеживания. Перевозчик или платформа отслеживания может предлагать один из этих шаблонов или оба, с различными условиями доступа. Сравнивайте поведение конкретного API, который вы планируете использовать, а не предполагайте, что все сервисы вебхуков предоставляют одинаковые гарантии.
| Критерий принятия решения | Вебхуки | Опрос |
|---|---|---|
| Кто инициирует запрос? | Служба отслеживания вызывает вашу конечную точку. | Ваше приложение вызывает API отслеживания. |
| Задержка обновления | Зависит от актуальности источника, создания события, доставки и обработки. | Также зависит от времени выполнения следующего запланированного запроса. |
| Объём запросов | Определяется отправленными обновлениями, пакетной обработкой и повторными попытками доставки. | Определяется объёмом отправлений, частотой опроса и пакетной обработкой. |
| Инфраструктура | Требует доступного получателя и безопасной обработки входящих запросов. | Требует планировщика, исходящего доступа к API и обработки ограничений скорости. |
| Восстановление после сбоев | Зависит от повторных попыток провайдера и вашего собственного процесса согласования. | Зависит от последующих запросов и от того, сохраняет ли API необходимую историю. |
Сначала выбирайте вебхуки, если важны своевременные обновления и ваша команда может обеспечить надёжную работу получателя. Сначала выбирайте опрос, если входящие конечные точки непрактичны, объём отправлений невелик или источник не предоставляет подходящие вебхуки. Используйте гибридную архитектуру, если пропущенные обновления нарушат коммуникации с клиентами или операции, а API поддерживает согласование.
Не предполагайте, что вебхуки дешевле. Плата за подписку, регистрация отслеживания, вызовы API, доставка событий и инфраструктура могут тарифицироваться по-разному. Сравнивайте фактические коммерческие условия и ожидаемую нагрузку, а не считайте меньшее число запросов доказательством меньшего счёта.
Что происходит между сканированием перевозчиком и вашим приложением?
- Идентифицируйте отправление. Свяжите номер отслеживания, информацию о перевозчике, если она требуется, и внутреннюю ссылку на отправление. Некоторые сервисы требуют регистрации до начала мониторинга.
- Настройте доставку событий. Укажите URL обратного вызова HTTPS и выберите поддерживаемые подписки на события.
- Источник получает информацию об отслеживании. Сканирование перевозчиком или изменение статуса становится доступным службе отслеживания.
- Служба отправляет вебхук. Запрос может содержать полный снимок отслеживания, одну контрольную точку или только ссылку, требующую запроса к API.
- Ваш получатель проверяет и сохраняет его. Аутентифицируйте запрос, проверьте его структуру и надёжно запишите событие или поставьте его в очередь.
- Рабочий процесс обновляет бизнес-системы. Нормализуйте статусы, обновите записи об отправлении и запускайте только те действия, которые всё ещё уместны.
Доставка вебхука — это не то же самое, что физическая доставка. Это сообщение об информации об отправлении. Аналогично, успешный ответ на вебхук не доказывает, что электронное письмо было отправлено или запись заказа обновлена; это результаты последующей обработки, за которыми нужен отдельный мониторинг.
Чтение данных вебхука отслеживания
Следующий JSON представляет собой иллюстративную схему интеграции, а не данные 17TRACK и не универсальную схему. Реальные имена полей, коды статусов, форматы временных меток и идентификаторы событий должны быть указаны в документации выбранного провайдера.
{
"event_id": "evt_example_001",
"event_type": "shipment.updated",
"created_at": "2025-04-08T10:16:00Z",
"shipment": {
"reference": "shipment_example_123",
"tracking_number": "EXAMPLE123456",
"carrier_code": "example_carrier",
"status": "in_transit",
"checkpoint": {
"occurred_at": "2025-04-08T10:10:00Z",
"description": "Departed processing facility"
}
}
}Разделяйте в своей модели данных три момента времени: когда произошло событие отправления, когда провайдер сформировал сообщение и когда ваше приложение его получило. Запоздалая контрольная точка может поступить после более новой. Временная метка без смещения также требует явной интерпретации; не следует молча считать каждую локальную временную метку перевозчика временем UTC.
Храните внутреннюю ссылку на отправление вместе с идентификаторами провайдера. Одного номера отслеживания может быть недостаточно в качестве постоянного глобального идентификатора, особенно в разных контекстах перевозчиков. Для разделённых заказов храните записи на уровне отправлений, не позволяя статусу доставки одной посылки помечать весь заказ как завершённый.
Сохраняйте исходный статус и описание вместе с нормализованным бизнес-статусом. Ваше приложение может сопоставить несколько сообщений перевозчика со статусом «в пути», но сотрудникам поддержки всё ещё может понадобиться исходная контрольная точка для понимания задержки. Рассматривайте предполагаемые даты доставки как оценки и отличайте отсутствующее поле от явной инструкции очистить существующее значение.
Повторные попытки, подтверждения и дублирующиеся события
Доставка вебхука может завершиться ошибкой из-за тайм-аутов, сетевых перебоев, ошибок аутентификации или недоступности получателя. Провайдер может выполнить повторную попытку, но универсального расписания повторов, периода хранения или максимального количества попыток не существует. Уточните, какие ответы запускают новую попытку, как обрабатываются перенаправления и доступна ли ручная повторная доставка.
Подтверждайте после надёжного принятия
Сохраняйте короткий путь запроса: проверьте запрос, сохраните принятую работу и верните успешный ответ, требуемый провайдером. Отправляйте электронные письма и выполняйте более медленные бизнес-операции асинхронно. Спецификация HTTP определяет 202 Accepted как принятие для обработки, а не завершённую обработку, но вашему провайдеру может требоваться другой успешный ответ. Следуйте его контракту вебхука.
Возврат успешного ответа до сохранения чего-либо создаёт риск потери обновления при сбое процесса. Ожидание завершения каждого последующего действия создаёт риск тайм-аута и новой попытки доставки. Надёжный входящий ящик или очередь создаёт границу между получением и обработкой.
Сделайте обработку идемпотентной
Идемпотентность означает, что повторная обработка одного и того же события не повторяет его бизнес-эффекты. Отправитель может выполнить повторную попытку после того, как ваш сервер принял событие, но подтверждение было потеряно. Поэтому дублирующая доставка должна быть обычным тестовым сценарием.
- Используйте документированный идентификатор события как ключ дедупликации, если он доступен, с областью действия для правильного провайдера или аккаунта.
- Если идентификатора нет, создайте составной ключ из стабильных полей события и проверьте риски коллизий.
- Атомарно обеспечивайте уникальность в хранилище; отдельная последовательность «проверить, затем вставить» может привести к конфликту при параллельной доставке.
- Защитите также последующие действия. Дублирующее событие не должно отправлять повторное уведомление о доставке или повторять финансовую операцию.
- Установите срок хранения с учётом поведения провайдера при повторном воспроизведении и требований к восстановлению, а не удаляйте записи дедупликации немедленно.
Не предполагайте хронологический порядок поступления
Не перезаписывайте текущее состояние отправления только потому, что запрос поступил последним. Сравнивайте смысл события, временные метки и документированную информацию о последовательности. Сохраняйте поздние контрольные точки в истории, не перемещая автоматически отображаемый статус назад. В то же время допускайте документированные исправления: жёсткое правило, согласно которому доставленные отправления никогда не могут измениться, может скрыть законные исключения или исправленную информацию.
Практический контрольный список настройки
1. Подтвердите контракт провайдера
До начала реализации подтвердите требования к регистрации, поддерживаемые события, структуру данных, аутентификацию, требования к ответам, тайм-ауты, поведение повторных попыток и ограничения API. Проверьте, представляет ли уведомление снимок или инкрементальное изменение, могут ли доставки содержать несколько записей и отправляет ли подписка исходное состояние.
Для интеграции с 17TRACK начните с официальной страницы Tracking API и документации API. Используйте документацию конкретного провайдера для определения полей запроса и требований к обратному вызову; приведённые выше универсальные данные не являются заменой. Подтвердите условия доступа и операционные ограничения интеграции, которую вы собираетесь развернуть.
2. Защитите конечную точку получения
Используйте HTTPS и механизм аутентификации, указанный провайдером в документации. Если используется подпись HMAC, проверяйте именно те подписываемые данные, которые он определяет. Если подписываются исходные байты запроса, разбор и повторная сериализация JSON до проверки могут изменить эти байты и сделать подпись недействительной. Для значений подписей, производных от секретов, используйте сравнение за постоянное время.
Если доступны подписанные временные метки или идентификаторы доставки, применяйте документированные средства защиты от повторного воспроизведения. Действительная подпись аутентифицирует сообщение, но сама по себе не подтверждает его актуальность. Не храните секреты в URL и журналах приложения, поддерживайте ротацию секретов и ограничивайте размеры запросов. Разрешение по IP может быть дополнительным средством контроля при наличии поддерживаемых диапазонов адресов, но не заменяет аутентификацию сообщений.
3. Отделите получение от бизнес-обработки
Храните достаточно информации для отслеживания и безопасного повторного воспроизведения принятого события. Воркеры очереди должны нормализовать обновление, применять правила перехода состояний и записывать результаты действий. Направляйте постоянно завершающуюся ошибкой работу в проверяемый процесс обработки недоставленных сообщений, а не повторяйте её бесконечно. Ограничивайте доступ и срок хранения, поскольку данные отслеживания могут содержать информацию, связанную с клиентами.
4. Протестируйте сценарии сбоев до запуска
- Отправьте одно и то же событие дважды, включая параллельные доставки.
- Доставьте более старую контрольную точку после более новой.
- Сымитируйте сбой очереди и падение воркера после получения.
- Протестируйте недействительную аутентификацию, некорректный JSON и слишком большие запросы.
- Протестируйте неизвестные отправления, отсутствующие необязательные поля и добавленные поля.
- Убедитесь, что доставка одной посылки не завершает разделённый заказ.
- Повторно воспроизведите событие после восстановления и убедитесь, что уведомления остаются дедуплицированными.
Безопасно допускайте дополнительные поля, но не интерпретируйте молча неизвестные значения статусов. Сохраняйте исходное значение и направляйте нераспознанные случаи через определённый резервный процесс или процесс проверки.
Где опрос по-прежнему полезен
Опрос полезен для первоначальной синхронизации, восстановления после сбоя и проверки отправлений, для которых ожидаемые обновления не поступили. Однако одно лишь отсутствие сообщений не доказывает сбой вебхука: у посылки действительно может не быть новых сканирований. Сверяйтесь с текущим состоянием или историей API, а не предполагайте, что каждое молчащее отправление требует оповещения.
Для планирования масштабирования упрощённая модель опроса выглядит так: requests per hour ≈ active shipments × polls per shipment per hour, если на один запрос приходится одно отправление. Пакетные конечные точки изменяют этот расчёт. Например, проверка 1 000 отправлений четыре раза в час создаёт 4 000 запросов в час без учёта повторных попыток; это арифметика, а не оценка квоты или стоимости провайдера.
Планируйте проверки с учётом активности отправлений и бизнес-риска, соблюдайте ограничения скорости и добавляйте случайное смещение, чтобы все задания не запускались одновременно. Для ошибок, допускающих повторную попытку, используйте ограниченную задержку с увеличением интервала и соблюдайте применимые рекомендации сервера. Не повторяйте постоянно попытки при постоянных ошибках учётных данных или проверки без их исправления.
Практическая гибридная система использует вебхуки для обычных обновлений и целевые запросы к API для подозреваемых пропусков. Отдельно отслеживайте сбои получения, возраст очереди, ошибки обработки, частоту дубликатов и несоответствия при согласовании. Если временным меткам можно доверять, различайте задержку данных источника, задержку доставки вебхука и задержку внутренней обработки.
Часто задаваемые вопросы
Вебхуки отслеживания работают в реальном времени?
Они могут сократить задержку, вызванную ожиданием следующего цикла опроса. Они не гарантируют немедленное сканирование перевозчиком или мгновенное обновление источника. Актуальность на всём пути включает отчёт перевозчика, обработку провайдером, доставку запроса и работу вашего приложения.
Можно ли полностью прекратить опрос после включения вебхуков?
Возможно, если функции восстановления провайдера и ваши бизнес-требования делают это приемлемым. Для операционно важных записей об отправлениях сохраняйте метод согласования. Он может быть целевым, а не непрерывным опросом каждого отправления.
Что произойдёт, если моя конечная точка вебхука будет недоступна?
Восстановление зависит от документированной политики повторных попыток отправителя. Не предполагайте, что попытки будут продолжаться бесконечно. После восстановления конечной точки проверьте неудачные доставки, используйте поддерживаемые инструменты повторной доставки и при наличии возможности согласуйте затронутые отправления через API.
Должен ли каждый вебхук запускать уведомление клиента?
Нет. Событие может быть дубликатом, исторической контрольной точкой или обновлением, не меняющим статус, отображаемый клиенту. Запускайте уведомления на основе дедуплицированных бизнес-переходов, с правилами для исключений и исправлений.
Означает ли успешный HTTP-ответ завершение обновления отправления?
Не обязательно. В асинхронной архитектуре это означает, что получатель принял событие в соответствии с согласованным контрактом. Отслеживайте завершение обработки и результаты последующих уведомлений отдельно, чтобы принятый запрос не скрывал сбой рабочего процесса.
Источники
- RFC 9110: Семантика HTTP — семантика ответов HTTP, включая принятие для обработки и Retry-After.
- RFC 2104: HMAC — хеширование с ключом для аутентификации сообщений — конструкция HMAC, упомянутая в рекомендациях по проверке подписей.
- Документация GitHub: рекомендации по использованию вебхуков — общие инженерные рекомендации по HTTPS, секретам, асинхронной обработке и идентификации доставки; правила, специфичные для этого сервиса, не устанавливают поведение провайдера отслеживания отправлений.
- Tracking API 17TRACK — официальная отправная точка для оценки интеграции отслеживания 17TRACK.
- Документация API 17TRACK — справочник провайдера с требованиями к реализации.


