workorder.create en el sustituto natural del sondeo de tu cola: el evento es la señal de que una orden de trabajo ha llegado a tu cola, normalmente esperando a que la aceptes o rechaces.
Configurar un endpoint
Los endpoints se registran por instalación del proveedor. Una empresa con varias instalaciones registra cada una que tenga su propia integración. 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.createsignifica “trabajo nuevo para ti”, no solo “se creó una fila nueva”. Se dispara cuando se crea una orden de trabajo con tu instalación asignada, cuando un comprador te reasigna una orden de trabajo existente (entra enPendingConfirmationByServiceProvider) y cuando tú mismo abres una orden de trabajo iniciada por el proveedor (SupplierInitiatedPendingApproval). Una orden de trabajo creada para ti que primero necesita la aprobación interna del comprador emiteworkorder.createcuando alcanzaPendingConfirmationByServiceProvider, no cuando el aprobador del comprador la ve por primera vez.workorder.status_updatese dispara cuando una orden de trabajo asignada a ti entra enConfirmedByServiceProvider,TechAssigned,TechScheduled,TechRescheduled,WorkIncompleteWithReason(salvo que venga directamente deTechWorkingOnSite, que es un check-out),WorkUnsatisfactory,WorkReviewedAndCompleted,CancelledWithReasonoPaymentMade. Eso cubre tu propia aceptación, la programación que hacen tus técnicos en las apps de OpenWrench y las decisiones del comprador sobre tu trabajo. Los estados de partes,TechEnRoute,TechWaitingOnSite,TechWorkingOnSite,WaitingForReviewy los estados de cotización y propuesta no emiten eventos.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. Tus notas internas y los hilos de las órdenes de trabajo que subcontratas nunca emiten eventos.
- Reasignación fuera de ti. Si el comprador mueve una orden de trabajo a otro proveedor, simplemente desaparece de tu cola. Concilia contra
GET /v1/supplier/work_order/work_orderssi eso te importa. - Órdenes de trabajo que solo puedes ver. Si tu instalación está en la lista de visibilidad de una orden de trabajo en lugar de asignada a ella, recibes sus eventos solo si OpenWrench ha habilitado los webhooks de visibilidad para tu empresa. Pregunta a soporte si lo necesitas.
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.status_update usa la misma forma de data con oldStatus informado.
Eventos de nota
El payload no incluye el resto del hilo. Léelo con
GET /v1/supplier/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/supplier/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
El ciclo de integración típico, impulsado 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 trabajo en tu sistema. Luego ramifica segúnnewStatus:PendingConfirmationByServiceProvidersignifica que el comprador te espera, así que hazconfirmodeclinedentro de tu SLA;SupplierInitiatedPendingApprovalsignifica que tu propia solicitud espera al comprador, así que no hagas nada hasta que unworkorder.status_updateinforme el resultado; cualquier otro estado significa que la orden de trabajo ya es tuya, así que pasa directamente a la programación. - En
workorder.status_update, obtén la orden de trabajo.WorkUnsatisfactoryyWorkReviewedAndCompletedte dan el veredicto del comprador;CancelledWithReasoncierra el trabajo;PaymentMadecierra la parte económica. - Ejecuta un sondeo periódico sobre
assignedAtostatusChangedAtcomo red de seguridad para cualquier cosa que la ruta de webhooks haya perdido, incluido el trabajo reasignado fuera de ti.