Guida pratica
Configura un webhook
Crea un endpoint webhook, scegli i suoi eventi, aggiungi filtri sul payload, invia un evento di test, attiva o disattiva il webhook e ruota il secret.
Questa guida crea un webhook, lo limita agli eventi che ti servono e controlla che il tuo endpoint riceva richieste firmate. Puoi fare tutto nel pannello o con l’API dei webhook.
Prima di iniziare
- Un URL pubblico che accetti richieste
POST. HTTPS è fortemente consigliato. Gli URL sulocalhosto su intervalli di IP privati vengono rifiutati; per lo sviluppo in locale, usa un tunnel come ngrok o Cloudflare Tunnel. - Un endpoint che conservi il corpo grezzo della richiesta, così da poter verificare la firma.
- Per l’API, una chiave con Full Access.
- Uno slot libero per un webhook. Pay as you go include 3 endpoint, Pro 10, Business e Custom 100.
Crea il webhook
-
Apri la pagina Webhooks. Vai a Email APIWebhooks e seleziona Add webhook.
-
Inserisci un nome e un URL. Il nome deve essere unico nel workspace, ad esempio
Production events. L’URL è il tuo endpoint, ad esempiohttps://acme.com/webhooks/emailit. Seleziona Create. -
Copia il secret. La finestra mostra il secret del webhook, che inizia con
whsec_, insieme all’avviso «You can see the webhook secret only once. Store it safely.» Copialo nell’ambiente della tua app, ad esempio comeEMAILIT_WEBHOOK_SECRET, e seleziona Done.
Un webhook creato nel pannello sottoscrive tutti i tipi di evento. Si apre la scheda Settings del webhook, così puoi restringere la selezione.
Chiama Crea un webhook. Elenca i tipi di evento in events, oppure imposta all_events su true. La risposta 201 include il secret.
curl https://api.emailit.com/v2/webhooks \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Production events",
"url": "https://acme.com/webhooks/emailit",
"events": ["email.delivered", "email.bounced", "email.complained"]
}'A differenza del pannello, l’API usa come valori predefiniti all_events: false e una lista events vuota, quindi un webhook creato senza nessuno dei due non riceve nulla. Un nome duplicato restituisce 409; se raggiungi il limite di endpoint del piano, la risposta è 422 con usage.used e usage.limit.
Scegli gli eventi
Un webhook riceve tutti i tipi di evento oppure solo quelli che selezioni.
Nella scheda Settings del webhook, disattiva All events, poi seleziona i tipi nel riquadro Events. Gli eventi sono raggruppati per risorsa (Emails, Domains, Audiences, Subscribers, Contacts, Templates, Suppressions, Email Verifications, Email Verification Lists) e ogni gruppo ha una casella Select all. Seleziona Save.
Il selettore non elenca tutti i tipi che Emailit invia. email.canceled, email.held, email.unsubscribed, email.resubscribed, subscriber.resubscribed e gli eventi campaign.* arrivano ai webhook che hanno All events attivo, oppure puoi aggiungerli alla lista con l’API. Il gruppo Deprecated contiene vecchi nomi di eventi che non vengono più inviati. Vedi Tipi di evento.
Chiama Aggiorna un webhook. events sostituisce l’intera lista. Se imposti all_events su true, la lista viene svuotata.
curl -X POST https://api.emailit.com/v2/webhooks/wh_2xGk8Hd3RvN6qT1mWsB9cL4pZ7e \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"all_events": false, "events": ["email.received", "email.held", "email.canceled"]}'Filtra gli eventi per payload
Pay as you goProBusinessCustomUn filtro sul payload consegna un evento solo quando i suoi dati corrispondono alle tue regole. I filtri si applicano in aggiunta alla selezione degli eventi: un evento deve essere sottoscritto e corrispondere al filtro.
Usalo per dividere il traffico tra più endpoint, ad esempio un webhook per ogni linea di prodotto, o per scartare eventi che altrimenti ignoreresti nel codice.
- Modalità di corrispondenza: All rules match (
all) oppure Any rule matches (any). - Regole: fino a 25. Ogni regola ha un campo, un operatore e un valore.
- Campo: un percorso con punti all’interno del
data.objectdell’evento, ad esempioto,status,meta.plano, per gli eventi di clic,link.url. Il prefissopayload.è facoltativo, quindipayload.fromefromsono equivalenti. - I confronti distinguono tra maiuscole e minuscole e confrontano i valori come testo, tranne
greater_thaneless_than, che confrontano numeri.
| Operatore | Corrisponde quando il campo |
|---|---|
equals / not_equals |
È / non è esattamente il valore. |
contains / not_contains |
Contiene / non contiene il valore. |
starts_with / ends_with |
Inizia / finisce con il valore. |
greater_than / less_than |
È un numero maggiore / minore del valore. |
is_set / is_not_set |
Ha un valore non vuoto / manca o è vuoto. Non serve un valore. |
in / not_in |
È uguale / non è uguale a uno dei valori di un array. Invia l’array con l’API, come nell’esempio qui sotto. |
Nella scheda Settings del webhook, trova il riquadro Filter. Scegli la modalità di corrispondenza, aggiungi regole con campo, operatore e valore, e seleziona Save. Lascia vuote le regole per consegnare tutti gli eventi sottoscritti. Con Pay as you go, il riquadro è bloccato e mostra Upgrade.
Invia filter con Crea un webhook o Aggiorna un webhook. Impostalo su null per rimuoverlo. Con Pay as you go, un filtro restituisce 403 con "error": "plan_required".
curl -X POST https://api.emailit.com/v2/webhooks/wh_2xGk8Hd3RvN6qT1mWsB9cL4pZ7e \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filter": {
"match": "all",
"rules": [
{ "field": "to", "operator": "ends_with", "value": "@acme.com" },
{ "field": "meta.plan", "operator": "in", "value": ["pro", "business"] }
]
}
}'Altri esempi:
| Obiettivo | Regola |
|---|---|
| Solo la posta ricevuta su un indirizzo | to equals support@inbound.acme.com |
| Solo un dominio mittente | from ends_with @billing.acme.com |
| Solo le email che hai etichettato con i metadati | meta.source equals checkout |
| Solo i clic sulla tua pagina dei prezzi | link.url starts_with https://acme.com/pricing |
| Solo le email che contengono un ID cliente | meta.customer_id is_set |
Se un workspace passa a Pay as you go, i filtri esistenti restano salvati ma vengono ignorati, e tutti gli eventi sottoscritti vengono consegnati.
Invia un evento di test
Un test invia subito un evento di esempio al tuo URL, firmato con il secret attuale del webhook. Gli eventi sottoscritti e i filtri vengono ignorati, la richiesta non viene ritentata e non compare nella scheda Requests. Ogni webhook consente 5 test al minuto.
Nella pagina del webhook, apri il menu delle azioni (…) e seleziona Send test. Scegli un tipo di evento e seleziona Send test. La finestra mostra «Your endpoint returned 200» (o lo stato restituito dal tuo endpoint) e il corpo della risposta. «Could not reach the endpoint» significa che la richiesta non ha ricevuto una risposta HTTP, ad esempio per un errore DNS, un timeout o un reindirizzamento.
Chiama Invia un evento di test con un tipo di evento qualsiasi.
curl https://api.emailit.com/v2/webhooks/wh_2xGk8Hd3RvN6qT1mWsB9cL4pZ7e/test \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type": "email.delivered"}'La risposta contiene ok, status_code, body (la risposta del tuo endpoint, fino a 2000 caratteri), type e il payload inviato.
Gli eventi di test usano dati di esempio, con un event_id che inizia con evt_test_, e la loro struttura può differire leggermente da quella degli eventi reali. Scrivi l’handler basandoti sul riferimento eventi e confermalo con un invio reale.
Attiva o disattiva un webhook
Disattiva un webhook per interrompere le consegne senza perderne le impostazioni, ad esempio durante una manutenzione.
- Pannello: apri il menu delle azioni e seleziona Disable webhook o Enable webhook. La pagina del webhook mostra lo stato Enabled o Disabled.
- API: chiama Aggiorna un webhook con
{"enabled": false}o{"enabled": true}.
Mentre un webhook è disattivato, i nuovi eventi non vengono messi in coda per quel webhook e le richieste già in attesa di un nuovo tentativo vengono messe in pausa. Gli eventi che si verificano mentre è disattivato non vengono consegnati in seguito; se ti servono, leggili con l’API degli eventi. Emailit disattiva anche automaticamente i webhook dopo 3 giorni di errori; vedi Nuovi tentativi ed errori.
Se elimini un webhook, tutti i suoi eventi in attesa vengono scartati.
Ruota il secret
Ruota il secret se potrebbe essere trapelato, o come normale misura di sicurezza.
- Pannello: apri il menu delle azioni, seleziona Webhook secret, poi Reset. Il nuovo secret viene mostrato una sola volta.
- API: chiama Ruota il secret di firma. La risposta contiene il nuovo
secret. Anche Recupera un webhook restituisce il secret attuale.
Il vecchio secret smette subito di funzionare e ogni richiesta successiva, compresi i nuovi tentativi di eventi precedenti, viene firmata con quello nuovo. Per ruotarlo senza rifiutare richieste, fai accettare al tuo endpoint entrambi i secret per qualche minuto, reimposta il secret, distribuisci il nuovo valore, poi rimuovi quello vecchio.
Verifica che funzioni
- Invia un evento di test e conferma che il tuo endpoint restituisce
2xx. - Invia un’email reale, o provoca l’evento che hai sottoscritto.
- Nella scheda Requests del webhook, la richiesta risulta Delivered. L’orario Last used del webhook si aggiorna.