Телефония для эпохи Web 2.0::Журнал СА 11.2008
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6188
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6898
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4182
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2986
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3793
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3803
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6296
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3151
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3445
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7261
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10627
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12349
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13979
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9109
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7064
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5373
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4603
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3412
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3142
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3389
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3011
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Телефония для эпохи Web 2.0

Архив номеров / 2008 / Выпуск №11 (72) / Телефония для эпохи Web 2.0

Рубрика: Веб /  Веб-технологии

Антон Борисов

Телефония для эпохи Web 2.0

Как часто вы находились в ситуации, когда было проще один раз сказать словами, нежели несколько раз объяснять, например, в окне ICQ-мессенджера? Давайте попробуем разобраться, как создать комфортные для работы условия, а именно – рассмотрим тот инструментарий, что поможет донести наш голос до удаленного собеседника.

Сейчас, наверное, уже трудно кого-то удивить такими терминами, как: VoIP-соединение, SIP-телефония, сервер телефонии Asterisk и т. п. И это отрадно, так как означает, что, во-первых, создана и используется транспортная инфраструктура для цифрового обмена информацией (интернет-каналы) и, во-вторых, создано позитивное общественное мнение на такой вид коммуникаций. В общем-то, это должно означать, что люди представляют себе механизм общения посредством софтовых телефонов и более того – немалую часть времени проводят в разговорах через IP-среду.

Единственное, что может огорчать, так это привязка звонящего человека к своему рабочему месту – приходится устанавливать и настраивать SIP-телефонию каждый раз, когда человек меняет свое местоположение. Что не всегда кажется удобным и правильным решением, ибо для того, чтобы звонить, достаточно будет перенести только гарнитуры.

Предполагается, что Asterisk у вас уже настроен (подробно рассмотрено в более ранних номерах журнала [1-4]), учетные записи пользователей созданы и вы можете позвонить своему коллеге с помощью SIP-телефона. Отлично, следующий шаг – сделать так, чтобы вы могли осуществить звонок и с любого другого места.

Предварительно убедимся, что Asterisk у нас работоспособен хотя бы в минимальной конфигурации. Если он в вашей сетевой инфраструктуре никогда не разворачивался ранее, то ничего страшного. Установка тривиальна (приводится пример для FreeBSD 6.2 и Аsterisk версии 1.4.21):

# cd /usr/ports/net/asterisk/

# make config

В появившемся диалоге выбираете нужные опции. По умолчанию можете выбрать все.

 

+--------------------------------------------------------------------+

|                 Options for asterisk 1.4.21.2_3                    |

| +----------------------------------------------------------------+ |

| |       [X] OGGVORBIS     Enable Ogg Vorbis support              | |

| |       [X] ODBC          Enable ODBC support                    | |

| |       [X] POSTGRES      Enable PostgreSQL support              | |

| |       [X] RADIUS        Enable RADIUS accounting support       | |

| |       [X] SNMP          Enable SNMP support                    | |

| |       [X] H323          Enable H.323 support                   | |

| |       [X] FREETDS       Enable FreeTDS support                 | |

| |       [X] JABBER        Enable Jabber and Gtalk support        | |

| |       [X] SQLITE        Enable SQLITE support                  | |

| |       [X] CODEC_PATCH   Apply codec negotiation patch          | |

| |       [X] ILBC          Enable iLBC codec                      | |

| |       [X] MISC_PATCHES  Apply additional patches               | |

| |       [X] ZAPTEL        Enable Zaptel support                  | |

| |                                                                | |

| |                                                                | |

+-+----------------------------------------------------------------+-+

|                       [  OK  ]       Cancel                        |

 

Далее:

# make && make install && make clean

Сервер телефонии теперь установлен. Организуем запуск Asterisk при старте системы, для этого в файл /etc/rc.conf добавим строку:

asterisk_enable="YES"

Файлы конфигурации могут быть иными, в зависимости от выбранной вами платформы или дистрибутива.

Добавим учетные записи первых пользователей, от имени которых будут произведены звонки. Вносим следующие строки в файл sip.conf:

[200]

type=friend

host=dynamic

username=200

secret=mypasswd

nat=y

context=default

callerid="Anton" <200>

allow=gsm

allow=ulaw

allow=alaw

 

[1200]

type=friend

host=dynamic

username=1200

secret=mypasswd

nat=no

context=default

callerid="Anton" <1200>

allow=gsm

allow=ulaw

allow=alaw

И заведем теперь планы дозвона указанным пользователям – указанные строки вносятся в файл extensions.conf:

exten => 1200,1, Macro(stdexten,1200,SIP/1200)

exten => user1, 1, Goto(1200|1)

 

exten => 200,1, Macro(stdexten,200,SIP/200)

exten => user3, 1, Goto(200|1)

Делаем рестарт Asterisk:

