Un testo può arrivare dopo che un telefono si riconnette, anche se il mittente lo ha inviato prima.
Cosa significa store and forward?
Il centro messaggi salva un testo prima di tentare di consegnarlo al telefono.
L'accettazione da parte della rete non conferma che il telefono abbia ricevuto il testo. Un telefono spento o irraggiungibile può lasciare un messaggio in attesa. Riconnettere il telefono rende possibile un altro tentativo di consegna. Il messaggio deve restare idoneo per quel tentativo.
La specifica 3GPP 23.040 descrive il ruolo del centro in SMS.
Per quanto tempo può restare in attesa un messaggio?
La rete può effettuare ulteriori tentativi di consegna finché la finestra di consegna del messaggio resta aperta. Questa finestra si chiama periodo di validità.
Lo standard SMS consente ai mittenti di specificare un periodo di validità. Il tuo provider decide se puoi impostarlo tramite la sua API.
La consegna può terminare con la scadenza quando quella finestra si chiude. Un rapporto di scadenza non implica che la richiesta di invio iniziale sia fallita.
Per un flusso sensibile al tempo, la tua applicazione deve comunque far rispettare la propria scadenza. Se un codice di verifica è valido per dieci minuti e arriva dopo quattro ore, il tuo server deve rifiutarlo. Un testo in ritardo non deve prolungare la durata dell'azione che descrive.
Dove si colloca il centro rispetto alla mia applicazione?
La tua applicazione può raggiungere un centro messaggi tramite un provider di messaggistica, anziché gestire direttamente la connessione con l'operatore.
I provider usano SMPP per passare i testi ai centri messaggi, direttamente o attraverso altri servizi di instradamento. Il riferimento SMPP descrive queste connessioni.
Il tuo provider può confermare una richiesta prima che il servizio di rete successivo la accetti. Il centro messaggi può quindi accettare il testo prima che il telefono lo riceva. Ogni conferma descrive una fase del percorso.
Accettato ma non consegnato spiega come queste fasi si presentano in un'applicazione.
Cosa posso osservare tramite Bird?
Puoi verificare il passaggio all'operatore e la consegna segnalata senza connetterti direttamente a un centro messaggi.
Il campo sent_at nella risposta del messaggio registra quando Bird consegna il messaggio all'operatore. delivered_at registra la consegna confermata. Entrambi i campi contengono un timestamp o null. Un orario di consegna mancante non significa che il telefono abbia rifiutato il testo.
L'endpoint di invio di Bird rifiuta validity_period con HTTP 422 SMSUnsupportedFeature. Non puoi impostare la finestra di conservazione dell'operatore tramite quel campo. La risposta non restituisce quel campo.
Bird emette sms.expired quando l'operatore segnala la scadenza. Una ricevuta bufferizzata, cioè l'operatore trattiene il testo, non produce alcun cambio di stato pubblico. Ricevute di consegna spiega quali rapporti della rete raggiungono la tua applicazione.
Cosa cambia in un flusso di invio?
La tua applicazione deve gestire la consegna come un evento successivo con un esito separato dall'invio.
Mantieni un risultato in attesa distinto da un fallimento. Nella tua applicazione, imponi scadenze per i codici di verifica e per altre azioni sensibili al tempo. Usa una ricevuta di consegna come rapporto della rete sulla consegna. Non dimostra che qualcuno abbia letto il testo.
In breve
Accettazione e consegna sono separate.
Un centro messaggi può accettare un testo prima che il telefono del destinatario diventi raggiungibile.
La conservazione offre un'altra opportunità di consegna.
Un testo in attesa può arrivare dopo che il telefono si riconnette, a condizione che la finestra di consegna sia ancora aperta.
La finestra di consegna è limitata.
La rete può segnalare la scadenza quando il periodo di attesa termina.
La tua integrazione non deve connettersi direttamente.
Un provider di messaggistica può gestire la connessione tra la tua applicazione e la rete dell'operatore.