Webhooks
Autoinspector notifica vía webhooks a tu sistema que es lo que está pasando con una inspección. De esta manera, tu sistema puede recibir información en tiempo real del estado de una inspección, el procesamiento de una imagen, etc.
Crear webhook
Sigue los mismos pasos del flujo estándar de creación de webhooks.
Accede al panel de Administración de webhooks.
Haz click en el botón de crear webhook.
Ingresa el endpoint de tu sistema backend. Asegúrate de que sea accesible desde internet.
Selecciona el entorno del webhook: Producción para recibir eventos de inspecciones de producción, o Testing para las inspecciones creadas con tu API key de testing.
En la sección de eventos, suscríbete al evento inspection_completed.
Haz click sobre Crear Endpoint.
Webhook Tip
El endpoint de tu servidor tiene que ser accessible desde internet. Es por ello que si deseas testear los eventos que Autoinspector envía en tu host, puedes usar una herramienta llamada ngrok para crear un túnel desde internet a tu host.
Entornos
Cada webhook pertenece a un único entorno y solo recibe eventos de las inspecciones creadas en ese entorno:
| Entorno | Recibe eventos de |
|---|---|
production | Inspecciones creadas con tu API key de producción (ai_live_) o desde el Dashboard |
testing | Inspecciones creadas con tu API key de testing (ai_test_) |
Cuando creas un webhook mediante la API, envía el campo environment con production o testing para elegirlo. Si lo omites, Autoinspector lo asigna según la API key utilizada: una API key de testing crea un webhook testing y una API key de producción crea un webhook production. Desde el Dashboard, eliges el entorno al crear el webhook y puedes cambiarlo luego desde el detalle del webhook.
Un webhook por entorno
Si necesitas recibir eventos de ambos entornos, crea un webhook para cada uno. Te recomendamos apuntarlos a endpoints distintos para que tus eventos de testing nunca lleguen a tus sistemas de producción.
Eventos
Un evento representa una acción o hecho que acontece dentro del flujo de una inspección. Los eventos que se encuentran disponibles son:
{ "event": "inspection_created", "payload": { "_id": "651ae032ff786d198dfa4ce4", "status": "created", "producer": { "userId": "61478404b9a70800551878b6", "membershipId": "61c28b777b0c420012bd4a68", "companyId": "6147843bb9a70800551878bd", "firstName": "John", "lastName": "Doe", "username": "johndoe", "email": "johndoe@gmail.com" }, "type": "car", "metadata": { "my_custom_key": "my_custom_value" }, "testing": false, "template": { "name": "easy", "type": "built-in", "_id": "62be865212ca0918bcabf2a5" }, "magicLink": "https://app.autoinspector.ai/inspection/651ae032ff786d198dfa4ce4?accessCode=5087" }}inspection_client_completed vs inspection_completed
inspection_client_completed se emite en el instante en que el usuario
finaliza la carga desde Inspection App y contiene solo la información
mínima de la inspección. inspection_completed se emite cuando el
procesamiento terminó e incluye recursos, inferencias, validaciones y
resultado. Si embebes Inspection App en tu aplicación, el mismo payload de
inspection_client_completed también se envía a la aplicación anfitriona.
Consulta Integrar Inspección App.
Seguridad
Par una comunicación mas segura, se recomienda seguir el flujo de HMAC (hash message authorization code).
Cada vez que Autoinspector envía un evento, en la request estará el header autoinspector-signature que corresponde al HMAC generado mediante el uso de la signature del webhook. De esta manera, en tu aplicación tu puedes generar otro HMAC mediante el body de la request y la private signature del webhook para comparar el HMAC generado por ti con el que se encuentra en la request.
Si los dos HMAC coinciden, quiere decir que quien esta realizando la request a tu sistema es efectivamente Autoinspector.
Un ejemplo de este método en código es el siguiente:
WEBHOOK SIGNATURE
El webhook signature lo puedes encontrar en el dashboard dentro del detail de tu webhook. Puedes generar nuevos tantas veces lo necesites.
import crypto from 'node:crypto'import express from 'express'const app = express()app.post( '/webhooks/autoinspector', express.raw({ type: 'application/json' }), (req, res) => { const signature = req.header('autoinspector-signature') const secret = process.env.AUTOINSPECTOR_WEBHOOK_SECRET if (!signature || !secret) return res.status(400).json({ error: 'Missing signature or secret' }) const rawBody = req.body const expectedSignature = crypto .createHmac('sha256', secret) .update(rawBody) .digest('hex') const isValid = signature.length === expectedSignature.length && crypto.timingSafeEqual( Buffer.from(signature), Buffer.from(expectedSignature), ) if (!isValid) return res.status(400).json({ error: 'Invalid signature' }) const event = JSON.parse(rawBody.toString('utf8')) if (event.event === 'inspection_completed') { // Tu lógica de negocio } return res.status(200).json({ received: true }) },)Lógica de reintentos
En el ciclo de vida de una aplicación, el posible downtime forma parte de la misma. Es por ello, que hay eventos que son resilientes a cierta cantidad de fallos y siguen una lógica de reintentos.
Estos eventos son:
image_processedextra_image_processedinspection_completed
Si al primer intento de enviar la notificación, la integración no responde con un status 2XX, se reintentará enviar en los próximos 30 minutos con dos repeticiones.