Buscar K
Aparência
Aparência
O canal Webhook entrega o conteúdo de cada alerta como payload JSON numa URL que você controla. É a porta de integração entre o Lumo e o restante do seu ecossistema: sistemas internos, automações (n8n, Make, Zapier), bots de WhatsApp/Slack, gateways de mensageria customizados, lakes de auditoria, etc.
TIP
Caso real comum: o cliente quer "uma integração customizada de WhatsApp via Meta Cloud API". A forma certa de resolver é: configurar o canal Webhook, ter um middleware (servidor próprio ou n8n) que recebe o payload do Lumo e chama a API oficial da Meta. Veja exemplo completo em Avançado.
Cada entrega bem-sucedida ou falha aparece no histórico do alerta com timestamps, status HTTP recebido e mensagem de erro (quando houver).
A URL pode ser definida em dois níveis, com herança automática:
| Onde configurar | Quando usar |
|---|---|
| HEC → Tenants → [seu tenant] → Canais de Alerta Permitidos → URL do Webhook | Quando cada tenant tem destino próprio (mais comum) |
| HEC → Clientes → [seu cliente] → Canais de Alerta Permitidos → URL do Webhook | Quando todos os tenants do cliente devem cair no mesmo endpoint |
Herança Cliente → Tenant
Se o tenant não tiver URL preenchida, o Lumo usa automaticamente a URL configurada no cliente pai. Configurar no nível do cliente é a forma mais econômica quando todos os tenants daquele cliente compartilham o mesmo middleware/integração. Para um tenant específico precisar de URL diferente, basta preencher a URL dele — ela sobrepõe a do cliente.
Requisitos da URL:
http:// são rejeitadas antes de qualquer tentativa de envio.INFO
Uma única URL atende todos os alertas do tenant (ou de todos os tenants, se configurada no cliente). Para rotear por alerta no seu lado, use o campo alert.id ou alert.nome do payload. Para rotear por destinatário, use user.id ou user.email. Para rotear por tenant quando a URL é compartilhada, use tenantId.
No editor do alerta, aba Destinatários e Canais, marque Webhook entre os canais de entrega. Isso pode ser combinado com Email, WhatsApp e Telegram — todos recebem o mesmo conteúdo, em formatos apropriados a cada canal.
| Aspecto | Valor |
|---|---|
| Método | POST (fixo) |
| Headers fixos (sistema) | Content-Type: application/json, User-Agent: Horus-Alert-Webhook/1.0 |
| Headers customizados | Configuráveis por tenant (até 20, máx 100 chars na chave, 500 no valor). Veja Headers HTTP que sua URL recebe |
| Corpo | JSON (envelope com alert, user, tenantId, timestamp, content[]) |
| Timeout | 10 segundos por tentativa |
| Tamanho máx. do payload | 4 MB |
| Critério de sucesso | Status HTTP entre 200 e 299 |
| Tentativas | Até 8 (backoff exponencial: ~2s, 4s, 8s, 16s, 32s, 1min, 2min, 4min, teto de 15min) |
| Jitter | ±20% no intervalo de retry |
| Resposta armazenada | Sim, até 10 KB (truncada acima disso) |
| HTTP | Rejeitado (somente HTTPS) |
Para a especificação completa do payload (todos os campos, JSON Schema, tipos TypeScript), veja Referência do Payload.
Exemplo enxuto do que chega ao seu endpoint. Veja a referência completa para todos os campos:
{
"alert": {
"id": 123,
"nome": "Margem Negativa Diária",
"type": "condition",
"app_id": 456
},
"user": {
"id": 789,
"nome": "Maria Souza",
"email": "maria@empresa.com"
},
"tenantId": 1,
"timestamp": "2026-05-27T10:30:00.000Z",
"content": [
{
"id": 11,
"type": "text",
"nome": "Cabeçalho",
"generated": { "text": "3 vendas com margem negativa em Loja Centro" }
},
{
"id": 12,
"type": "ai",
"nome": "Análise IA",
"generated": {
"text": "Resumo: 3 vendas com prejuízo total de R$ 1.230...",
"steps": []
}
},
{
"id": 13,
"type": "report",
"nome": "Detalhamento",
"generated": {
"pdf": "https://storage.horusbi.com.br/download/a1b2c3.pdf",
"xlsx": "https://storage.horusbi.com.br/download/a1b2c3.xlsx"
}
}
]
}O Lumo trata seu endpoint como eventually available — falhas transitórias (timeouts, 5xx, indisponibilidade momentânea) são absorvidas pela política de retry. Mas há um teto:
WARNING
Falha no webhook não derruba outros canais. Se a mesma entrega tem Email + Webhook e o Webhook falhar permanentemente, o Email ainda foi enviado. Mas a entrega inteira aparece com status de erro no histórico (filosofia "fail loud").
Para o cliente decidir antes de integrar:
POST. Não há PUT/PATCH/etc.Detalhes em Avançado → Limitações conhecidas.
INFO
Para autenticar o request no seu endpoint, combine caminho secreto na URL + headers HTTP personalizados (Authorization: Bearer ..., etc.). Veja Validação de Origem.