Vendor and server
Vendor
A connection out to whoever carries your traffic. FireFlo dials it. Configuration calls it
smppclient.Server
A listener your customers bind in to. FireFlo accepts. Configuration calls it
smppserver.smppclient and smppserver, and always will — they are what the
gateway reads. They never reach the interface, and they are not used in prose on this site outside
code blocks and key names.
Both are workers, and share a set of base settings.
Account, login, product
One account, many logins. This is why the rate ceiling is keyed on the account rather than the
credential — a per-login limit would let a customer raise their own by creating another login.
system_type on an SMPP bind, then the credential’s product
field. HTTP callers have no bind, so the credential value is the only source.
Routing table, rule, chain, group
A routing table is a named list of rules, evaluated top to bottom; the first match wins. A rule’s target may be a worker, another table — which is a chain, and how[default] sends text
messages into [MESSAGE] — or a group.
A group is a set of vendors with a policy: round-robin, weighted or failover. It skips
members that are suspended or not accepting, which is the failover a single-target rule cannot do.
An LCR table is marked ->function(LCR) and inverts the usual rule: every matching rule is a
candidate, and the cheapest vendor wins. Rule order is irrelevant there.
Filter
A named, reusable set of conditions, shared by routing and rating so the same predicate is not written twice.Scope and tariff
A scope is the left-hand side of a rate rule, and which side of the trade it is depends entirely on what it names:
Nothing in the schema distinguishes them. The gateway tells them apart by which lookup asks, which is
why the panel groups them as What we pay and What we charge rather than one list.
A tariff is the set of price rules for one account.
Message, segment, part
A message is what a customer submits. Longer than one SMS, it goes out as several segments, andsmsg.restapi.billing.units decides whether that is charged once or per segment.
Whatever the billing unit, a message leaves exactly one
part_no = 1 row in cdr_submit. Retries
do not add rows. That invariant is what makes counting messages and summing money the same question.Prepaid and postpaid
Both refuse identically —
0x402 over SMPP, 402 with insufficientCredit over HTTP — so a
customer’s integration never needs to know which it is on.