Codici di errore SMPP.
Ogni valore command_status definito nella specifica SMPP v3.4 — codice esadecimale, nome simbolico, significato in linguaggio semplice e causa probabile e soluzione. Cerca per codice o nome per risolvere rapidamente un errore di bind o submit_sm.
| Esadecimale | Nome simbolico | Significato e causa probabile / soluzione |
|---|---|---|
| 0x00000000 | ESME_ROK | Nessun errore. La PDU è stata accettata. Per submit_sm, questo significa solo che l'SMSC ha accettato il messaggio per l'elaborazione, non che sia stato consegnato — tracciare la consegna tramite la ricevuta di consegna (DLR) in deliver_sm. |
| 0x00000001 | ESME_RINVMSGLEN | Lunghezza del messaggio non valida. short_message o message_payload è troppo lungo o vuoto per la codifica usata. Segmentare i contenuti lunghi o usare il TLV message_payload; verificare che data_coding corrisponda alla lunghezza in byte. |
| 0x00000002 | ESME_RINVCMDLEN | Lunghezza del comando non valida. Il command_length nell'header della PDU non corrisponde ai byte effettivamente inviati. Quasi sempre un bug dell'encoder di PDU lato client o un errore di framing/buffer. |
| 0x00000003 | ESME_RINVCMDID | ID comando non valido. Il command_id non è riconosciuto o non è supportato dall'SMSC. Verificare di inviare un'operazione valida e la versione SMPP corretta. |
| 0x00000004 | ESME_RINVBNDSTS | Stato BIND non corretto per il comando indicato. Operazione non consentita nella modalità di bind attuale — ad es. submit_sm su un bind receiver, oppure una richiesta prima del completamento del bind. Eseguire prima il bind come transmitter o transceiver. |
| 0x00000005 | ESME_RALYBND | L'ESME è già in stato di bind. È stato emesso un secondo bind su una sessione già collegata. Riutilizzare la sessione esistente oppure eseguire l'unbind prima di ricollegarsi. |
| 0x00000006 | ESME_RINVPRTFLG | Flag di priorità non valido. priority_flag è fuori dall'intervallo 0–3 accettato dall'SMSC. Usare un valore supportato (di solito 0). |
| 0x00000007 | ESME_RINVREGDLVFLG | Flag di consegna registrata non valido. registered_delivery contiene un valore non supportato. Usare una maschera di bit accettata dall'SMSC (ad es. 0x01 per richiedere un DLR finale). |
| 0x00000008 | ESME_RSYSERR | Errore di sistema. Errore generico lato SMSC che impedisce l'elaborazione. Transitorio — riprovare con backoff; se persiste, contattare il fornitore. |
| 0x0000000A | ESME_RINVSRCADR | Indirizzo di origine non valido. source_addr (l'ID del mittente) è malformato o non consentito — lunghezza errata, caratteri non ammessi, o un mittente alfanumerico non registrato. Registrare o autorizzare il mittente. |
| 0x0000000B | ESME_RINVDSTADR | Indirizzo di destinazione non valido. destination_addr è malformato o non instradabile — formato MSISDN errato, prefisso internazionale mancante, o intervallo bloccato. Normalizzare al formato E.164. |
| 0x0000000C | ESME_RINVMSGID | ID messaggio non valido. Il message_id in un query_sm, cancel_sm o replace_sm non corrisponde a nessun messaggio noto. Usare l'ID esatto restituito in submit_sm_resp. |
| 0x0000000D | ESME_RBINDFAIL | Bind non riuscito. La richiesta di bind è stata rifiutata per un motivo diverso dalle credenziali — ad es. IP non autorizzato, TLS richiesto, o tipo di bind non consentito per l'account. |
| 0x0000000E | ESME_RINVPASWD | Password non valida. La password nella PDU di bind è errata o scaduta. Verificare le credenziali; il campo è limitato a 8 ottetti in SMPP 3.4. |
| 0x0000000F | ESME_RINVSYSID | ID sistema non valido. Il system_id (nome utente) non è riconosciuto dall'SMSC. Verificare l'identificativo dell'account e che sia abilitato. |
| 0x00000011 | ESME_RCANCELFAIL | Cancel SM non riuscito. cancel_sm non è riuscito a rimuovere il messaggio — potrebbe essere già stato consegnato o essere scaduto. Nulla da riprovare. |
| 0x00000013 | ESME_RREPLACEFAIL | Replace SM non riuscito. replace_sm non è riuscito ad aggiornare il messaggio, di solito perché ha già lasciato la coda. Inviare invece un nuovo messaggio. |
| 0x00000014 | ESME_RMSGQFUL | Coda messaggi piena. La coda store-and-forward dell'SMSC ha raggiunto la capacità massima. Ridurre la frequenza di invio e riprovare con backoff. |
| 0x00000015 | ESME_RINVSERTYP | Tipo di servizio non valido. Il valore di service_type non è riconosciuto o non è consentito. Lasciarlo nullo o usare un valore concordato con il fornitore. |
| 0x00000033 | ESME_RINVNUMDESTS | Numero di destinazioni non valido. number_of_dests in una PDU submit_multi è fuori intervallo. Rimanere entro il limite di destinazioni per PDU dell'SMSC. |
| 0x00000034 | ESME_RINVDLNAME | Nome della lista di distribuzione non valido. La lista di distribuzione indicata in submit_multi non esiste sull'SMSC. Creare la lista oppure inviare a indirizzi espliciti. |
| 0x00000040 | ESME_RINVDESTFLAG | Flag di destinazione non valido. In submit_multi, il dest_flag di una voce non è né un indirizzo SME (1) né una lista di distribuzione (2). Correggere il flag per ogni destinazione. |
| 0x00000042 | ESME_RINVSUBREP | Richiesta di 'invio con sostituzione' non valida. replace_if_present_flag è stato impostato su un'operazione che non lo supporta, oppure combinato con liste di distribuzione. Rimuovere il flag. |
| 0x00000043 | ESME_RINVESMCLASS | Dati del campo esm_class non validi. esm_class contiene una combinazione non supportata — ad es. un bit UDHI o di ricevuta di consegna rifiutato dall'SMSC. Ricontrollare i bit di modalità/tipo del messaggio. |
| 0x00000044 | ESME_RCNTSUBDL | Impossibile inviare alla lista di distribuzione. L'account non è autorizzato a inviare alla lista di distribuzione indicata. Usare l'indirizzamento diretto o richiedere l'autorizzazione. |
| 0x00000045 | ESME_RSUBMITFAIL | submit_sm o submit_multi non riuscito. Errore generico di invio lato SMSC. Spesso transitorio (instradamento/capacità) — riprovare con backoff; ispezionare i TLV per un motivo più specifico. |
| 0x00000048 | ESME_RINVSRCTON | TON dell'indirizzo di origine non valido. source_addr_ton non è valido per il formato del mittente — ad es. è richiesto TON 5 (alfanumerico) per un mittente testuale, ma è stato inviato un TON numerico. |
| 0x00000049 | ESME_RINVSRCNPI | NPI dell'indirizzo di origine non valido. source_addr_npi non è valido o è incoerente con il TON. Usare NPI 0 con mittenti alfanumerici e NPI 1 (E.164) per gli MSISDN. |
| 0x00000050 | ESME_RINVDSTTON | TON dell'indirizzo di destinazione non valido. dest_addr_ton non è valido per la destinazione. Usare TON 1 (internazionale) con un MSISDN in formato E.164. |
| 0x00000051 | ESME_RINVDSTNPI | NPI dell'indirizzo di destinazione non valido. dest_addr_npi non è valido o è incoerente con il TON. NPI 1 (ISDN/E.164) è il valore consueto per i numeri mobili. |
| 0x00000053 | ESME_RINVSYSTYP | Campo system_type non valido. Il system_type nella PDU di bind non è accettato. Lasciarlo nullo o usare il valore esatto assegnato dal fornitore. |
| 0x00000054 | ESME_RINVREPFLAG | Flag replace_if_present non valido. replace_if_present_flag è impostato su un valore diverso da 0 o 1. Inviare un flag booleano valido. |
| 0x00000055 | ESME_RINVNUMMSGS | Numero di messaggi non valido. Il campo sm_count / numero di messaggi è fuori intervallo. Correggere il valore nella PDU. |
| 0x00000058 | ESME_RTHROTTLED | Errore di throttling — limite di messaggi superato. Si sta inviando più velocemente della frequenza consentita per l'account (messaggi al secondo). Rallentare il ciclo di invio e riprovare con backoff. Condizione transitoria e ripetibile. |
| 0x00000061 | ESME_RINVSCHED | Orario di consegna programmato non valido. schedule_delivery_time è malformato o nel passato. Usare il formato orario SMPP assoluto/relativo (YYMMDDhhmmsstnnp) o lasciarlo nullo. |
| 0x00000062 | ESME_RINVEXPIRY | Periodo di validità del messaggio non valido. validity_period è malformato o fuori dalla finestra consentita. Usare il formato orario SMPP o lasciarlo nullo per il valore predefinito dell'SMSC. |
| 0x00000063 | ESME_RINVDFTMSGID | Messaggio predefinito non valido o non trovato. sm_default_msg_id fa riferimento a un messaggio predefinito che l'SMSC non possiede. Inviare il testo completo o un ID predefinito valido. |
| 0x00000064 | ESME_RX_T_APPN | Codice di errore applicativo temporaneo del ricevitore ESME. Restituito dal proprio ESME (o da un sistema a monte) per segnalare un errore applicativo temporaneo durante l'elaborazione di deliver_sm/data_sm. L'SMSC può ritentare la consegna in seguito. |
| 0x00000065 | ESME_RX_P_APPN | Codice di errore applicativo permanente del ricevitore ESME. L'applicazione ricevente rifiuta definitivamente il messaggio. L'SMSC non ritenterà — correggere il gestore a valle o il motivo del rifiuto. |
| 0x00000066 | ESME_RX_R_APPN | Codice di errore di rifiuto messaggio del ricevitore ESME. L'applicazione ricevente chiede all'SMSC di rifiutare il messaggio. Usato per rifiutare contenuti in ingresso specifici. |
| 0x00000067 | ESME_RQUERYFAIL | Richiesta query_sm non riuscita. La verifica dello stato non è andata a buon fine — il message_id potrebbe essere sconosciuto o scaduto dallo storage dell'SMSC. Verificare l'ID. |
| 0x000000C0 | ESME_RINVOPTPARSTREAM | Errore nella parte opzionale del corpo della PDU. Il flusso TLV (parametro opzionale) è malformato — lunghezza errata o troncata. Correggere l'encoder di TLV del client. |
| 0x000000C1 | ESME_ROPTPARNOTALLWD | Parametro opzionale non consentito. È stato inviato un TLV che questa operazione o l'SMSC non consente. Rimuovere il parametro opzionale non supportato. |
| 0x000000C2 | ESME_RINVPARLEN | Lunghezza del parametro non valida. La lunghezza dichiarata di un TLV non corrisponde al suo valore. Correggere il campo di lunghezza del parametro opzionale. |
| 0x000000C3 | ESME_RMISSINGOPTPARAM | Parametro opzionale atteso mancante. Un TLV richiesto per questa operazione non è stato fornito (ad es. message_payload quando short_message è vuoto). Aggiungere il parametro opzionale obbligatorio. |
| 0x000000C4 | ESME_RINVOPTPARAMVAL | Valore del parametro opzionale non valido. Un TLV riporta un valore fuori dall'insieme consentito. Consultare la specifica SMPP per i valori ammessi di quel parametro. |
| 0x000000FE | ESME_RDELIVERYFAILURE | Errore di consegna (data_sm_resp). Usato con data_sm per indicare che il messaggio non è stato consegnato al telefono. Trattarlo come un DLR fallito e ispezionare rete/instradamento. |
| 0x000000FF | ESME_RUNKNOWNERR | Errore sconosciuto. Valore generico quando l'SMSC non ha un codice specifico. Riprovare una volta con backoff; se persiste, segnalarlo al fornitore con un esempio di PDU. |
I valori non elencati sono riservati. Secondo la specifica SMPP v3.4: 0x00000100–0x000003FF è riservato per le estensioni del protocollo SMPP, 0x00000400–0x000004FF per errori specifici del fornitore SMSC, e 0x00000500–0xFFFFFFFF è riservato. I singoli intervalli sotto 0xFF (ad es. 0x09, 0x10) sono riservati dallo standard.
La risposta breve
Che cos'è un codice di errore SMPP?
Un codice di errore SMPP è il valore nel campo command_status di ogni PDU di risposta SMPP. Indica al client (ESME) se l'SMSC ha accettato l'operazione — 0x00000000 (ESME_ROK) significa successo, e qualsiasi valore diverso da zero identifica il motivo per cui un bind, submit_sm, query_sm o un'altra richiesta è fallita. I codici sono definiti dalla specifica SMPP v3.4 e sono coerenti su tutti gli SMSC conformi.
Un submit_sm_resp riuscito con ESME_ROK conferma solo che l'SMSC ha accettato il messaggio per l'elaborazione — la consegna finale al telefono viene segnalata separatamente nella ricevuta di consegna (deliver_sm). Trattare gli errori al momento dell'invio e al momento della consegna come due livelli distinti.
Domande frequenti
Che cos'è command_status in SMPP?
command_status è un campo di 4 byte nell'header di ogni PDU di risposta SMPP. In una PDU di richiesta è impostato a zero; in una risposta porta il risultato — 0x00000000 (ESME_ROK) per il successo o un codice di errore diverso da zero che identifica il fallimento. È il segnale principale che il tuo client usa per decidere se riprovare, correggere la PDU o fallire.
Cosa significa ESME_RTHROTTLED (0x00000058)?
Significa che stai inviando messaggi più velocemente della frequenza consentita per il tuo account (messaggi al secondo). Rallenta il ciclo di invio, applica un backoff esponenziale e resta entro il throughput concordato con il tuo fornitore. È una condizione transitoria e ripetibile.
Qual è la differenza tra ESME_RINVSRCADR e ESME_RINVDSTADR?
ESME_RINVSRCADR (0x0000000A) significa che l'indirizzo di origine — il tuo ID mittente — è malformato o non consentito, spesso un mittente alfanumerico non registrato. ESME_RINVDSTADR (0x0000000B) significa che l'MSISDN di destinazione è malformato o non instradabile. Normalizza gli indirizzi in E.164 e registra gli ID mittente dove richiesto.
ESME_ROK significa che il messaggio è stato consegnato?
No. ESME_ROK su submit_sm_resp conferma solo che l'SMSC ha accettato il messaggio per l'elaborazione. La consegna finale al telefono viene segnalata più tardi nella ricevuta di consegna (deliver_sm), che porta il proprio stato come DELIVRD, UNDELIV o EXPIRED. Riconcilia sempre l'accettazione dell'invio con il DLR.
Quali errori SMPP è sicuro riprovare?
I codici transitori lato sistema sono ripetibili con backoff: ESME_RSYSERR (0x08), ESME_RMSGQFUL (0x14), ESME_RTHROTTLED (0x58), ESME_RSUBMITFAIL (0x45) ed ESME_RUNKNOWNERR (0xFF). Gli errori di convalida come indirizzi non validi, TON/NPI, lunghezza del messaggio o credenziali errate sono permanenti — correggi la richiesta o la configurazione invece di riprovare.
Questi codici sono uguali su tutti gli SMSC?
I codici 0x00000000–0x000000FF sono definiti dalla specifica SMPP v3.4 e sono coerenti su tutti gli SMSC conformi. Gli intervalli 0x00000400–0x000004FF sono riservati per errori specifici del fornitore, quindi un dato SMSC potrebbe restituire lì codici aggiuntivi con significati propri — controlla sempre la documentazione del tuo fornitore per questi casi.
Stai stabilendo una sessione SMPP?
BroadNet offre bind SMPP 3.4 diretti con throughput prevedibile e una gestione chiara di command_status. Parla con il nostro team di una connessione.