Skip to Content

Подключение Kannel к SMSC

Оригинал: http://rattler.kiev.ua/node/8
Автор: Михаил Бочкарев, Net Style

Если вы решили запустить какой-нибудь SMS-сервис, используя Kannel в качестве шлюза к SMS-центру, то одной из первых задач будет организация подключения к SMSC (SMS-Center) или SDP (Service Delivery Platform) мобильного оператора или агрегатора.

Если не учитывать особо извращенные варианты, когда оператор предлагает к использованию свой собственный протокол (привет Киевстару и МТС-Украина), то стандартом де-факто является использование SMPP (Short Message Peer-to-Peer). Kannel поддерживает протокол SMPP версий 3.3 и 3.4 (существует уже версия 5.0, но она и в Kannel не поддерживается, и широкого применения не имеет).

Базовые настройки Kannel

Для начала в файл конфигурации Kannel (в ALT Linux это будет /etc/kannel/kannel.conf) пропишем секцию core:

group = core
admin-port = 13000
smsbox-port = 13001
admin-password = foobar
log-file = "/var/log/kannel/kannel.log"
log-level = 0
dlr-storage = internal
store-file = "/var/lib/kannel/kannel.store"

В данном случае мы указали следующие параметры:

  • TCP-порт административного HTTP-интерфейса: 13000;
  • TCP-порт сервиса SMS-сообщений "smsbox": 13001;
  • Пароль администратора: foobar;
  • Файл с протоколом работы: /var/log/kannel/kannel.log;
  • Степень "болтливости": 0 (отладка);
  • Тип хранилища для информации о доставке SMS: internal (в памяти);
  • Файл для промежуточных данных: /var/lib/kannel/kannel.store;

А также пропишем самую простейшую конфигурацию SMSBox:


group = smsbox
bearerbox-host = "127.0.0.1"

В принципе, тут можно было бы еще много чего настроить, но мы пока что не будем сильно заморачиваться, т.к. сервис совсем тестовый и существует только в нашем воображении :-)

Что касается встроенного хранилища данных о доставке SMS, то в реальных сервисах лучше использовать для этих задач СУБД, чтобы не терять информацию в случае сбоя или перезапуска Kannel.

Что нужно получить от оператора

Прежде чем мы начнем подключаться к SMSC, необходимо получить у своего оператора данные, без которых настройку сможет провести лишь телепат, который в штате ИТ-отдела вашей компании вряд ли предусмотрен ;-)

Как минимум, нам потребуется следующая информация:

  • IP-адрес SMS-центра;
  • Версия протокола SMPP;
  • TCP-порт SMS-центра;
  • Имя пользователя;
  • Пароль

В случае использования протокола SMPP 3.3 портов будет два - для приема и для передачи сообщений. Но эту версию протокола уже потихоньку начинают забывать.

Вобще, имеет смысл уточнить сразу все возможные параметры: пропускную способность SMSC, тип системы, интервал отправки тестовых пакетов, используемые TON (Type Of Number) и NPI (Nubering Plan Identifier), формат идентификаторов сообщений и т.д.. Впрочем, персонал оператора и сам не всегда хорошо представляет, что и как у них работает, так что может потребоваться выяснять часть данных путем экспериментов и анализа логов.

Настраиваем подключение по SMPP

Вот мы и перешли к основной части, конфигурации подключения к SMSC:


group = smsc
smsc = smpp
smsc-id = smsc-operator
host = 111.111.111.111
port = 1111
transceiver-mode = 1
smsc-username = "my_login"
smsc-password = "my_password"
system-type = "VASP"
address-range = ""
log-file = "/var/log/kannel/smsc-operator.log"
log-level = 0

Собственно, эта секция содержит минимальную конфигурацию подключения по SMPP. В дальнейшем я постараюсь написать о различных настройках, которые могут пригодиться в реальных конфигурациях, а пока что считаем дело сделанным.

Теперь у нас прописано подключение к SMSC по протоколу SMPP 3.4 (tranceiver-mode = 1) по IP-адресу 111.111.111.111 и порту TCP 1111.

Также установлено протоколирование сообщений в режиме отладки, что позволит записывать дампы всех SMPP PDU, чем и может постепенно забить дисковое пространство.

Тестовый сервис

Естественно, после настройки хочется убедиться, что все работает. Посему, придется нам также настроить сервис, который будет на все MO (Mobile Originated) SMS отвечать фиксированной фразой.


group = sms-service
keyword = default
text = "Send beer instead of SMS!"

Теперь остается запустить сперва bearerbox:


$ /usr/sbin/bearerbox /etc/kannel/kannel.conf

...потом smsbox:

$ /usr/sbin/smsbox /etc/kannel/kannel.conf

И можно отправлять сообщения на сервисный номер, выданный оператором, получать ответы и радоваться успешному запуску.