Оригинал: http://www.rattler.kiev.ua/ru/kannel-smsc-failover
Автор: Михаил Бочкарев, Net Style
При внедрении SMS-сервисов иногда возникает необходимость организовать возможность отправки сообщений через запасное подключение к SMSC, если основное подключение отсутствует.
Например, как отображено на диаграмме ниже, в нормальной ситуации нужно отправлять сообщения на SMSC 1, но в случае аварии переключаться на отправку через SMSC 2.

Рассмотрим, каким образом можно решить это с помощью Kannel так, чтобы для внешних приложений все оставалось прозрачно.
Опустим здесь настройку параметров SMPP и будем считать, что у нас уже создана конфигурация Kannel с двумя секциями "group = smsc".
Первая секция:
# Основное подключение group = smsc
smsc = smpp
smsc-id = "smsc-1"
...
и вторая:
# Резервное подключение group = smsc
smsc = smpp
smsc-id = "smsc-2"
...
Как видно, эти секции отличаются параметром smsc-id и при отправке сообщения с помощью sendsms API можно указать нужное подключение (например, smsc=smsc-1).
Переходим к изменению настроек Kannel
Сперва мы создадим виртуальный идентификатор smsc, через который будут доступны оба соединения. Для этого используем параметр allowed-smsc-id, который указывает, какие значения HTTP-параметра smsc применимы к соединению.
group = smsc
smsc = smpp
smsc-id = "smsc-1" allowed-smsc-id = "virt-smsc" ... group = smsc
smsc = smpp
smsc-id = "smsc-2" allowed-smsc-id = "virt-smsc"
Как видно, у нас появился параметр allowed-smsc-id с одинаковыми значениями в обоих секциях. Теперь, если указать в запросе HTTP параметр smsc=virt-smsc, то сообщение может быть доставлено через любое из указанных подключений.
Теперь перейдем ко второй задаче и укажем, что по возможности нам необходимо передавать сообщения через smsc-1. Для этого мы будем использовать еще один параметр - preferred-smsc-id, который указывает предпочтительное соединение для данного значения параметра smsc.
group = smsc
smsc = smpp
smsc-id = "smsc-1" allowed-smsc-id = "virt-smsc" preferred-smsc-id = "virt-smsc" ... group = smsc
smsc = smpp
smsc-id = "smsc-2" allowed-smsc-id = "virt-smsc"
Теперь, если отправить через sendsms API сообщение с указанием smsc=virt-smsc, то оно будет доставляться через smsc-1 при доступном основном подключении, а в случае его недоступности - через smsc-2.
GET 'http://127.0.0.1:13013/cgi-bin/sendsms?user=test&password=test&smsc=virt-smsc&from=1234&to=380012345678'Данную конфигурацию можно легко проэмулировать с использованием fakesmsc перед тем, как запускать в боевой режим - описанные выше параметры с smsc = fake работают адекватно.