Skip to main content
AcasăBlogUrmărirea expedierilor prin Webhook: Cum funcționează webhook-urile de urmărire în comparație cu interogarea periodică (payload-uri, reîncercări și configurare)

Urmărirea expedierilor prin Webhook: Cum funcționează webhook-urile de urmărire în comparație cu interogarea periodică (payload-uri, reîncercări și configurare)

17TRACK

Webhook-urile pentru urmărirea expedierilor trimit o solicitare HTTP către aplicația dvs. atunci când un serviciu de urmărire are o actualizare de raportat. Interogarea periodică funcționează în direcția opusă: aplicația dvs. solicită în mod repetat cele mai recente informații de urmărire. Pentru dezvoltatorii care conectează datele despre expedieri la un sistem de gestionare a comenzilor, un magazin sau un serviciu de notificare a clienților, webhook-urile sunt, în general, mecanismul principal de actualizare preferat atunci când sunt acceptate; interogarea direcționată poate ajuta la recuperarea actualizărilor omise și la reconcilierea înregistrărilor.

Webhook Shipment Tracking How Tracking Webhooks Work vs Polling Payloads

Niciuna dintre metode nu determină transportatorul să scaneze un colet mai devreme. Ambele depind de momentul în care sursa de urmărire primește și expune informații noi. Diferența practică constă în modul în care aplicația dvs. află despre aceste informații, în volumul de trafic de solicitări pe care îl generează și în ceea ce se întâmplă atunci când livrarea eșuează.

Webhook-uri de urmărire comparativ cu interogarea periodică: diferența operațională

Acestea sunt modele de integrare, nu baze de date de urmărire concurente. Un transportator sau o platformă de urmărire poate oferi unul dintre aceste modele sau pe ambele, cu condiții de acces diferite. Comparați comportamentul API-ului specific pe care intenționați să îl utilizați, în loc să presupuneți că toate serviciile bazate pe webhook-uri oferă aceleași garanții.

Punct de decizieWebhook-uriInterogare periodică
Cine inițiază solicitarea?Serviciul de urmărire apelează endpointul dvs.Aplicația dvs. apelează API-ul de urmărire.
Întârzierea actualizăriiDepinde de actualitatea sursei, generarea evenimentului, livrare și procesare.Depinde și de momentul în care rulează următoarea solicitare programată.
Volumul solicitărilorEste determinat de actualizările emise, gruparea lor și reîncercările de livrare.Este determinat de volumul expedierilor, frecvența interogărilor și gruparea lor.
InfrastructurăNecesită un receptor accesibil și gestionarea securizată a solicitărilor primite.Necesită un programator, acces la API-ul extern și gestionarea limitelor de rată.
Recuperarea în caz de eroareDepinde de reîncercările furnizorului și de propriul proces de reconciliere.Depinde de solicitările ulterioare și de păstrarea istoricului necesar de către API.

Alegeți mai întâi webhook-urile atunci când actualizările rapide sunt importante, iar echipa dvs. poate opera un receptor fiabil. Alegeți mai întâi interogarea periodică atunci când endpointurile de intrare sunt nepracticabile, volumul expedierilor este modest sau sursa nu oferă webhook-uri potrivite. Utilizați un design hibrid atunci când actualizările omise ar perturba comunicarea cu clienții sau operațiunile, iar API-ul acceptă reconcilierea.

Nu presupuneți că webhook-urile sunt mai ieftine. Taxele pentru abonamente, înregistrarea urmăririi, apelurile API, livrarea evenimentelor și infrastructura pot fi facturate diferit. Comparați condițiile comerciale reale și volumul de lucru estimat, în loc să considerați că mai puține solicitări înseamnă automat o factură mai mică.

