# Codici di errore command_status di SMPP

> 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.

- URL canonico: https://www.broadnet.me/it/reference/smpp-command-status-errors
- Lingua: it
- Ultimo aggiornamento: 2026-07-18
- Editore: BroadNet (https://www.broadnet.me)

Il campo command_status di SMPP e l'intervallo di errori ESME_R*: cosa significano i codici comuni (ESME_RINVPASWD, ESME_RTHROTTLED, ESME_RMSGQFUL…) e come reagire a ciascuno.

## 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).

*Codici command_status frequenti*

| 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.

*Intervalli riservati di command_status*

| 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.

## Fonti

- [SMPP v3.4 specification — §5.1.3 command_status](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [SMPP v5.0 specification](https://smpp.org/SMPP_v5.pdf)

## Correlati

- [Ricerca codici di errore SMPP (strumento gratuito)](https://www.broadnet.me/it/tools/smpp-error-codes)
- [Anatomia della PDU SMPP](https://www.broadnet.me/it/reference/smpp-pdu-anatomy)
- [SMPP enquire_link e throttling](https://www.broadnet.me/it/reference/smpp-enquire-link-throttling)
- [Best practice di integrazione SMPP](https://www.broadnet.me/it/reference/smpp-integration-best-practices)
- [Checklist di integrazione SMPP (guida)](https://www.broadnet.me/it/guides/smpp-integration-checklist)
