Pull to refresh

Начало работы с смс-шлюзом Kannel

Reading time3 min
Views45K

Предистория


Начальство поставило задачу организовать смс-рассылку для структурных подразделений организации. Компания-провайдер sms-рассылки предоставляет протокол smpp. Необходимо было организовать рассылку через smpp коротких текстовых сообщений, получать отчеты о доставке. В качестве sms-шлюза был выбран Kannel.
Статья представляет из себя «быстрый старт» по Kannel и содержит в себе базовые настройки шлюза и примеры кода, на основе которых можно написать собственную систему смс-рассылки.
Установка и конфигурирование будет рассматриваться на примере Fedora.

Ремарка


Эта статья не является клоном этой http://habrahabr.ru/post/124302 и этой http://habrahabr.ru/post/123380 статей.
Я знаком с ними и пользовался ими в процессе работы, моя и эти статьи будут иметь много общего, но хотелось как-то систематизировать всю накопленную в процессе работы информацию для дальнейшего использования в работе.

Установка и настройка


Устанавливаем пакет kannel:
yum install kannel
Создаем пользователя kannel
useradd kannel
Редактируем файл /etc/kannel.conf

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

group = smsbox
bearerbox-host = "127.0.0.1"
sendsms-port = 13003

group = sendsms-user
username = foo
password = bar
concatenation = true
max-messages = 20

group = smsc
smsc = smpp
smsc-id = id
host = domain.com
port = 3700
transceiver-mode = 1
smsc-username = "login"
smsc-password = "password"
system-type = "VMA"
address-range = ""
log-file = "/var/log/kannel/smsc-operator.log"
log-level = 0


Стартуем kannel
/etc/init.d/kannel start

Для того, чтобы убедиться, что все работает заходим по адресу:
mydomain.com:13000/status

Отправка смс


Для того, чтобы отослать смс в простейшем случае надо набрать в адресной строке:
domain.com:13003/cgi-bin/sendsms?user=foo&pass=bar&from=Test&coding=0&to=38050000000000&text=Test1
Данным приемом можно воспользоваться для теста, но в реальной обстановке он не годится. Да и хочется отсылать смс не в транслите, а на русском языке. В этом случае подойдет следующий код:
function send_sms($from, $to, $mytext)
{
$mytext=urlencode(iconv("utf-8","ucs-2be",$mytext));
$url = "http://domain.com:13003/cgi-bin/sendsms?user=foo&pass=bar&from=$from&coding=2&to=$to&text=$mytext";
file_get_contents($url);    
}


Если же хочется слать в транслите (или просто полностью на английском языке), то отпадает необходимость перекодировки текста и в адресной строке используется параметр coding=0.
function send_sms_translit ($from, $to, $mytext)
{
$mytext=urlencode($mytext);
$url = "http://domain.com:13003/cgi-bin/sendsms?user=foo&pass=bar&from=$from&coding=0&to=$to&text=$mytext";
file_get_contents($url);    
}

Стоит отметить, что длинные смс таким образов посылаются корректно абсолютно никаких проблем не возникает.

Отчеты о доставке


Для получения отчетов о доставке нам необходимо присваивать id каждого смс и передать Kannel адрес, который тот должен вызвать при получении отчета о доставке.
Для начала приведу код
function send_sms($from, $to, $mytext, $smd_id)
{
$mytext=urlencode(iconv("utf-8","ucs-2be",$mytext));
$dlrurl=urlencode("http://domain.com/smsdeliv.php?smsid=$sms_id&type=%d");
$url = "http://domain.com:13003/cgi-bin/sendsms?user=foo&pass=bar&from=$from&coding=2&to=$to&dlr-mask=1&dlr-url=$dlrurl&text=$mytext";
file_get_contents($url);
}

В параметре dlr-url мы передаем адрес, который будет вызван, когда будет получен отчет о доставке.
Параметр dlr-mask определяет, какие именно типы сообщений о доставке мы хотим получать.
Подробно механизм работы этой схемы описан на странице
www.kannel.org/download/kannel-userguide-snapshot/userguide.html#DELIVERY-REPORTS.
Там же приведены типы сообщений о доставке и их числовые значения.
Я не вижу смысл приводить их тут дополнительно.
На этом все, спасибо за внимание.
Tags:
Hubs:
+4
Comments5

Articles