Friday, July 10, 2009

[Chris]: Understanding delivery reports

One of the great parts of text messaging is the delivery reports. These tell us messages are being delivered or why they did not make it, in real time. In fact, recently I sent an email campaign out and got completely underwhelmed when no one read it instantly!

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
2xx: Rejected for a permanent reason and number should be suppressed
  • 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
30x: Rejected due to a premium rate credit issue and can be retried again
  • 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)
35x: Rejected due to a user or carrier based reason
  • 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

Power your business with our robust, scalable and simple to use SMS platform. Learn more about our Partner Network at:

www.interlinked.mobi

Our simple to use, dedicated API service, leveraging our relations with leading UK aggregators to keep your costs down.

www.smsgatewayhq.com

Older Posts