Torna al blog Qualità e fiducia

Fallback A2P SMS: quando cambiare instradamento e quando fermare il traffico per indagare

Una policy di fallback A2P SMS deve proteggere i messaggi legittimi senza nascondere i degradi né moltiplicare i duplicati. Questa guida illustra segnali, limiti, stati, evidenze e un runbook operativo per cambiare instradamento in modo controllato.

Diagramma operativo di fallback A2P SMS tra instradamento primario, osservazione, contenimento e indagine

Il fallback A2P SMS è una misura di contenimento, non una garanzia di consegna

Il fallback A2P SMS consiste nel deviare in modo controllato una parte o tutto il traffico da un instradamento primario a uno alternativo quando vi sono segnali sufficienti di degrado. Il suo scopo è ridurre l'impatto operativo mentre si verifica la causa del problema. Non trasforma l'SMS in un canale con garanzia di consegna né elimina la necessità di indagare la qualità dell'instradamento originale.

In SMPP, la risposta a submit_sm conferma il risultato di quella richiesta di protocollo e normalmente restituisce un message_id assegnato dall'SMSC. Non conferma che il messaggio sia arrivato al terminale. Per conoscere il risultato successivo, l'ESME deve richiedere un SMSC Delivery Receipt o consultare lo stato quando tale operazione è disponibile.

Per questo, una policy di fallback matura deve decidere separatamente due aspetti: quando è ragionevole provare un altro instradamento e quando il comportamento osservato richiede di interrompere o limitare il traffico per preservare le evidenze ed evitare ulteriori danni.

  • Considera il fallback un'azione reversibile e circoscritta.
  • Mantieni attiva l'indagine anche se il traffico alternativo sembra funzionare.
  • Non usare l'accettazione di submit_sm come prova della consegna al destinatario.
  • Non interpretare il ripristino di una sessione SMPP come ripristino completo dell'instradamento.
Il fallback A2P SMS è una misura di contenimento, non una garanzia di consegna

Cosa può andare storto con un fallback progettato male

Un cambio automatico di instradamento può proteggere un'operazione critica, ma può anche amplificare un incidente. Il caso più delicato si verifica quando il messaggio originale è stato accettato dall'SMSC, rimane in corso o il suo stato finale arriva in ritardo, e il sistema reinvia lo stesso contenuto attraverso un secondo instradamento. Il destinatario può ricevere due messaggi, due codici o comunicazioni contraddittorie.

Esiste anche un rischio diagnostico. Se il sistema devia tutto il traffico troppo presto, il degrado dell'instradamento primario può essere nascosto dai risultati aggregati. Senza coorti di controllo, registri correlabili e limiti di portata, è difficile distinguere un guasto di connettività, una validazione errata della destinazione, una limitazione di capacità o un problema localizzato in una destinazione o presso un operatore.

Anche costi e tracciabilità sono importanti. Ogni tentativo deve poter essere collegato a un'unica intenzione di invio e all'instradamento utilizzato. Senza questa correlazione, non è possibile stabilire se vi siano stati un nuovo tentativo, un duplicato, una scadenza, un rifiuto o una consegna tardiva del primo tentativo.

  • Duplicati causati dal reinvio prima di conoscere il risultato del tentativo iniziale.
  • Costi non controllati dovuti alla moltiplicazione dei tentativi o all'attivazione di un fallback globale.
  • Perdita di evidenze quando si mescolano risultati di instradamenti diversi.
  • Degradi persistenti nascosti dalla deviazione del traffico senza isolare la causa.
  • Decisioni errate quando tutte le destinazioni vengono aggregate in un unico indicatore.
Cosa può andare storto con un fallback progettato male

Classifica il traffico prima di definire i tentativi

