Проследяване на пратки чрез Webhook: Как работят Webhook-ите за проследяване в сравнение с Polling (Payload-и, повторни опити и настройка)
Уебхуковете за проследяване на пратки изпращат HTTP заявка до вашето приложение, когато услугата за проследяване има нова информация за докладване. Пулсирането работи в обратната посока: вашето приложение многократно заявява най-новата информация за проследяване. За разработчици, които свързват данни за пратки със система за управление на поръчки, магазин или услуга за известяване на клиенти, уебхуковете обикновено са по-добрият основен механизъм за актуализации, когато се поддържат; целевото пулсиране може да помогне за възстановяване на пропуснати актуализации и синхронизиране на записите.

Нито един от двата метода не кара превозвача да сканира пратката по-рано. И двата зависят от момента, в който източникът на информацията за проследяване получи и публикува нова информация. Практическата разлика е в начина, по който приложението ви научава за тази информация, колко заявки генерира и какво се случва при неуспешна доставка.
Уебхукове за проследяване срещу пулсиране: оперативната разлика
Това са модели за интеграция, а не конкуриращи се бази данни за проследяване. Превозвач или платформа за проследяване може да предлага единия модел или и двата, при различни условия за достъп. Сравнете поведението на конкретния API, който планирате да използвате, вместо да приемате, че всички услуги с уебхукове предоставят еднакви гаранции.
| Точка за вземане на решение | Уебхукове | Пулсиране |
|---|---|---|
| Кой започва заявката? | Услугата за проследяване извиква вашия endpoint. | Вашето приложение извиква API за проследяване. |
| Забавяне на актуализацията | Зависи от актуалността на източника, генерирането на събитието, доставката и обработката. | Зависи и от момента на изпълнение на следващата ви планирана заявка. |
| Обем на заявките | Определя се от излъчените актуализации, пакетното изпращане и повторните опити за доставка. | Определя се от обема на пратките, честотата на пулсиране и пакетното изпращане. |
| Инфраструктура | Изисква достъпен приемник и сигурна обработка на входящи заявки. | Изисква планировчик, изходящ API достъп и обработка на ограниченията на честотата. |
| Възстановяване при грешки | Зависи от повторните опити на доставчика и вашия собствен процес за синхронизиране. | Зависи от последващите заявки и от това дали API запазва необходимата история. |
Изберете първо уебхукове, когато навременните актуализации са важни и екипът ви може да поддържа надежден приемник. Изберете първо пулсиране, когато входящите endpoints са непрактични, обемът на пратките е умерен или източникът не предоставя подходящи уебхукове. Използвайте хибриден дизайн, когато пропуснатите актуализации биха нарушили комуникацията с клиентите или операциите и API поддържа синхронизиране.
Не приемайте, че уебхуковете са по-евтини. Таксите за абонамент, регистрацията за проследяване, API извикванията, доставката на събития и инфраструктурата могат да се таксуват по различен начин. Сравнете действителните търговски условия и очакваното натоварване, вместо да приемате по-малкия брой заявки като доказателство за по-ниска сметка.
Какво се случва между сканирането от превозвача и вашето приложение?
- Идентифицирайте пратката. Свържете номера за проследяване, информацията за превозвача, когато е необходима, и вътрешна референция за пратката. Някои услуги изискват регистрация, преди да започне наблюдението.
- Конфигурирайте доставката на събития. Предоставете HTTPS callback URL и изберете всички поддържани абонаменти за събития.
- Източникът получава информация за проследяване. Сканиране от превозвача или промяна на статуса става достъпно за услугата за проследяване.
- Услугата изпраща уебхук. Заявката може да съдържа пълна моментна снимка на проследяването, единична контролна точка или само референция, изискваща API справка.
- Вашият приемник валидира и съхранява информацията. Удостоверете заявката, проверете структурата ѝ и надеждно запишете или поставете събитието на опашка.
- Работник актуализира бизнес системите. Нормализирайте статусите, актуализирайте записите за пратки и задействайте само действията, които все още са подходящи.
Доставката на уебхук не е същото като физическата доставка. Това е съобщение за информация относно пратката. По същия начин успешният отговор на уебхук не доказва, че е изпратен имейл или че записът на поръчката е актуализиран; това са резултати от последваща обработка, които изискват собствено наблюдение.
Как се чете payload на уебхук за проследяване
Следващият JSON е илюстративен дизайн на интеграция, а не payload на 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. Потвърдете договора с доставчика
Преди внедряването потвърдете изискванията за регистрация, поддържаните събития, формата на payload, удостоверяването, очакванията за отговор, времевите ограничения, поведението при повторни опити и ограниченията на API. Проверете дали известието представлява моментна снимка или инкрементална промяна, дали доставките могат да съдържат множество записи и дали абонирането изпраща начално състояние.
За интеграция с 17TRACK започнете с официалната страница на Tracking API и API документацията. Използвайте специфичната за доставчика документация, за да установите полетата на заявката и изискванията за callback; общият payload по-горе не е заместител. Потвърдете условията за достъп и оперативните ограничения за интеграцията, която възнамерявате да внедрите.
2. Защитете приемащия endpoint
Използвайте HTTPS и механизма за удостоверяване, описан от доставчика. Ако използва HMAC подпис, валидирайте точно подписваните входни данни, които са посочени. Когато се подписват необработени байтове на заявката, анализирането и повторното сериализиране на JSON преди проверката може да промени тези байтове и да направи подписа невалиден. Използвайте сравнение в постоянно време за стойности на подписи, извлечени от тайни.
Ако са налични подписани времеви маркери или идентификатори на доставката, приложете документираните контроли срещу повторно възпроизвеждане. Валидният подпис удостоверява съобщението, но сам по себе си не доказва, че то е актуално. Не съхранявайте тайни в URL адреси и логове на приложението, поддържайте ротация на тайните и ограничете размера на заявките. Разрешаването по IP може да бъде допълнителна мярка, когато съществуват поддържани диапазони от адреси, но не е заместител на удостоверяването на съобщенията.
3. Разделете получаването от бизнес обработката
Съхранявайте достатъчно информация, за да проследявате и безопасно да възпроизвеждате прието събитие. Работниците на опашката трябва да нормализират актуализацията, да прилагат правила за преход на състоянието и да записват резултатите от действията. Поставяйте многократно неуспешната работа в преглеждаем dead-letter процес, вместо да опитвате безкрайно. Ограничете достъпа и периода на съхранение, тъй като payload-ите за проследяване могат да съдържат информация, свързана с клиенти.
4. Тествайте пътищата при грешки преди стартиране
- Изпратете едно и също събитие два пъти, включително при конкурентни доставки.
- Доставете по-стара контролна точка след по-нова.
- Симуалирайте прекъсване на опашката и срив на работник след получаването.
- Тествайте невалидно удостоверяване, неправилен JSON и прекалено големи заявки.
- Тествайте неизвестни пратки, липсващи незадължителни полета и добавени полета.
- Проверете дали една доставена пратка не завършва разделена поръчка.
- Възпроизведете събитие след възстановяване и потвърдете, че известията остават дедупликирани.
Бъдете толерантни към допълнителни полета, когато това е безопасно, но не интерпретирайте мълчаливо неизвестни стойности на статуса. Запазвайте необработената стойност и насочвайте неразпознатите случаи към определен резервен или процес за преглед.
Къде пулсирането все още е полезно
Пулсирането е полезно за първоначална синхронизация, възстановяване след прекъсване и проверка на пратки, чиито очаквани актуализации не са пристигнали. Самото мълчание обаче не е доказателство за повреда на уебхука: възможно е пратката действително да няма нови сканирания. Синхронизирайте с текущото състояние или историята в API, вместо да приемате, че всяка тиха пратка изисква известие.
За планиране на мащаба опростеният модел за пулсиране е requests per hour ≈ active shipments × polls per shipment per hour, при предположение за една пратка на заявка. Пакетните endpoints променят това изчисление. Например 1 000 пратки, проверявани четири пъти на час, генерират 4 000 заявки на час преди повторните опити; това е аритметика, а не квота или ценова оценка на доставчика.
Планирайте проверките според активността на пратките и бизнес риска, спазвайте ограниченията на честотата и добавяйте случайно отклонение, така че задачите да не започват едновременно. При повторяеми грешки използвайте ограничено експоненциално изчакване и спазвайте приложимите указания на сървъра. Не повтаряйте многократно постоянни грешки с идентификационни данни или валидация, без да ги коригирате.
Практическа хибридна система използва уебхукове за рутинни актуализации и целеви API четения за предполагаеми пропуски. Наблюдавайте отделно грешките при получаване, възрастта на опашката, грешките при обработка, процента на дублиране и несъответствията при синхронизация. Когато времевите маркери са надеждни, различавайте забавянето на данните от източника, забавянето при доставката на уебхука и забавянето във вътрешната обработка.
ЧЗВ
Уебхуковете за проследяване работят ли в реално време?
Те могат да намалят забавянето, причинено от изчакването на следващия цикъл на пулсиране. Те не гарантират незабавни сканирания от превозвача или незабавни актуализации от източника. Актуалността от край до край включва докладването от превозвача, обработката от доставчика, доставката на заявката и собственото ви приложение.
Мога ли напълно да спра пулсирането след активиране на уебхукове?
Възможно е, ако функциите за възстановяване на доставчика и бизнес изискванията ви правят това приемливо. За оперативно важни записи на пратки запазете метод за синхронизиране. Той може да бъде целеви, а не непрекъснато пулсиране на всяка пратка.
Какво се случва, ако endpoint-ът ми за уебхукове е офлайн?
Възстановяването зависи от документираната политика на изпращача за повторни опити. Не приемайте, че опитите продължават безкрайно. След възстановяване на endpoint-а проверете неуспешните доставки, използвайте поддържаните инструменти за повторна доставка и синхронизирайте засегнатите пратки чрез API, когато е налично.
Трябва ли всеки уебхук да задейства известие към клиента?
Не. Събитието може да е дубликат, историческа контролна точка или актуализация, която не променя статуса, видим за клиента. Задействайте известията от дедупликирани бизнес преходи, с правила за изключения и корекции.
Означава ли успешният HTTP отговор, че актуализацията на пратката е завършена?
Не непременно. При асинхронен дизайн това означава, че приемникът е приел събитието съгласно договорените условия. Проследявайте отделно завършването на обработката и резултатите от последващите известия, така че приета заявка да не прикрива неуспешен работен процес.
Източници
- RFC 9110: HTTP Semantics — семантика на HTTP отговорите, включително приемането за обработка и Retry-After.
- RFC 2104: HMAC—Keyed-Hashing for Message Authentication — конструкцията HMAC, посочена в указанията за проверка на подписи.
- GitHub Docs: Best practices for using webhooks — общи инженерни указания за HTTPS, тайни, асинхронна обработка и идентификация на доставките; специфичните за услугата правила не установяват поведението на доставчиците на услуги за пратки.
- 17TRACK Tracking API — официална отправна точка за оценяване на интеграция за проследяване с 17TRACK.
- 17TRACK API documentation — специфична за доставчика справка за изискванията за внедряване.


