Key Takeaways
- Persist numbers in E.164 (+country code, no spaces). Render national format only in the UI.
- A missing plus or a leftover trunk zero is the most common “the API worked but nobody got the SMS” bug.
- Parse with a real library (libphonenumber or equivalent). Regex per country will rot the week you add a new market.
- Canary OTP to a staff SIM on each destination operator, not just your home country.
- You bring the Android phone and operator SMS credit. Gateway pricing is devices plus send volume.
Searchers looking for android sms gateway app how to multi country number formats usually already shipped a send call. The JSON returned 200. The phone showed Sent. The customer in Dhaka or London never saw a bubble. Nine times out of ten the body was fine and the MSISDN was not.
This how-to is the hub D (Android app) pass: how you type, import, and store numbers so a SIM in one country can reach a handset in another. Live request fields stay in Developer Center. You still supply the phone and operator SMS credit; service pricing is devices plus send volume.
Typed / CSV
01712 345678
Stored
+8801712345678
Shown to staff
01712-345678 (BD)
Why format bugs look like failed SMS
Android will often accept a send to a junk destination and hand it to the operator. The operator then rejects it, silently drops it, or delivers it to the wrong national number. Your DLR may sit on Sent forever. Support files it as “gateway down.” It was a string.
If you cannot round-trip a number through parse → E.164 → format-national and get the same subscriber digits, do not put it on a SIM.
ITU-T E.164 caps the international number at 15 digits. That is the interchange format. National notation is a display problem. Mixing them in one column is how Excel and intern-written regex create 911-style accidents.
Store E.164, display local
One storage shape: +, country calling code, national significant number. No spaces, hyphens, or parentheses in the database. The Android app’s contact screen can show a prettier version. The send path should read the canonical field.
Use libphonenumber (or a maintained port) with an explicit default region when the plus is missing. “Default region = US” on a Dhaka list will invent +1 numbers that look valid and never ring.
Country examples that break parsers
| Market | People type | E.164 to store | Usual foot-gun |
|---|---|---|---|
| United States / Canada | (415) 555-2671 | +14155552671 | Missing +1; NANP 10-digit assumed everywhere |
| United Kingdom | 07911 123456 | +447911123456 | Keeping the leading 0 after adding +44 |
| Bangladesh | 01712-345678 | +8801712345678 | Excel drops the 0; +88 vs +880 confusion |
| India | 09876543210 | +919876543210 | Trunk 0 left in; DND vs format mixed up |
| Indonesia | 0812 3456 7890 | +6281234567890 | Using 62 but keeping 0 → +620812… |
Geo spokes such as SMS gateway for Bangladesh and SMS gateway for the USA cover operator and consent context. They do not replace a parser.
What the Android radio actually dials
The telephony stack on the sending phone rewrites destinations for the current SIM’s numbering plan. A US SIM sending to +44… is an international send on that operator’s tariff. A Bangladeshi SIM sending to +880… is often domestic even if you stored E.164. That is why “international” in your app and “international” on the bill are not the same word.
Dual-SIM phones add a second numbering plan. The slot you pick for SMS is the plan that applies. See the dual SIM in-depth guide before you assume slot 0 and slot 1 share a country code.
Contacts and CSV in the gateway app
When you import a sheet into the Android app or the panel, lock the phone column as text. Prefix with a plus in the file. If the sheet is national-only, make the importer ask for a country and refuse to proceed on mixed lengths without a parse report.
Reject rows that parse to the same E.164 as another row (duplicates) and rows that parse to your own SIM (loopback). The contacts and lists feature is the product surface; this page is the numbering discipline that keeps those lists from poisoning OTP.
API and webhook numbers
Send payloads should already be E.164. Inbound webhooks should store number as received, then parse before you match a user. Some operators present inbound Caller ID without a plus. Do not match on raw string equality across countries.
Confirm field names in the SMS API documentation. The API companion is the design guide.
The plus sign, trunks, and leading zeros
The plus is not decoration. It tells every later hop “this is international notation.” If a channel strips plus characters (some older HTTP forms, some chat-to-SMS bridges), substitute 00-prefix only at the edge and still persist E.164 internally.
Trunk prefixes (0 in the UK, many EU and APAC markets) are national. They are not part of E.164. The mechanical error is +4407911… or +880017…. Your linter should flag a country code immediately followed by a 0 for those regions.
Canaries per destination country
Before you promise OTP in a new market, send five staff messages from the production SIM to a handset on that country’s operator. Confirm the notification shade shows the number you expect, not a short code and not a truncated local rewrite. Log parse failures as a product metric, not a debug print.
Airtime for international destinations is the operator’s problem and invoice. The gateway does not sell ILD minutes. Free tests are capped at 300 SMS lifetime. Isolate OTP SIMs so a bulk run cannot lock the radio while you debug a Bangladesh prefix.
Checklist
- Database column is E.164 only; UI may format nationally.
- CSV import uses text cells and a parse report (invalid / duplicate / default-region guess).
- No trunk zero after a country code.
- Default region for plus-less input is explicit per list, not inferred from the server’s locale.
- Staff canary on each new destination operator before customer OTP.
Next steps
Take ten real numbers from each market you serve, run them through your parser, and compare against what the Android messaging app shows after a send. Then lock the importer. Setup help: device setup. App install: download the Android gateway app.
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





