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).
