Web Push API

La Web Push API e' lo standard W3C con cui i siti web possono inviare notifiche push ai browser, anche quando il sito non e' aperto in quel momento. Definisce l'interazione tra application server (backend), push service (Mozilla, Google FCM, Apple) e browser, inclusa la crittografia end-to-end secondo RFC 8291.

Cos'e' la Web Push API?

La Web Push API e' una specifica W3C aperta che definisce come un server applicativo consegna un messaggio push a un browser. Completa due standard correlati: la Push API (RFC 8030, descrive il protocollo tra application server e push service) e la Service Worker API (mostra il messaggio ricevuto nel browser).

A differenza dei servizi push proprietari come APNs di Apple o FCM di Google, la Web Push API e' vendor-neutral: ogni produttore di browser gestisce un proprio endpoint di push service che parla lo stesso protocollo. Gli application server non devono quindi distinguere tra Mozilla, Google o Microsoft: inviano all'URL endpoint che il browser ha restituito all'opt-in.

Flusso di una consegna push

  1. Subscription: il sito registra un Service Worker all'opt-in e chiama pushManager.subscribe(). Il browser genera un URL endpoint e due chiavi crittografiche (p256dh e auth) e li restituisce al sito.
  2. Salvataggio: il sito invia l'oggetto subscription all'application server, che lo associa a un record utente.
  3. Invio: quando l'azienda vuole inviare un messaggio push, l'application server cifra il payload con le due chiavi secondo RFC 8291 e lo invia all'URL endpoint.
  4. Consegna: il push service del produttore del browser inoltra il messaggio cifrato al browser dell'utente finale.
  5. Visualizzazione: il Service Worker riceve l'evento push, decifra il payload e chiama showNotification() - appare la notifica di sistema.

VAPID - identificazione del mittente

VAPID (Voluntary Application Server Identification, RFC 8292) e' il meccanismo con cui un application server si identifica presso il push service. Il server firma ogni richiesta con una coppia di chiavi ECDSA (P-256). La chiave pubblica viene passata al browser alla chiamata di subscription, la chiave privata rimane nel backend. In questo modo il push service puo' identificare il mittente e prevenire gli abusi.

VAPID e' obbligatorio in tutti i browser principali dal 2017. Chi costruisce implementazioni push proprie genera la coppia di chiavi una sola volta (ad esempio tramite la libreria web-push per Node.js o pywebpush per Python) e la usa per tutte le subscription.

Formato del payload

La Web Push API trasmette un payload cifrato arbitrario (tipicamente JSON). Il Service Worker decide come visualizzare il messaggio. Campi comuni:

{
  "title": "Ordine spedito",
  "body": "Il tuo pacco arrivera' domani.",
  "icon": "/icon-192.png",
  "badge": "/badge-72.png",
  "url": "/ordini/12345",
  "tag": "order-update"
}

Il payload e' limitato a pochi kilobyte (specifico per browser, di solito 4 KB). I contenuti grandi non vengono trasmessi nel payload, ma caricati al clic sulla notifica.

TTL e best practice

Ogni messaggio push ha un Time-To-Live (TTL, in secondi) che l'application server imposta nell'header HTTP. Se il destinatario e' offline, il push service tiene il messaggio pronto per il TTL indicato. Per contenuti urgenti (ad esempio codici 2FA) il TTL dovrebbe essere impostato su 60-300 secondi; per le campagne di riattivazione possono avere senso alcune ore.

Best practice per le PMI: TTL impostato di default a 24 ore, header urgent solo per messaggi davvero urgenti. Cosi' il quality rating presso il push service rimane buono e le consegne non vengono ritardate.

Web Push API in SendSeven

SendSeven usa la Web Push API per il canale browser push. Chiavi VAPID, gestione delle subscription, crittografia e controllo del TTL sono astratti nella piattaforma. La push viene inviata sia come campagna pianificata tramite Reach a un segmento, sia tramite chiamata diretta alla REST API del proprio sistema, che gestisce anche il timing. La browser push non e' un canale nel Flow Builder; i passaggi SMS o e-mail successivi si possono pero' orchestrare al suo interno.