Torna al blog Operazioni SMS

Scadenza e svuotamento delle code A2P SMS: come evitare consegne tardive

Una guida pratica per distinguere la scadenza della coda interna, l’expiry richiesto al provider e la validità funzionale del messaggio, con controlli per OTP, avvisi e svuotamenti verificabili.

Diagramma operativo del ciclo di vita degli SMS A2P e della scadenza delle code

Tre limiti distinti: utilità, coda interna ed expiry del provider

La scadenza degli SMS A2P non è un unico timer. È opportuno tenere separati tre controlli: la deadline funzionale, che determina fino a quando il contenuto è utile al destinatario; la policy di scadenza della coda interna o del broker; e il periodo di validità richiesto al provider o al centro servizi.

Il TP-Validity-Period definito da 3GPP indica per quanto tempo il centro servizi conserva il messaggio prima di completare la consegna. Non equivale al TTL della coda dell’applicazione. Inoltre, l’implementazione e l’ambito di un’opzione di expiry della piattaforma variano da un provider all’altro.

Per esempio, Twilio documenta un validity period per il tempo in cui il messaggio rimane nella sua coda di uscita. La documentazione avverte che, una volta inviato alla rete degli operatori, il messaggio potrebbe restare in coda ed essere consegnato in seguito. Questo parametro non va interpretato come una garanzia di consegna entro un orario limite.

  • Deadline funzionale: fino a quando avrebbe senso che il destinatario ricevesse questo messaggio?
  • TTL interno: per quanto tempo il broker può mantenerlo disponibile per l’elaborazione?
  • Validità del provider: quale fase copre il parametro documentato per quella connessione?
  • Conferma per iscritto il significato, i limiti e il comportamento di ogni parametro nella documentazione tecnica applicabile.
Tre limiti distinti: utilità, coda interna ed expiry del provider

Perché il ripristino di una route può liberare messaggi obsoleti

Quando una connessione ha capacità limitata, alcune piattaforme accodano le richieste per inviarle in un secondo momento. Se la route torna disponibile, questi messaggi possono riprendere il loro percorso. Un blocco, da solo, non rende il contenuto obsoleto né garantisce che il provider lo elimini.

Prima di inviare un elemento trattenuto, verifica la sua deadline funzionale. Se è già scaduta, non inviarlo di nuovo solo perché la connessione ha recuperato capacità. La scadenza del broker può essere utile, ma la sua applicazione dipende dal prodotto e dallo stato del messaggio. Per esempio, Azure Service Bus documenta particolarità per i messaggi scaduti e quelli già sottoposti a lock; non vanno estese ad altri broker.

  • Verifica la validità funzionale subito prima dell’invio, non soltanto al momento dell’accodamento.
  • Quando una route torna disponibile, esegui prima il controllo di scadenza e poi seleziona i messaggi idonei.
  • Misura e segnala l’età della coda: la latenza osservata non sostituisce una regola di scadenza.
  • Verifica come il tuo broker gestisce i messaggi scaduti, quelli bloccati e gli elementi dead-letter.
Perché il ripristino di una route può liberare messaggi obsoleti

Definisci policy per classe di traffico

Una durata unica non è adatta a tutti i casi. La regola deve derivare dall’utilità temporale del messaggio e dai requisiti applicabili, quindi essere tradotta in una deadline verificabile. Quando l’architettura lo consente, l’expiry del provider e la scadenza interna vanno configurati separatamente.

Per gli OTP, NIST SP 800-63B-4 stabilisce che un’autenticazione out-of-band deve essere considerata non valida se non viene completata entro 10 minuti e che il segreto deve essere accettato una sola volta. OWASP raccomanda inoltre un TTL breve, l’uso singolo, limiti ai tentativi e l’invalidazione dopo una verifica riuscita. Questo limite di autenticazione non è una durata universale per la coda né una raccomandazione per altre classi di messaggi.

Gli avvisi transazionali e i messaggi non urgenti richiedono regole specifiche. Definisci la scadenza in base all’operazione segnalata, alle aspettative dell’utente e agli obblighi applicabili. Se non puoi giustificare una durata precisa, non presentarla come uno standard: documenta il criterio e verifica il comportamento.

  • OTP: il sistema di autenticazione deve rifiutare il codice scaduto e impedirne il riutilizzo, anche se l’SMS arriva in ritardo.
  • Avvisi transazionali: definisci quale evento li rende irrilevanti e come evitare una notifica tardiva che contraddica lo stato corrente.
  • Messaggi non urgenti: stabilisci una finestra di validità coerente con il loro scopo; non ereditare automaticamente la configurazione degli OTP.
  • Per tutte le categorie: mantieni il consenso e la conformità applicabili e non reinviare messaggi promozionali al di fuori dell’autorizzazione prevista.

