BroadNet
SMPPErros

Códigos de erro command_status do SMPP

Atualizado em 2 min de leituraBaseado em padrões
Resposta direta

O command_status é o campo de cabeçalho de 4 bytes que reporta o resultado de uma operação. Num pedido é 0 (ESME_ROK); numa resposta transporta um código de erro ESME_R*. 0x00000000 é sucesso; valores não nulos indicam falhas específicas como password inválida, limitação de taxa ou fila de mensagens cheia.

§01

Como funciona o command_status

Cada PDU de resposta ecoa o sequence_number do pedido e define o command_status como o resultado. ESME_ROK (0) significa sucesso. Qualquer outro valor é um erro cujo código numérico mapeia para uma constante nomeada ESME_R* na especificação. Os códigos 0x00000100–0x000003FF estão reservados para extensões SMPP e 0x00000400–0x000004FF para erros específicos do fabricante do SMSC, por isso trate sempre códigos desconhecidos de forma graciosa.

§02

Os códigos que vai realmente ver

Um pequeno conjunto de códigos cobre a maioria do tratamento real. Agrupe-os por resposta: repetir-após-recuo (limitação de taxa, fila cheia, erro de sistema), corrigir-o-pedido (endereço inválido, TON/NPI, data_coding, comprimento da mensagem) e fatal-para-a-sessão (password ou ID de sistema inválidos, falha de bind).

Códigos command_status encontrados frequentemente
ValorNomeSignificadoReação típica
0x00000000ESME_ROKSem errosSucesso
0x00000001ESME_RINVMSGLENComprimento da mensagem inválidoCorrigir payload / segmento
0x00000005ESME_RALYBNDBind já estabelecidoNão refazer o bind; reutilizar a sessão
0x0000000AESME_RINVSRCADREndereço de origem inválidoCorrigir remetente / TON / NPI
0x0000000BESME_RINVDSTADREndereço de destino inválidoCorrigir MSISDN do destinatário
0x0000000DESME_RBINDFAILFalha no bindBackoff, verificar as credenciais
0x0000000EESME_RINVPASWDPalavra-passe inválidaFatal — corrigir credenciais
0x0000000FESME_RINVSYSIDID do sistema inválidoFatal — corrigir credenciais
0x00000014ESME_RMSGQFULFila de mensagens cheiaBackoff e nova tentativa
0x00000043ESME_RINVESMCLASSesm_class inválidoCorrigir bits de esm_class
0x00000058ESME_RTHROTTLEDThrottling — taxa excedidaReduzir a velocidade, backoff com jitter
0x00000062ESME_RINVEXPIRYvalidity_period inválidoCorrigir formato de validade
0x000000FEESME_RDELIVERYFAILUREFalha na entrega (data_sm)Inspecionar/tentar novamente conforme a política
0x000000FFESME_RUNKNOWNERRErro desconhecidoRegiste, alerte, tente novamente com cautela
§03

Gamas reservadas e de fabricante

Nem todos os códigos que recebe estão na especificação principal. A especificação reserva 0x00000100–0x000003FF para uso futuro do SMPP e 0x00000400–0x000004FF para códigos específicos do SMSC, pelo que o seu fornecedor pode devolver um valor que só a documentação dele explica. Mapeie os códigos específicos do fornecedor para uma taxonomia interna normalizada (número inválido, bloqueado, com limitação de taxa, falha temporária) para que a qualidade entre rotas se mantenha comparável.

Gamas reservadas de command_status
IntervaloReservado para
0x00000100 – 0x000003FFExtensões do protocolo SMPP
0x00000400 – 0x000004FFErros específicos do fornecedor SMSC
0x00000500 – 0xFFFFFFFFReservado
Perguntas frequentes

Perguntas frequentes

O que significa ESME_RTHROTTLED e como o devo tratar?

ESME_RTHROTTLED (0x00000058) significa que excedeu a taxa de mensagens permitida. Pare de aumentar a carga, suspenda os submits e recue com jitter antes de repetir. Insistir na mesma taxa arrisca que o fornecedor derrube o bind.

O ESME_RINVPASWD é recuperável?

Não em tempo de execução. ESME_RINVPASWD (0x0000000E) indica credenciais erradas. Não faça hot-loop do bind; corrija a configuração de system_id/password e volte a ligar. Binds falhados repetidos podem despoletar bloqueio de IP.

Qual é a diferença entre ESME_RMSGQFUL e ESME_RTHROTTLED?

ESME_RMSGQFUL (0x00000014) significa que a fila do SMSC está temporariamente cheia; ESME_RTHROTTLED (0x00000058) significa que excedeu o seu limite de taxa. Ambos exigem recuo, mas a limitação de taxa é sobre o seu TPS enquanto a fila cheia é sobre a capacidade do SMSC.

Recebi um código de erro que não está na especificação — porquê?

O SMPP reserva 0x400–0x4FF para códigos específicos do fabricante do SMSC, pelo que o seu fornecedor pode devolver um valor documentado apenas por ele. Consulte a tabela de erros do fornecedor e mapeie-o para a sua taxonomia interna.

Referências

Especificações de origem

Os padrões publicados nos quais esta página se baseia. Abre num novo separador.

BNMantido pela equipa de engenharia BroadNet·Mensagens de nível de operadora desde 2003
Coloque-o no fio.

Construa com uma vinculação SMPP real e uma API REST.

Solicite acesso de teste com chaves de teste reais: envie primeiro para o seu próprio número verificado e, em seguida, passe para o ambiente de produção em mais de 200 países assim que a sua identidade de remetente e rotas forem aprovadas.