Webhook dei contatti
Proprietari e amministratori con email verificata. Impostazioni organizzazione → Integrazioni → Webhook dei contatti invia ogni nuovo contatto di un modulo di contatto a un indirizzo, come un trigger di Zapier, Make o n8n o il tuo server. I contatti restano anche in Analisi → Contatti. Con Invia anche aperture e completamenti dei link personali, segnala anche i link personali.
L’indirizzo
L’indirizzo deve usare HTTPS sulla porta predefinita ed essere raggiungibile da internet. Gli indirizzi che puntano a una rete privata vengono rifiutati e i reindirizzamenti non vengono seguiti, quindi inserisci l’indirizzo finale. Deselezionare Invia i nuovi contatti sospende l’invio senza rimuovere l’indirizzo; i contatti ricevuti nel frattempo non vengono inviati in seguito, e i nuovi tentativi in attesa riprendono quando la riselezioni.
Invia evento di prova invia una volta un contatto di esempio, senza nuovi tentativi, e mostra il risultato in Invii recenti.
Cosa viene inviato
Ogni nuovo contatto viene inviato come JSON:
{
"id": "6c0a4f8e-…",
"event": "lead.created",
"createdAt": "2026-10-25T12:00:00Z",
"organization": { "id": "…", "name": "Northstar Studio" },
"demo": { "id": "…", "title": "Approve a release", "url": "https://demo-creator.com/demo/…" },
"lead": {
"id": "…",
"name": "Grace Hopper",
"email": "grace@example.com",
"screen": "start",
"language": "en"
}
}
screen vale start o end a seconda della schermata da cui è stato inviato il modulo, e language è la lingua della demo scelta da chi la guardava, oppure vuota. Gli eventi di prova hanno "event": "webhook.test", "demo": null e un contatto di esempio. Ogni richiesta contiene anche le intestazioni X-Demo-Creator-Event, X-Demo-Creator-Delivery (lo stesso valore di id) e X-Demo-Creator-Signature.
Gli eventi dei link personali, recipient.opened e recipient.completed, sono inviati una volta per link e contengono un oggetto recipient al posto di lead:
{
"event": "recipient.opened",
"recipient": {
"id": "…",
"name": "Grace Hopper",
"email": "grace@example.com",
"firstViewedAt": "2026-10-25T12:00:00Z",
"views": 1,
"completedAt": null
}
}
Verificare la firma
X-Demo-Creator-Signature ha questo aspetto: t=1792931200,v1=5f2b…. Calcola un HMAC-SHA256 del timestamp, di un punto e del corpo non modificato della richiesta, con il Segreto di firma come chiave, e confrontalo con v1 in tempo costante. Rifiuta le richieste con un timestamp più vecchio di cinque minuti.
import { createHmac, timingSafeEqual } from 'node:crypto';
function verify(rawBody, header, secret) {
const { t, v1 } = Object.fromEntries(header.split(',').map((part) => part.split('=')));
const expected = createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
return (
fresh &&
v1?.length === expected.length &&
timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
);
}
Rinnova il segreto firma subito le richieste con un nuovo segreto, quindi aggiorna il ricevitore subito dopo.
Invio e nuovi tentativi
Una risposta con stato 2xx conta come consegnata. Qualsiasi altro stato, nessuna risposta entro 10 secondi o nessuna connessione viene ritentato dopo 1 minuto, 5 minuti, 30 minuti, 2 ore e 6 ore; poi l’invio risulta non riuscito. Un nuovo tentativo dopo una risposta persa può ripetere un contatto: usa id per ignorare i duplicati.
Un contatto la cui demo viene spostata nel cestino prima dell’invio non viene inviato, e Rimuovi webhook annulla gli invii ancora in attesa. Sono elencati i 20 invii più recenti; gli invii conclusi vengono rimossi dopo 30 giorni.