Slack, Teams & Webhooks
Guías
Alertas en Slack, Teams y webhooks
Envía las alertas de Scanverra a un canal de Slack, a un canal de Microsoft Teams o a tu propio endpoint HTTPS, para que tu equipo se entere de una caída de puntuación o de un cambio arriesgado donde ya trabaja.
Cómo funciona
- 1Abre Equipo, luego Integraciones, y añade Slack, Microsoft Teams o un webhook.
- 2Elige qué alertas debe recibir y haz clic en Enviar prueba para comprobar que el mensaje llega.
- 3Cuando un análisis programado o un monitor encuentra algo, Scanverra publica la alerta en cuanto termina la ejecución.
Los análisis que alguien ejecuta a mano no envían alertas. Programa los sitios y repositorios que quieras vigilar en la página Análisis programados.
Alertas que puedes enviar
Cada integración recibe solo las alertas que marques. En un webhook, el nombre del evento llega en el encabezado X-Scanverra-Event y en el campo event.
| Evento | Se envía cuando |
|---|---|
scan.score_dropped | Un análisis programado obtiene más de 10 puntos menos que su ejecución anterior. La alerta enumera lo nuevo. |
scan.completed | Cualquier análisis programado termina con un resultado. |
scan.policy_failedEnterprise | Un análisis programado no cumple la política de tu equipo (una puntuación mínima o ningún hallazgo crítico). La alerta enumera los motivos. |
payment_page.scripts_changedEnterprise | Una página de pago vigilada carga un script nuevo o modificado, o cambia su Content-Security-Policy. |
attack_surface.changedEnterprise | Un dominio vigilado gana un host nuevo, o un host pasa a tener riesgo de toma de control. |
test | Alguien hace clic en Enviar prueba. |
Conectar Slack
- 1En Slack, abre Apps, busca Incoming Webhooks y añádelo al canal que debe recibir las alertas.
- 2Copia la URL del webhook. Empieza por https://hooks.slack.com/.
- 3En Scanverra, añade una integración, elige Slack, pega la URL y elige tus alertas.
Cada alerta muestra el titular, hasta cinco problemas nuevos y un botón "Open report".
Conectar Microsoft Teams
- 1En el canal de Teams, abre Flujos de trabajo y elige Publicar en un canal cuando se reciba una solicitud de webhook.
- 2Termina el flujo de trabajo y copia la URL que te da.
- 3En Scanverra, añade una integración, elige Microsoft Teams, pega la URL y elige tus alertas.
Cada alerta llega como una tarjeta con el titular, los problemas nuevos y un botón "Open report".
Webhooks
Usa un webhook para enviar alertas a cualquier otro sitio: abrir un ticket, avisar a quien esté de guardia o guardarlas. Scanverra envía un POST HTTPS con un cuerpo JSON por cada alerta.
Encabezados de la solicitud
Content-Type | Siempre application/json. |
User-Agent | Identifica a Scanverra como remitente.Scanverra-Alerts/1.0 |
X-Scanverra-Event | El nombre del evento, igual que el campo event del cuerpo.scan.score_dropped |
X-Scanverra-Timestamp | Cuándo se firmó la solicitud, en segundos Unix.1762594212 |
X-Scanverra-Signature | sha256= seguido del HMAC-SHA256 de la marca de tiempo, un punto y el cuerpo sin procesar, con tu secreto de firma como clave.sha256=9f2c… |
Cuerpo de la solicitud
Un ejemplo de caída de puntuación:
{
"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 | El nombre del evento. |
sentAt | Cuándo se envió la alerta (ISO 8601). |
summary | Una descripción de una línea, lista para mostrar tal cual. |
data.target | La URL analizada, el dominio, o owner/repo para un repositorio. |
data.scanType | audit, seo, security, browser, repo o crawl (un rastreo SEO de varias páginas). |
data.score | La nueva puntuación de 0 a 100, o null cuando la alerta no tiene puntuación (monitores y pruebas). |
data.prevScore | La puntuación de la ejecución anterior, o null. |
data.reportUrl | Un enlace al informe o al monitor. |
data.newIssues | Líneas cortas que describen qué cambió. Puede estar vacío o no aparecer. |
Verificar la firma
Cuando añades un webhook, Scanverra muestra su secreto de firma (whsec_...) una sola vez. Guárdalo en tu servidor y comprueba cada solicitud antes de confiar en ella:
- 1Lee el cuerpo sin procesar exactamente como llegó, antes de cualquier análisis JSON.
- 2Calcula el HMAC-SHA256 del encabezado de marca de tiempo, un punto y el cuerpo sin procesar, con el secreto como clave.
- 3Compáralo con el encabezado de firma en tiempo constante y rechaza las solicitudes cuya marca de tiempo tenga más 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);Firmar la marca de tiempo junto con el cuerpo impide que alguien reenvíe más tarde una solicitud capturada.
Reglas de entrega
- Responde con cualquier estado 2xx en menos de 5 segundos. Haz el trabajo lento después de responder.
- Cada alerta se envía una vez y no se reintenta. El panel Integraciones muestra si la última entrega funcionó.
- Las redirecciones no se siguen, así que usa la URL final.
- Solo se aceptan direcciones HTTPS públicas. Las URL de Slack deben estar en hooks.slack.com y las de Teams en webhook.office.com o Power Automate.
- Las alertas se detienen para todo el equipo si su plan Team o Enterprise vence.
¿Listo para conectar?
Los propietarios y administradores del equipo añaden una integración en un minuto. Envía una prueba antes de la primera alerta real.