workorder.create y workorder.status_update en el momento en que ocurren, y conserva el sondeo solo como respaldo de conciliación.
Configurar un endpoint
Los endpoints se registran por empresa compradora y cubren todas sus ubicaciones e instalaciones. Todavía no hay una API de autoservicio para esto: escribe a support@useopenwrench.com con- la URL HTTPS que debe recibir las entregas,
- cuáles de los tres eventos quieres (
workorder.create,workorder.status_update,workorder.new_note), y - si el endpoint es de pruebas o de producción.
Eventos
Algunos detalles de cada uno:
workorder.createse dispara en cada creación, sin importar quién la haga: tu propioPOST /v1/buyer/work_order/work_orders, un usuario en las apps web o móviles de OpenWrench, un cronograma de mantenimiento preventivo, un recorrido de encuesta de sitio, o un proveedor que abre una orden de trabajo en una de tus ubicaciones (SupplierInitiatedPendingApproval). El payload lleva el estado inicial, así que puedes distinguir una solicitud de servicio pendiente de aprobación de una orden de trabajo despachada al crearse.workorder.status_updatese dispara en cada transición del modelo de estados, para estados propiedad de cualquiera de los dos lados. Las ediciones que no tocanstatus(un cambio de prioridad, una nueva fecha estimada de finalización, una reasignación mientras la orden sigue pendiente de confirmación) no emiten uno. Cuando una orden de trabajo pasa de un proveedor a otro puedes recibir una actualización intermedia cuyonewStatusesRejected, que cierra la asignación anterior, seguida de la actualización con el estado nuevo.workorder.new_notese dispara para las notas del hilo raíz comprador–proveedor de cualquiera de los dos lados, incluidas las notas publicadas por tu propia integración, las publicaciones masivas de fotos y la nota adjunta a una acción de estado. Las notas internas de los proveedores y los hilos de subcontratación nunca emiten eventos.
Payload de la entrega
Cada entrega es unPOST HTTP con cuerpo JSON. El cuerpo tiene dos campos: event_type y data.
Eventos de creación y de estado
workorder.create usa la misma forma de data sin oldStatus.
Eventos de nota
El payload no incluye el resto del hilo. Léelo con
GET /v1/buyer/work_order/work_order_notes/{woId} si necesitas contexto.
Verificar las entregas
Cada entrega va firmada. La pasarela calcula un HMAC sobre el cuerpo crudo de la petición con el secreto de firma de tu endpoint y lo envía en una cabecera de firma. Cuando soporte registra tu endpoint te entrega el secreto, el nombre de la cabecera y el algoritmo de hash. Verifica la firma contra los bytes crudos del cuerpo antes de parsearlo, y rechaza cualquier cosa que no coincida. Como el secreto es por endpoint, rotarlo es una solicitud a soporte: pide un secreto nuevo, despliégalo y luego pide a soporte que cambie el endpoint.Respuesta, reintentos y duplicados
- Confirma rápido. Devuelve un
2xxen cuanto hayas almacenado el evento, y haz el trabajo posterior (obtener la orden de trabajo, actualizar tu sistema) de forma asíncrona. Una respuesta distinta de2xxo un tiempo de espera agotado cuentan como entrega fallida. - Las entregas fallidas se reintentan desde la pasarela con un esquema de espera creciente. Haz que tu manejador sea idempotente para que un reintento tras un éxito parcial no cause daño.
- Las entregas son al menos una vez. El mismo evento puede llegar más de una vez incluso sin un fallo de tu lado. Deduplica con
event_typemásworkOrderIdmáschangedAt(oaddedAtpara las notas). - El orden no está garantizado. Dos eventos de la misma orden de trabajo pueden llegar desordenados. No derives el estado de la secuencia de eventos; obtén la orden de trabajo y confía en su
status. - Los eventos antiguos se descartan, no se entregan tarde. Un evento que no se haya pasado a la pasarela dentro de las tres horas siguientes al cambio se descarta. Tras una interrupción del lado de OpenWrench, o si tu endpoint estuvo caído más tiempo que la ventana de reintentos, concilia sondeando
GET /v1/buyer/work_order/work_orders?statusChangedAt=...para el periodo que te perdiste.
Reaccionar a un evento
El manejador recomendado es pequeño: verificar, almacenar, confirmar y luego obtener.Juntándolo todo
Una integración de despacho impulsada por webhooks:- Registra un endpoint para
workorder.createyworkorder.status_update(añadeworkorder.new_notesi replicas la conversación). - En
workorder.create, obtén la orden de trabajo y crea el registro correspondiente en tu sistema. Si despachas desde tu lado, hazPATCHdelsupplierFacilityIdcomo se describe en Órdenes de trabajo. - En
workorder.status_update, obtén la orden de trabajo. CuandonewStatusseaWaitingForReview, ejecuta tu flujo de revisión y publicawork_reviewed_and_completedowork_unsatisfactory. - Ejecuta un sondeo periódico sobre
statusChangedAtcomo red de seguridad para cualquier cosa que la ruta de webhooks haya perdido.