/usr/local/etc/rc.d/asterisk restart

Дело остается за малым. Установить SIP-клиента и проверить, что базовые настройки правильные и звонок с абонента 200 проходит на абонента 1200.

При выборе софтового телефона ставка делалась на следующие критерии:

  •  мультиплатформенность;
  •  эстетичность.

Поэтому при всем богатстве выбора, а выбиралось между Ekiga, Twingle, SJPhone, Linphone, внимание привлек X-Lite от компании CounterPath [6]. Несмотря на закрытость – телефон распространяется только в бинарной форме – поддержка Windows/Mac/Linux свидетельствует о том, что больше 95% пользователей смогут свободно пообщаться.

Итак, пользовательские настройки сделаны. Абонент 200 звонит своему коллеге – абоненту 1200. Связь идеальная.

Теперь приступаем к той идее, название которой было озвучено в самом начале. А именно, сделать место звонящего по-настоящему мобильным. Конечно, полностью мобильным сделать не получится, так как вряд ли у вас для каждого сотрудника выделен ноутбук.

Будем ориентироваться на обычного пользователя, который периодически бороздит просторы Сети, т.е. на рабочем столе присутсутвует браузер и для этого браузера установлены дополнительные плагины.

Звонок с помощью средств Java

Первое решение полагается в своей работе на те средства, что развиты в современной Java и разработаны в рамках клиента IAX [8]. А именно, обработка звуковых потоков в формате WAV, GSM (и некоторых других) самой JVM и плюс к этому – обработка сигнализации IAX (Inter Asterisk eXchange). В итоге получился апплет, который физически размещается на том же сервере, что и сам Asterisk, а пользователь просто-напросто вводит номер абонента, которому нужно позвонить (см. рис. 1).

Рисунок 1. Звонок абоненту 1200 через JIAXClient

Рисунок 1. Звонок абоненту 1200 через JIAXClient

И при успешном соединении можно начинать говорить через гарнитуру.

Плюсы у данного решения:

  • не требуется установка SIP-телефона;
  • звонок (кодек и сигнализация) обрабатывается через Java-плагин браузера;
  • мультиплатформенность.

 Минусами являются:

  • необходимость использовать JVM;
  • получение данных с микрофона происходит через JNI-интерфейс, что требует установки библиотеки libjiaxc.so (UNIX) или jiaxc.dll (Windows) на клиентскую машину.

Открытость кодов JIAX Client подразумевает, что собрать апплет можно под любую платформу, где может работать JVM.

Как происходит установка клиента JIAX на практике?

У меня установлен nginx в качестве веб-сервера, что однако не означает, что любой другой не подойдет. Вовсе нет. Просто так получилось, что требовался быстрый и легковесный веб-сервер.

Итак, настройки nginx не отличаются от стандартных, произведем изменения только в секции server файла nginx.conf:

