Canali di notifica

Un canale è una destinazione per gli avvisi. Aggiungine quanti ne servono, poi collegali ai singoli monitor (o a tutti i monitor per impostazione predefinita).

Canali vs. override del monitor

I canali sono definiti a livello di organizzazione. Ogni canale può essere contrassegnato come predefinito — il che significa che i nuovi monitor vi invieranno notifiche automaticamente. Su ogni monitor puoi sovrascrivere l'impostazione predefinita e scegliere un sottoinsieme personalizzato.

Slack

  1. In Slack, vai su App → Webhook in entrata → Aggiungi a Slack e seleziona il canale che deve ricevere gli avvisi.
  2. Copia l'URL del webhook fornito da Slack.
  3. In Page Deltas, apri la pagina Canali, Aggiungi un canale, scegli Slack, incolla l'URL e salva.
  4. Clicca su Invia test per confermare che il messaggio arrivi nel canale Slack corretto.

Discord

Nel tuo server Discord, apri Impostazioni del server → Integrazioni → Webhook → Nuovo Webhook. Copia l'URL e incollalo in un nuovo canale Discord in Page Deltas.

Microsoft Teams

In Teams, clicca con il tasto destro sul canale di destinazione, Connettori → Webhook in entrata → Configura. Nominalo Page Deltas, salva e copia l'URL in Page Deltas.

Email

Aggiungi l'indirizzo del destinatario. Invieremo prima un'email di verifica a quell'indirizzo — il canale rimarrà in uno stato di verifica in sospeso e non riceverà avvisi finché il destinatario non confermerà. La posta in uscita viene inviata da un dominio verificato che controlliamo. Per la distribuzione di team, usa un alias di gruppo invece di aggiungere i singoli indirizzi uno alla volta.

Webhook generico

Usa questo quando vuoi pilotare il tuo sistema tramite gli avvisi (Linear, Jira, una Lambda, uno Slack tramite bot, ecc.).

Payload

Il corpo è un oggetto JSON piatto. Nuovi campi potrebbero essere aggiunti nel tempo, quindi ignora le chiavi sconosciuti invece di rifiutarle.

POST <your URL>
Content-Type: application/json
X-Signature: sha256=<hex>

{
  "event": "change.detected",
  "monitor_id": "...",
  "monitor_url": "https://example.com/pricing",
  "monitor_name": "Competitor pricing page",
  "change_id": "...",
  "detected_at": "2026-06-01T12:00:00Z",
  "summary": "Pro plan increased from $29 to $39/month.",
  "before_screenshot_url": "https://.../before.png",
  "after_screenshot_url": "https://.../after.png",
  "dashboard_url": "https://app.pagedeltas.com/monitors/..."
}

Verifica della firma (HMAC)

Ogni richiesta trasporta un header X-Signature nella forma sha256=&lt;hex&gt;, dove il valore è l'HMAC-SHA256 del corpo della richiesta grezza utilizzando il segreto del tuo canale — mostrato una sola volta al momento della creazione. Non c'è una componente di timestamp.

# Node.js example
import crypto from "node:crypto";

function verify(req, rawBody, secret) {
  const header = req.headers["x-signature"]; // "sha256=<hex>"
  const expected =
    "sha256=" +
    crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(header),
    Buffer.from(expected),
  );
}

Consegna e fallimenti

ComportamentoDettaglio
TentativiOgni avviso viene consegnato con un singolo tentativo per canale. Al momento non ci sono tentativi automatici — fai in modo che il tuo ricevitore risponda rapidamente e accetti i duplicati in modo difensivo.
FallimentiUna risposta diversa da 2xx o un errore di rete segna la consegna come fallita. Il monitor stesso non viene messo in pausa per i fallimenti di consegna.
AuditOgni tentativo (successo o fallimento, con stato HTTP) viene registrato lato server nel registro dei tentativi di consegna.

Best practice

  • Usa un canale per ogni canale dell'area di lavoro di Slack — non riutilizzare un webhook per più stanze Slack.
  • Per i monitor ad alto volume, invia a un canale Slack dedicato invece di un affollato #generale.
  • Per gli avvisi mission-critical, collega due canali di tipo diverso (es. Slack + email) in modo che un'interruzione di Slack non nasconda un cambiamento.
Canali di notifica · Documentazione · Page Deltas