When an SMS message is sent to a recipient, it is expected that it will deliver to the handset within seconds. However, delivering an SMS is a relatively complex process, and an SMSC takes several measures to ensure a reliable service.
An SMS may fail to deliver to a handset on its first delivery attempt for many reasons. When an SMSC is notified of a temporary problem either from HLR status information or an MSC acknowledgement, it can perform one or both of the following actions.
1. Re-send when handset is available.
An SMSC may send a command (MAP_REPORT_SM_DELIVERY_STATUS) to a destination network's HLR, requesting to be notified of when a subscriber handset is available to receive SMS.
A HLR knows that a subscriber is ready to receive SMS from one of the following actions:
- If a subscriber was out of network coverage, and then comes back into coverage, the HLR is notified with a Ready-for-SM command.
- If a subscriber handset was turned off or out of coverage for a long time, a Location Update command is sent to the HLR when the subscriber connects to the network.
- If the handset experiences a temporary problem such as memory full, then when the subscriber deletes messages to free up memory, a Ready-for-SM command is sent to the HLR.
After receiving one of these commands, the HLR will send an AlertSC command to each SMSC that has requested to be notified that a subscriber is ready to receive SMS. It is this process that results in SMS being delivered to a handset when it is turned on.
2. Time-based retry schedule
In addition to sc-alert notification, an SMSC may attempt to deliver an SMS according to a timed schedule. The schedule that is used is usually dependent on the error that was received. Temporary errors such as communication failures would be retried more frequently, for example every minute for 5 minutes, then every 10 minutes for 1 hour, then every hour for 24 hours.
Longer lasting errors such as absent-subscriber may be retried every hour for 7 days.