The downside is lack of consistency across networks (or carriers). Whilst all US networks tell us a message failed to get delivered, only AT&T, Cricket, Dobson, T-Mobile, US Cellular, Verizon and Virgin say it got successfully delivered. This leaves out a number of carriers like Sprint and Centennial. The situation is totally different in the UK, were accurate info is sent for all networks (O2, Orange, T-Mobile, Three, Virgin, Vodafone, Guernsey, Jersey & Manx).
A delivery report will contain different status codes. We have put together broad meanings for each and split into similar categories, but sometimes a network will interpret differently and we won’t find out until further investigation.
Status code meanings are:
0: Message delivery in progress & no info has been received yet
1xx: Successful delivery
- 100: Delivered OK
- 200: The number is invalid or has been barred
- 201: The number is blocked by us as its on a deactivated number list or has texted STOP
- 301: Insufficient credit to make payment
- 302: Handset is restricted and cannot make premium payments
- 303: Handset has a user bar in place (eg a parental block)
- 350: Blocked by network for a variety of reasons, eg parental block or no SMS plan
- 351: The user has blocked the ability to receive SMS messages
- 352: The SIM card is full (Yes, it still happens!)
- 353: The user cannot be found on the network, for example they could be overseas
- 354: The network had a technical problem and did not send the message
- 355: The message is deemed inappropriate and was not sent (very rare)
- 356: The message expired as the handset was turned off for more than 24 hours
Of the reason codes, 350 & 351 are the hardest to understand as they are pretty ambiguous. For both of these, I suggest investigating with the user and their carrier if they raise a query.
We have also discovered reason 356 can have another meaning! People on prepay handsets who no longer use them will discard their old SIM card. This puts it into a permanently turned off state, but it remains “active” in the eyes of the network for many months afterwards. To counter this, I suggest your application suppresses numbers that consistently return a 356 error code. Our Interlinked platform does this automatically after 2 failed attempts.
Best Practices
You want to aim to get all your messages return a 200 report. Anything with a 2xx code should be immediately suppressed. Anything with 35x should be suppressed after 2 or 3 attempts over a couple of weeks.
Why suppress?
If the user raises a query in the future and you need to provide evidence of what happened, then you can do so. If you deleted the user, you’ll also lose all their info and make life very hard for yourself!

0 comments:
Post a Comment