SMS Routing Logic

For the sake of clarity, this section will define the routing logic that NowSMS uses to determine which connection should be used for routing an SMS message for outbound delivery.

When NowSMS routes a message, it first looks to see if a sender address has been specified for the message submission (normally there is not a sender address specified, unless you submitted the message via HTTP and specified a “Sender=” parameter). If a sender address was specified, then NowSMS checks to see if the sender address matches the “Default Sender Address” that is configured for any of the SMSC links (or the “Phone Number” associated with a GSM modem). If NowSMS finds a match, then it will route the message only via an SMSC connection with a matching sender address.

If NowSMS did not find a match on the sender address, then it evaluates the recipient address, and it will look to see if it finds a match in the “Preferred SMSC Connection for” recipient address masks associated with any of the SMSC connections. (These recipient address masks can be wildcards such as “+44*” to match any phone number that starts with “+44”.) If NowSMS finds a match, then it looks for the longest mask that provides a match, and routes the message via the connection with the longest matching mask. (For example, if you were sending to +441624999999, and you had one connection with a mask of “+44*”, and another with “+441624*”, then the connection with the mask of “+441624*” would be used as it is a longer match than “+44*”.)

Patterns consist of a phone number string, and can include the wildcard characters “*” and “?”. The “*” character matches any number of characters, and the “?” character matches any single character.

If there is no match on the recipient address mask, then the message will be routed via any connection that has “Support any outbound message traffic” checked.

It should also be mentioned that if NowSMS found multiple matches on the sender address, it evaluates the “Preferred SMSC Connection for” recipient address masks for each of the connections that had a sender address match.

Beginning with the NowSMS 2007 release, an HTTP parameter setting has been added that can be used to explicitly route a message via a particular SMSC, so that it is not necessary to always use the sender/recipient matching logic, if it is not appropriate for your configuration.

When a message is submitted via HTTP, the HTTP interface supports a parameter of “&SMSCRoute=xxxxx”, where the value of this setting can be the name of a defined SMSC (e.g., “Bluetooth Modem” or “SMPP – a.b.c.d:xyz”). Or, rather than using the SMSC name, it can be a route name that is defined as associated with one or more SMSCs. To define a route name for an SMSC, it is necessary to manually edit SMSGW.INI, and under the appropriate section header (e.g., [Modem – Bluetooth Modem] or [SMPP – a.b.c.d:xyz]), add RouteName=xxxxx. It is possible for multiple SMSCs to share the same route name, meaning that if a message is submitted via HTTP with the “&SMSCRoute=xxxxx” parameter, it will be routed outbound over the first available SMSC that is configured with the RouteName=xxxxx setting.