Progetta il ciclo di vita e gestisci con attenzione gli stati incerti

Modella il percorso con stati espliciti: in coda, idoneo, inviato al provider, accettato dall’operatore, scaduto, annullato e chiuso con esito incerto. I nomi esatti variano: attieniti al contratto della tua piattaforma e conserva la corrispondenza con i suoi stati.

L’accettazione di una richiesta non significa che l’SMS sia già stato consegnato. Nella documentazione di Twilio, per esempio, «sent» indica l’accettazione da parte dell’operatore upstream, mentre «delivered» dipende da una conferma successiva. Un DLR o callback è un segnale del sistema corrispondente, non una prova indipendente che una persona abbia ricevuto il messaggio né una garanzia universale di conferma del dispositivo.

Se non è disponibile un esito conclusivo, mantieni lo stato come incerto finché non arriva un evento successivo o la riconciliazione non viene chiusa secondo una policy documentata. Evita i tentativi automatici che potrebbero duplicare il messaggio senza averne valutato il rischio.

  • Memorizza la deadline funzionale insieme all’identificativo del messaggio e verificala a ogni transizione di elaborazione.
  • Distingui tra richiesta accettata, invio all’operatore upstream e consegna segnalata; non riunirli in un unico stato di «successo».
  • Definisci quale evento chiude un’operazione e come riconciliare i casi senza DLR o con stati contraddittori.
  • Proteggi gli OTP: non registrare i loro valori in chiaro nell’audit ordinario.

Cambiare route o svuotare la coda: come gestire i messaggi in transito

Uno svuotamento della coda interna può impedire l’elaborazione dei messaggi ancora sotto il controllo del tuo sistema, ma non si deve presumere che possa ritirare un SMS già passato alla rete. Le possibilità di annullamento dipendono dal provider e dallo stato: la documentazione di Twilio, per esempio, descrive l’annullamento di alcuni messaggi programmati prima dell’orario di invio; questo non definisce una procedura generale di annullamento dopo l’invio all’operatore.

Quando cambi route, separa gli elementi ancora nella tua coda da quelli già accettati dal provider. Per i primi, verifica la deadline e decidi se trattenerli, eliminarli o reindirizzarli secondo le regole documentate. Per i secondi, controlla gli stati e le ricevute, ma chiarisci il limite del controllo: il messaggio potrebbe continuare il suo percorso anche dopo lo svuotamento della coda locale.

Per uno svuotamento su larga scala, delimita l’ambito usando un identificativo, una classe di traffico, una route, un intervallo temporale o un altro criterio operativo verificabile. Se disponibile, usa una modalità di revisione preliminare ed evita di eliminare indiscriminatamente elementi con stato incerto.

  • Interrompi o limita l’invio prima di cambiare le regole, se il modello operativo lo consente.
  • Classifica i messaggi come ancora interni, consegnati al provider oppure con esito incerto.
  • Annulla da remoto solo se il provider documenta questa azione per lo stato specifico.
  • Non affermare che lo svuotamento impedirà la consegna dei messaggi già accettati dalla rete.

Rendi lo svuotamento verificabile e conciliabile

Un’operazione di svuotamento deve poter essere ricostruita: cosa è stato rimosso, perché, con quale ambito e chi ha autorizzato l’azione. Conserva le date e gli identificativi necessari a collegare la decisione locale agli stati del provider e alle ricevute successive.

L’audit non deve necessariamente memorizzare il corpo dell’SMS per essere utile. In particolare, evita di registrare gli OTP in chiaro. Se il broker offre la funzione dead-letter per i messaggi scaduti, può essere utile per la revisione e la riconciliazione, ma deve essere abilitata e configurata esplicitamente; il comportamento dipende dal broker.

  • Registra il motivo, l’ambito dello svuotamento, l’attore o processo autorizzato e le date.
  • Conserva gli identificativi di correlazione e lo stato precedente e successivo, limitando l’accesso.
  • Non includere abitualmente nei log contenuti sensibili o segreti di autenticazione.
  • Documenta la conservazione dei dati, le autorizzazioni per lo svuotamento e la procedura di riconciliazione dei messaggi scaduti o incerti.

