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
- In Slack, vai su
App → Webhook in entrata → Aggiungi a Slacke seleziona il canale che deve ricevere gli avvisi. - Copia l'URL del webhook fornito da Slack.
- In Page Deltas, apri la pagina
Canali,Aggiungi un canale, scegliSlack, incolla l'URL e salva. - Clicca su
Invia testper 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.
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=<hex>, 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
| Comportamento | Dettaglio |
|---|---|
| Tentativi | Ogni 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. |
| Fallimenti | Una 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. |
| Audit | Ogni 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.