La stessa policy non è adatta a tutti i messaggi legittimi. La sensibilità al tempo, al contesto e alla duplicazione deve far parte della decisione. Un OTP può perdere rapidamente valore e un secondo invio può confondere l'utente o invalidare un flusso di autenticazione. Una notifica transazionale urgente può giustificare un instradamento alternativo limitato, a condizione che l'applicazione controlli l'idempotenza dell'evento di business. Una campagna di marketing con consenso consente in genere maggiore prudenza: è preferibile attendere, riprogrammare o indagare piuttosto che duplicare le comunicazioni.

La classificazione deve esistere prima dell'incidente, non durante. Ogni intenzione di invio dovrebbe includere almeno un tipo di messaggio, un periodo di validità, una policy di nuovo tentativo e una regola esplicita che stabilisca se ammette o meno un secondo instradamento.

  • OTP: finestra di utilità breve; evita reinvii indiscriminati e controlla il ciclo di vita del codice.
  • Transazionale urgente: applica il fallback solo se l'evento di business ammette idempotenza e il rischio di duplicato è definito.
  • Notifica non critica: privilegia osservazione, riprogrammazione o invio differito rispetto al nuovo tentativo immediato.
  • Marketing con consenso: non usare l'urgenza come giustificazione per moltiplicare i messaggi; rispetta la policy di contatto applicabile.

Segnali che possono giustificare un cambio di instradamento

I segnali devono essere valutati per livelli. Gli errori di protocollo immediati possono richiedere una reazione diversa rispetto ai risultati finali di consegna. SMPP definisce command_status per comunicare l'esito positivo o negativo di una richiesta. Tra i possibili errori vi sono errori di sistema, limiti di messaggi superati e validazioni dell'indirizzamento. Un errore di TON o NPI della destinazione non è, di per sé, una prova che l'instradamento sia degradato: può indicare un problema di normalizzazione o di configurazione dell'invio.

La disponibilità della sessione deve inoltre essere distinta dalle prestazioni di consegna. Un bind può essere attivo e, tuttavia, l'instradamento può presentare problemi in submit_sm, nella ricezione dei DLR o nell'elaborazione successiva del messaggio. Allo stesso modo, il recupero di una sessione non dimostra che i risultati finali siano tornati a livelli operativi accettabili.

L'assenza di DLR può essere un segnale rilevante solo se interpretata rispetto alla configurazione delle ricevute, alla finestra di osservazione, al tipo di messaggio e al comportamento storico noto di quella integrazione. Le notifiche intermedie non forniscono una base portabile per un fallback globale: il loro supporto è specifico dell'implementazione dell'SMSC.

  • Errori di protocollo ripetuti che interessano submit_sm o i comandi necessari per operare.
  • Throttling o limiti di capacità che richiedono di ridurre il ritmo prima di aumentare gli instradamenti.
  • Errori di indirizzo, TON o NPI che devono essere isolati come possibile problema di validazione.
  • Perdita o instabilità della sessione, distinta dai risultati di invio e consegna.
  • Degrado osservato degli stati finali o della latenza, segmentato per destinazione e instradamento.
  • Assenza anomala di DLR, dopo aver verificato che siano stati richiesti e che l'integrazione li elabori correttamente.

Non confondere gli stati SMPP con una ricezione indipendente sul terminale

La nomenclatura degli stati deve essere gestita con precisione. ENROUTE significa che il messaggio è in corso; non è una consegna. DELIVERED è uno stato distinto all'interno di SMPP. Anche ACCEPTED non deve essere interpretato come ricezione sul terminale: la specifica lo descrive come un messaggio accettato dopo essere stato letto manualmente per conto dell'abbonato dal servizio clienti.

Un DLR è utile per operare e correlare eventi, ma non deve essere trattato come una prova indipendente e uniforme presso tutti i fornitori. SMPP consente di inserire le informazioni di un delivery receipt in short_message con un formato specifico del fornitore SMSC. Anche i codici di errore possono dipendere dalla rete o dall'SMSC. La normalizzazione interna deve sempre preservare il valore originale insieme a una classificazione operativa documentata.

