Key Takeaways
- Deliverability is not one number. Split submit, radio send, carrier DLR, and user-reported receipt.
- A canary to staff handsets will catch a dead SIM faster than a weekly average.
- Missing DLR is not the same as an undelivered message on a SIM path.
- OTP and marketing need separate SIMs so campaign filters cannot poison login codes.
- Retries burn operator airtime. Count them or your “cost per delivered OTP” is fiction.
- Service pricing is devices plus SMS send volume; the carrier still bills the radio.
What “delivered” actually means
How to measure deliverability on an Android SMS gateway app is a measurement problem, not a slogan. The API can accept a job, the phone can hand it to the modem, the operator can swallow it, and the recipient can still never see it — or they can see it while your DLR stays pending. If you publish one percentage to a board slide, you will eventually lie to someone.
This path uses your SIM. SMS Gateway meters devices and SMS send volume; you supply the Android phone and operator credit. Free is 300 SMS lifetime. Developer is 25,000 SMS per year. Paid high-volume plans uncap platform send volume and still meter devices. Measurement traffic counts. So do retries.
“If your only signal is a green dashboard tile, you are measuring the control plane. Recipients live on the radio.”
Start with canaries on staff numbers, then layer DLR, then user-reported gaps. Keep OTP off promotional SIMs so a campaign filter cannot look like an “OTP outage.” Confirm live status fields in the Developer Center; this page teaches how to interpret them.
The four layers people confuse
Treat these as separate counters. Mixing them is how teams “fix” the wrong hop for a week.
- Accept / queue. Your backend got an id back. The phone might be offline. This is availability of the control plane, not delivery.
- Radio send. The modem accepted the PDU. OEM rate ceilings, airplane mode, and a missing SMS-capable SIM show up here.
- Carrier DLR. The operator (when it bothers) says submitted, delivered, or failed. On many consumer SIMs this is incomplete.
- Human receipt. The code arrived in time, or the shipping SMS was readable. Only a canary or a user ticket proves this layer.
Aggregator CPaaS products often expose richer DLR because they sit on A2P contracts. A SIM gateway inherits whatever the handset and the home operator expose. That is not a bug in the Android app; it is the network you chose. Read SMS delivery reports alongside this how-to so you do not invent statuses the radio never sent.
Metrics worth putting on a dashboard
| Metric | What it proves | What it does not prove | Cadence |
|---|---|---|---|
| Accept rate | API and queue are up | Anyone received SMS | Realtime |
| Send success on device | Modem took the job | SMSC delivered it | Realtime |
| DLR delivered / failed / pending | Operator feedback when present | Complete coverage on consumer SIMs | Hourly |
| Canary RTT | Staff phone got a code | Every customer network | Every 5–15 min |
| User “code not received” | Real pain | Root cause by itself | Daily review |
| Airtime remaining | Prepaid will not fail closed tonight | Quality of wording | Daily |
Segment every chart by device id and SIM slot. A blended fleet average will hide one dying prepaid SIM behind four healthy postpaid OTP phones. Dual-SIM routing mistakes show up as “weird DLR on slot 2” — see multi-device and dual SIM.
Canaries beat averages
A canary is a message you send to a number you control on a schedule. Use at least two: one on the same operator as the sending SIM, one on a different operator. OTP canaries should use the production template with a clearly fake code prefix so nobody files them as real logins.
Measure time from API accept to SMS arriving on the canary handset (human or instrumentation). If that stretches while DLR still says delivered, you have a radio or OEM delay, not a “carrier SLA breach” you can invoice anyone for. SIM paths do not come with aggregator-style global SLAs.
After OEM updates, battery-optimization changes, or SIM swaps, run extra canaries before customer traffic. Cold handsets behave worse than a phone you just unlocked. Measure on the shelf unit, not on the engineer’s pocket phone.
When DLR is missing or late
Pending DLR for minutes is common. Missing DLR forever is also common on consumer routes. Do not auto-retry OTP on “no DLR” without idempotency — you will double-text users and double-spend airtime. Retry on hard send failure, on a user-driven resend, or on a canary that proves the lane is dead.
Wire webhooks for delivered and failed events, verify signatures, and store the raw payload. Support will ask “what did the operator say?” and a screenshot of a dashboard tile will not be enough.
If DLR success collapses while canaries still arrive, trust the canary and investigate reporting, not the radio. If canaries die and the device is online, suspect airtime, SIM bars, roaming, or an OEM killer pausing background SMS.
Wording, quiet hours, and filters
Deliverability is also content. Spammy wording, shared URL shorteners, and ALL-CAPS OTP templates get filtered on some networks. Quiet hours reduce complaint volume even when the DLR graph looks fine. Promotional lanes need STOP language; OTP lanes need short, stable templates. Do not A/B-test marketing copy on the OTP SIM.
List hygiene matters for bulk. A CSV of old numbers inflates failure rates and trains the operator to dislike your IMSI. Consent is your obligation; the gateway is transport. The bulk SMS use case page is the right companion when the measurement problem is actually a list problem.
National regulators and the GSMA describe A2P filtering as a network integrity issue. You will not talk a consumer SIM into aggregator-grade inbox placement by “optimizing” one dashboard number.
What measurement costs
Canaries spend operator credit. A 5-minute OTP canary on two numbers is ~17,000 SMS/year before production traffic. Budget it. Failed retries during incidents spend more. Platform volume still meters on your SMS Gateway plan; Developer will pause when 25,000 SMS/year is exhausted, Free at 300 lifetime. Starter / Professional / Business do not cap platform volume like Developer, but devices still meter and the carrier still bills airtime.
Do not load-test “carefully” against a production customer list. That is how SIMs get a reputation. Use seeded numbers and a single device first. Throughput follows radios, not a slide that says you need 500 SMS/second from one phone.
Weekly measurement loop
- Monday: review canary gaps, DLR pending piles, and airtime.
- After any OEM or app update: extra canary burst on the shelf phone.
- After template changes: ten staff sends before customer OTP.
- After list imports: sample 20 numbers, not the whole CSV at once.
- On-call: distinguish empty prepaid from webhook bugs using the four-layer split.
Name an owner. Deliverability that “everyone watches” is watched by nobody at 2 a.m.
Decision guide
You are ready to promise customers a login-code path when canaries are green on two operators, OTP is on its own SIM, retries are idempotent, and finance understands airtime is not included in the gateway fee. Delay if you only have accept-rate dashboards. If you need contractual DLR SLAs across many countries with no handsets, that is a CPaaS buy for that lane.
Checklist
- Four-layer metrics, not one blended %.
- Canaries on-net and off-net.
- OTP isolated from marketing.
- Webhook signatures verified.
- Airtime and retry budget written.
- Cold-handset test after OEM changes.
- No customer-list load tests.
- Owner named for weekly review.
Next steps
Pair this how-to with the delivery reports in-depth guide, the device setup guide, and device and SMS volume pricing. Measure on real handsets before you quote a latency number in a sales call.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- SMS API documentationLive endpoint reference
- device and SMS volume pricingPlans and allowances
- Android SMS gateway product guideDefinition, product, and how to buy
- download the Android gateway appGet the APK





