Os códigos de erro SMPP são os valores de command_status que um fornecedor devolve em respostas como o submit_sm_resp. 0x00000000 (ESME_ROK) significa aceito; qualquer outro valor é um erro, por exemplo 0x0B endereço de destino inválido, 0x14 fila cheia ou 0x58 throttling. Alguns erros são temporários e vale tentar de novo, outros são permanentes e não devem ser repetidos.
Onde os códigos aparecem
Toda PDU de resposta SMPP traz um campo command_status. Quando você envia um submit_sm, o fornecedor responde com submit_sm_resp: status 0 mais um message ID significa que a mensagem foi aceita para entrega, um status diferente de zero significa que ela foi rejeitada no envio. Esses códigos são diferentes do campo err dos relatórios de entrega, que chega depois e descreve o que aconteceu na rede. Para esses, veja status dos relatórios de entrega de SMS.
Códigos mais comuns (SMPP 3.4)
| Código | Nome | Significado | Repetir? |
|---|---|---|---|
| 0x00 | ESME_ROK | Sem erro | Não é preciso |
| 0x01 | ESME_RINVMSGLEN | Tamanho de mensagem inválido | Não, corrija a mensagem |
| 0x02 | ESME_RINVCMDLEN | Tamanho de comando inválido | Não, corrija o cliente |
| 0x04 | ESME_RINVBNDSTS | Status de bind incorreto para este comando (por exemplo, enviar em um bind receiver) | Não, corrija o bind |
| 0x05 | ESME_RALYBND | Bind já feito | Não |
| 0x08 | ESME_RSYSERR | Erro de sistema no fornecedor | Sim, mais tarde |
| 0x0A | ESME_RINVSRCADR | Endereço de origem (sender ID) inválido | Não |
| 0x0B | ESME_RINVDSTADR | Endereço de destino inválido | Não |
| 0x0D | ESME_RBINDFAIL | Falha no bind | Depois de verificar credenciais e limites |
| 0x0E | ESME_RINVPASWD | Senha inválida | Não |
| 0x0F | ESME_RINVSYSID | System ID inválido | Não |
| 0x14 | ESME_RMSGQFUL | Fila de mensagens cheia | Sim, com back-off |
| 0x45 | ESME_RSUBMITFAIL | Falha no submit_sm (genérico) | Depende, pergunte ao fornecedor |
| 0x48 / 0x49 | ESME_RINVSRCTON / NPI | TON ou NPI de origem inválido | Não, corrija as configurações de endereço |
| 0x50 / 0x51 | ESME_RINVDSTTON / NPI | TON ou NPI de destino inválido | Não, corrija as configurações de endereço |
| 0x58 | ESME_RTHROTTLED | Erro de throttling, mensagens demais por segundo | Sim, diminua o ritmo |
| 0x61 | ESME_RINVSCHED | Horário de entrega agendada inválido | Não |
| 0x62 | ESME_RINVEXPIRY | Período de validade inválido | Não |
| 0x64 | ESME_RX_T_APPN | Erro temporário da aplicação receptora | Sim |
| 0x65 | ESME_RX_P_APPN | Erro permanente da aplicação receptora | Não |
| 0x66 | ESME_RX_R_APPN | Mensagem rejeitada pela aplicação receptora | Não |
| 0xFF | ESME_RUNKNOWNERR | Erro desconhecido | Investigue |
Os códigos de 0x0400 a 0x04FF são reservados para erros específicos de cada fornecedor. Muitos fornecedores os usam para regras de negócio como "sem crédito", "destino não permitido", "sender ID não registrado" ou "conteúdo bloqueado". Peça a cada fornecedor a tabela dele.
Causas típicas e soluções
- Destino inválido (0x0B): número fora do formato internacional, um zero inicial ou um sinal de mais onde o fornecedor não espera, ou um país não habilitado na sua conta. Envie os números como dígitos E.164 e verifique as configurações de TON/NPI (normalmente TON 1, NPI 1 para números internacionais).
- Origem inválida (0x0A): remetente alfanumérico com mais de 11 caracteres, TON errado para um remetente alfanumérico (normalmente TON 5) ou um sender ID não permitido ou não registrado naquela rota. Veja tipos de sender ID para SMS.
- Tamanho de mensagem inválido (0x01): texto longo demais para uma PDU, muitas vezes uma mensagem longa enviada sem a divisão correta. Veja SMS longo concatenado.
- Throttling (0x58) e fila cheia (0x14): você está acima do seu TPS ou o fornecedor está congestionado. Veja binds SMPP e TPS.
- Falhas de bind (0x0D, 0x0E, 0x0F): credenciais erradas, IP fora da whitelist ou mais binds do que o permitido.
Montando uma política de retentativa
- Classifique cada código, inclusive os específicos do fornecedor, como temporário ou permanente.
- Repita os erros temporários com intervalos crescentes (por exemplo 1, 5, 30 segundos) e pare depois de algumas tentativas.
- Para OTP, fazer failover para uma segunda rota geralmente é melhor do que esperar. Veja boas práticas para SMS de OTP.
- Nunca repita erros permanentes em loop: isso desperdiça throughput e pode fazer sua conta ser sinalizada.
- Registre o código por destino e por fornecedor para identificar rapidamente novas rejeições.
Ajuda com uma rota
Um aumento repentino de um código de erro muitas vezes significa uma mudança de configuração ou de regra do lado do fornecedor. Quando o VoIPMatcher gerencia suas rotas SMS A2P, nós tratamos com o fornecedor por você. Solicite uma rota SMPP.
Perguntas frequentes
O que é o erro SMPP 69?
O erro 69 é 0x45 em hexadecimal, ESME_RSUBMITFAIL: o submit_sm falhou por um motivo que o próprio código não especifica. Algumas plataformas o usam para regras de negócio, como falta de crédito ou destino não habilitado. Se vale repetir depende da causa, então pergunte ao fornecedor o que o dispara do lado dele.
O que é o erro SMPP 88?
O erro 88 é 0x58 em hexadecimal, ESME_RTHROTTLED: você está enviando mais mensagens por segundo do que a sua conta ou bind permite. É temporário. Diminua o ritmo e repita com intervalos crescentes, não de uma vez, e verifique se o limite de TPS vale por bind ou para a conta inteira.
O que é o erro SMPP 11?
O erro 11 é 0x0B, ESME_RINVDSTADR: endereço de destino inválido. Normalmente o número está no formato errado, com um zero inicial ou um sinal de mais que o fornecedor não espera, ou o país não está habilitado na sua conta. Envie os números como dígitos E.164 internacionais com TON 1 e NPI 1, e não repita sem alterar.
O que é o erro SMPP 13?
O erro 13 é 0x0D, ESME_RBINDFAIL: o pedido de bind foi recusado. Causas comuns são credenciais erradas, um endereço IP fora da whitelist do fornecedor ou mais binds simultâneos do que o permitido. Verifique o system_id, a senha e o IP de origem, feche sessões antigas e confirme o limite de binds antes de tentar de novo.
O que é o erro SMPP 255?
O erro 255 é 0xFF, ESME_RUNKNOWNERR: um erro desconhecido. A plataforma do fornecedor não conseguiu associar a falha a um código padrão. Não repita em loop. Registre o destino, o sender ID e o horário, e envie exemplos ao fornecedor, que pode verificar os próprios logs e a conexão upstream.
Precisa de uma rota?
Envie o destino, o tipo de rota e a tarifa alvo. Respondemos com o que podemos entregar.