cdr_rejected, et c’est un animal différent d’un message qui a été routé et a échoué.
Les raisons
La colonne SMPP est ce que le
submit_sm_resp du client transportait ; la colonne HTTP est
l’équivalent REST. Trois des quatre sont des codes spécifiques au fournisseur dans la plage
0x4xx plutôt que des codes SMPP standard. 0xC3 est l’exception, étant ESME_RMISSINGOPTPARAM de
la spécification. Le client SMPP d’un customer n’aura pas de noms pour les valeurs 0x4xx, donc
citez-lui le mot-clé de la raison, pas le nombre.
| filtered | Un filtre l’a refusé | varie | Lisez le filtre |
| maxAttempts | Pas un refus. Le routage a abandonné | rien à la soumission | Rien n’est livré |
Ce que tous les refus ont en commun
Rien n’a été facturé, ou la facturation a été inversée. Un refus ne coûte rien au client, c’est pourquoi il est sans risque d’être strict à leur égard — et pourquoiinsufficientCredit n’est pas
un paradoxe.
Celui qui est le plus difficile à expliquer
Lire un templateNotMatched
Presque toujours une des quatre choses, par ordre décroissant de fréquence réelle :
Le libellé diffère vraiment
Le libellé diffère vraiment
Les espaces sont normalisés avant la comparaison, donc les suites d’espaces et de sauts de ligne ne
sont pas le problème. Tout le reste — un point supplémentaire, un mot changé, une position de
variable différente — l’est.L’aperçu du template dans le panneau montre un exemple de message que le template accepte.
Comparez-le à ce que le client a réellement envoyé, qui se trouve sur la ligne
cdr_rejected.Le template est dégradé
Le template est dégradé
Un nom de placeholder non reconnu —
{#VAR#}, {#otp#} — se charge en tant que variable
générique plutôt que d’être supprimé, et la ligne est signalée sous templates_degraded sur
/ops/health.Il correspond toujours, mais bien plus largement que prévu : {#var#} accepte n’importe quoi jusqu’à
la limite de longueur. Si un template approuve des messages qu’il ne devrait pas, regardez ici en
premier.La variable est plus longue que la limite
La variable est plus longue que la limite
smsg.whitelist.max.variable borne la quantité de texte qu’un placeholder peut représenter. Un
template "Your code is {#var#}" avec un corps de 900 caractères est refusé même si le libellé
correspond.Le compte est en ENFORCE et ne devrait pas l'être
Le compte est en ENFORCE et ne devrait pas l'être
Le mode
REPORT compte ce qui serait refusé sans le refuser — whitelist_would_reject sur
/ops/health. Faire tourner un nouveau compte en REPORT pendant une journée avant d’appliquer
transforme toute cette classe d’incidents en un nombre que vous lisez à loisir.insufficientCredit sur un compte avec de l’argent dessus
Pas une contradiction, et la surprise la plus fréquente en exploitation prépayée.
Le crédit est réservé par blocs, pas par message. Le bloc est max(smsg.balance.block.min, price × smsg.balance.block.min.messages) — l’équivalent de vingt messages par défaut.
Une réservation essaie trois paliers décroissants : le bloc complet, ce plancher, puis le seul
message qui a demandé. Donc le plancher n’immobilise jamais d’argent — un compte dépense chaque
unité qu’il détient.
Voir aussi
Whitelisting
Approuver les IDs d’expéditeur et les libellés.
Crédit prépayé
Blocs, réservations et identité monétaire.