Настройка Kannel
Kannel — это WAP и SMS-шлюз с открытым исходным кодом. Kannel состоит из трех программ, обычно запускаемых как демоны: bearerbox,wapbox и smsbox . Они реализуют подключение к телефону (SMS или UDP), стек протоколов WAP и службы на основе SMS соответственно. SMS сервисы Работает как Pull и Push-шлюз Может обрабатывать 7-битные, 8-битные данные и данные Unicode Отчет о […]
Kannel — это WAP и SMS-шлюз с открытым исходным кодом. Kannel состоит из трех программ, обычно запускаемых как демоны: bearerbox,wapbox и smsbox . Они реализуют подключение к телефону (SMS или UDP), стек протоколов WAP и службы на основе SMS соответственно.
SMS сервисы
- Работает как Pull и Push-шлюз
- Может обрабатывать 7-битные, 8-битные данные и данные Unicode
- Отчет о доставке
- Возможно использование GMS и GSM модемов как SMS-центра
- Может подключать различные шлюзы контента на основе HTTP
- Может работать как агрегатор
WAP сервисы
- WSP: режимы с установлением соединения и без соединения.
- WML компилятор из текста в двоичную форму. Поддерживает несколько наборов символов.
- Компилятор WMLScript: преобразующий исходный код WMLScript в байт-код.
- WTP: класс 0, 1 и 2. Однако обработка ошибок не очень проверена.
- WAP push
Kannel требуется следующее программное окружение:
- Компилятор Си и библиотеки разработки и связанные инструменты
yum groupinstall "Development tools"*
- Библиотека gnome-xml (libxml), версия 2.2.0 или новее. Рекомендуется использование libxml версии 2.2.5. Если вы устанавливаете его из пакетов своего дистрибутива, вам понадобится libxml2-dev в дополнение к библиотекам пакетов libxml2 во время выполнения.
- GNU Make.
- POSIX потоки (pthread.h).
- GNU Bison 1.28, если вы измените компилятор WMLScript.
Установка Kannel из репозитория epel-release
yum install kannel
Установка исходного кода:
cd /usr/src
wget https://www.kannel.org/download/1.5.0/gateway-1.5.0.tar.gz --no-check-certificate
tar zxvf gateway-1.5.0.tar.gz
cd gateway-1.5.0
./configure --prefix=/etc/kannel --enable-start-stop-daemon
make
make install
mkdir -p /etc/kannel
ln -s /etc/kannel.conf /etc/kannel/kannel.conf
В /etc/rc.conf или в /etc/default/kannel необходимо добавить:
kannel_bearerbox_enable="YES"
kannel_smsbox_enable="YES"
asterisk_enable="YES"
Создаем пользователя, директории для pid файлов, логов, smsc, изменяем права
useradd kannel
mkdir /etc/kannel/smscs ; mkdir /var/log/kannel ; mkdir /var/run/kannel
chown kannel /etc/kannel/smscs ; chown kannel /var/log/kannel ; chown kannel /var/run/kannel
Создаем конфигурационный файл kannel /etc/kannel.conf :
# Конфигурация для Kannel должна всегда включать группу для общей конфигурации
#bearerbox. Эта группа — «core» и должна быть первой группой в файле конфигурации.
#bearerbox – главный демон, прослушивающий порт для подключения остальных #демонов.
group = core
admin-port = 13000
admin-password = " Pa$$w0rd "
# лог файл в дополнение к stdout и любому файлу журнала, опред. в комадной
#строке. Лог-файл в группе ‘core’ используется только bearerbox
log-file = "/var/log/kannel/bearerbox.log"
#уровень логирования (число 0..5)
log-level = 1
#access-log используется для хранения информации о sms-запросах
access-log = "/var/log/kannel/access_kannel.log"
store-file = "/var/log/kannel/kannel_store"
#номер порта, к которому подключаются почтовые ящики, если таковые имеются.
#параметр должен быть установлен, если вы хотите обрабатывать любой SMS-трафик
smsbox-port = 13001
# dir-storage определяет способ хранения DLR(хранение отчета о внешней доставке).
#Поддерживается встроенное хранилище в памяти, которое очень быстрое, но не имеет постоянства. При повторном запуске bearerbox информация DLR будет
#потеряна.
#По умолчанию установлено как внутреннее.
dlr-storage = internal
# Максимальное количество повторных попыток для временно неудачных сообщений. #По умолчанию -1, (не ограничено).
sms-resend-retry = 1
#настройки sms центра
#kannel будет искать сообщения в модеме (в памяти, либо в SIM)
group = smsc
smsc = at
# smsc-id используется для идентификации SMS-центра, из которого пришло сообщение.
smsc-id = huawei0
# Модемы разных производителей ведут себя немного по-разному. Необходимо знать,
#какой тип модема используется. Используйте параметр «auto» или пропустите, чтобы
#Kannel автоматически определял тип модема. (некоторые типы не должны
#распознаваться автоматически).
modemtype = huawei0
# Устройство, к которому подключен модем, например / dev / ttyS0
device=/dev/ttyU0.2
#sms центр для отправки сообщений.
sms-center="+79991234567"
#номер телефона (необязательно)
my-number="+79991234567"
# kannel будет пинговать модем в течение установленных keepalive секунд.
#Если попытка неуспешна, — попытка подключиться к нему.
# Установите в 0, чтобы отключить эту функцию.
keepalive=5
#конфигурация модема
group=modems
id=huawei0
# Имя конфигурации модема. Используется в логах
name="huawei0"
#необходимо определить группу ‘smsbox’ в файле конфигурации, чтобы иметь
#возможность использовать SMS Kannel.
group = smsbox
#хост, где находится главный демон bearerbox
bearerbox-host = localhost
# порт, по которому прослушиваются HTTP запросы sendms.
sendsms-port = 13003
#тел. номер отправителя
global-sender = "+79271111111"
log-file = /var/log/kannel/smsbox.log
log-level = 0
access-log = /var/log/kannel/access_smsbox.log
# Конфигурации пользователя SendSMS
#Чтобы включить отправку SMS, вы должны установить sendms-порт в группу #smsbox и определить одну или несколько групп sendms-user.
#Каждая из этих групп определяет одну учетную запись, которую можно использовать
#для отправки SMS через HTTP-интерфейс
group = sendsms-user
username = "user"
password = "Pa$$w0rd"
# Если отправляемое сообщение длиннее максимальной длины SMS, оно будет
#разбито на несколько частей. max-messages позволяет указать максимальное
#количество отдельных SMS-сообщений, которые можно использовать.
#Если для max-messages установлено значение 0, ответ не отправляется, за
#исключением сообщений об ошибках.
max-messages = 20
# сервис default: если входящее сообщение не направлено ни на какой другой сервис, используется группа sms-service default.
#Необходимо всегда определять службу по умолчанию.
group = sms-service
keyword = default
# Запрашиваемый URL.
#URL-адрес может содержать список параметров, которые анализируются до
#получения URL-адреса. Всегда соответствует ключевому слову, независимо от
#соответствия шаблону.
post-url = "http://localhost/service.php?tel=%p&time=%t&coding=%c&smsc=%i"
max-messages = 0
Подключаем usb модем с установленной сим картой, проверка подключения
ls -la /dev/ | grep ttyUSB
Создаем init скрипт
touch /etc/init.d/kannel
chmod a+x /etc/init.d/kannel
nano /etc/init.d/kannel
Содержимое init файла
#!/bin/sh
BOXPATH=/etc/kannel/sbin
PIDFILES=/var/run/kannel
CONFDIR=/etc/kannel
CONF=$CONFDIR/kannel.conf
USER=kannel
VERSION=""
RB=$BOXPATH/run_kannel_box$VERSION
BB=$BOXPATH/bearerbox$VERSION
WB=$BOXPATH/wapbox$VERSION
SB=$BOXPATH/smsbox$VERSION
SSD=$BOXPATH/start-stop-daemon$VERSION
PATH=$BOXPATH:$PATH
case "$1" in
start)
echo -n "Starting WAP gateway: bearerbox"
$SSD --start --quiet --pidfile $PIDFILES/kannel_bearerbox.pid --exec $RB -- --pidfile $PIDFILES/kannel_bearerbox.pid $BB -- $CONF
echo -n " smsbox"
$SSD --start --quiet --pidfile $PIDFILES/kannel_smsbox.pid --exec $RB -- --pidfile $PIDFILES/kannel_smsbox.pid $SB -- $CONF
echo "."
;;
stop)
echo -n "Stopping WAP gateway: "
echo -n " smsbox"
$SSD --stop --quiet --pidfile $PIDFILES/kannel_smsbox.pid --exec $RB
echo -n " bearerbox"
$SSD --stop --quiet --pidfile $PIDFILES/kannel_bearerbox.pid --exec $RB
echo "."
;;
status)
CORE_CONF=$(grep -r 'group[[:space:]]*=[[:space:]]*core' $CONFDIR | cut -d: -f1)
ADMIN_PORT=$(grep '^admin-port' $CORE_CONF | sed "s/.*=[[:space:]]*//")
ADMIN_PASS=$(grep '^admin-password' $CORE_CONF | sed "s/.*=[[:space:]]*//")
STATUS_URL="http://127.0.0.1:${ADMIN_PORT}/status?password=${ADMIN_PASS}"
lynx -source $STATUS_URL
;;
reload)
# We don't have support for this yet.
exit 1
;;
restart|force-reload)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|status|reload|restart|force-reload}"
exit 1
esac
exit 0
Запускаем kannel
service kannel start
Проверка статуса
curl 'http://127.0.0.1:13000/status.txt?password=Pa$$w0rd'
Для реализации простого обмена сообщений между внутренними абонентами (SIP клиентами или SIP телефонами, поддерживающими прием и отправку сообщений) в Астериск необходимо добавить соответствующие параметры.
Во Freepbx в веб-интерфейсе Settings->SIP Settings, в блок Other SIP Settings, в Asterisk Vanilla – в файл sip.conf.
И контекст send-msg, обрабатывающий прием/отправку сообщений, в extensions_custom.conf (в чистом Астериске – в extensions.conf)
[send-msg]
exten => _XXX,1,NoOp(New message sent from ${MESSAGE(from)})
exten => _XXX,n,Set(LOCALTO=${CUT(MESSAGE(to),@,1)})
exten => _XXX,n,MessageSend(${LOCALTO},${MESSAGE(from)})
exten => _XXX,n,NoOp(Send status is ${MESSAGE_SEND_STATUS})
exten => _XXX,n,Hangup()
Для отправки SMS сообщений на внешние номера в контекст send-msg необходимо добавить в этот конфигурационный файл контекст (send-sms) и включить его в send-msg (в send-msg добавить директиву include => send-sms )
[send-sms]
exten => _.,1,NoOp(Send SMS to ${MESSAGE(to)} from ${MESSAGE(from)})
same => n,Set(SMSTO=${EXTEN})
;Вызов agi скрипта для отправки sms
same => n,AGI(send_sms.php, ${MESSAGE(from)},${SMSTO},"${MESSAGE(body)}")
same => n,Hangup()
/var/lib/asterisk/agi-bin/send_sms.php:
<?php
require('phpagi.php');
$agi = new AGI(); //подключаем библиотеку phpagi.php
$stdin = fopen('php://stdin', 'r');
$stdout = fopen('php://stdout', 'w');
function send ($from, $to, $message_text)
{
$message_text=urlencode(iconv("utf-8","ucs-2be",$message_text));
$url = "http://server_name:13003/cgi-bin/sendsms?user=user&pass=Pa$$w0rd&from=$from&coding=2&to=$to&text=$message_text";
file_get_contents($url);
}
send ($argv[1], $argv[2], $argv[3]);
fclose ($stdin);
fclose ($stdlog);
exit(0);
?>
Остались вопросы?
Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.