DOCS

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:

EntornoRecibe eventos de
productionInspecciones creadas con tu API key de producción (ai_live_) o desde el Dashboard
testingInspecciones 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_processed
  • extra_image_processed
  • inspection_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.

En esta página