Настройка Kannel. (Kannel. WAP и SMS гейт).

Эту статью я написал для журнала «Сетевые решения».

Дело было давным-давно (несколько лет назад). Я еще только осваивал Linux и обратил внимание на отличный инструмент – Webmin, который позволял удаленно управлять Linux-машиной. (Сегодня этот инструмент уже не кажется мне таким уж отличным). В одном из разделов я наткнулся на модуль, который назывался Wap & SMS Gate. Это меня заинтересовало, но не более того. Но где-то в мозгу засело – есть такой бесплатный SMS-гейт — Kannel! Совсем недавно(статья датирована 2005г.) я решил заняться этой темой. Что из этого получилось – судить вам.

P.S. В статье не описана настройка WAP гейта.

Для чего же может понадобиться этот самый SMS-гейт (или шлюз)? Его задача — принимать и отправлять SMS-сообщения через веб. Он является связующим звеном между пользователем и SMS-центром мобильного оператора. Забегая вперед, скажу, что завязать kannel и SMS-центры наших мобильных операторов (Velcom, MTS) мне не удалось по причине нежелания операторов поделиться информацией об SMS-центрах (но об этом ниже). Но никто не мешает нам создать свой SMS-центр, в роли которого будет выступать ваш лучший друг и помощник – мобильный телефон. Конечно, это уже не так здорово, как соединение с SMS-центром напрямую (деньги за SMS платить все-таки придется). Итак, поставим перед собой задачу – создать SMS-центр, доступ к которому будет осуществляться через веб, и который позволил бы нам отправлять SMS с любого компьютера, подключенного к сети (ну или хотя бы с любой из машин в пределах локальной сети).

Для начала следует загрузить исходники kannel.

Исходные коды Kannel можно свободно загрузить с http://www.kannel.org (около 2.5 мегабайт – радуйтесь, пользователи dial-up). После загрузки приступим непосредственно к установке. Установка стандартна для Linux и занимает совсем немного времени.

./configure
make
make install

С некоторых пор Kannel уже входит в дистрибутив Debian, так что возможно ничего качать не придется.

Можно также собрать kannel с поддержкой базы данных. Мне пока эта возможность не нужна, но я попробовал собирать kannel с поддержкой MySQL. Для этого следует указать опцию –with-mysql при конфигурировании. На моей системе я столкнулся с трудностями. Вот возможное решение проблемы:

