Рубрика:
IP-телефония /
Мобильные решения
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
ВЯЧЕСЛАВ ЛОХТУРОВ, ведущий преподаватель Центра компьютерного обучения «Специалист», главный системный администратор МГТУ им. Н. Э. Баумана
Познакомьте начальника с Asterisk Возможности IP-телефонии для мобильных пользователей
Поговорим о том, что нам, профессионалам, периодически приходится делать – как показать возможности новой технологии руководителю и сделать это максимально зрелищно с минимальными затратами, а, добившись одобрения, уже внедрять технологию в масштабе предприятия
Постановка задачи
Представим офис, подключенный к городской телефонной сети через традиционную ATC (PBX). У каждого сотрудника телефон с внутренним номером 101, 102 и т.д. Чтобы понять, что нас в этом не устраивает, представим, что клиент звонит сотруднику, которого нет на месте, и ответим на вопросы:
- Можно ли перенаправить этот звонок сотруднику на мобильный телефон?
- Можно ли оставить сообщение для сотрудника?
Если ответы отрицательные, знакомим руководство с IP-телефонией!
Шаг 1. Знакомство с Asterisk
Как вы догадались, статья посвящена системе IP PBX Asterisk. Многие проекты предлагают готовые решения Asterisk, включающие графический интерфейс для настройки и управления (http://www.freepbx.org, http://www.elastix.org). Однако для лучшего понимания и обучения рекомендую начать знакомство с Asterisk непосредственно из командной строки и файлов конфигурации.
Для развертывания Asterisk нам понадобится *NIX-сервер. Для первых опытов сгодится виртуальная система, работающая под управлением, например, VirtualBox (https://www.virtualbox.org). Учтите, что в этом случае при создании системы в настройках сети надо указать тип подключения «Сетевой мост». В этой статье будет использоваться система Linux Ubuntu 12.04 LTS (http://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/установка). Представим, что у вас эта система установлена и имеет следующие параметры:
- Имя системы: asterisk.
- IP-адрес системы (статический): 192.168.1.10.
- Учетная запись администратора системы: admin.
Устанавливаем asterisk:
$ sudo apt-get install asterisk
В ходе установки будет предложено указать параметр конфигурации ITU-T telephone code. Для наших задач этот параметр не имеет значения, и его можно не менять. Согласно парадигме управления ПО в Debian (а Ubuntu – родственник этого дистрибутива) только что установленный Asterisk уже имеет конфигурацию «по умолчанию» и даже запущен.
Для первых экспериментов с IP-АТС используем программные телефоны. В IP-телефонии есть несколько протоколов подключения (правильно сказать сигнализации), наиболее популярным из них является SIP (http://ru.wikipedia.org/wiki/SIP). Для подключения телефонов к Asterisk по протоколу SIP настроим каналы подключения. Выглядит это так:
$ sudo echo > /etc/asterisk/sip.conf $ sudo nano /etc/asterisk/sip.conf
[general] transport=udp disallow=all allow=alaw
[101] type=friend secret=tpassword1 host=dynamic
[102] type=friend secret=tpassword2 host=dynamic
В общей (general) секции конфигурации мы видим директивы, определяющие транспортный протокол и разрешенный кодек для SIP-клиентов. Далее идет описание двух каналов с именами 101 и 102. Подключаться к ним можно, зная пароль (secret), с любого IP-адреса. Тип канала (type) определяет направление звонков в отношении подключенного к нему устройства. Поскольку к этим каналам будут подключаться телефоны, которые могут и принимать, и совершать звонки, указываем тип канала friend.
Имена каналов напоминают номера телефонов, но ими НЕ ЯВЛЯЮТСЯ. Чтобы подключенный SIP-телефон мог куда-то позвонить, настроим план звонков (dialplan).
$ sudo echo > /etc/asterisk/extensions.conf $ nano /etc/asterisk/extensions.conf
[default] exten => 199,1,Answer() same => n,Playback(hello-world) same => n,Hangup() exten => _1XX,1,Dial(SIP/${EXTEN},10)
Одним из механизмов обеспечения безопасности в Asterisk являются контексты. Все номера, которые может набирать клиент SIP-телефона, находятся в определенном контексте. Поскольку внешний доступ к телефонному серверу пока не планируется, при описании каналов мы не указывали контексты, и наши каналы попали в контекст default.
Первый элемент номерного плана позволяет набрать номер 199 и услышать приветствие. Answer, Playback и Hangup – приложения, заставляющие Asterisk снять трубку, воспроизвести звуковой файл и повесить трубку.
Шаблон описания следующего номера определяет, что если пользователь наберет номер, начинающийся (символ «_») с цифры 1 и заканчивающийся двумя любыми цифрами от 0 до 9 (символы «X»), то будет произведен вызов (приложение Dial) другого SIP-телефона, подключенного к каналу ${EXTEN}. Те, кто имел дело с программированием на bash, догадаются, что EXTEN – это имя переменной, а попадает в нее значение, набранное на клавиатуре. Теперь понятно, почему удобно, когда имена каналов совпадают с номерами их вызова. Значение «10» среди параметров приложения Dial определяет время ожидания снятия трубки на телефоне, подключенном к вызываемому каналу, иначе приложение заканчивает работу. Для вступления изменения конфигурации в силу перезагрузим соответствующие подсистемы:
$ sudo asterisk -x 'sip reload' $ sudo asterisk -x 'dialplan reload'
Установим на свободную рабочую станцию программный телефон, например, ZoIPer (http://www.zoiper.com), и настроим на подключение к SIP-каналу 101 Asterisk (см. рис. 1 и 2). Наберите номер 199. Если вы услышите приветствие – вы на верном пути! Аналогично настройте на другой рабочей станции программный телефон на подключение к SIP-каналу 102 и позвоните с телефона на телефон.
Рисунок 1. Установка и настройка программного телефона. Шаг 1
Рисунок 2. Установка и настройка программного телефона. Шаг 2
Шаг 2. Звонки во внешний мир
Настроить звонки во внешний мир проще через VoIP-провайдера. Выбор VoIP-провайдера – большая тема, однако с точки зрения настроек все будет аналогично, и мы остановимся на SipNet (http://www.sipnet.ru). После регистрации на сайте вам будут присвоены SIP ID и пароль. Проверить возможность использования VoIP-провайдера из вашей локальной сети можно с помощью того же ZoIPer, указав в поле Domain значение spinet.ru, в поле Username – присвоенный вам SIP ID и пароль – в поле Password. После подключения ZoIPer к SipNet позвоните себе на мобильный или городской телефон, указав 8 перед кодом города. Проверьте качество прохождения голоса. Для подключения Asterisk к SipNet добавим описание канала в конец файла sip.conf:
$ sudo nano /etc/asterisk/sip.conf
;...
[sipnet] type=peer host=sipnet.ru defaultuser=0012345678 fromuser=0012345678 fromdomain=sipnet.ru secret=sipnetpassword canreinvite=no
Поскольку этот канал будет использоваться для передачи вызовов на любые городские и мобильные номера, можно дать ему любое имя, например, sipnet. В классической телефонии такие каналы называются trunk. Параметр type, установленный в значение peer, позволяет использовать канал только для исходящих звонков.
Для входящих звонков потребуется арендовать у VoIP-провайдера прямой телефонный номер. Можно принимать входящие звонки от провайдера без аренды номера, но это требует донабора номера SID ID после дозвона в spinet, что не понравится вашим клиентам.
Поля defaultuser, fromuser, fromdomain и secret используются для авторизации звонков через spinet. Параметр canreinvite запрещает SIP-клиентам установить соединение между собой напрямую, голосовой трафик будет идти через Asterisk. Это повышает нагрузку на сервер, но упрощает настройку сервисов NAT и FIREWALL на интернет-шлюзе.
Чтобы пользователи Asterisk смогли звонить на внешние номера через канал VoIP-провайдера, добавим соответствующий вызов в конец файла, описывающего номерной план:
$ nano /etc/asterisk/extensions.conf
;...
exten => _8XXXXXXXXXX,1,Dial(SIP/sipnet/${EXTEN})
Здесь мы опять видим шаблон, совпадающий с любым номером, начинающимся на 8 и содержащим еще 10 любых цифр. Набор такого номера приведет к вызову приложения Dial, которое направит вызов в канал VoIP-провайдера и передаст в этот канал набранный пользователем номер.
Для вступления изменения конфигурации в силу необходимо дать команду перезагрузить конфигурацию Asterisk:
$ sudo asterisk -x 'reload'
Подключите программный телефон к Asterisk и позвоните на номер 199 и на номер своего мобильного телефона. Если все работает, можно приступать к следующему шагу.
Шаг 3. Перенаправление звонков
По нашему плану трехзначных номеров вызываемый абонент должен снять трубку в течение 10 секунд. Настроим перенаправление звонка на другой телефон не ответившего пользователя. Реализуем это с использованием приложения FollowMe. В файле конфигурации приложения для каждого пользователя определим список его телефонов.
$ sudo echo > /etc/asterisk/followme.conf $ sudo nano /etc/asterisk/followme.conf
[101] number=>89161234567,30 number=>891687654321,30 context=>default
[102] number=>89162323232,30 number=>89163434345,30 context=>default
В квадратных скобках – имя пользователя, совпадающее с номером телефона. Это упрощает описание плана звонков. Далее – номера телефонов, на которые будут перенаправлены вызовы, и время ожидания ответа (секунды).
Параметр context определяет секцию в файле плана звонков, обрабатывающую вызов указанного номера. Добавим вызов приложения FollowMe в конец обработки вызова трехзначных номеров в файле, описывающем план звонков:
$ nano /etc/asterisk/extensions.conf
;...
exten => _1XX,1,Dial(SIP/${EXTEN},10) same => n,FollowMe(${EXTEN})
;...
Приложению FollowMe в качестве аргумента передается имя пользователя, описанного в файле followme.conf, в нашем случае имя совпадает с номером, набранным вызывающим абонентом.Для вступления изменения конфигурации в силу дадим команду перезагрузить конфигурацию Asterisk:
$ sudo asterisk -x 'reload'
Позвоните с одного из программных телефонов на трехзначный номер соседнего телефона. Если тот в течение 10 секунд не снимет рубку, вызов уйдет через VoIP-провайдера на внешний номер. Вам будет сообщено о перенаправлении вызова. Как только пользователь внешнего номера снимет трубку, ему будет сообщено о поступлении перенаправленного звонка и предложено с помощью тонального набора принять его (нажав «1») или отклонить («2»). Эти сообщения Asterisk «произносит» на английском.
Шаг 4. Русификация Asterisk
«Речь» Asterisk, записана в звуковых файлах в каталоге /usr/share/asterisk/sounds/. Для каждого языка создается подкаталог с соответствующим именем en, fr, ru. Каталог ru и его файлы загрузим с сайта разработчиков Asterisk. Какой каталог использовать, определяет директива language в описании канала или в общей (general) секции конфигурации (например, language=ru). Кроме имени каталога, директива language заставляет Asterisk учитывать грамматические категории языка (например, один номер – одно сообщение). Почему-то в штатных архивах русских сообщений нет нескольких файлов, необходимых для воспроизведения грамматических вариаций произношения. Выход – «обман» Asterisk. Он будет «думать», что говорит на английском, а файлы будут содержать русские фразы. Для русификации Asterisk выполняем:
$ cd /usr/share/asterisk/sounds/en $ wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-ru-alaw-current.tar.gz $ tar -xvf asterisk-core-sounds-ru-alaw-current.tar.gz
Позвоните с одного из программных телефонов на номер 199. Если приветствие на русском, все в порядке.
***
За рамками статьи остались настройка голосовой почты, интеграция Asterisk в офисную телефонию, подключение к Asterisk аналоговых телефонных аппаратов и подключение Asterisk к офисной АТС. И это – первая демонстрация возможностей Asterisk, которых у системы гораздо больше.
Узнать их вы сможете на курсах в Центре компьютерного обучения «Специалист» при МГТУ им. Н.Э. Баумана!
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|