submit_sm. The response carries a message id, and — as over REST — that
response means accepted, not delivered.
The fields that decide an outcome
registered_delivery maps to receipt levels
FireFlo honours the octet rather than treating it as a boolean:
0x11 is the SMPP spelling of dlr_level: 3 — both progress and outcome. 0x01 gives you
outcomes only, which is what most integrations want.
Long messages
Two ways, and they cost the same:- Split them yourself, setting the UDH and the concatenation bits in
esm_class. You send Nsubmit_smand get N ids. - Send one long body and let the gateway split it.
TLVs
An optional parameter is extracted only if the listener declares the tag inregistered.tlvs.submit. Undeclared tags are discarded, not passed through — silently, at
ingress, before anything else runs.
So if a tag you send never reaches the carrier, the first question is whether your provider has
declared it, not whether you sent it correctly.
Where a value ends up coming from, in precedence order: your submit_sm beats your credential’s
defaults, which beat the vendor’s defaults. The exception is a whitelist stamp in replace mode,
which is meant to win — that overwrite is the approval.
Content approval on a long message
Throughput
Two ceilings, and they are different things:- Window size (
conf.maxPending.default, 1000 by default) — how manysubmit_smyou may have unacknowledged. Waiting for each response before sending the next makes round-trip time your limit regardless. - Your account’s TPS — exceeding it is throttled, not silently dropped.
Debugging is your provider’s switch, not yours
PDU and byte-level logging is off by default, deliberately: bind PDUs contain passwords, andsubmit_sm PDUs contain phone numbers and message bodies.
log.pdus exists but is opt-in and temporary, and the output is sensitive. If you need it, ask —
and expect it to be turned back off.
Related
Status codes
What each
command_status means and whether it is worth retrying.Receipts and MO
deliver_sm in both its roles.