В данной статье дается описание того, каким образом можно объединить достоинства Asterisk как PBX или IVR, Kannel как SMS-шлюза используя один телефонный номер.
Для этого я использовал Freebsd 8.2 на сервере, модем Huawei E171, но можно использовать любой модем МТС или Мегафон производства huawei (так же было проверено на модеме E1551), сим-карту Мегафона. В качестве софтфонов использовались Telephone и SJphone.
Как уже говорилось Мультифон это услуга подключения SIP к вашему номеру мегафона, позволяющая держать несколько независимых линий и разруливать с помощью IP-АТС. Так как уже было сказано про подключение услуги и работу с Asterisk, приведу это вкратце.
Вставляем симку в телефон, скачиваем клиент Мультифона, для бета-версии доступны дистрибутивы для linux и Mac OS X.
Запускаем клиент, регистрируемся, получаем SMS с кодом, вводим код, устанавливаем пароль, убеждаемся, что с клиентом все работает.
Выключаем клиент Мультифона (важно, т.к. нельзя подключить 2 клиента к мультифону одновременно).
Отправляем USSD команду для подключения всех возможностей Мультифона *137#, подтверждаем включение услуги.
Добавляем в /etc/rc.conf или в /etc/default/kannel:
В интернете есть много описаний, поэтому приведу только конфиг, основанный на официальном конфиге мегафона с некоторыми поправками и пояснениями.
Конфигурация Asterisk:
Запускаем консоль:
перезагружаем конфигурации с помощью консоли:
Проверяем подключение к мультифону и софтфонам:
Теперь следует включить работу телефона совместно с SIP запросив следующий URL:
https://sm.megafon.ru/sm/client/routing/set?login=79XXXXXXXXX@multifon.ru&password=PASSWORD&routing=2
Проверяем что изнутри и снаружи звонки проходят.
Вынимаем симку из телефона, вставляем ее в модем.
Вставляем модем в сервер, проверяем что устройства найдены:
Если наших устройств не видно, то пересобираем ядро, добавив
Рекомендуется устанавливаеть kannel из SVN, однако я не испытывал проблем и с данной версией, поэтому установим его из портов.
Стоит отметить, что Kannel не создает сам пользователя, поэтому сделаем это сами:
А так же он не заботится о создании директории для PID файлов, сделаем сами:
Конфигурация Kannel:
Еще раз перезапускаем kannel
Убеждаемся что подключение к SMSC в статусе online по адресу
localhost:13000/status
Русскоязычные sms приходят и уходят в кодировке ucs-2be, поэтому преобразуем их. Например в PHP:
Отправка SMS:
coding=2 соответствует опять же кодировке ucs-2be.
Не забываем открыть порты (в том числе порты для RTP, т.к. иначе не будет звука/видео), если включен ipfw, добавляем в скрипт или конфиг:
Таким образом, мы имеем работающий SMS-шлюз и колл-центр на одном номере. Помимо этого, можно организовать IVR с помощью Asterisk, чтобы получать информацию в цифровом виде не только по SMS, но еще и с помощью интерактивного голосового взаимодействия с конечным пользователем.
Прямое подключения симки к Asterisk описано здесь, но стоит заметить, похоже, при первом подключении модем переходит в режим «только модем» и при повторном подключении исчезают устройства, поэтому передергиваем модем и меняем параметры на
Если слишком громко, то меняем параметры на
Хорошая книга про Asterisk
Отличный официальный мануал для Kannel
Инструкция по подключению от мегафона
Конфиг-файлы от мегафона (с ними у меня были проблемы со звонками наружу)
Конфиг-файлы ядра если не определяется устройство во FreeBSD
Для этого я использовал Freebsd 8.2 на сервере, модем Huawei E171, но можно использовать любой модем МТС или Мегафон производства huawei (так же было проверено на модеме E1551), сим-карту Мегафона. В качестве софтфонов использовались Telephone и SJphone.
Как уже говорилось Мультифон это услуга подключения SIP к вашему номеру мегафона, позволяющая держать несколько независимых линий и разруливать с помощью IP-АТС. Так как уже было сказано про подключение услуги и работу с Asterisk, приведу это вкратце.
Вставляем симку в телефон, скачиваем клиент Мультифона, для бета-версии доступны дистрибутивы для linux и Mac OS X.
Запускаем клиент, регистрируемся, получаем SMS с кодом, вводим код, устанавливаем пароль, убеждаемся, что с клиентом все работает.
Выключаем клиент Мультифона (важно, т.к. нельзя подключить 2 клиента к мультифону одновременно).
Отправляем USSD команду для подключения всех возможностей Мультифона *137#, подтверждаем включение услуги.
Добавляем в /etc/rc.conf или в /etc/default/kannel:
kannel_bearerbox_enable="YES" kannel_smsbox_enable="YES" asterisk_enable="YES"
Установка и настройка Asterisk
cd /usr/ports/net/asterisk make install clean service asterisk start
В интернете есть много описаний, поэтому приведу только конфиг, основанный на официальном конфиге мегафона с некоторыми поправками и пояснениями.
Конфигурация Asterisk:
;#/usr/local/etc/asterisk/sip.conf [general] tcpenable=yes allow=all register => 79271111111@multifon.ru:paSSwoRD:79271111111@193.201.229.35:5060/79271111111 [multifon-out] dtmfmode=inband username=79271111111 type=peer secret=paSSwoRD host=sbc.megafon.ru fromuser=79271111111 fromdomain = multifon.ru port=5060 context=multifon-in insecure=port,invite canreinvite=no ;# без этого параметра исходящий звонок на принимающем телефоне сразу прерывается [100];#софтофоны или другие sip-телефоны настраиваем в соответствии с этими разделами type=friend host=dynamic secret=pass100 context=phones username=100 nat=rfc3581 ;# без этого параметра не работает связь между софтфонами [101] type=friend host=dynamic secret=pass101 context=phones username=101 nat=rfc3581
;#/usr/local/etc/asterisk/extensions.conf ;# Входящие вызовы на этот номер [multifon-in] exten=> 79271111111,1,Dial(SIP/100,60,t) ;# Исходящие вызовы, определяется маской [out] exten=>_7XXXXXXXXXX,1,Dial(SIP/multifon-out/${EXTEN}) exten=>_8XXXXXXXXXX,1,Dial(SIP/multifon-out/${EXTEN}) ;#позволяет звонить через 8 exten=>_+7XXXXXXXXXX,1,Dial(SIP/multifon-out/${EXTEN}) ;#позволяет звонить через +7 ;#exten=>_7XXXXXXXXXX,1,Dial(SIP/${EXTEN}@multifon-out,30,r) ;#мегафоновский вариант ;# Локальные звонки между SIP телефонами [local] exten=>_1XX,1,Dial(SIP/${EXTEN},60,rt) [phones] include => multifon-in ;#честно говоря, не знаю зачем эта строка здесь у мегафона include => local include => out
;#/usr/local/etc/asterisk/rtp.conf [general] rtpstart=6001 ;#мегафон утверждает, что их RTP работает от 6001 порта rtpend=20000
Запускаем консоль:
asterisk -vvvvr
перезагружаем конфигурации с помощью консоли:
reload
Проверяем подключение к мультифону и софтфонам:
sip show registry sip show peers
Теперь следует включить работу телефона совместно с SIP запросив следующий URL:
https://sm.megafon.ru/sm/client/routing/set?login=79XXXXXXXXX@multifon.ru&password=PASSWORD&routing=2
Проверяем что изнутри и снаружи звонки проходят.
Подготовка модема
Вынимаем симку из телефона, вставляем ее в модем.
Вставляем модем в сервер, проверяем что устройства найдены:
ls /dev | grep cuaU ls /dev | grep ttyU
Если наших устройств не видно, то пересобираем ядро, добавив
device u3g
Установка и настройка Kannel
Рекомендуется устанавливаеть kannel из SVN, однако я не испытывал проблем и с данной версией, поэтому установим его из портов.
cd /usr/ports/www/kannel make install clean service kannel start
Стоит отметить, что Kannel не создает сам пользователя, поэтому сделаем это сами:
adduser
А так же он не заботится о создании директории для PID файлов, сделаем сами:
mkdir /var/run/kannel chown kannel /var/run/kannel
Конфигурация Kannel:
#/usr/local/etc/kannel.conf group = core admin-port = 13000 admin-password = " paSsWoRd " log-file = "/var/log/kannel/bearerbox.log" log-level = 1 access-log = "/var/log/kannel/access_kannel.log" store-file = "/var/log/kannel/store_sms" smsbox-port = 13001 dlr-storage = internal sms-resend-retry = 1 group = smsc smsc = at smsc-id = huawei0 modemtype = huawei0 device=/dev/ttyU0.2 # либо /dev/ttyU0.3, если он существует sms-center="+79271111111" my-number="+79271111111" keepalive=5 group=modems id=huawei0 name="huawei0" group = smsbox bearerbox-host = localhost sendsms-port = 13003 global-sender = "+79271111111" log-file = /var/log/kannel/smsbox.log log-level = 0 access-log = /var/log/kannel/access_smsbox.log group = sendsms-user username = "user" password = "paSsWoRd" concatenation = true max-messages = 20 #Перенаправляем sms на php скрипт group = sms-service keyword = default post-url = "http://localhost/service.php?tel=%p&time=%t&coding=%c&smsc=%i" concatenation = true max-messages = 0 #для того чтобы отправлять sms вручную с помощью smssend
Еще раз перезапускаем kannel
service kannel restart
Убеждаемся что подключение к SMSC в статусе online по адресу
localhost:13000/status
Русскоязычные sms приходят и уходят в кодировке ucs-2be, поэтому преобразуем их. Например в PHP:
$text=urlencode(iconv("utf-8","ucs-2be",$text));#
Отправка SMS:
file_get_contents("http://localhost:13003/cgi-bin/sendsms?smsc=$smsc&username=user&password=paSsWoRd&coding=2&to=$to&text=$text");#
coding=2 соответствует опять же кодировке ucs-2be.
Не забываем открыть порты (в том числе порты для RTP, т.к. иначе не будет звука/видео), если включен ipfw, добавляем в скрипт или конфиг:
ipfw add allow tcp from any to ${IpOut} 5060 via ${LanOut} #SIP ipfw add allow udp from any to ${IpOut} 5060 via ${LanOut} #SIP ipfw add allow udp from any to ${IpOut} 6000-20000 via ${LanOut} #RTP
Таким образом, мы имеем работающий SMS-шлюз и колл-центр на одном номере. Помимо этого, можно организовать IVR с помощью Asterisk, чтобы получать информацию в цифровом виде не только по SMS, но еще и с помощью интерактивного голосового взаимодействия с конечным пользователем.
Прямое подключения симки к Asterisk описано здесь, но стоит заметить, похоже, при первом подключении модем переходит в режим «только модем» и при повторном подключении исчезают устройства, поэтому передергиваем модем и меняем параметры на
audio=/dev/cuaU0.1 ;# Порт для аудио data=/dev/cuaU0.2 ;# Порт для команд
Если слишком громко, то меняем параметры на
rxgain=0 txgain=0
Хорошая книга про Asterisk
Отличный официальный мануал для Kannel
Инструкция по подключению от мегафона
Конфиг-файлы от мегафона (с ними у меня были проблемы со звонками наружу)
Конфиг-файлы ядра если не определяется устройство во FreeBSD