Ce se întâmplă între scanarea transportatorului și aplicația dvs.?

  1. Identificați expedierea. Asociați numărul de urmărire, informațiile despre transportator, acolo unde sunt necesare, și o referință internă a expedierii. Unele servicii necesită înregistrarea înainte de începerea monitorizării.
  2. Configurați livrarea evenimentelor. Furnizați un URL de callback HTTPS și selectați abonamentele la evenimente acceptate.
  3. Sursa primește informațiile de urmărire. O scanare a transportatorului sau o modificare de stare devine disponibilă serviciului de urmărire.
  4. Serviciul trimite un webhook. Solicitarea poate conține o captură completă a urmăririi, un singur punct de control sau doar o referință care necesită o căutare prin API.
  5. Receptorul dvs. îl validează și îl stochează. Autentificați solicitarea, verificați structura acesteia și înregistrați sau puneți evenimentul în coadă în mod durabil.
  6. Un worker actualizează sistemele de business. Normalizați stările, actualizați înregistrările expedierilor și declanșați doar acțiunile care sunt încă adecvate.

Livrarea unui webhook nu este același lucru cu livrarea fizică. Este un mesaj despre informațiile unei expedieri. În mod similar, un răspuns de succes la un webhook nu dovedește că a fost trimis un e-mail sau că o înregistrare a comenzii a fost actualizată; acestea sunt rezultate ale procesării ulterioare și necesită propria monitorizare.

Citirea payloadului unui webhook de urmărire

Următorul JSON este un design ilustrativ de integrare, nu un payload 17TRACK sau o schemă universală. Numele reale ale câmpurilor, codurile de stare, formatele marcajelor temporale și identificatorii evenimentelor trebuie să provină din documentația furnizorului selectat.

{
  "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"
    }
  }
}

Separați trei ceasuri în modelul dvs. de date: momentul în care a avut loc evenimentul expedierii, momentul în care furnizorul a generat mesajul și momentul în care aplicația dvs. l-a primit. Un punct de control întârziat poate ajunge după unul mai nou. Un marcaj temporal fără decalaj necesită, de asemenea, o interpretare explicită; nu tratați în mod tacit fiecare marcaj temporal local al transportatorului ca fiind UTC.

Păstrați referința internă a expedierii împreună cu identificatorii furnizorului. Este posibil ca un număr de urmărire singur să nu fie suficient ca identificator global permanent, în special în contexte diferite ale transportatorilor. Pentru comenzile divizate, mențineți înregistrări la nivel de expediere, în loc să permiteți ca starea de livrat a unui colet să marcheze întreaga comandă ca finalizată.

Păstrați starea și descrierea originale alături de starea de business normalizată. Aplicația dvs. poate mapa mai multe mesaje ale transportatorului la „în tranzit”, dar personalul de asistență poate avea în continuare nevoie de punctul de control original pentru a înțelege o întârziere. Tratați datele estimate de livrare ca estimări și diferențiați un câmp lipsă de o instrucțiune explicită de ștergere a unei valori existente.

Reîncercări, confirmări și evenimente duplicate

Livrarea webhook-urilor poate eșua din cauza expirării solicitărilor, întreruperilor de rețea, erorilor de autentificare sau indisponibilității receptorului. Un furnizor poate reîncerca, dar nu există un program universal de reîncercare, o perioadă universală de păstrare sau un număr maxim universal de încercări. Confirmați ce răspunsuri declanșează o altă încercare, cum sunt gestionate redirecționările și dacă este disponibilă relivrarea manuală.

Confirmați după acceptarea durabilă

Păstrați scurt traseul solicitării: validați solicitarea, persistați activitatea acceptată și returnați răspunsul de succes cerut de furnizor. Trimiteți e-mailurile și efectuați operațiunile de business mai lente în mod asincron. Specificația HTTP definește 202 Accepted ca acceptare pentru procesare, nu ca procesare finalizată, însă furnizorul dvs. poate necesita un alt răspuns de succes. Respectați contractul său pentru webhook-uri.

Returnarea succesului înainte de stocarea oricărui element riscă pierderea actualizării dacă procesul se blochează. Așteptarea fiecărei acțiuni ulterioare riscă expirarea solicitării și o altă încercare de livrare. O zonă de intrare durabilă sau o coadă oferă o graniță între primire și procesare.

Faceți procesarea idempotentă