La conclusione pratica è semplice: non attivare un reinvio solo perché un messaggio è ancora ENROUTE, perché il DLR non è arrivato entro una finestra arbitraria o perché un fornitore usa un'etichetta testuale che sembra definitiva. Usa regole basate su contesto, periodo di validità, modello dell'incidente e rischio di duplicato.

  • submit_sm_resp: conferma la risposta al submit, non la consegna finale.
  • ENROUTE: stato in corso; non attivare un reinvio in base a questo stato isolato.
  • DELIVERED: stato di consegna riportato dall'ecosistema SMS, non una verifica indipendente della lettura umana.
  • ACCEPTED: non equivale alla ricezione sul terminale.
  • EXPIRED, UNDELIVERABLE, REJECTED e UNKNOWN: devono essere conservati come esiti distinti per analisi e decisioni.

Progetta soglie segmentate, non un unico interruttore globale

Una soglia globale mescola popolazioni che possono comportarsi in modo diverso. La policy deve segmentare, come minimo, per destinazione normalizzata secondo il piano di numerazione applicabile. Nello scambio SMPP, destination_addr, TON e NPI fanno parte del contesto tecnico che è opportuno registrare e validare. Quando la telemetria disponibile lo consente, aggiungi instradamento, tipo di messaggio, mittente, fascia oraria e classe di errore.

Le soglie devono combinare volume minimo e finestra temporale. Una piccola variazione con poche osservazioni non dovrebbe produrre un cambiamento massivo. Allo stesso modo, un degrado concentrato in una destinazione non deve giustificare la deviazione di Paesi o destinazioni non coinvolti. Definisci in anticipo quale combinazione di segnali genera osservazione, fallback limitato, contenimento o indagine.

Non è prudente fissare valori universali di percentuale, minuti o numero di tentativi senza conoscere il comportamento contrattuale, tecnico e operativo di ogni integrazione. La soglia corretta è quella che può essere spiegata, testata e rivista con i dati disponibili.

  • Richiedi un numero minimo di osservazioni prima di valutare un degrado aggregato.
  • Misura in finestre temporali definite e conserva l'orario di ogni evento.
  • Segmenta per destinazione, instradamento, tipo di messaggio e, quando rilevante, mittente e classe di errore.
  • Separa gli errori di validazione della destinazione dagli indicatori di qualità dell'instradamento.
  • Documenta il motivo esatto che attiva ogni transizione di stato.

Definisci una macchina a stati operativa

Una policy di fallback deve poter essere espressa come una macchina a stati che un operatore possa sottoporre ad audit. Questo riduce le decisioni ambigue ed evita che un'automazione passi direttamente da un avviso isolato a una deviazione massiva. La macchina a stati non sostituisce gli stati SMPP; organizza la risposta operativa ai segnali di protocollo, disponibilità e risultati osservati.

Un modello pratico parte dall'instradamento primario in condizioni normali, passa all'osservazione quando compaiono segnali iniziali, usa un fallback limitato quando vi sono evidenze sufficienti e mantiene una fase esplicita di contenimento e indagine per gli incidenti persistenti. Il recupero richiede una convalida graduale, non il solo ritorno della connettività.

  • Instradamento primario: traffico normale e monitoraggio segmentato.
  • Osservazione: avviso aperto, validazione dei dati, nessuna deviazione o portata minima di test.
  • Fallback limitato: deviazione di una coorte definita, con budget di tentativi e controlli dei duplicati.
  • Contenimento: riduzione, pausa o isolamento del traffico interessato quando il rischio supera il beneficio del reinvio.
  • Indagine: analisi di correlazioni, configurazione, errori e modifiche recenti.
  • Recupero: ritorno graduale all'instradamento primario dopo criteri verificabili di stabilità.

Controlli contro duplicati e nuovi tentativi privi di contesto

