Email: invia con tracking

action_email_send_tracked · action · Email · Disponibile · v1.0.0

Descrizione

Estende action_send_email con tracking comportamentale GDPR-safe: ogni email in uscita viene arricchita con un pixel di apertura 1x1 PNG trasparente servito da un endpoint HTTP del tenant (URL univoco per messaggio, no cookie) e tutti i link cliccabili nel body HTML vengono riscritti in URL di redirect tracciato /email-tracking/r/<token>?u=<dest> che logga il click e poi 302 verso la destinazione originale. Apertura e click finiscono nella tabella interactions del database tenant con timestamp, IP truncato (ultimi 64 bit zerati per GDPR pseudonimizzazione), user-agent normalizzato (categoria browser/email-client invece di string completa), e contesto del workflow (workflow_id, run_id, recipient_email_hash). Il dataset è immediatamente pronto come signal di lead-scoring: chi apre più volte = engagement alto; chi clicca su un link specifico di tariffario = intent commerciale forte; chi non apre dopo 7 giorni = candidato follow-up. Sicurezza: token HMAC-SHA256 firmato con chiave del tenant — impossibile per terzi forgiare apri/click fittizi anche con accesso all'URL; URL di click validati prima del redirect contro una whitelist di host derivata dal body originale (defense-in-depth contro open-redirect injection da workflow malformato); bot-UA noti (Googlebot, Slack Linkbot, Twitter Cardbot, OutlookOWASafelink, Microsoft Safelinks, Mimecast, Proofpoint) filtrati lato endpoint per evitare di contare "aperture" automatiche di security gateway nelle metriche reali. GDPR (artt. 6 + 7 e-Privacy): se requireConsent=true (default) e l'input upstream non porta esplicitamente consentVerified=true (bool), il nodo RIFIUTA l'invio con errore "MISSING_TRACKING_CONSENT" prevenendo invio inadvertente che esporrebbe a sanzioni Garante; consentEvidence (es. "form_signup_2026-01-15") può essere passato per audit log GDPR. Per email transazionali (conferma ordine, fattura, password reset) il consenso non è richiesto per legge (Considerando 47) ma il tracking sì — disable requireConsent solo per communications transazionali; per marketing newsletter MAI farlo. Output: { ok, messageId, trackingIds: { open, click }, pixelUrl, openTokens, clickTokens, recipients, consentEvidence }. Use case: studio commercialista invia preventivo personalizzato a 30 prospect — il dashboard mostra chi ha aperto due volte e cliccato il link al pacchetto, candidati ideali per follow-up telefonico nelle 24h successive; SaaS B2B invia drip campaign di onboarding e identifica utenti "dormienti" (zero apertura dopo email 3 di 5) per intervento sales; e-commerce dopo richiesta info → tracking apertura conferma + click sul link prodotto, dato che alimenta abandoned-cart workflow successivo; servizio professionale invia ricordo scadenza appuntamento, alerting se non aperto entro 4h dalla data prenotata (probabile no-show).

⚙️ Parametri di configurazione

Campi mostrati nell’editor quando si configura il nodo. Generati direttamente dal NodeDefconfigFields.