Idempotența înseamnă că procesarea din nou a aceluiași eveniment nu repetă efectele sale de business. Un expeditor poate reîncerca după ce serverul dvs. a acceptat un eveniment, dar confirmarea acestuia s-a pierdut. Prin urmare, livrarea duplicată trebuie să fie un caz de testare obișnuit.

  • Utilizați un identificator de eveniment documentat ca cheie de deduplicare atunci când este disponibil, asociat furnizorului sau contului corect.
  • Dacă nu există un identificator, proiectați o cheie compusă din câmpuri stabile ale evenimentului și testați riscurile de coliziune.
  • Impuneți unicitatea atomic în stocare; o secvență separată „verifică, apoi inserează” poate intra în condiție de cursă la livrarea concurentă.
  • Protejați și acțiunile ulterioare. Un eveniment duplicat nu trebuie să trimită o altă notificare de livrare sau să repete o acțiune financiară.
  • Stabiliți păstrarea în funcție de comportamentul de redare al furnizorului și de cerințele dvs. de recuperare, în loc să ștergeți imediat înregistrările de deduplicare.

Nu presupuneți sosirea cronologică

Nu suprascrieți starea curentă a expedierii doar pentru că o solicitare a sosit ultima. Comparați semnificația evenimentului, marcajele temporale și orice informații documentate despre secvență. Păstrați punctele de control întârziate în istoric fără a muta automat starea afișată înapoi. În același timp, permiteți corecțiile documentate: o regulă rigidă conform căreia expedierile livrate nu se pot schimba niciodată poate ascunde excepții legitime sau informații corectate.

Listă practică de verificare pentru configurare

1. Confirmați contractul furnizorului

Înainte de implementare, confirmați cerințele de înregistrare, evenimentele acceptate, structura payloadului, autentificarea, așteptările privind răspunsurile, expirările, comportamentul la reîncercare și limitele API. Verificați dacă o notificare reprezintă o captură sau o modificare incrementală, dacă livrările pot conține mai multe înregistrări și dacă abonarea trimite o stare inițială.

Pentru o integrare 17TRACK, începeți cu pagina Tracking API oficială și documentația API. Utilizați documentația specifică furnizorului pentru a stabili câmpurile solicitării și cerințele callback-ului; payloadul generic de mai sus nu îl înlocuiește. Confirmați condițiile de acces și limitele operaționale pentru integrarea pe care intenționați să o implementați.

2. Securizați endpointul receptor

Utilizați HTTPS și mecanismul de autentificare documentat de furnizor. Dacă acesta utilizează o semnătură HMAC, validați exact intrarea semnată specificată. Atunci când sunt semnați octeții bruti ai solicitării, analizarea și re-serializarea JSON-ului înainte de verificare poate modifica acei octeți și poate invalida semnătura. Utilizați o comparație în timp constant pentru valorile semnăturilor derivate din secrete.

Dacă sunt disponibile marcaje temporale sau identificatori de livrare semnați, aplicați controalele documentate împotriva redării. O semnătură validă autentifică un mesaj, dar nu stabilește singură că acesta este recent. Păstrați secretele în afara URL-urilor și a jurnalelor aplicației, acceptați rotirea secretelor și restricționați dimensiunile solicitărilor. Permiterea pe listă a adreselor IP poate fi un control suplimentar atunci când există intervale de adrese menținute, nu un înlocuitor pentru autentificarea mesajelor.

3. Separați primirea de procesarea de business

Stocați suficiente informații pentru a urmări și reda în siguranță un eveniment acceptat. Workerii din coadă trebuie să normalizeze actualizarea, să aplice regulile de tranziție a stării și să înregistreze rezultatele acțiunilor. Plasați activitatea care eșuează repetat într-un flux de tip dead-letter care poate fi revizuit, în loc să o reîncercați la nesfârșit. Limitați accesul și păstrarea, deoarece payloadurile de urmărire pot conține informații despre clienți.

4. Testați traseele de eroare înainte de lansare

  • Trimiteți același eveniment de două ori, inclusiv livrări concurente.
  • Livrați un punct de control mai vechi după unul mai nou.
  • Simulați o indisponibilitate a cozii și o blocare a workerului după primire.
  • Testați autentificarea invalidă, JSON-ul malformat și solicitările supradimensionate.
  • Testați expedierile necunoscute, câmpurile opționale lipsă și câmpurile adăugate.
  • Verificați că un colet livrat nu finalizează o comandă divizată.
  • Redați un eveniment după recuperare și confirmați că notificările rămân deduplicate.

Fiți toleranți față de câmpurile aditive atunci când este sigur, dar nu reinterpretați în tăcere valorile de stare necunoscute. Păstrați valoarea brută și direcționați cazurile nerecunoscute printr-un proces definit de rezervă sau de revizuire.

Unde își păstrează interogarea periodică utilitatea

Interogarea periodică este utilă pentru sincronizarea inițială, recuperarea după o întrerupere și verificarea expedierilor ale căror actualizări așteptate nu au sosit. Totuși, tăcerea singură nu dovedește o defecțiune a webhook-ului: este posibil ca un colet să nu aibă în mod real scanări noi. Reconciliați cu starea sau istoricul curent al API-ului, în loc să presupuneți că fiecare expediere fără activitate necesită o alertă.

Pentru planificarea la scară, un model simplificat de interogare este requests per hour ≈ active shipments × polls per shipment per hour, presupunând o expediere per solicitare. Endpointurile de grupare modifică acest calcul. Ca exemplu, 1.000 de expedieri verificate de patru ori pe oră generează 4.000 de solicitări pe oră înainte de reîncercări; acesta este un calcul aritmetic, nu o estimare a cotei sau a prețului furnizorului.

Programați verificările în funcție de activitatea expedierii și de riscul de business, respectați limitele de rată și adăugați variații aleatorii, astfel încât sarcinile să nu înceapă toate simultan. Pentru erorile reîncercabile, utilizați backoff limitat și respectați instrucțiunile aplicabile ale serverului. Nu reîncercați repetat erorile permanente de acreditare sau validare fără a le corecta.

Un sistem hibrid practic utilizează webhook-uri pentru actualizările obișnuite și citiri API direcționate pentru golurile suspectate. Monitorizați separat erorile de primire, vechimea cozii, erorile de procesare, ratele duplicatelor și nepotrivirile de reconciliere. Atunci când marcajele temporale sunt de încredere, diferențiați întârzierea datelor sursă de întârzierea livrării webhook-ului și de întârzierea procesării interne.

Întrebări frecvente

Webhook-urile de urmărire sunt în timp real?

Ele pot reduce întârzierea cauzată de așteptarea următorului ciclu de interogare. Nu garantează scanări imediate ale transportatorului sau actualizări instantanee ale sursei. Actualitatea de la un capăt la altul include raportarea transportatorului, procesarea furnizorului, livrarea solicitării și propria aplicație.

Pot opri complet interogarea periodică după activarea webhook-urilor?

Este posibil, dacă funcțiile de recuperare ale furnizorului și cerințele dvs. de business fac acest lucru acceptabil. Pentru înregistrările de expediere importante operațional, păstrați o metodă de reconciliere. Aceasta poate fi direcționată, nu o interogare continuă a fiecărei expedieri.

Ce se întâmplă dacă endpointul meu webhook este offline?

Recuperarea depinde de politica documentată de reîncercare a expeditorului. Nu presupuneți că reîncercările continuă la nesfârșit. După restabilirea endpointului, examinați livrările eșuate, utilizați instrumentele de relivrare acceptate și reconciliați expedierile afectate prin API, acolo unde este disponibil.

Ar trebui ca fiecare webhook să declanșeze o notificare pentru client?

Nu. Un eveniment poate fi duplicat, un punct de control istoric sau o actualizare care nu modifică starea afișată clientului. Declanșați notificările pe baza tranzițiilor de business deduplicate, cu reguli pentru excepții și corecții.

Un răspuns HTTP de succes înseamnă că actualizarea expedierii este finalizată?

Nu neapărat. Într-un design asincron, acesta înseamnă că receptorul a acceptat evenimentul conform contractului convenit. Urmăriți separat finalizarea procesării și rezultatele notificărilor ulterioare, astfel încât o solicitare acceptată să nu ascundă un flux de lucru eșuat.

Surse

Loading