Technical note
SMPP, delivery receipts, and operational reality
Wholesale SMS platforms live in the gap between what partners want (instant, binary delivered or failed) and what upstream routes actually provide (delayed DLRs, ambiguous intermediate states, and vendor-specific cause codes).
DLRs are events, not guarantees
Treat delivery receipts as asynchronous events linked to message IDs you control end to end. Persist outbound submits before you ack partners, and never infer delivery purely from SMPP submit success.
Normalize cause codes carefully
Upstream cause codes do not translate cleanly to a single public enum. Maintain a mapping table with documented lossy conversions, and expose raw vendor codes internally for NOC investigations.
Dashboard honesty
Partner dashboards should distinguish submitted, accepted by upstream, delivered, failed, and unknown/expired. Hiding the unknown bucket creates support debt when a route silently stops returning receipts.
Operational loops
Alert on DLR latency percentiles, not only error rates. Route changes should be visible in auditing tools. When Jasmin or similar SMPP routers are in the path, document which hop owns receipt correlation so on-call engineers know where to look.