CampoTipoRequiredDefaultDescrizione
systemAccountId
Account email di sistema
email-account-pickernoScegli un account configurato in Settings → Email accounts (con Gmail OAuth o SMTP). Se lasciato vuoto puoi configurare host/porta/username/password qui sotto, ma e\` sconsigliato — gli account di sistema gestiscono refresh OAuth e cifratura password at-rest.
host
SMTP host (override)
stringno
smtp.gmail.com
Manuale: solo se non usi un account di sistema. Tipico: smtp.gmail.com / smtp.office365.com.
port
SMTP porta
numberno587587 = STARTTLS (default moderno). 465 = TLS implicito. 25 = legacy non cifrato.
security
Sicurezza connessione
enum
starttlstlsnone
nostarttlsstarttls = porta 587 (default). tls = porta 465. none = solo dev.
username
SMTP username
stringnoPer Gmail: l\'indirizzo email completo. Per Office365: idem.
password
SMTP password / app password
string (encrypted)noPer Gmail: usa una App Password (Account Google → Sicurezza). Per Office365: la password account.
from
Mittente (From)
stringno
[email protected]
Indirizzo "From" mostrato al destinatario. Se vuoto e usi un account di sistema, eredita il fromAddress di quell\'account.
to
Destinatari (To)
stringsi
[email protected], [email protected]
Uno o più indirizzi separati da virgola. Il pixel di apertura è UNICO per invio — non puoi distinguere chi ha aperto se metti 5 destinatari nello stesso To. Per tracking individuale: invia 1 mail per lead (vedi action_email_send_tracked_batch).
cc
Cc
stringnoCopia conoscenza. Vede tutti i destinatari in chiaro.
bcc
Bcc
stringnoCopia nascosta. Tipicamente per archiviare la tua mail su un indirizzo aziendale.
replyTo
Reply-To
stringno
[email protected]
Indirizzo dove arrivano le risposte se diverso dal From. Tipicamente lasciato vuoto.
subject
Oggetto
stringsi
Redivivo Gin per la tua enoteca · Limited Edition Mutabilis
Massimo 998 caratteri (limite RFC). I caratteri non-ASCII vengono codificati automaticamente (MIME encoded-word). Supporta interpolazione `{{lead.name}}`.
bodyType
Tipo corpo
enum
htmltext
nohtmlHTML = formattazione + immagini + tracking pixel. Text = solo testo, pixel non iniettato (text/plain non supporta <img>). Per email commerciali usa SEMPRE html.
body
Corpo email
string (multiline)si
<p>Gentile {{lead.name}}, ...</p>
HTML completo o frammento (senza <html>/<body> — vengono aggiunti automaticamente). Tutti i link <a href> vengono riscritti per tracking se trackClicks=on. Supporta {{interpolazione}} dalle variabili upstream e dai campi lead.
leadId
Lead ID
stringsi
{{$json.lead.id}}
ID del lead nel database. Tipicamente arriva da un nodo db_query upstream. OBBLIGATORIO: senza lead id non si puo\` tracciare chi apre/clicca.
campaignId
Campagna ID
stringsi
redivivo-2026-w23-enoteche-lazio
Stringa libera che raggruppa tutti gli invii della stessa campagna. Usata per gli analytics "open-rate per campagna". Convenzione consigliata: <brand>-<anno>-<week>-<segmento>-<area>.
sendId
Send ID (opzionale)
stringno
lasciare vuoto = auto-generato
Identifica univocamente questo singolo invio. Se vuoto viene generato un uuid. Compilalo manualmente quando vuoi che un retry del workflow NON crei un secondo invio (es. usa `{{leadId}}-{{campaignId}}` per idempotenza forte).
trackOpens
Traccia aperture (pixel)
booleannotrueOn: inietta un img 1x1 GIF trasparente che chiama il runtime quando il client carica l\'email. Spegni solo per mailing legali / molto formali o per evitare il bollo "contenuto bloccato" su client conservatori (Outlook desktop).
trackClicks
Traccia click (URL rewrite)
booleannotrueOn: ogni <a href> viene riscritto in un redirect tracciato. Spegni quando il body contiene link sensibili (es. password reset) che NON vuoi loggare.
trackingBaseUrl
URL base tracking
stringno
https://fabio-musicco.app.automazionezeli.com
Dominio del tuo runtime FlowForge. Il pixel diventa <baseUrl>/api/track/open/<token> e i click <baseUrl>/api/track/click/<token>?u=<dest>. Se vuoto, eredita da FLOWFORGE_PUBLIC_BASE_URL nel container (preimpostato al provision).
clickWhitelist
Domini permessi nei link
chip-listno
redivivogin.it, automazionezeli.com
Lista di domini (suffix-match) per cui i link vengono riscritti col tracking. Tutti gli altri restano LINK DIRETTI (senza tracking). Difesa anti open-redirect: qualcuno che inietta un link nel template non puo\` usare il TUO dominio per redirigere a URL malevoli. Lascia vuoto per usare solo il dominio del trackingBaseUrl. Metti "*" (sconsigliato) per riscrivere QUALSIASI link.
requireConsent
Richiede consenso GDPR upstream
booleannotrueOn (default): l\'invio fallisce se l\'input upstream non ha `consentVerified=true`. Spegni SOLO per email transazionali non commerciali (ricevute ordine, recupero password, notifiche operative): per quelle il consenso non e\` richiesto ex art.7 e-Privacy.
sampleRate
Frazione invio (0–1)
numberno1A/B test ratio. 1 = invia a tutti (default). 0.5 = al 50%. 0.1 = al 10% (test pilot). Implementato dal workflow chiamante.
timeoutMs
Timeout SMTP (ms)
numberno30000Quando il server SMTP non risponde entro N ms, il nodo fallisce. 30s di default coprono il 99esimo percentile dei mail server seri.

💡 Esempio configurazione

Snippet JSON del nodo come compare nel workflow. I valori sono derivati daidefaultValue e dai parametri required.

{
  "id": "node-action_email_send_tracked-1",
  "defId": "action_email_send_tracked",
  "label": "Email: invia con tracking",
  "config": {
    "port": 587,
    "security": "starttls",
    "to": "[email protected], [email protected]",
    "subject": "Redivivo Gin per la tua enoteca · Limited Edition Mutabilis",
    "bodyType": "html",
    "body": "<p>Gentile {{lead.name}}, ...</p>",
    "leadId": "{{$json.lead.id}}",
    "campaignId": "redivivo-2026-w23-enoteche-lazio",
    "trackOpens": true,
    "trackClicks": true,
    "requireConsent": true,
    "sampleRate": 1,
    "timeoutMs": 30000
  }
}

🔗 Nodi correlati nella stessa categoria

Pronto a usare Email: invia con tracking?

Disponibile da subito in tutti i piani FlowForge. Provalo gratis senza carta di credito.

Inizia gratisSfoglia tutti i nodi