I edited the routing table and nothing changed
I edited the routing table and nothing changed
no default routing table in new targets! on the same line means the new configuration had no rules in
default — often because a filter that every rule referenced is missing or
disabled.Why does vendor1:from:==:MyBrand not work?
Why does vendor1:from:==:MyBrand not work?
== is a numeric operator. That line does not merely fail to match — it fails to parse, and takes
the whole reload with it. Use equals for text:My pattern matches nothing and nothing complains
My pattern matches nothing and nothing complains
matches is a regular expression and it is anchored — it must match the whole value. ^61.*
matches a full destination; a bare 61 matches only the two-character string 61.startsWith compares literal text. A regular expression handed to it asks whether the value
literally begins with ^(?:\+61, which nothing does, so the rule loads, displays and never fires. The
panel warns about this; the gateway does not.Rules below my catch-all never run
Rules below my catch-all never run
NORMAL table stops at the first match, and a catch-all matches everything — so
anything below it is unreachable. Nothing refuses the table; the rules parse perfectly.Move it last. The table is reported under unreachable-rules in routing_warnings on /ops/health,
and the panel counts the dead rules for you.I disabled a filter to widen a rule and the rule stopped matching entirely
I disabled a filter to widen a rule and the rule stopped matching entirely
I disabled a filter to withdraw a route and nothing happened
I disabled a filter to withdraw a route and nothing happened
default with no rules, the entire reload was rejected and the previous
tables are still in service.Disabling a filter is not a way to withdraw a route. Delete or disable the rule.How do I find out why one specific message did not match?
How do I find out why one specific message did not match?
outSms.routing.debug — it logs every
rule of every message and renders the whole message object to do it, so it is unusable at the rates
where routing questions get asked.The log has gone quiet. Is the broken rule fixed?
The log has gone quiet. Is the broken rule fixed?
routing.rule.broken is logged once per rule, and the counter resets only when a
new routing table is published. Silence is equally consistent with “already reported”.Watch routing_rules_broken on /ops/health — the same fact as a number — and after a fix, watch for
the line to reappear rather than for it to stay absent.routing_failed_queue is not zero. What does that mean?
routing_failed_queue is not zero. What does that mean?
outSms.enqueueFailedRouting is set — so in the ordinary configuration those
messages are gone, and this counter is the only place that fact exists.Alert on it. routing_retry_queue is the benign neighbour: messages waiting out a backoff, ordinary
in small numbers, a routing gap when it stays high.Does rule order matter in a least-cost table?
Does rule order matter in a least-cost table?
LCR table scans every rule, treats the matches as alternatives, and lets the cost rate decide.
Reordering changes nothing.If a least-cost table is behaving like a first-match table, check the function name — a name that is not
recognised, such as ->function(LRC), falls back to NORMAL with only a log line. See
Least-cost routing.A vendor in my LCR table has no cost rate. Will it block traffic?
A vendor in my LCR table has no cost rate. Will it block traffic?
Why is my vendor group ignoring its weights, or its members?
Why is my vendor group ignoring its weights, or its members?
weighted — set one under round-robin or
failover and nothing splits, which the gateway says at WARN rather than letting you believe
otherwise.And group blocks must come before the first [table] header. Inside a table block a member line
matches nothing and is dropped silently, so the group has fewer members than it reads as having.Can one rule send a message to every member of a group?
Can one rule send a message to every member of a group?
+copied on a group rule still
copies to one member.If every member is down the rule sends nothing, logs cause=group-all-dead naming everyone it tried,
and the scan continues, which is what keeps a fallback rule written below it reachable.What happens when a queue fills up?
What happens when a queue fills up?
ESME_RMSGQFUL (0x14) and nothing charged, REST
with 503 queueFull and anything already charged refunded. Inside the gateway a full queue is
backpressure: the router waiting on a full worker queue is the router going at the speed the vendor can
take.smsg.queue.capacity and inQueue.capacity both default to 0, meaning unbounded. There is no default
limit because a limit is a statement about your own traffic and heap.How many submit_sm can one message cost me?
How many submit_sm can one message cost me?
maxRetries bounds the total at one vendor, across in-worker retries and every trip back through
the router.It used to bound only the in-worker half, with each router hop handing out a fresh allowance — so 1
alongside twenty routing attempts meant roughly 100 PDUs for one message. Re-check the value if you
tuned around that. Failing over to a different vendor still starts a fresh budget.Do I need RabbitMQ?
Do I need RabbitMQ?
amqp.bridge.degraded.Messages are accepted and then vanish. Where do I start?
Messages are accepted and then vanish. Where do I start?
maxAttempts is the only reason that means routing. headerNotApproved, templateNotMatched,
missingMandatoryTlv, insufficientCredit and filtered all mean the message was refused before
routing was ever reached. Full walk-through:
Nothing is delivered.