Three ways to write a rule that can never be true
Each of these loads without complaint, matches nothing, and costs an afternoon.The grammar
Target is a worker
instance (vendor1, smppserver.smpp), a group, or another table to chain into (MESSAGE).
- Control panel
- routingTable.conf
Routing lists each table with its rules in order. The editor validates the operator against
the field before saving, refuses a numeric operator on a text field, and warns about a regular
expression written into a literal operator.
Operators
Any operator can be negated with a leading!.
The four text comparisons are lexicographical, not numeric —
greaterThan on a phone number compares
strings.
Who sent it
product is how one customer selects routing per session: the same credential binding with
system_type=premium and system_type=bulk produces two sessions that route differently. See
Concepts.
Message types for type rules: 0 text, 10 binary, 11 UCS-2, 14 flash, 17 push, 18 delivery
receipt.
Conditions on the target, not the message
Prefixing a field withtarget. reads a field of the destination worker instead, which is how a rule
steers around a vendor that is backing up:
queueSize, sentPendingRate, sentDeliveredRate, sentFailRate — matched
case-insensitively, and an unrecognised one is refused at parse time with the four listed.
marginPercentage and marginStatus are message fields, so drop the target. prefix and they
resolve. Be aware of what they hold: both are set on the submit response, after the message has gone,
so a routing condition on either reads NOT_CALCULATED on every first attempt.Copy and continue
A+ on the target copies the message to that target and carries on scanning, rather than routing
and stopping. In the database it is the copied column.
Vendor groups
A rule may target a group instead of one vendor. The group picks a member, skipping any that is suspended or not accepting — that skip is the failover a single-target rule cannot do.One message, one debit, one destination. A group always selects exactly one member, and
+copied
on a group rule still copies to one member — fanning out would be N sends against a single charge.If every member is down the rule sends nothing, logs cause=group-all-dead naming everyone it tried,
and the scan continues to the next rule, which is what keeps a fallback rule written below a group
rule reachable.