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

в 8:13, , рубрики: php, sms, Песочница, телефония, метки: ,

Предистория

Начальство поставило задачу организовать смс-рассылку для структурных подразделений организации. Компания-провайдер 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

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

Отправка смс

Для того, чтобы отослать смс в простейшем случае надо набрать в адресной строке:
http://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.
Там же приведены типы сообщений о доставке и их числовые значения.
Я не вижу смысл приводить их тут дополнительно.
На этом все, спасибо за внимание.

Автор: shapovalex

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js