command_status è il campo dell'header da 4 byte che riporta l'esito di un'operazione. In una richiesta vale 0 (ESME_ROK); in una risposta trasporta un codice di errore ESME_R*. 0x00000000 indica successo; i valori diversi da zero indicano guasti specifici come password non valida, throttling o coda dei messaggi piena.
Come funziona command_status
Ogni PDU di risposta riporta il sequence_number della richiesta e imposta command_status con il risultato. ESME_ROK (0) indica successo. Qualsiasi altro valore è un errore il cui codice numerico corrisponde a una costante ESME_R* con nome nella specifica. I codici 0x00000100–0x000003FF sono riservati alle estensioni SMPP e i codici 0x00000400–0x000004FF agli errori specifici del fornitore dell'SMSC, quindi gestite sempre con eleganza i codici sconosciuti.
I codici che vedrete davvero
Un piccolo insieme di codici copre la maggior parte della gestione reale. Raggruppateli per risposta: da riprovare dopo backoff (throttling, coda piena, errore di sistema), da correggere nella richiesta (indirizzo, TON/NPI, data_coding, lunghezza del messaggio non validi) e fatali per la sessione (password o system id non validi, bind fallito).
| Valore | Nome | Significato | Reazione tipica |
|---|---|---|---|
| 0x00000000 | ESME_ROK | Nessun errore | Successo |
| 0x00000001 | ESME_RINVMSGLEN | Lunghezza del messaggio non valida | Correggere payload / segmento |
| 0x00000005 | ESME_RALYBND | Bind già attivo | Non rieseguire il bind; riutilizzare la sessione |
| 0x0000000A | ESME_RINVSRCADR | Indirizzo sorgente non valido | Correggere il mittente / TON / NPI |
| 0x0000000B | ESME_RINVDSTADR | Indirizzo di destinazione non valido | Correggere l'MSISDN del destinatario |
| 0x0000000D | ESME_RBINDFAIL | Bind non riuscito | Backoff, verificare le credenziali |
| 0x0000000E | ESME_RINVPASWD | Password non valida | Fatale — correggere le credenziali |
| 0x0000000F | ESME_RINVSYSID | ID di sistema non valido | Fatale — correggere le credenziali |
| 0x00000014 | ESME_RMSGQFUL | Coda dei messaggi piena | Backoff e nuovo tentativo |
| 0x00000043 | ESME_RINVESMCLASS | esm_class non valido | Correggere i bit esm_class |
| 0x00000058 | ESME_RTHROTTLED | Throttling — velocità superata | Rallentare, backoff con jitter |
| 0x00000062 | ESME_RINVEXPIRY | validity_period non valido | Correggere il formato della validità |
| 0x000000FE | ESME_RDELIVERYFAILURE | Mancata consegna (data_sm) | Ispezionare / riprovare secondo la policy |
| 0x000000FF | ESME_RUNKNOWNERR | Errore sconosciuto | Registra, avvisa, riprova con cautela |
Intervalli riservati e specifici del fornitore
Non tutti i codici che ricevete sono nella specifica di base. La specifica riserva 0x00000100–0x000003FF a usi futuri di SMPP e 0x00000400–0x000004FF a codici specifici dell'SMSC, quindi il vostro provider può restituire un valore spiegato solo nella sua documentazione. Mappate i codici specifici del provider su una tassonomia interna normalizzata (numero non valido, bloccato, throttled, guasto temporaneo) affinché la qualità tra le rotte resti comparabile.
| Intervallo | Riservato a |
|---|---|
| 0x00000100 – 0x000003FF | Estensioni del protocollo SMPP |
| 0x00000400 – 0x000004FF | Errori specifici del fornitore SMSC |
| 0x00000500 – 0xFFFFFFFF | Riservato |
Domande frequenti
Cosa significa ESME_RTHROTTLED e come dovrei gestirlo?
ESME_RTHROTTLED (0x00000058) indica che avete superato la velocità di invio consentita. Smettete di aumentare il carico, sospendete i submit ed eseguite un backoff con jitter prima di riprovare. Insistere alla stessa velocità rischia che il provider chiuda il bind.
ESME_RINVPASWD è recuperabile?
No, non a runtime. ESME_RINVPASWD (0x0000000E) indica credenziali errate. Non ripetete il bind in loop; correggete la configurazione di system_id/password e riconnettetevi. Bind ripetutamente falliti possono innescare il blocco dell'IP.
Qual è la differenza tra ESME_RMSGQFUL e ESME_RTHROTTLED?
ESME_RMSGQFUL (0x00000014) indica che la coda dell'SMSC è temporaneamente piena; ESME_RTHROTTLED (0x00000058) indica che avete superato il vostro limite di velocità. Entrambi richiedono un backoff, ma il throttling riguarda il vostro TPS mentre la coda piena riguarda la capacità dell'SMSC.
Ho ricevuto un codice di errore non presente nella specifica — perché?
SMPP riserva l'intervallo 0x400–0x4FF ai codici specifici del fornitore dell'SMSC, quindi il vostro provider può restituire un valore documentato solo da lui. Consultate la tabella degli errori del provider e mappatelo sulla vostra tassonomia interna.
Specifiche della fonte
Gli standard pubblicati su cui si basa questa pagina. Si apre in una nuova scheda.