Saltar al contenido principal
4 min de lectura

Webhook entrante de Slack

Reciba un mensaje en Slack cada vez que se dispare un evento de Zenovay: pico de tráfico, objetivo completado, pico de errores o tiempo de inactividad.

Esta receta utiliza la función nativa de webhook entrante de Slack: no se necesita ninguna aplicación ni bot de Slack.

Los webhooks de salida son una función Pro+. Actualice su plan para habilitarlos.


1. Crear el webhook entrante de Slack

  1. En Slack, abra su espacio de trabajo → Apps → busque "Incoming Webhooks" → Add to Slack.
  2. Seleccione el canal que debe recibir las alertas de Zenovay (por ejemplo, #alerts o #growth).
  3. Haga clic en Add Incoming Webhooks integration.
  4. Slack muestra una Webhook URL con el aspecto https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX: cópiela.

2. Añadir el webhook en Zenovay

  1. En app.zenovay.com, vaya a Settings → Webhooks.
  2. Seleccione el sitio web del que desea recibir notificaciones.
  3. Haga clic en Add webhook.
  4. Complete los campos:
    • Name: Slack #alerts (o lo que tenga sentido para usted)
    • URL: pegue la URL del webhook de Slack del Paso 1
    • Events: seleccione los que le interesen (Pico de tráfico, Objetivo completado, Sitio web inactivo, …)
  5. Haga clic en Create webhook.
  6. Haga clic en Send test event (el icono de avión de papel) en la nueva tarjeta. En aproximadamente 5 segundos debería ver un mensaje de Slack en el canal.

Eso es todo para la configuración básica: Slack aceptará el payload JSON predeterminado de Zenovay como un campo text genérico.


3. (Opcional) Formatear el mensaje de Slack

Los webhooks entrantes de Slack aceptan un payload más enriquecido con bloques, adjuntos y formato Markdown. Zenovay envía un evento JSON genérico: Slack lo renderizará como un valor text de respaldo.

Si desea mensajes de Slack elaborados con adjuntos de color según la severidad o diseños de bloques, ejecute un pequeño relay entre Zenovay y Slack:

// Cloudflare Workers / any Node-style runtime
export default {
  async fetch(req) {
    const event = await req.json();
    const slackPayload = {
      text: `📈 Zenovay event: *${event.event_type}* on ${event.website_id}`,
      attachments: [{
        color: event.event_type === 'website_down' ? '#dc2626' : '#3b82f6',
        fields: [
          { title: 'Event', value: event.event_type, short: true },
          { title: 'Time', value: event.timestamp, short: true },
        ],
      }],
    };
    await fetch(SLACK_WEBHOOK_URL, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(slackPayload),
    });
    return new Response('ok');
  },
};

Apunte la URL del webhook de Zenovay a su relay en lugar de a Slack directamente.


4. Verificar la firma de Zenovay (recomendado para relays)

Si usa un relay, verifique la firma HMAC-SHA256 de Zenovay para que Slack solo reciba eventos genuinos de Zenovay:

import { createHmac } from 'crypto';

const signature = req.headers.get('x-zenovay-signature'); // 'sha256=<hex>'
const provided = signature.replace(/^sha256=/, '');
const expected = createHmac('sha256', YOUR_WEBHOOK_SECRET)
  .update(rawBody)
  .digest('hex');

if (provided !== expected) {
  return new Response('invalid signature', { status: 401 });
}

Su secreto de webhook se muestra en Settings → Webhooks → haga clic en el icono del ojo en la tarjeta del webhook.


Resolución de problemas

  • No llega ningún mensaje de Slack: compruebe la tarjeta del webhook en Zenovay para ver una marca de tiempo "Last fired": si está vacía, aún no se ha disparado ningún evento. Haga clic en Send test event para forzar uno.
  • invalid_payload de Slack: el webhook de Slack devolvió un 400 porque la forma del JSON no coincidía. Use un relay (Paso 3) para reformatear al formato esperado por Slack.
  • Alertas excesivas: en la configuración del webhook, deshabilite los tipos de eventos activos como traffic_spike. Mantenga solo los de alta señal.

Relacionado

¿Fue útil esta página?