Slack, Teams & Webhooks
Guias
Alertas no Slack, Teams e webhooks
Envie os alertas do Scanverra para um canal do Slack, um canal do Microsoft Teams ou seu próprio endpoint HTTPS, para que sua equipe saiba de uma queda de pontuação ou de uma mudança arriscada onde já trabalha.
Como funciona
- 1Abra Equipe, depois Integrações, e adicione Slack, Microsoft Teams ou um webhook.
- 2Escolha quais alertas ela deve receber e clique em Enviar teste para confirmar que a mensagem chega.
- 3Quando uma verificação agendada ou um monitor encontra algo, o Scanverra publica o alerta assim que a execução termina.
Verificações que alguém executa manualmente não enviam alertas. Agende os sites e repositórios que você quer acompanhar na página Verificações agendadas.
Alertas que você pode enviar
Cada integração recebe apenas os alertas que você marcar. Em um webhook, o nome do evento chega no cabeçalho X-Scanverra-Event e no campo event.
| Evento | Enviado quando |
|---|---|
scan.score_dropped | Uma verificação agendada pontua mais de 10 pontos abaixo da execução anterior. O alerta lista o que é novo. |
scan.completed | Qualquer verificação agendada termina com um resultado. |
scan.policy_failedEnterprise | Uma verificação agendada não cumpre a política da sua equipe (uma pontuação mínima ou nenhuma descoberta crítica). O alerta lista os motivos. |
payment_page.scripts_changedEnterprise | Uma página de pagamento monitorada carrega um script novo ou alterado, ou sua Content-Security-Policy muda. |
attack_surface.changedEnterprise | Um domínio monitorado ganha um novo host, ou um host passa a correr risco de tomada de controle. |
test | Alguém clica em Enviar teste. |
Conectar o Slack
- 1No Slack, abra Apps, encontre Incoming Webhooks e adicione ao canal que deve receber os alertas.
- 2Copie a URL do webhook. Ela começa com https://hooks.slack.com/.
- 3No Scanverra, adicione uma integração, escolha Slack, cole a URL e escolha seus alertas.
Cada alerta mostra o título, até cinco problemas novos e um botão "Open report".
Conectar o Microsoft Teams
- 1No canal do Teams, abra Fluxos de trabalho e escolha Postar em um canal quando uma solicitação de webhook for recebida.
- 2Conclua o fluxo de trabalho e copie a URL que ele fornece.
- 3No Scanverra, adicione uma integração, escolha Microsoft Teams, cole a URL e escolha seus alertas.
Cada alerta chega como um cartão com o título, os problemas novos e um botão "Open report".
Webhooks
Use um webhook para enviar alertas para qualquer outro lugar: abrir um chamado, avisar quem está de plantão ou armazená-los. O Scanverra envia um POST HTTPS com um corpo JSON para cada alerta.
Cabeçalhos da requisição
Content-Type | Sempre application/json. |
User-Agent | Identifica o Scanverra como remetente.Scanverra-Alerts/1.0 |
X-Scanverra-Event | O nome do evento, igual ao campo event do corpo.scan.score_dropped |
X-Scanverra-Timestamp | Quando a requisição foi assinada, em segundos Unix.1762594212 |
X-Scanverra-Signature | sha256= seguido do HMAC-SHA256 do timestamp, um ponto e o corpo bruto, usando seu segredo de assinatura como chave.sha256=9f2c… |
Corpo da requisição
Um exemplo de queda de pontuação:
{
"event": "scan.score_dropped",
"sentAt": "2026-11-08T09:30:12.418Z",
"summary": "Security Scan score dropped from 81 to 62 for shop.example.com",
"data": {
"target": "https://shop.example.com",
"scanType": "security",
"score": 62,
"prevScore": 81,
"reportUrl": "https://www.scanverra.com/security-scan/cm9x2k1",
"newIssues": [
"Missing Content-Security-Policy header",
"jQuery 3.4.1 has known vulnerabilities"
]
}
}Campos
event | O nome do evento. |
sentAt | Quando o alerta foi enviado (ISO 8601). |
summary | Uma descrição de uma linha, pronta para exibir como está. |
data.target | A URL verificada, o domínio, ou owner/repo para um repositório. |
data.scanType | audit, seo, security, browser, repo ou crawl (um rastreamento de SEO de várias páginas). |
data.score | A nova pontuação de 0 a 100, ou null quando o alerta não tem pontuação (monitores e testes). |
data.prevScore | A pontuação da execução anterior, ou null. |
data.reportUrl | Um link para o relatório ou o monitor. |
data.newIssues | Linhas curtas descrevendo o que mudou. Pode estar vazio ou ausente. |
Verificar a assinatura
Quando você adiciona um webhook, o Scanverra mostra o segredo de assinatura (whsec_...) uma única vez. Guarde-o no seu servidor e confira cada requisição antes de confiar nela:
- 1Leia o corpo bruto da requisição exatamente como chegou, antes de qualquer parsing de JSON.
- 2Calcule o HMAC-SHA256 do cabeçalho de timestamp, um ponto e o corpo bruto, usando o segredo como chave.
- 3Compare com o cabeçalho de assinatura em tempo constante e rejeite requisições cujo timestamp tenha mais de 5 minutos.
import crypto from "node:crypto";
import express from "express";
const SECRET = process.env.SCANVERRA_WEBHOOK_SECRET; // whsec_...
const app = express();
// express.raw keeps the exact bytes Scanverra signed.
app.post("/scanverra", express.raw({ type: "application/json" }), (req, res) => {
const timestamp = req.get("X-Scanverra-Timestamp") ?? "";
const signature = req.get("X-Scanverra-Signature") ?? "";
const expected = "sha256=" + crypto
.createHmac("sha256", SECRET)
.update(`${timestamp}.${req.body}`)
.digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(timestamp)) <= 300;
const valid = signature.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
if (!fresh || !valid) return res.sendStatus(401);
const alert = JSON.parse(req.body);
console.log(alert.event, alert.summary);
res.sendStatus(204); // answer fast, do slow work afterwards
});
app.listen(3000);Assinar o timestamp junto com o corpo impede que uma requisição capturada seja reenviada depois.
Regras de entrega
- Responda com qualquer status 2xx em até 5 segundos. Faça o trabalho demorado depois de responder.
- Cada alerta é enviado uma vez e não é reenviado. O painel Integrações mostra se a última entrega funcionou.
- Redirecionamentos não são seguidos, então use a URL final.
- Só endereços HTTPS públicos são aceitos. URLs do Slack devem estar em hooks.slack.com, e as do Teams em webhook.office.com ou no Power Automate.
- Os alertas param para a equipe toda se o plano Team ou Enterprise dela expirar.
Pronto para conectar?
Proprietários e administradores da equipe adicionam uma integração em um minuto. Envie um teste antes do primeiro alerta real.