Webhooks (Saída)
Webhooks permitem que o SalesOS chame o seu sistema quando algo acontece (um lead é ofertado, um ranking é publicado, uma mensagem é disparada). Você nos dá uma URL HTTPS e um segredo; nós fazemosPOST de um payload JSON assinado sempre que um evento assinado dispara.
Esta página cobre webhooks de saída (SalesOS → seu endpoint). Para enviar dados para dentro do
SalesOS, veja Atividades e API Keys.
Configurar um webhook no Dashboard
Vá em Integrações → Webhooks → Novo Webhook e preencha o formulário.Básico
- Nome (obrigatório) — ex.:
Notificar CRM. - Chave — um identificador estável (ex.:
notify_crm). - Descrição — opcional.
Eventos (gatilhos)
Escolha uma Categoria e selecione os eventos que disparam este webhook — esta é a sua
assinatura (veja o catálogo). Deixe vazio para um webhook que você só
dispara manualmente (botão Testar) ou via workflow.
Destino
- Método —
POST(padrão),PUTouPATCH. - Timeout (segundos) — quanto esperamos pelo seu
2xx(padrão 30). - URL (obrigatório) — seu endpoint. Precisa ser
https://e público (hosts internos/loopback são bloqueados). - Autenticação — escolha HMAC para assinar cada entrega e, em Configuração de Autenticação (JSON), informe o segredo:
(Outros esquemas disponíveis: Bearer, API Key, Basic, OAuth2.)
Avançado
- Headers Customizados (JSON) — headers extras enviados em cada entrega.
- Template do Payload (JSON com variáveis
{{ }}) — molda odatado envelope a partir do contexto do evento, ex.:{ "id": "{{event.id}}", "type": "{{event.type}}", "to": "{{event.to}}" }.
O envelope
No caminho de evento, cada entrega é um único objeto JSON:| Campo | Descrição |
|---|---|
id | Id único do evento, estável entre retentativas → sua chave de idempotência. |
type | Tipo do evento (veja o catálogo). |
version | Versão do schema de data. Evolui de forma aditiva. |
ts | Quando o evento ocorreu (ISO 8601, UTC). |
tenant | Tenant de origem (uuid). |
data | Payload específico do evento. |
Headers
| Header | Descrição |
|---|---|
X-SalesOS-Event | Tipo do evento — roteie sem ler o corpo. |
X-SalesOS-Event-Id | Igual ao id; estável entre retentativas (idempotência). |
X-SalesOS-Delivery-Id | Id da tentativa (muda a cada retry; para debug). |
X-SalesOS-Timestamp | Unix em segundos — parte da assinatura (anti-replay). |
X-SalesOS-Tenant | Id do tenant de origem. |
X-SalesOS-Signature | sha256=<hmac> — veja Verificar. |
Verificar a assinatura
No caminho de evento, a assinatura cobre{id}.{timestamp}.{rawBody} (padrão Standard Webhooks),
então autentica o payload e o timestamp (anti-replay). Recompute o HMAC com o seu segredo, compare
em tempo constante e rejeite se o timestamp estiver mais de 300s fora.
Entregas de teste (o botão “Testar Webhook”) e gatilhos legados de workflow usam hoje um esquema mais
simples: o corpo é o template renderizado cru (não o envelope) e o header de assinatura é
X-Signature: <prefixo><hmac(corpo)> — sem o prefixo id.timestamp., então sem anti-replay.
Prefira o caminho de evento acima em produção.Catálogo de eventos
type | Quando dispara | data |
|---|---|---|
lead.offer_created | Um lead é ofertado a um corretor | payload do lead/oportunidade |
lead.accepted | Um corretor aceita um lead | payload do lead/oportunidade |
lead.offer_expired | Uma oferta expira sem aceite | payload do lead/oportunidade |
mission.completed | Uma missão é concluída | payload da missão |
ranking.weekly.published | Ranking semanal publicado (agendado) | leaderboard (linhas por email) |
ranking.consolidated.published | Ranking consolidado publicado | leaderboard (linhas por email) |
message.dispatch | Mensagem disparada a um usuário/grupo | { to, m } |
notification.push.dispatch | Push disparado a um usuário/grupo | { to, n } |
data para ranking.weekly.published:
Confiabilidade
Responda rápido. Retorne um status2xx rapidamente (antes de processamento pesado) para confirmar o recebimento.
| Sua resposta | O que o SalesOS faz |
|---|---|
2xx | Marca a entrega como concluída. Sem retry. |
4xx (400, 401, 422…) | Tratado como rejeição permanente. Sem retry (exceto 429, que respeita o backoff). |
5xx / timeout / erro de conexão | Reentrega com backoff exponencial (2^n minutos, até 5 tentativas), depois dead-letter. |
X-SalesOS-Event-Id — ele permanece o mesmo entre retentativas.