1 server {

2 listen 8811;

3 server_name localhost;

4 location / {

5 root /usr/local/www/nginx;

6 index index.html index.htm;

7 auth_basic "Ask yourself!";

8 auth_basic_user_file /usr/local/etc/nginx/htpasswd;

9 }

В строке 2 указываем, чтобы nginx работал на высоком порту 8811. В строке 5 указываем, где хранятся документы для веб-сервера. И на время тестового периода я решил ограничить доступ лиц, которые могут пользоваться услугами телефонии – строки 7 и 8. Для вашего случая, их можно закомментировать.

Копируем содержимое jiaxclient-0.0.6 в директорию /usr/local/www/nginx/sip/ и с рабочей машины пользователя заходим браузером по адресу – http://mgwe:8811/sip/jiaxtest.html, где mgwe – адрес вашего Asterisk или nginx-сервера в интранет, либо в интернет-сети (см. рис. 2).

Рисунок 2. Авторизация на доступ к ресурам веб-сервера

Рисунок 2. Авторизация на доступ к ресурам веб-сервера

Вводим пароль для доступа к HTML-страницам сервера nginx (вспомните про строки 7 и 8 файла конфигурации nginx). И утвердительно отвечаем, что мы доверяем JVM исполнить апплет jiaxclient (см. рис. 3).

Рисунок 3. Доверить запуск апплета на выполнение

Рисунок 3. Доверить запуск апплета на выполнение

Затем делаем звонок другу (см. рис. 1) и общаемся, пока не закончится последний IP-пакет.

Звонок вызова на стороне вашего коллеги будет происходить от имени пользователя Guest IAX User (см. рис. 4).

Рисунок 4. Входящий звонок от «фантомного» пользователя Guest IAX User

Рисунок 4. Входящий звонок от «фантомного» пользователя Guest IAX User

На что стоит обратить внимание при использовании клиента JIAX? На принадлежность пользователей одному контексту, а именно default. Специально прописывать настройки для пользователя Guest IAX User не надо. Asterisk сам подставляет название этого пользователя при установке соединения. Если хотите особо выделить, что звонок происходит с веб-сайта, например, как соединение от пользователя WebSite Client, то лучший способ – это обратиться к документации на Asterisk. В том случае, когда вы заводите пользователей в соответствии с названием подразделения или функциональной принадлежности, например, office, то следует помнить, что звонок от пользователя SIP1@default будет невозможен своему коллеге SIP2@Office2. Из-за разных контекстов – default и Office2. Придется всех заносить в контекст default, либо дорабатывать сам JIAX-клиент.

Да, и не забудьте поставить драйверы к аудио-системе на клиентской машине, иначе получите ошибку приложения (cм. рис. 5).

Рисунок 5. Типичная ошибка, когда не удается инициализировать аудио-подсистему

Рисунок 5. Типичная ошибка, когда не удается инициализировать аудио-подсистему

Позвоним с помощью add-on для браузера

Столь замечательный подход использовать взаимодействие с помощью IAX-сигнализации не мог оставить в стороне идею позвонить не через Java-плагин, а напрямую, из браузера. Правда объективности ради, следует уточнить, что из семейства Mozilla [10].

Устанавливаем add-on с названием MozIAX. Выставляем нужные параметры в разделах Network и Codecs. Обращаю ваше внимание, что необходимо будет добавить новых, IAX-пользователей. Указанные для примера пользователи 200 и 1200 были, если можно так выразиться, немного другого формата, а именно SIP (см. рис. 6).

Рисунок 6. MozPhone плагин установлен и правильно настроен

Рисунок 6. MozPhone плагин установлен и правильно настроен

Добавим пользователя marko2 в файл iax.conf.

[marko2]

type=friend

host=dynamic

regexten=1234

secret=moofoo

context=default

permit=0.0.0.0/0.0.0.0

Не забудем добавить также нужный номер extension этого пользователя. И самое главное, нам потребуется еще внести изменения в Manager Interface – файл manager.conf:

[tony]

secret = mypass

read = system,call,log,verbose,command,agent,user

write = system,call,log,verbose,command,agent,user

Теперь ждите разгоряченных признаний от поклонниц, звонящих вам из браузера Mozilla Firefox (см. рис. 7). Но вы в безопасности, так как VoIP-пакеты безопасны для организма.

Рисунок 7. Звонок «приходит» с идентификатором MozPhone

Рисунок 7. Звонок «приходит» с идентификатором MozPhone

Какие могут быть «подводные грабли»? Необходимость открывать наружу порт 5038 от Asterisk Manager Interface – изменения в секции [general] опции bindaddr. Неспособность принять звонок, если звонящий пользователь находится за NAT.

Текущая версия MozIAX поддерживает версии Mozilla только на платформах Windows и Linux. «Яблочные» пользователи, по всей видимости, остаются все еще не у дел.

«Встречный звонок»

Использование Asterisk Manager Interface на самом деле не такая уж и плохая идея. В свете того, что сам Asterisk и веб-сервер запущены и работают на одной машине – не придется открывать лишние порты, да и само взаимодействие происходит в рамках localhost. Мы можем подготовить скрипт, параметрами к которому являются номера соединяемых абонентов.

Как это выглядит на практике? Представим себе следующую ситуацию (см. рис. 8). Абонент A находится в своем кабинете, при этом у него на рабочем столе запущен и авторизован SIP-телефон. Абонент B, находящийся в другом филиале, но фактически в той же локальной сети, решил позвонить. Благо перед глазами у него аппаратный SIP-телефон, который подключен к Asterisk-серверу. Абонент B заходит на корпоративный сайт, вводит в форму номер своего телефона и нажимает на кнопку «Соединить с самым главным». В итоге скрипт производит соединение с самим вызывающим абонентом (B), а затем дозванивается до «самого главного» (абонент A).

Рисунок 8. Схема взаимодействия абонентов с 2 разными типами телефонов

Рисунок 8. Схема взаимодействия абонентов с 2 разными типами телефонов

Во что выльется практическое примение данного решения на том или ином предприятии, сказать заранее достаточно сложно. Следует, однако, помнить, что как только у вас разрастается телефонная инфраструктура и междугородние звонки через SIP-оператора становятся обыденностью, то возникает желание быть на связи с конкретным человеком вне зависимости от того, где географически он в данный момент расположен. И звонить ему со служебного портала всегда по одному номеру, например 1200.

В качестве скрипта, который делает всю закулисную работу, выступает TACI-скрипт [11], написанный на Perl. Разместим его на веб-сервере, организуем обработку вызовов скриптов на Perl и попробуем позвонить. Но предварительно не забудьте добавить параметр priority в вызове через Manager Interface – строка 177. Новая должна выглядеть как:

$tn->print("Action: originate\nExten: $exten\nContext: $context\nPriority: $priority\nChannel: $phonetype/$account\nPriority:1\nCallerid: $callerid\n\n");

Подсоединяем гарнитуру, заносим нужные телефоны в поля: Number to call, Your Extension, контекст – default, и нажимаем на кнопку «Make call!». Прозвонит сначала телефон с номером 1200, а затем зазвонит у нужного нам абонента, в данном случае с номером 200. Соединение состоялось.

Рисунок 9. Perl-скрипт выполняет всю закулисную работу

Рисунок 9. Perl-скрипт выполняет всю закулисную работу

Звонок в стиле Flash!

Сегодняшнее повествование было бы неполным, оставь мы без внимания набирающие всё большую популярность и распространенность Flash-технологии. Тем более учитывая тот факт, что сама компания Adobe очень ответственно подошла к теме P2P- и SIP-коммуникаций и на текущий момент данные технологии представлены в проектах Pacifica и в самом FlashPlayer. То есть фактически на столе у каждого пользователя находится движок, с помощью которого можно произвести звонок. Давайте рассмотрим схему, по которой работает данное решение (см. рис. 10).

Рисунок 10. Сигнализация и передача данных при использовании Flash-технологий

Рисунок 10. Сигнализация и передача данных при использовании Flash-технологий

На стороне веб-сервера дополнительно запущен Red5-сервер. Он представляет собой сервер коммуникаций, написанный на Java. В свое время Adobe Systems придумала протокол RTMP (Real Time Messaging Protocol [12]) для обмена потоковыми сообщениями между flash-плеером (веб-браузер на стороне клиента) и Adobe Flash Media Server. Протокол проприетарный, но благодаря реверс-инжинирингу он был переписан на Java, и получился Red5. Фактически он может работать там же, где работает и Java 5/Java 6.

Красным цветом показана сигнализация – передача контрольных сообщений, индикация звонка и т. п. Синим отмечено прохождение сигнала от удаленного абонента через SIP-сервер, а затем через Red5-сервер. Зеленый цвет – передача голоса с микрофона, через приложение на стороне браузера и далее аналогичным путем, что и сигнал от удаленного абонента.

Что у нас получается? Пользователь заходит на страницу сервера и запускает на ней Flex-приложение (по сути flash-приложение) (см. рис. 11). Указывает свои параметры для Asterisk-сервера и, авторизовавшись, получает окошко с SIP-телефоном (см. рис. 12).

Рисунок 11. Пользовательские данные введены

Рисунок 11. Пользовательские данные введены

Рисунок 12. Абонент авторизован, и можно произвести звонок

Рисунок 12. Абонент авторизован, и можно произвести звонок

Теперь, набрав заветный номер, он может провести классическую английскую беседу о чае и погоде со своим далеким визави (см. рис. 13).

Рисунок 13. Трубка на удаленном конце поднята – соединение осуществлено

Рисунок 13. Трубка на удаленном конце поднята – соединение осуществлено

Как это будет выглядеть на стороне сервера? Во-первых, потребуется Java версии 6. Хотя может использоваться и предыдущая, 5-я, версия, но разработчики рекомендуют все-таки переходить на более новую. На странице [13] забираете tarball версии 0.7.0final сервера Red5, затем ja-файл red5.jar (детальная инструкция расположена на сайте [14]) и сам архив SIP-телефона. Его следует разместить в директории webapps, на стороне сервера. Затем, запустив скрипт red5.sh, вы получите работающий Red5-сервер, готовый принимать звонки. В целях разграничения функций вы можете разместить Red5 на другой машине, нежели сам Asterisk.

В качестве эпилога

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

  1. Платов М. Что важно знать об IP-телефонии? //«Системный администратор», №5, 2005 г. – С. 20-25.
  2. Платов М. Asterisk и Linux: миссия IP-телефония. //«Системный администратор», №6, 2005 г. – С. 12-19.
  3. Платов М. Asterisk и Linux: миссия IP-телефония. Действие 2. //«Системный администратор», №7, 2005 г. – С. 32-38.
  4. Платов М. Asterisk и Linux: миссия IP-телефония. Действие 3. //«Системный администратор», №8, 2005 г. – С. 10-19.
  5. http://www.asteriskguru.com/tutorials/sip_nat_oneway_or_no_audio_asterisk.html.
  6. http://www.counterpath.com.
  7. http://www.hem.za.org/jiaxclient.
  8. http://iaxclient.wiki.sourceforge.net.
  9. http://www.voip-info.org/wiki-IAXClient.
  10. http://moziax.mozdev.org.
  11. http://www.azxws.com/asterisk.
  12. http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol.
  13. http://osflash.org/red5/070final.
  14. http://code.google.com/p/red5phone.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru