workorder.create och workorder.status_update när de inträffar, och behåll polling bara som en reserv för avstämning.
Sätta upp en slutpunkt
Slutpunkter registreras per köparföretag och täcker alla dess platser och anläggningar. Det finns ännu inget självbetjänings-API för detta: mejla support@useopenwrench.com med- HTTPS-URL:en som ska ta emot leveranserna,
- vilka av de tre händelserna du vill ha (
workorder.create,workorder.status_update,workorder.new_note), och - om slutpunkten är för test eller produktion.
Händelser
Lite mer om var och en:
workorder.createutlöses vid varje skapande, oavsett vem som gör det: din egenPOST /v1/buyer/work_order/work_orders, en användare i OpenWrenchs webb- eller mobilappar, ett schema för planerat underhåll, en platsbesiktning, eller en leverantör som öppnar en arbetsorder på en av dina platser (SupplierInitiatedPendingApproval). Nyttolasten innehåller startstatusen, så du kan skilja en servicebegäran som väntar på godkännande från en arbetsorder som tilldelades direkt vid skapandet.workorder.status_updateutlöses vid varje övergång i statusmodellen, för statusar som ägs av endera sidan. Ändringar som lämnarstatusorörd (en prioritetsändring, ett nytt uppskattat slutdatum, en omtilldelning medan arbetsordern fortfarande väntar på bekräftelse) ger ingen händelse. När en arbetsorder flyttas från en leverantör till en annan kan du få en mellanliggande uppdatering varsnewStatusärRejected, som avslutar den tidigare tilldelningen, följd av uppdateringen för den nya statusen.workorder.new_noteutlöses för anteckningar i rottråden mellan köpare och leverantör från endera sidan, inklusive anteckningar som din egen integration postar, massuppladdningar av foton och anteckningen som bifogas en statusåtgärd. Leverantörernas interna anteckningar och underleverantörstrådar ger aldrig händelser.
Leveransens nyttolast
Varje leverans är en HTTPPOST med en JSON-kropp. Kroppen har två fält: event_type och data.
Skapande- och statushändelser
workorder.create använder samma data-form utan oldStatus.
Anteckningshändelser
Nyttolasten innehåller inte resten av tråden. Läs den med
GET /v1/buyer/work_order/work_order_notes/{woId} om du behöver sammanhang.
Verifiera leveranser
Varje leverans är signerad. Gatewayen beräknar en HMAC över den råa förfrågningskroppen med din slutpunkts signeringshemlighet och skickar den i ett signaturhuvud. När supporten registrerar din slutpunkt ger de dig hemligheten, huvudets namn och hash-algoritmen. Verifiera signaturen mot kroppens råa bytes innan du tolkar den, och avvisa allt som inte stämmer. Eftersom hemligheten är per slutpunkt är rotation en supportförfrågan: be om en ny hemlighet, driftsätt den, och be sedan supporten byta över slutpunkten.Svar, omförsök och dubbletter
- Bekräfta snabbt. Returnera
2xxså snart du har lagrat händelsen, och gör uppföljningsarbetet (hämta arbetsordern, uppdatera ditt system) asynkront. Ett svar som inte är2xxeller en timeout räknas som en misslyckad leverans. - Misslyckade leveranser görs om av gatewayen enligt ett schema med ökande väntetid. Gör din hanterare idempotent så att ett omförsök efter en delvis lyckad körning inte gör skada.
- Leveranser sker minst en gång. Samma händelse kan komma mer än en gång även utan något fel på din sida. Deduplicera på
event_typeplusworkOrderIdpluschangedAt(elleraddedAtför anteckningar). - Ordningen garanteras inte. Två händelser för samma arbetsorder kan komma i fel ordning. Härled inte tillståndet ur händelsesekvensen; hämta arbetsordern och lita på dess
status. - Gamla händelser kastas, de levereras inte sent. En händelse som inte har lämnats över till gatewayen inom tre timmar från ändringen kastas. Efter ett avbrott på OpenWrenchs sida, eller om din slutpunkt var nere längre än omförsöksfönstret, stäm av genom att polla
GET /v1/buyer/work_order/work_orders?statusChangedAt=...för perioden du missade.
Reagera på en händelse
Den rekommenderade hanteraren är liten: verifiera, lagra, bekräfta, hämta sedan.Sätta ihop det hela
En dispatch-integration driven av webhooks:- Registrera en slutpunkt för
workorder.createochworkorder.status_update(lägg tillworkorder.new_noteom du speglar konversationen). - Vid
workorder.create, hämta arbetsordern och skapa motsvarande post i ditt system. Om du tilldelar från din sida, gör enPATCHavsupplierFacilityIdenligt Arbetsordrar. - Vid
workorder.status_update, hämta arbetsordern. NärnewStatusärWaitingForReview, kör ditt granskningsflöde och postawork_reviewed_and_completedellerwork_unsatisfactory. - Kör en periodisk polling på
statusChangedAtsom skyddsnät för allt som webhook-vägen kan ha missat.