Verifica ogni connessione e ogni fase prima di fare affidamento sulla scadenza

Un parametro con lo stesso nome può avere ambiti diversi a seconda del provider. Verifica la documentazione della connessione specifica ed esegui test controllati in un ambiente e con destinatari autorizzati. Non trasformare un singolo risultato in una garanzia valida per altri operatori, route o stati della rete.

Osserva separatamente la scadenza della coda interna, la richiesta di expiry al provider, gli stati di accettazione e le ricevute di consegna. Registra cosa accade ai messaggi in coda, inviati e con esito incerto. Ripeti i test dopo cambiamenti significativi della configurazione o della connessione, rispettando limiti e condizioni del provider.

  • Conferma le unità, l’intervallo consentito, il valore predefinito e la fase coperta da ogni parametro.
  • Testa i messaggi che scadono prima dell’invio e quelli il cui stato cambia durante il test.
  • Confronta lo stato locale con callback o ricevute e documenta i casi senza conferma conclusiva.
  • Esamina le eccezioni del broker e del provider; non generalizzare i risultati di una piattaforma.

Lista di controllo operativa

Prima di attivare o modificare una policy, verifica che il team sappia identificare i messaggi scaduti, distinguerli da quelli già in transito e spiegare quali evidenze riceve da ogni fase. La revisione deve includere anche autorizzazioni, avvisi e comunicazione tra operations, engineering e prodotto.

Ogni classe di traffico ha un criterio funzionale di scadenza documentato.

Il consumer verifica la deadline prima dell’invio, anche dopo il ripristino di una route.

Il TTL del broker e l’expiry del provider sono documentati come controlli separati.

Gli stati di accettazione, invio, consegna segnalata e incertezza non vengono confusi.

  • Lo svuotamento ha un ambito, un motivo, un’autorizzazione, date e identificativi per la riconciliazione.
  • Sono attivi avvisi sull’età della coda, sugli accumuli, sulle scadenze e sull’assenza di conferme, con soglie definite dal team.
  • Le modifiche operative vengono comunicate ai team interessati e prevedono una procedura di rollback.
FAQ

Domande frequenti

L’expiry richiesto al provider garantisce che l’SMS non arrivi in ritardo?

No. L’ambito dipende dal provider. Può limitare soltanto il tempo nella coda della sua piattaforma; dopo l’accettazione del messaggio, la rete mobile potrebbe ancora mantenerlo in coda e consegnarlo più tardi.

Il TTL della mia coda interna equivale al periodo di validità 3GPP?

No. Il TTL interno regola la coda dell’applicazione o del broker. Il TP-Validity-Period di 3GPP si riferisce al periodo durante il quale il centro servizi conserva l’SMS prima di completare la consegna.

Posso annullare un messaggio dopo che l’operatore lo ha accettato?

Non darlo per scontato. L’annullamento dipende dalla piattaforma e dallo stato; verifica la documentazione del provider. Uno svuotamento locale non dimostra che un messaggio già consegnato alla rete sia stato ritirato.

Quale scadenza devo usare per gli OTP?

NIST SP 800-63B-4 stabilisce che un’autenticazione out-of-band deve essere considerata non valida se non viene completata entro 10 minuti e che il segreto deve essere utilizzato una sola volta. La regola della coda e quella del provider sono controlli distinti; applica anche i requisiti di sicurezza e conformità pertinenti.

Uno stato «sent» o un DLR dimostra che il destinatario ha letto l’SMS?

No. Gli stati dipendono dalla piattaforma e dalle ricevute disponibili. «Sent» può indicare l’accettazione da parte dell’operatore upstream, mentre uno stato di consegna è una successiva conferma tecnica; nessuno dei due dimostra da solo che una persona abbia letto il messaggio.

Fonti consultate

  1. 3GPP TS 23.040 Release 18, vía ETSIETSI / 3GPP
  2. Messages resource APITwilio
  3. Messaging Services: validity periodTwilio
  4. Outbound Message Status in Status CallbacksTwilio
  5. Error 30036: Validity Period ExpiredTwilio
  6. Message expiration and TTL in Azure Service BusMicrosoft Learn
  7. Enable dead lettering on message expirationMicrosoft Learn
  8. NIST SP 800-63B-4, sección sobre autenticadores fuera de bandaNIST
  9. Multifactor Authentication Cheat SheetOWASP