ENGINEERING NOTE 07 / 50 · SMS
Classify SMS failures before choosing a remedy
No inventory, allocation failure, target rejection and waiting timeout are different failure classes. A useful error model connects each class to an actionable next step.
Published by OPEN RAMBO. The engineering patterns and pseudocode illustrate designs, not a documented product API. Numerical examples are illustrative.
Name the failed stage
Attach a stage to the error: quote, allocation, target send, receipt or verification. The receiving service can observe only some stages directly. If the customer says the target rejected the number, store that as reported evidence rather than a verified upstream result.
Avoid one generic retry button
An authentication error needs sign-in; no inventory needs an availability check; an unresolved purchase needs order reconciliation. Repeating a purchase after every transport failure can create duplicate orders. Offer a status check when the previous outcome is unknown.
Keep public wording safe
Expose a stable error category and support reference while retaining detailed upstream diagnostics privately. Remove credentials, full numbers and message contents from user-facing stack traces. Product branding can remain consistent without pretending every failure has the same cause.
Illustrative implementation
error = {"stage": "allocation", "code": "OUTCOME_UNKNOWN",
"retry_action": "check_existing_order",
"support_ref": "demo-42"}Acceptance check
Test that every error code has a next action, and that an unknown purchase outcome never automatically creates another purchase.