Il controllo principale contro i duplicati consiste nel separare l'intenzione di business dal tentativo tecnico. Assegna un identificatore interno stabile a ogni intenzione di invio e collega ogni tentativo all'instradamento, al momento, al contenuto applicabile e al message_id restituito da ciascun SMSC. SMPP prevede anche user_message_reference come riferimento assegnato dall'ESME, ma la deduplicazione tra instradamenti deve essere risolta nella logica dell'applicazione, non presunta sulla base di un singolo campo di protocollo.

Prima di avviare il fallback, verifica se il primo tentativo abbia un risultato finale noto, se rientri ancora nel suo periodo di validità e se un secondo invio avrebbe senso per l'utente. La finestra di attesa deve essere legata alla validità del messaggio. SMPP consente di indicare validity_period e prevede che l'SMSC scarti il messaggio alla scadenza se non è stato consegnato.

La funzione replace_if_present_flag non risolve la deduplicazione universale. Richiede soltanto di sostituire un messaggio in attesa e dipende dalla corrispondenza di source address, destination address e service_type. Non si deve presumere che funzioni tra fornitori, SMSC o instradamenti diversi.

  • Usa un ID interno per intenzione di invio e un ID per tentativo tecnico.
  • Conserva il message_id di ogni SMSC senza sostituirlo con un identificatore generico.
  • Applica l'idempotenza all'evento di business, non solo al trasporto SMS.
  • Definisci una finestra di attesa prima di considerare un secondo tentativo.
  • Non reinviare automaticamente messaggi il cui contenuto possa essere non valido, contraddittorio o sensibile al contesto.
  • Non considerare replace_if_present_flag un meccanismo di deduplicazione tra instradamenti.
FAQ

Domande frequenti

Quando dovrebbe attivarsi un fallback A2P SMS?

Dovrebbe attivarsi quando segnali segmentati e sufficienti indicano un degrado operativo che giustifica la prova di un'alternativa. Distingui errori di validazione della destinazione, problemi di sessione, throttling, errori di submit e degrado dei risultati finali. Un segnale isolato o un volume insufficiente non dovrebbe provocare una deviazione globale.

Un submit_sm_resp corretto conferma che l'SMS è stato consegnato?

No. Conferma la risposta alla richiesta submit_sm e può restituire un message_id dell'SMSC. Il risultato successivo richiede un delivery receipt richiesto o una consultazione dello stato quando disponibile.

ENROUTE è un motivo per reinviare un SMS su un altro instradamento?

Non da solo. ENROUTE significa che il messaggio è in corso ed è diverso da DELIVERED. Reinviare mentre il primo messaggio è ancora in corso può causare duplicati.

Un DLR DELIVERED dimostra in modo indipendente che l'utente ha ricevuto o letto il messaggio?

Non deve essere interpretato come una prova indipendente di ricezione o lettura umana. I formati DLR e alcuni codici possono essere specifici dell'SMSC o della rete. Conserva il valore originale, il suo contesto e la correlazione con il tentativo.

Come si limita il rischio di duplicati durante un fallback?

Usa un identificatore interno stabile per ogni intenzione di invio, collega ogni tentativo al suo instradamento e message_id, applica l'idempotenza nell'applicazione e definisci finestre di attesa coerenti con la validità del messaggio. Evita reinvii automatici per messaggi sensibili al tempo o al contesto.

Quando conviene fermare il traffico anziché cambiare instradamento?

Conviene contenere o isolare il traffico interessato quando le evidenze sono insufficienti, il rischio di duplicato è elevato, sono presenti errori di indirizzamento o configurazione, vengono superati limiti di capacità, il degrado persiste nonostante il fallback limitato oppure non si può dimostrare che l'alternativa riduca l'impatto senza creare nuovi rischi.

Fonti consultate

  1. SMPP Protocol Specification v3.4, Issue 1.2SMPP Developers Forum
  2. 3GPP TS 23.040: Technical realization of the Short Message Service (SMS)3GPP
  3. ITU-T Recommendation E.164: The international public telecommunication numbering planInternational Telecommunication Union