запускаем в каталоге с исходниками kannel команду
grep -Frn «list_delete(» *
и затем заменяем в найденных файлах в найденных строках
list_delete на gw_list_delete
После этой операции все собралось без ошибок.

Теперь все готово для запуска kannel.

Kannel состоит из трех частей, которые по терминологии разработчиков называются boxes — Bearerbox, Smsbox и Wapbox. Bearerbox — главный модуль. Он принимает SMS-сообщения с мобильного телефона и пересылает их в wapbox и smsbox. Поддерживается множество WAP- и SMS boxes.


Конфигурация kannelКонфигурационный файл kannel условно можно разделить на три части: конфигурация bearerbox, конфигурация smsbox и конфигурация wapbox. Конфигурационный файл может быть один, но если он у вас разросся до неприличных размеров, то можно разделить его на части следующим образомinclude = «wapbox.conf»

В этом примере в файле wapbox.conf содержатся команды по настройке wapbox. Пустая строка в файле конфигурации служит для разделения различных групп параметров. В моем простом случае деление конфигурационного файла на части я не выполнял.


Конфигурация ядра KannelПриступим! Наипростейшая рабочая конфигурация ядра выглядит примерно так:

group = core
admin-port = 13000
admin-password = mypass

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

group = core

Этот параметр должен присутствовать обязательно.

admin-port = 13000

Это также обязательный параметр. Это номер порта, который прослушивает kannel для того, чтобы можно было через веб-интерфейс управлять нашим SMS- и WAP-гейтом. Желательно выставлять значение > 1023.

admin-password = mypass

Пароль для управления нашим WAP- и SMS-гейтом (обязательный параметр).

status-password = mypass

Пароль для просмотра состояния гейта. Я лично убрал эту строчку из конфигурационного файла.

smsbox-port = 13001

Этот параметр – номер порта к которому происходит соединение smsbox. Ставим 13001 (вы, конечно, можете поменять его на другой).

wapbox-port = 13002

Этот параметр – также номер порта, к которому соединяются wapbox. Я пока закомментировал его.

log-file = kannel_core.log

Это понятно – имя лог-файла.

log-level = 0

Уровень записи информации в лог файл. 0 — debug, 1 — info, 2 — warning, 3 — error и 4 – panic.

access-log = access_kannel.log

Лог-файл, в который записывается информация о принятых и отправленных SMS.

store-file = store_sms

Файл, в который записываются SMS-сообщения.
Итак, начало моего конфигурационного файла выглядит так:

#KANNEL CONFIG FILE
group = core
admin-port = 13000
admin-password = mypass
smsbox-port = 13001
log-file = /KANNEL/kannel.log
log-level = 0
access-log = /KANNEL/access_kannel.log
store-file = /KANNEL/store_sms


Запуск kannelДля запуска гейта служат команды:

bearerbox /path/to/config/file
smsbox /path/to/config/file
wapbox /path/to/config/file

Поддерживаются также параметры командной строки. Основные параметры:

-v, —verbosity

Уровень вывода отладочной информации. По умолчанию – 0 (debug). Поддерживаются также 1 — info, 2 — warning, 3 — error, 4 – panic.

-u, —user

От имени какого пользователя стартовать.

-p, —pid-file

В какой файл записывать PID

-d, —daemonize

Стартовать в виде демона.
Ну что, попробуем запуститься?

#bearerbox /KANNEL/kannel.conf

К сожалению, гейт не стартует. Как видно из нижеприведенного фрагмента лога – не определен ни один smsbox.

2005-10-28 16:21:57 [12001] [0] ERROR: No ‘smsbox’ group in configuration, but smsbox-port set

Давайте займемся дальнейшей настройкой.


Настройка SMS-центраЧтобы настроить SMS-центр следует в конфигурационный файл добавить группу smsc.

group = smsc

Это обязательный параметр.

smsc = at

Тип SMS-центра. Поддерживаются следующие типы SMS-центров:
— Nokia CIMD 1.37 and 2.0 (указываем значение cimd);
— CMG UCP/EMI 4.0 and 3.5 (emi);
— SMPP 3.4 (smpp);
— Sema Group SMS2000 OIS 4.0, 5.0 and 5.8 (sema);
— SM/ASI (for CriticalPath InVoke SMS Center 4.x) (smasi);
— GSM modem (at);
— Fake SMSC (fake) – SMS-центр для тестовых целей;
— HTTP-based (указываем значение http).

Так как я использую в качестве SMS-центра мой GSM-телефон Siemens C60, тоя указываю здесь at.

Здесь хотелось бы сделать небольшое отступление. Я в тестовых целях попытался узнать типы используемых нашими мобильными операторами (Velcom, MTS.BY) SMS-центров.
Я отправил с сайтов обоих операторов однотипные письма такого содержания:

Здравствуйте!
Я работаю над статьей, которая будет опубликована в журнале «Сетевые решения».
Тема статьи — настройка Open source WAP- и SMS-гейта Kannel.
Если это не составляет коммерческой тайны, не могли бы вы сообщить тип используемого вашей компанией sms центра.

В течение дня от обоих операторов пришел такой же однотипный ответ:

VELCOM:

Уважаемый Kirill!
Сожалеем, что не сможем Вам помочь. Запрашиваемая Вами информация не подлежит разглашению.
С уважением,
Отдел обслуживания клиентов Velcom.

MTS:

Здравствуйте, Кирилл,
на Ваш запрос уполномочен ответить: к сожалению, тип используемого СМС-центра относится к сведениям, составляющим коммерческую тайну компании. Поскольку настройка WAP изложена на нашем сайте http://www.mts.by, Вы, естественно, можете воспользоваться этим разделом сайта.

С надеждой на дальнейшее плодотворное сотрудничество,
XXXX XXXXXXXXX,
специалист по связям с общественностью.

Так что, к моему великому сожалению, протестировать работу Kannel с реальным SMS-центром не удалось (хотя очень хотелось).
Если бы были известны типы SMS-центров наших мобильных операторов, то можно было бы попробовать обойтись без GSM телефона, а отправлять SMS напрямую оператору. (Как наивен я был в 2005 году!) Но к сожалению подобной информацией я не обладаю. Итак мы определились – используем в качестве SMS-центра мобильный телефон.

smsc-id = “My sms centre”

Идентификатор SMS-центра.

log-file = sms_centre_log

Имя лог-файла, в который будет выводиться информация от SMS-центра.

log-level

Уровень вывода информации в лог-файл (0-5).

modemtype = siemens_c60

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

device = /dev/ttyS0

Устройство, к которому присоединен телефон.

speed = 57600

Скорость обмена данными.
Итак, описание SMS-центра у меня получилось такое:

Group = smsc
smsc = at
smsc-id = «My SMS centre»
log-file = sms_centre_log
log-level = 0
modemtype = siemens_c60
device = /dev/ttyS0
speed = 57600

Далее плавно переходим к настройкам собственно телефона. Мои рабочие настройки для siemens C60 следующие:

group = modems
id = siemens_c60 (эта строка повторяет строку modemtype в настройках SMS-центра)
name = «SIEMENS C60»
init-string = «AT+CSMS=1+CNMI=1,2,0,0,1»
(по умолчанию строка инициализации — «AT+CNMI=1,2,0,1,0» и именно эту строку, подходящую для вашего телефона, вам и предстоит где-нибудь узнать).
enable-hwhs = «AT\Q3»
need-sleep = true

Да, совсем забыл – наверное следует добавить еще один SMS-центр, который создан специально для тестовых целей – fake.

group = smsc
smsc = fake
port = 13004

Переходим к настройке smsbox

group = smsbox

Это обязательный параметр.

bearerbox-host = localhost

Компьютер, на котором запущен bearerbox.

smsbox-id = «my smsbox»

Идентификатор smsbox.

log-file = smsbox_log

Лог-файл.

log-level = 0

Уровень вывода информации в лог-файл.

sendsms-port = 13003

Порт, присоединяясь к которому мы можем посылать SMS-сообщения.
И последнее. Теперь осталось настроить раздел, который отвечает за авторизацию пользователей при посылке SMS через HTTP.

group = sendsms-user
username = “”
password = “”

(я решил не использовать пароли)
Давайте же наконец запустим все это хозяйство! Открываем две консоли и вводим в них команды для старта гейта и SMS-центра:
— в первую консоль:

bearerbox /путь к/конфигурационному/файлу/kannel.conf 2005-10-28 18:50:19 [13614] [0] DEBUG: Kannel bearerbox version `1.4.0'.
2005-10-28 18:50:19 [13614] [0] INFO: HTTP: Opening server at port 13000.
2005-10-28 18:50:19 [13614] [0] INFO: AT2[My SMS centre]: configuration shows modemtype
2005-10-28 18:50:19 [13614] [0] DEBUG: AT2[My SMS centre]: Found modems in config
2005-10-28 18:50:19 [13614] [7] INFO: AT2[My SMS centre]: opening device
2005-10-28 18:50:20 [13614] [7] INFO: AT2[My SMS centre]: speed set to 57600
2005-10-28 18:50:20 [13614] [7] DEBUG: AT2[My SMS centre]: --> ATZ^M
...........................
2005-10-28 18:50:20 [13614] [7] INFO: AT2[My SMS centre]: Phase 2+ is supported
.........................
2005-10-28 18:50:21 [13614] [7] INFO: AT2[My SMS centre]: AT SMSC successfully opened.

— во вторую консоль:

smsbox /путь к/конфигурационному/файлу/kannel.conf
.......................
2005-10-28 18:42:18 [13544] [0] DEBUG: Kannel smsbox version 1.4.0 starting

Похоже, у нас все получилось! Я не привожу полностью вывод bearerbox и smsbox, а оставляю лишь несколько самых важных строк – вы сами все увидите, когда запустите гейт.
Ну и что теперь? Попробуем посмотреть статус нашего гейта. Запускаем наш любимый IE под эмулятором (шутка). А если серьезно, то идем чем хотим по адресу http://localhost:13000 и видим нечто вроде:

Unknown command `/’.
Possible commands are:
status
store-status
log-level
shutdown
suspend
isolate
resume
restart
flush-dlr
stop-smsc
start-smsc

Теперь понятно – команды вводятся следующим образом:

http://localhost:13000/команда?password=mypass

краткое описание команд:

— status или status.txt — получить текущий статус гейта (самая интересная, на мой взгляд, команда);
— status.html — HTML-версия того же (отличий от plain-text версии мной замечено не было);
— status.xml – XML-версия;
— status.wml – WML-версия (самая, на мой взгляд, симпатично выглядящаяя страница).
— store-status (store-status.txt, store-status.html, store-status.xml) — просмотр очереди сообщений соответственно в text/html/xml-виде. — suspend – приостановка;
— isolate — изолирование сервера – прием SMS из внешних сетей заблокирован;
— resume — восстановление нормальной работы;
— shutdown – выключение;
— restart — перезапуск сервера.

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

— start-smsc (stop-smsc) — команды служат для запуска/остановки SMS-центров, перечисленных в конфигурационном файле.
— loglevel – команда для смены уровня вывода информации в лог-файл на лету.

Перейдем теперь к самому интересному – как же все-таки послать SMS? С kannel поставляется превеликое множество файлов конфигурации, ну и, конечно, нам изобретать велосипед не стоит (хотя никто не мешает попробовать) и можно воспользоваться готовыми решениями, которые можно найти в каталоге с исходными текстами kannel.
Итак, в /path/to/kannel/source/directory/contrib/kannel-monitor/ находятся файлы, скопировав которые на локальный веб-сервер и подредактировав их немного (внеся порты и пароли), можно получить очень информативную страницу о состоянии kannel и прямо с этой страницы производить основные действия по управлению WAP- и SMS-гейтом.

В каталоге /path/to/kannel/source/directory/contrib/php-admin находятся скрипты для посылки SMS и администрирования kannel. К сожалению заставить их работать на моей машине мне не удалось (кстати с подобной проблемой столкнулcя не только я), а разбираться в чужом коде не сильно хотелось, поэтому для посылки SMS я написал свои очень простые скрипты.
Для того, чтобы послать SMS, необходимо сформировать следующий запрос (точнее, URL):

http://localhost:13003/cgi-bin/sendsms?user=&pass=&from=37529XXXXXX&to=375296XXXXXX&text=KannelTest!

Так я и сделал – внес в адресную строку необходимые данные. Нажал ввод. Ничего – нажал еще раз безо всякой надежды на успех и… Знакомыми всем пользователям мобильных телефонов звуками захрюкали колонки, и через пару минут мне на второй телефон позвонила жена с вопросом, не пил ли я сегодня – что-то больно странные SMS от меня идут. Я сразу понял, что дело пошло лад.
Но таким образом слать сообщения крайне неудобно. Надо бы как-то упростить отсылку SMS. Я организовал каталог /var/www/sms на своем локальном веб-сервере, в который поместил два следующих скрипта:

/var/www/sms/index.php

/var/www/sms/send.php

<?
$mytext = $_REQUEST['mytext'];
$to = $_REQUEST['to'];
print "Telephone number: $to";
print "
";
print "SMS text: $mytext";
echo "
";
$url = " http://localhost:13003/cgi-bin/sendsms?user=&pass=&from=375296ХХХХХХ&to=$to&text=$mytext";
echo "SEND SMS"
?>

Скрипты совсем несложные, и разобраться в них, надеюсь, для вас не составит никакого труда. /* Вы можете написать скрипты и на других языках, понятно, что на php свет клином не сошелся :) Можете вообще не писать никаких скриптов, а лишь создать правильную веб-форму на «голом» HTML. – прим. редактора Сетевых решений. */

UPDATE! февраль 2010
У многих людей (в том числе и у меня) возникают трудности с назначением портов smsbox-port, bearerbox-port, sendsms-port. Представьте себе главный модуль kannel как некий черный ящик, к которому в свою очередь подключаются другие черные ящики smsbox (у каждого из них есть вход — sendsms-port через который наш браузер отсылает смс и выход — bearerbox-port, которым smsbox подключен к kannel). По совету одного из читателей (за что ему огромное спасибо) я набросал небольшую схему, которая, надеюсь поможет не запутаться в этом вопросе.

Готовые решения

Также я пытался найти программы (клиенты) для kannel, которые позволяют организовать удобный интерфейс для работы со шлюзом.
Поиск привел меня к двум проектам — playsms и ksms.

Установка этих скриптов довольно сложна и требует ручной правки конфигурационных файлов. После долгих мучений мне удалось установить ksms, но если бы интерфейс сей програмулины был бы на английском, то это еще можно было бы терпеть, но он выполнен на смеси английского и итальянского, и читать сообщения типа “AUTORIZZATI! Queste pagine NON contengono dati segreti” мне вскоре наскучило, и я обратил светлые очи в сторону playsms. Установка playsms не так страшна, как пугает автор в файле INSTALL, и прошла вполне успешно. Playsms предоставляет следующие возможности:

1. Поддержка записной книжки (как личной, так и общей для всех пользователей).
2. Поддержка шаблонов SMS-сообщений.
3. Собственно интерфейс для посылки SMS (поддерживаются kannel, clikatell, gnokii и доступ к внешним серверам отправки SMS).
4. Рассылка сообщений группе абонентов.
5. Просмотр и редактирование inbox/outbox.
6. Поддержка вставки в конец любого SMS-сообщения произвольной подписи.
7. Поддержка SMS-автоответов.
8. SMS-голосования.
9. Гибкое управление пользователями.

В общем и целом playsms мне понравился. Рекомендую, если не смущает нетривиальная установка.

Также хотелось бы отметить одну особенность – при подключении мобильного телефона в качестве SMS-центра, становится невозможно принимать входящие звонки. Телефон на стадии определения номера обрывает связь. Но, может, это и к лучшему.
Теперь, с любого компьютера локальной сети я имею возможность дистанционно отсылать SMS. Надеюсь, что мой вольный перевод руководства пользователя kannel поможет вам организовать нечто подобное и у себя в сети. Если у вас возникли какие-либо вопросы или предложения, со мной всегда можно связаться по e-mail или ICQ.

Advertisements

Настройка Kannel. (Kannel. WAP и SMS гейт).: 20 комментариев

  1. а smsbox что-то в лог должен плевать при попытке отправить (неважно удачной или нет)
    http://localhost:13003/cgi-bin/sendsms?user=&pass=&from=37529XXXXXX&to=375296XXXXXX&text=KannelTest!

    ?

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

    Кстати на страницу статистики заходит абсолютно с любым паролем, несмотря на то, что в конфиге он явно указан
    admin-password = barrel

  2. Афтар супер!!! не ожидал встретит такого в РУнете афтар респект!!! Есть вопрос как можно с помощью этого инструмента подключится к SMPP??

    • К сожалению нет. Но проблем никаких не должно возникнуть. Помогал в настройке нескольким людям. Все получилось.

  3. имеем дебиан.
    Установил каннел — все работает.
    установил плайсмс, вроде как прикрутил его к каннелу — не отправляет смс зараза, незнаю где искать…подскажите плиз.

  4. Вроде как информация по СМС центрам открытая и её можно получить даже из настроек СМС на телефоне. Не возникало проблем при настройке работы с реальными СМС-центрами.

    • Очень интересно. Не поделитесь информацией как можно получить информацию об используемом типе СМС центра из настроек СМС на телефоне?

      • Если через GSM-модем (COM, USB, телефон), то логично, что «at», а если напрямую к оператору и программно, то может быть предоставлен доступ к SMPP серверу. У операторов должна быть такая услуга — при заключении договора отправка смс через СМС-шлюз оператора по протоколу SMPP. Интернет смс-шлюзы тоже по SMPP часто предоставляют доступ. Или вопрос в чём-то другом?

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s