cdr_rejected, e é um bicho diferente de uma mensagem que roteou e falhou.
As razões
A coluna SMPP é o que o
submit_sm_resp do cliente carregou; a coluna HTTP é o equivalente REST.
Três dos quatro são códigos específicos do fornecedor na faixa 0x4xx, e não os SMPP padrão.
0xC3 é a exceção, sendo ESME_RMISSINGOPTPARAM da especificação. O cliente SMPP do cliente não vai
ter nomes para os valores 0x4xx, então cite a palavra da razão, não o número.
| filtered | Um filtro recusou | varia | Leia o filtro |
| maxAttempts | Não é uma recusa. O roteamento desistiu | nada na hora do submit | Nada é entregue |
O que toda recusa tem em comum
Nada foi cobrado, ou a cobrança foi revertida. Uma recusa não custa nada ao cliente, e é por isso que é seguro ser rígido com elas. E por issoinsufficientCredit não é um paradoxo.
A mais difícil de explicar
Lendo um templateNotMatched
Quase sempre uma de quatro coisas, em ordem decrescente de com que frequência é de fato a causa:
O texto genuinamente difere
O texto genuinamente difere
Espaços em branco são normalizados antes do match, então sequências de espaços e quebras de linha
não são o problema. Qualquer outra coisa — um ponto final a mais, uma palavra trocada, uma posição
diferente de variável — é.O preview de template no painel mostra uma amostra de mensagem que o template aceita. Compare com o
que o cliente de fato enviou, que está na linha de
cdr_rejected.O template está degradado
O template está degradado
Um nome de placeholder não reconhecido —
{#VAR#}, {#otp#} — carrega como uma variável
genérica em vez de ser descartado, e a linha é reportada em templates_degraded em
/ops/health.Ainda faz match, mas muito mais frouxo do que o pretendido: {#var#} aceita qualquer coisa até o
limite de tamanho. Se um template está aprovando mensagens que não deveria, olhe aqui primeiro.A variável é maior que o limite
A variável é maior que o limite
smsg.whitelist.max.variable limita quanto texto um placeholder pode representar. Um template de
"Your code is {#var#}" com um body de 900 caracteres é recusado mesmo com o texto casando.A conta está em ENFORCE e não deveria estar
A conta está em ENFORCE e não deveria estar
O modo
REPORT conta o que seria recusado sem recusar. whitelist_would_reject em /ops/health.
Rodar uma conta nova em REPORT por um dia antes de fazer enforcement transforma essa classe
inteira de incidente em um número que você lê com calma.insufficientCredit em uma conta com dinheiro
Não é contradição, e é a surpresa mais comum na operação pré-paga.
Crédito é reservado em blocos, não por mensagem. O bloco é max(smsg.balance.block.min, price × smsg.balance.block.min.messages). Vinte mensagens por padrão.
Uma reserva tenta três degraus decrescentes: o bloco cheio, esse piso, depois a única mensagem
que pediu. Assim o piso nunca deixa dinheiro parado. Uma conta gasta cada unidade que tem.
Relacionados
Whitelisting
Aprovando sender IDs e texto.
Crédito pré-pago
Blocos, reservas e a identidade do dinheiro.