Skip to main content

Webhooks

Webhooks permitem que sua aplicação receba notificações em tempo real quando eventos ocorrem no Laudos.AI.

Eventos Disponíveis

EventoDescrição
report.createdNovo laudo criado
report.finalizedLaudo finalizado
report.sentLaudo enviado ao PACS
report.updatedLaudo atualizado
critical_finding.detectedAchado crítico identificado
connection.status_changedStatus de conexão PACS alterado

Configurar Webhook

POST /api/v1/webhooks
Authorization: Bearer sk_live_xxx

{
  "url": "https://your-app.com/webhooks/laudosai",
  "events": ["report.finalized", "critical_finding.detected"],
  "secret": "whsec_your_signing_secret"
}

Payload do Webhook

{
  "id": "evt_xxxxxxxxxxxxxxxx",
  "type": "report.finalized",
  "created_at": "2024-01-15T10:30:00Z",
  "data": {
    "report_id": "rpt_xxxxx",
    "exam_type": "RM Crânio",
    "status": "final",
    "has_critical_finding": false
  }
}

Verificar Assinatura

Todos os webhooks incluem um header X-Laudos-Signature para verificação.
const crypto = require('crypto');

function verifyWebhook(payload, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(`sha256=${expected}`)
  );
}

// Express middleware
app.post('/webhooks/laudosai', (req, res) => {
  const signature = req.headers['x-laudos-signature'];
  const isValid = verifyWebhook(
    JSON.stringify(req.body),
    signature,
    process.env.WEBHOOK_SECRET
  );

  if (!isValid) {
    return res.status(401).send('Invalid signature');
  }

  // Processar evento
  const event = req.body;
  console.log(`Evento recebido: ${event.type}`);

  res.status(200).send('OK');
});

Retentativas

Se seu endpoint retornar um erro (status >= 400), tentaremos novamente:
TentativaIntervalo
Imediata
1 minuto
5 minutos
30 minutos
2 horas
Após 5 falhas, o webhook é marcado como inativo.

Boas Práticas

Retorne 200 em até 5 segundos. Processe eventos de forma assíncrona.
Use o id do evento para evitar processamento duplicado.
Log erros e retorne 200 para evitar retentativas desnecessárias.

Testar Webhooks

Use nosso CLI para simular eventos:
npx @laudosai/cli webhooks trigger report.finalized \
  --endpoint https://localhost:3000/webhooks
Ou no dashboard em Configurações > Webhooks > Testar.