workorder.create et workorder.status_update au moment où ils se produisent, et ne gardez le sondage que comme filet de sécurité pour la réconciliation.
Configurer un endpoint
Les endpoints sont enregistrés par entreprise acheteuse et couvrent tous ses emplacements et établissements. Il n’existe pas encore d’API en libre-service pour cela : écrivez à support@useopenwrench.com en précisant- l’URL HTTPS qui doit recevoir les livraisons,
- lesquels des trois événements vous voulez (
workorder.create,workorder.status_update,workorder.new_note), et - si l’endpoint sert aux tests ou à la production.
Événements
Quelques précisions sur chacun :
workorder.createse déclenche à chaque création, quel qu’en soit l’auteur : votre proprePOST /v1/buyer/work_order/work_orders, un utilisateur des applications web ou mobile OpenWrench, un calendrier de maintenance planifiée, une visite d’inspection de site, ou un fournisseur qui ouvre un bon de travail sur l’un de vos emplacements (SupplierInitiatedPendingApproval). La charge utile porte le statut initial, ce qui vous permet de distinguer une demande de service en attente d’approbation d’un bon de travail réparti dès sa création.workorder.status_updatese déclenche à chaque transition du modèle de statut, pour les statuts détenus par l’un ou l’autre côté. Les modifications qui ne touchent passtatus(un changement de priorité, une nouvelle date d’achèvement estimée, une réaffectation alors que le bon de travail est encore en attente de confirmation) n’en émettent pas. Quand un bon de travail passe d’un fournisseur à un autre, vous pouvez recevoir une mise à jour intermédiaire dont lenewStatusestRejected, qui clôt l’affectation précédente, suivie de la mise à jour vers le nouveau statut.workorder.new_notese déclenche pour les notes du fil racine acheteur–fournisseur venant de l’un ou l’autre côté, y compris les notes publiées par votre propre intégration, les envois groupés de photos et la note jointe à une action de statut. Les notes internes des fournisseurs et les fils de sous-traitance n’émettent jamais d’événement.
Charge utile de la livraison
Chaque livraison est unPOST HTTP avec un corps JSON. Le corps comporte deux champs : event_type et data.
Événements de création et de statut
workorder.create utilise la même forme de data, sans oldStatus.
Événements de note
La charge utile n’inclut pas le reste du fil. Lisez-le avec
GET /v1/buyer/work_order/work_order_notes/{woId} si vous avez besoin de contexte.
Vérifier les livraisons
Chaque livraison est signée. La passerelle calcule un HMAC sur le corps brut de la requête avec le secret de signature de votre endpoint et l’envoie dans un en-tête de signature. Lorsque le soutien enregistre votre endpoint, il vous communique le secret, le nom de l’en-tête et l’algorithme de hachage. Vérifiez la signature sur les octets bruts du corps avant de l’analyser, et rejetez tout ce qui ne correspond pas. Le secret étant propre à chaque endpoint, sa rotation passe par une demande au soutien : demandez un nouveau secret, déployez-le, puis demandez au soutien de basculer l’endpoint.Réponse, nouvelles tentatives et doublons
- Accusez réception rapidement. Renvoyez un
2xxdès que vous avez stocké l’événement, et effectuez le travail de suivi (récupération du bon de travail, mise à jour de votre système) de manière asynchrone. Une réponse autre que2xxou un dépassement de délai compte comme une livraison échouée. - Les livraisons échouées sont retentées par la passerelle selon un calendrier d’attente croissante. Rendez votre gestionnaire idempotent pour qu’une nouvelle tentative après un succès partiel soit sans effet.
- Les livraisons sont au moins une fois. Le même événement peut arriver plus d’une fois, même sans échec de votre côté. Dédoublonnez sur
event_typeplusworkOrderIdpluschangedAt(ouaddedAtpour les notes). - L’ordre n’est pas garanti. Deux événements pour le même bon de travail peuvent arriver dans le désordre. Ne déduisez pas l’état de la séquence d’événements; récupérez le bon de travail et fiez-vous à son
status. - Les événements périmés sont abandonnés, pas livrés en retard. Un événement qui n’a pas été transmis à la passerelle dans les trois heures suivant le changement est écarté. Après une panne côté OpenWrench, ou si votre endpoint est resté indisponible plus longtemps que la fenêtre de nouvelles tentatives, réconciliez en sondant
GET /v1/buyer/work_order/work_orders?statusChangedAt=...sur la période manquée.
Réagir à un événement
Le gestionnaire recommandé est court : vérifier, stocker, accuser réception, puis récupérer.Assembler le tout
Une intégration de répartition pilotée par les webhooks :- Enregistrez un endpoint pour
workorder.createetworkorder.status_update(ajoutezworkorder.new_notesi vous répliquez la conversation). - Sur
workorder.create, récupérez le bon de travail et créez l’enregistrement correspondant dans votre système. Si vous répartissez de votre côté, faites unPATCHdusupplierFacilityIdcomme décrit dans Bons de travail. - Sur
workorder.status_update, récupérez le bon de travail. QuandnewStatusvautWaitingForReview, lancez votre flux de revue et publiezwork_reviewed_and_completedouwork_unsatisfactory. - Exécutez un sondage périodique sur
statusChangedAtcomme filet de sécurité pour tout ce que le chemin des webhooks aurait manqué.