- Shipped
- September 7, 2026 at 4:48 AM UTC
- Author
- Kamo
- Commit
- 68ab5b6
Sending now succeeds and nothing arrives. Telnyx accepts the message, returns an id, and Verizon then refuses to deliver it: status delivery_failed code 40010 -- "The sending number is not 10DLC-registered but is required to be by the carrier." The 10DLC registration is the org's to complete and cannot be done from here. What IS a defect is that Kamo never showed any of it. Telnyx reports this on the inbound webhook, in the same envelope as a reply and distinguished only by event_type. InboundSmsNormalizer.parse correctly answers empty for a receipt -- it is not an inbound message -- and the controller turned that empty into a 400. So every delivery receipt was rejected, retried, and rejected again. Nothing in the service has ever written an outbound message's status after handoff: handleOutbound wrote QUEUED and DELIVERED appeared exactly once in the codebase, on the inbound path. A text the carrier had explicitly refused was indistinguishable, on every screen, from one the recipient was reading. So: parseDeliveryReceipt reads message.sent and message.finalized, and DeliveryReceiptService moves the message. Three things about it are easy to get wrong and each is pinned by a test. OUR number is the SENDER on a receipt, the mirror of every other payload on this endpoint -- getting it backwards resolves the wrong instance and fails the signature check against a carrier that never sent it. Receipts are not ordered, so a late message.sent must not walk a DELIVERED message back. And an unrecognised status counts as progress, never failure, so a carrier inventing one cannot show a delivered text as bounced. Receipts are verified exactly as inbound messages are, on both rails, because a forged one could mark a tenant's messages delivered at will. Second: checkHealth now asks whether US texting can work at all, rather than only whether the account answers. An account can be reachable, its number active, its messaging profile correct, every send accepted -- and every message refused by the carrier. Scoped to US long codes: toll-free uses a different verification and non-US numbers need none, and a warning that does not apply is one people learn to dismiss. Failing to ASK is not failing. The two messages already sent are marked FAILED; they had been sitting at QUEUED and rendering as fine.