The single most useful diagnostic
exempt_products is traffic going unchecked on purpose, and is the answer to “why was this not
caught?” that no account’s own policy can show.
Four switches, and the order they resolve in
A message is checked only if all four say so. They are listed in the order the gateway resolves them, which is also the order to look in when something is not being enforced.
The first three are switches an operator sets; the fourth is the policy itself.
conf.whitelist.enabled defaults on, so the master switch is the one that decides — a listener has
to opt out. It exists because customers are rarely all on one listener: a registered-traffic
listener can enforce while an internal or test one does not, without that being a property of each
account.It applies only to SMPP. The HTTP ingress has no listener to hang it off, so use the product or the
account there.Report before enforce
Each ofheader_mode and content_mode is OFF, REPORT or ENFORCE. REPORT is why this is
not a boolean.
1
Approve what you already know about
Sender IDs and templates for the account, or for a product that is checked. See
Sender IDs and Content templates.
2
Set the account to REPORT
Every message is checked, logged as
message.wouldReject at INFO, and sent anyway. Nothing is
refused.3
Read report_only_would_reject
It counts what
ENFORCE would have refused, and it is the number to watch. Leave it running long
enough to cover the customer’s slow days — a template used once a month is invisible in an afternoon.4
Approve what the log names, and only then enforce
headerNotApproved and templateNotMatched name what was wrong, and the account it belongs to.Enforcing with nothing approved
The control panel refuses the save that would create it, counted the way the gateway counts. Two things make that more than a sum:- Exempt products protect nothing. A product with
whitelist_enabled = falseresolves toOFFbefore any merge, so an approval filed under it is stored and never consulted. Counting it would wave through an account whose approvals are all inert — creating the exact outage the guard exists to prevent. - Traffic with no product is served by the account scope alone. No product-scoped approval can
ever reach it. So an account-level
ENFORCEwith an empty account list stops every login whose credential names no product, however many product approvals exist.
Approved is not the same as accepted
What a refusal looks like
Over HTTP, 403 and a message naming what was wrong:submit_sm is rejected rather than accepted and dropped, so the customer’s own
client sees the failure at submit time instead of inferring it from a receipt that never arrives. See
Status codes.
Every refusal is logged with a reason — headerNotApproved, templateNotMatched — and the account it
belongs to. In REPORT mode the same line appears as message.wouldReject at INFO and the message
goes out.
Approving does not need a reconnect
The whitelist is re-read on the configuration poll and each snapshot carries a generation, so an SMPP session bound for weeks picks up a newly approved sender ID without reconnecting. That matters because the customer whose traffic is being refused is usually on the phone while somebody approves it.Whitelisting reference
Every property, the three stamping modes, and the per-vendor mandatory check.
Products
Exemptions, and why an unknown product is checked rather than waved through.