Журнал LinuxFormat - перейти на главную

LXF82:Asterisk

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(uncomplete)
 
Строка 6: Строка 6:
 
Интернетом в середине девяностых; с Linux незадолго до
 
Интернетом в середине девяностых; с Linux незадолго до
 
смены тысячелетий; и теперь это происходит с IP-телефонией.
 
смены тысячелетий; и теперь это происходит с IP-телефонией.
Поскольку «голос поверх IP» (Voice over IP, VoIP) – это сервис, рабо-
+
Поскольку «голос поверх IP» (Voice over IP, VoIP) – это сервис, работающий поверх общедоступного Интернета (или, возможно, сегмента
тающий поверх общедоступного Интернета (или, возможно, сегмента
+
частной LAN/WAN), большинство протоколов и стандартов, используемых данной технологией, открыты, и это способствует разработке
частной LAN/WAN), большинство протоколов и стандартов, исполь-
+
широкой номенклатуры программ и оборудования. Есть несколько различных реализаций VoIP, каждая из которых имеет свои преимущества
зуемых данной технологией, открыты, и это способствует разработке
+
широкой номенклатуры программ и оборудования. Есть несколько раз-
+
личных реализаций VoIP, каждая из которых имеет свои преимущества
+
 
и недостатки.
 
и недостатки.
 +
 +
{{Врезка|center|
 +
|Заголовок=РАСШИФРОВКА ТЕРМИНОВ VOIP
 +
|Содержание=
 +
*; E1: Транспортная шина, используемая в Европе, состоит из 32 каналов по 64 кбит. Каналы могут использоваться для передачи данных, голоса или и того, и другого.
 +
*; Foreign eXchange Office (FXO): Интерфейс, используемый для подключения к вашей местной телефонной компании по стандартной ТфОП-линии (PSTN). Он называется FXO, поскольку через него мы подключаемся к центральному офису нашего оператора.
 +
*; Foreign eXchange Station (FXS): Интерфейс, используемый для подключения стандартных телефонных аппаратов. Телефонная розетка в вашей стене.
 +
*; G.711: Стандартный метод кодирования, используемый телефонными компаниями для передачи цифровых сигналов. В Европе применяют G.711 «alaw», в США – G.711 «ulaw».
 +
*; G.729: Узкополосный кодек, который запатентован, так что за его использование приходится платить. Но зато при использовании G.729 есть возможность передавать вызовы VoIP по модему 56 кбит.
 +
*; H.323: Сравнительно старый протокол, использовавшийся для голосовых коммуникаций. Большинство устройств, которые использовали H.323, теперь вместо него используют SIP.
 +
*; Inter-Asterisk eXchange (IAX): Открытый протокол VoIP от Digium, основного разработчика Asterisk, спроектированный для надёжной передачи голосовых вызовов через IP. IAX хорошо подходит для магистральных вызовов между оператором VoIP и локальной системой или между двумя системами Asterisk.
 +
*; Джиттер (Jitter): Общая проблема VoIP, когда голосовые пакеты задерживаются на различное время, и абонент слышит паузы или нарушение порядка звуковых фрагментов в последовательности.
 +
*; Real-time Transmission Protocol (RTP): Протокол передачи, работающий поверх UDP и обеспечивающий взаимодействие в режиме реального времени по IP. RTP используется как в SIP, так и в H.323 для потоков голосовой информации.
 +
*; Session Initiation Protocol (SIP): Популярный протокол VoIP, используемый как в телефонах, так и операторами; он действительно хорош, за исключением работы через некоторые реализации NAT.
 +
*; T1: транспортная шина, используемая в США для передачи голоса или данных. T1 состоит из 24 каналов по 64 кбит, используемых для входящих или исходящих вызовов. Также поверх T1 может передаваться ISDN PRI для 23 голосовых каналов.
 +
|Ширина=}}
  
 
Приложение, которое я здесь демонстрирую, Asterisk – это открытая
 
Приложение, которое я здесь демонстрирую, Asterisk – это открытая
УАТС (учрежденческая АТС), или телефонный узел частного пользова-
+
УАТС (учрежденческая АТС), или телефонный узел частного пользования (private branch exchange, PBX). Хотя Asterisk был разработан для
ния (private branch exchange, PBX). Хотя Asterisk был разработан для
+
 
использования с VoIP – и поддерживает богатый набор протоколов VoIP,
 
использования с VoIP – и поддерживает богатый набор протоколов VoIP,
 
включая SIP и H.323 – им вполне можно бесплатно заменить УАТС даже
 
включая SIP и H.323 – им вполне можно бесплатно заменить УАТС даже
и без функций VoIP. Мы особо приглашаем собрать её для себя люби-
+
и без функций VoIP. Мы особо приглашаем собрать её для себя любителей удушающе больших счетов от телекоммуникационных компаний
телей удушающе больших счетов от телекоммуникационных компаний
+
 
и непристойных тарифов на «дальние» и международные звонки (см.
 
и непристойных тарифов на «дальние» и международные звонки (см.
 
врезку «Подключение к телефонной сети общего пользования»).
 
врезку «Подключение к телефонной сети общего пользования»).
Строка 33: Строка 44:
  
 
Если вы не привыкли к телефонии, вам придётся потерпеть, пока
 
Если вы не привыкли к телефонии, вам придётся потерпеть, пока
я коротко опишу её функционирование – но, с другой стороны, кру-
+
я коротко опишу её функционирование – но, с другой стороны, крутые хакеры вроде вас должны бы терпимо относиться к техническим
тые хакеры вроде вас должны бы терпимо относиться к техническим
+
 
разъяснениям. Приступим. Любая реализация VoIP в принципе состоит
 
разъяснениям. Приступим. Любая реализация VoIP в принципе состоит
 
из двух компонентов: процесс, передающий звуковую информацию от
 
из двух компонентов: процесс, передающий звуковую информацию от
Строка 48: Строка 58:
 
Наша задача согласовать две отдельные телефонные сети не нова –
 
Наша задача согласовать две отдельные телефонные сети не нова –
 
любое предприятие с более чем пятью сотрудниками, вероятно, имеет
 
любое предприятие с более чем пятью сотрудниками, вероятно, имеет
внутреннюю телефонную сеть с расширениями и голосовыми услуга-
+
внутреннюю телефонную сеть с расширениями и голосовыми услугами. Чтобы подключить эту сеть к общей коммутационной сети (public
ми. Чтобы подключить эту сеть к общей коммутационной сети (public
+
 
switched telephone network, PSTN), используется УАТС. УАТС можно
 
switched telephone network, PSTN), используется УАТС. УАТС можно
 
рассматривать как телефонный маршрутизатор, со своим внутренним
 
рассматривать как телефонный маршрутизатор, со своим внутренним
Строка 56: Строка 65:
 
хорошего качества стоят не дёшево (несколько тысяч долларов и более
 
хорошего качества стоят не дёшево (несколько тысяч долларов и более
 
за абсолютный минимум функций), зато предоставляют ожидаемую
 
за абсолютный минимум функций), зато предоставляют ожидаемую
пользователями надёжность почти со 100%-й готовностью на протяже-
+
пользователями надёжность почти со 100%-й готовностью на протяжении нескольких лет, если не десятилетий.
нии нескольких лет, если не десятилетий.
+
  
При формировании среды VoIP, для ИТ-персонала УАТС – перво-
+
При формировании среды VoIP, для ИТ-персонала УАТС – первоочередная область внимания, поскольку это линия фронта между ТфОП
очередная область внимания, поскольку это линия фронта между ТфОП
+
 
и нашими пользователями. Коммерческие системы УАТС с поддержкой
 
и нашими пользователями. Коммерческие системы УАТС с поддержкой
 
VoIP предлагаются почти всеми, кто использует стандартные устройства
 
VoIP предлагаются почти всеми, кто использует стандартные устройства
УАТС – посмотрите на решения Nortel (http://www.nortel.com), Lucent (http://www.lucent.com) и Cisco (http://cisco.com) – но имеется замечательная
+
УАТС – посмотрите на решения Nortel (http://www.nortel.com), Lucent (http://www.lucent.com) и Cisco (http://cisco.com) – но имеется замечательная альтернатива в настоящем стиле open source, работающая на стандартном оборудовании Intel. И здесь мы возвращаемся к Asterisk.
альтернатива в настоящем стиле open source, работающая на стандарт-
+
 
ном оборудовании Intel. И здесь мы возвращаемся к Asterisk.
+
{{Врезка|center|
 +
|Заголовок=ПОДКЛЮЧЕНИЕ К ТЕЛЕФОННОЙ СЕТИ ОБЩЕГО ПОЛЬЗОВАНИЯ<br />
 +
''Интернет ненадёжен? Звоните через старую добрую сеть общего пользования (PSTN) и вашего телефонного провайдера.''
 +
|Содержание=Digium предлагает порт FXO для подключения Asterisk к обычной линии
 +
PSTN, используя карту X100P или плату TDM400P и FXP-модуль. Карта
 +
X100P предоставляет одни порт FXO, в то время как TDM400P позволяет подключать 4 порта, настраиваемые как FXO, либо FXS (для телефонных аппаратов), используя маленькие подсоединяемые модули.
 +
 
 +
Первая карта довольно дорога – примерно 180 долларов, и поставляется с одним портом FXS; однако поскольку она использует лишь один
 +
разъём PCI и отличается столь значительной гибкостью, X100P при
 +
подключении к PSTN – это путь наименьшего сопротивления. Оба
 +
устройства поставляются с техподдержкой в установке оборудования и
 +
настройке Asterisk, так что вы сможете получить профессиональный
 +
совет, если что-то пойдет не по плану.
 +
 
 +
Установив оборудование, нужно будет загрузить соответствующие
 +
модули ядра и настроить интерфейсы. Asterisk для этих устройств
 +
использует систему под названием Zaptel, и ссылается на них как на
 +
Zap-каналы. Конкретные типы каналов настраиваются в /etc/zaptel.
 +
conf, где устанавливается тип порта FXO и FXS и указывается, в какой
 +
стране мы находимся.
 +
 
 +
Чтоб жизнь малиной не казалась, порт FXO использует протокол FXS,
 +
а порт FXS – протокол FXO. Так, даже если у нас установлен модуль FXO
 +
в канале 1 (порт 0), мы должны сообщить Zaptel, что на этом интерфейсе хотим действовать по FXS. Всё, что касается Zaptel, настраивается в
 +
/etc/zaptel.conf, который выглядит примерно так:
 +
<source lang="ini">fxsks=1
 +
fxoks=2
 +
loadzone=us
 +
defaultzone=us</source>
 +
Строки fxsks и fxoks сообщат оборудованию, что следует использовать метод сигнализации KewlStart, это стандартный протокол аналоговых телефонных линий (POTS) в западных странах для взаимодействия
 +
с коммутатором телефонной компании. Если порт FXO не исходит от
 +
банка каналов на магистральную линию, где сигнализация может придерживаться метода, зависящего от выбора, сделанного при подготовке линии, KewlStart – та опция, которая нам нужна.
 +
 
 +
Как только /etc/zaptel.conf будет создан, мы можем загрузить модули, настроить Zaptel и проверить, что всё работает как надо:
 +
<pre># modprobe zaptel wcfxs
 +
# ztcfg
 +
# dmesg
 +
Zapata Telephony Interface Registered on major 196
 +
Freshmaker version: 63
 +
Freshmaker passed register test
 +
Module 0: Installed -- AUTO FXO (FCC mode)
 +
Module 1: Installed -- AUTO FXS/DPO
 +
Module 2: Not installed
 +
Module 3: Not installed
 +
Found a Wildcard TDM: Wildcard TDM400P REV E/F (4 modules)
 +
Registered tone zone 0 (United States / North America)</pre>
 +
Чтобы обрабатывать исходящие и входящие вызовы, нужно настроить /etc/asterisk/zapata.conf и /etc/asterisk/extensions.conf.
 +
<source lang="ini">signalling=fxs_ks
 +
context=from-pstn
 +
channel => 1
 +
signalling=fxo_ks
 +
context=internal
 +
channel => 2</source>
 +
Любой входящий вызов будет подпадать под контекст from-pstn в
 +
extensions.conf, а исходящие звонки мы можем сбрасывать на канал
 +
Zap/1. Также доступен канал Zap/2, к которому можно присоединить
 +
стандартный телефон, как к стандартной телефонной линии. Получая
 +
входящий звонок на наш канал Zap/1, мы можем использовать стандартные телефоны, а также затейливую трубку Cisco SIP.
 +
|Ширина=}}
  
 
=== Будем знакомы ===
 
=== Будем знакомы ===
Строка 71: Строка 136:
 
чья телефонная компания Digiun оказала проекту разработке Asterisk
 
чья телефонная компания Digiun оказала проекту разработке Asterisk
 
первичную поддержку, а вообще-то поставляет телекоммуникационное
 
первичную поддержку, а вообще-то поставляет телекоммуникационное
оборудование. Asterisk бесплатен для загрузки, что делает использо-
+
оборудование. Asterisk бесплатен для загрузки, что делает использование УАТС возможным для очень маленьких фирм и даже отдельных
вание УАТС возможным для очень маленьких фирм и даже отдельных
+
 
пользователей.
 
пользователей.
  
 
Во многих дистрибутивах, включая Fedora Core и Debian, доступны
 
Во многих дистрибутивах, включая Fedora Core и Debian, доступны
двоичные пакеты Asterisk, а также модули ядра и требуемые библио-
+
двоичные пакеты Asterisk, а также модули ядра и требуемые библиотеки поддержки. Пока оборудование для соединения с ТфОП (PSTN)
теки поддержки. Пока оборудование для соединения с ТфОП (PSTN)
+
 
не используется, поддержка на уровне ядра не нужна. Пользователи
 
не используется, поддержка на уровне ядра не нужна. Пользователи
Debian могут просто выполнить apt-get install Asterisk, чтобы загру-
+
Debian могут просто выполнить apt-get install Asterisk, чтобы загрузить и установить систему Asterisk, или скачать исходные коды с http://www.Asterisk.org.
зить и установить систему Asterisk, или скачать исходные коды с http://www.Asterisk.org.
+
  
 
Сборка Asterisk проста, хотя и требует компиляции libpri и zaptel
 
Сборка Asterisk проста, хотя и требует компиляции libpri и zaptel
 
для C-заголовков. Установить его можно стандартно: make && make
 
для C-заголовков. Установить его можно стандартно: make && make
install с правами суперпользователя – для большинства пользовате-
+
install с правами суперпользователя – для большинства пользователей сборка пройдёт успешно. Asterisk потребует немного времени на
лей сборка пройдёт успешно. Asterisk потребует немного времени на
+
компиляцию, но, будучи установленным, он будет использовать некоторые файлы конфигурации по умолчанию, поставляемые с пакетом.
компиляцию, но, будучи установленным, он будет использовать некото-
+
рые файлы конфигурации по умолчанию, поставляемые с пакетом.
+
  
 
Мы можем протестировать установленный нами Asterisk, выполнив
 
Мы можем протестировать установленный нами Asterisk, выполнив
Строка 93: Строка 153:
 
  # Asterisk -cvvvvv
 
  # Asterisk -cvvvvv
 
На экране замелькает всевозможная информация, по мере загрузки
 
На экране замелькает всевозможная информация, по мере загрузки
каждого модуля, но в конечном счёте мы увидим простенькое приглаше-
+
каждого модуля, но в конечном счёте мы увидим простенькое приглашение, с помощью которого сможем управлять нашей системой Asterisk:
ние, с помощью которого сможем управлять нашей системой Asterisk:
+
 
  Asterisk Ready.
 
  Asterisk Ready.
 
  CLI>
 
  CLI>
Строка 100: Строка 159:
 
если вы знакомы с этим популярным ПО для маршрутизаторов, то
 
если вы знакомы с этим популярным ПО для маршрутизаторов, то
 
моментально в ней разберётесь. Команда show version выведет текущую
 
моментально в ней разберётесь. Команда show version выведет текущую
версию Asterisk, а все команды можно просмотреть, введя ? в команд-
+
версию Asterisk, а все команды можно просмотреть, введя ? в командной строке. Поначалу наиболее полезной командой будет show modules,
ной строке. Поначалу наиболее полезной командой будет show modules,
+
 
которая отображает все модули, входящие в комплекс Asterisk. Каждая
 
которая отображает все модули, входящие в комплекс Asterisk. Каждая
из возможностей Asterisk, например, обеспечение протоколов телефо-
+
из возможностей Asterisk, например, обеспечение протоколов телефонии, кодеки для сжатия звука и различные устанавливаемые по умолчанию приложения, представлена в Asterisk в виде модуля.
нии, кодеки для сжатия звука и различные устанавливаемые по умолча-
+
нию приложения, представлена в Asterisk в виде модуля.
+
  
 
=== Устойчивая маршрутизация вызовов ===
 
=== Устойчивая маршрутизация вызовов ===
 +
{{Врезка
 +
|Заголовок=ВЫБОР ВАШЕГО ОПЕРАТОРА VOIP
 +
|Содержание=Если вы планируете использовать Asterisk с сервисом VoIP, чтобы
 +
звонить через интернет, вам потребуется подключиться к оператору,
 +
который сможет перенаправлять ваши звонки. Проверьте:
 +
* Gossiptel – http://www.gossiptel.co.uk
 +
* Gradwell – http://www.gradwell.net
 +
* NuFone – http://www.nufone.net
 +
* Simple Telecom – http://www.simpletelecom.co.uk
 +
* VoIP User – http://www.voipuser.org
 +
Есть также несколько проектов сообщества, которые не умеют перенаправлять звонки в сеть ТфОП, но удобны для соединения в
 +
Интернете с другими владельцами систем VoIP:
 +
* Free World Dialup – http://www.freeworlddialup.com
 +
* IAXTel – http://www.iaxtelcom
 +
Множество подробной информации о провайдерах VoIP можно найти
 +
на http://www.voip-info.org/wiki-VOIP+Service+Providers.
 +
|Ширина=250px}}
 
Теперь, после установки, самое время воспользоваться Asterisk для
 
Теперь, после установки, самое время воспользоваться Asterisk для
решения нашей первой общей проблемы телефонии: непрофессиональ-
+
решения нашей первой общей проблемы телефонии: непрофессиональная маршрутизация вызовов.
ная маршрутизация вызовов.
+
  
 
Понятно, что полным-полно провайдеров VoIP с бизнес-моделями
 
Понятно, что полным-полно провайдеров VoIP с бизнес-моделями
 
отнюдь не звёздного уровня (см. врезку «Выбор вашего оператора
 
отнюдь не звёздного уровня (см. врезку «Выбор вашего оператора
 
VoIP», там перечислены операторы, имеющие репутацию солидных).
 
VoIP», там перечислены операторы, имеющие репутацию солидных).
Пусть они и предлагают звонки в Тибет за копейки, но человек разум-
+
Пусть они и предлагают звонки в Тибет за копейки, но человек разумный вряд ли будет ожидать высокой стабильности их сети. Asterisk предоставляет достаточную гибкость в подключении к более чем одному
ный вряд ли будет ожидать высокой стабильности их сети. Asterisk предоставляет достаточную гибкость в подключении к более чем одному
+
 
оператору VoIP для обработки вызовов, и мы можем построить логику
 
оператору VoIP для обработки вызовов, и мы можем построить логику
 
нашей УАТС так, что если один оператор вдруг «умрёт», для звонков во
 
нашей УАТС так, что если один оператор вдруг «умрёт», для звонков во
Строка 135: Строка 206:
 
передачи клиентских звонков и не волноваться об «уборке» после себя.
 
передачи клиентских звонков и не волноваться об «уборке» после себя.
  
Мы можем реализовать этот макрос в соответствии с нашим номер-
+
Мы можем реализовать этот макрос в соответствии с нашим номерным планом и логикой, используемой для перенаправления вызовов, в
ным планом и логикой, используемой для перенаправления вызовов, в
+
 
extensions.conf:
 
extensions.conf:
 
  exten=>_0.,1,Macro(dial,IAX2/carrier1/${EXTEN})
 
  exten=>_0.,1,Macro(dial,IAX2/carrier1/${EXTEN})
Строка 142: Строка 212:
 
  exten => _0.,3,Macro(dial,IAX2/carrier2/${EXTEN})
 
  exten => _0.,3,Macro(dial,IAX2/carrier2/${EXTEN})
 
  exten=>_0.,4,Hangup()
 
  exten=>_0.,4,Hangup()
Эту конфигурацию можно расширять как угодно, добавляя в спи-
+
Эту конфигурацию можно расширять как угодно, добавляя в список других операторов VoIP. Её недостаток – когда звонок уже принят,
сок других операторов VoIP. Её недостаток – когда звонок уже принят,
+
 
нет гарантии, что он пройдёт гладко. Немногие конечные пользователи
 
нет гарантии, что он пройдёт гладко. Немногие конечные пользователи
хотели бы иметь дело с недостатками вроде плавающего или односто-
+
хотели бы иметь дело с недостатками вроде плавающего или одностороннего звука и прерванных соединений, но как только провайдер VoIP
роннего звука и прерванных соединений, но как только провайдер VoIP
+
 
берёт вызов в свои руки, мы, естественно, предполагаем, что он всё
 
берёт вызов в свои руки, мы, естественно, предполагаем, что он всё
 
сделает правильно. Если у вас достаточно времени, вы, думаю, сможете
 
сделает правильно. Если у вас достаточно времени, вы, думаю, сможете
Строка 152: Строка 220:
 
из Asterisk, и определить, какие маршруты более надёжны.
 
из Asterisk, и определить, какие маршруты более надёжны.
  
В больших системах основное преимущество даёт маршру-
+
В больших системах основное преимущество даёт маршрутизация по критерию наименьшей стоимости (Least Cost
тизация по критерию наименьшей стоимости (Least Cost
+
 
Routing, LCR), разновидность услуги сравнения, особенно
 
Routing, LCR), разновидность услуги сравнения, особенно
 
когда у провайдеров различаются тарифы для звонков
 
когда у провайдеров различаются тарифы для звонков
 
за границу. Тарифные планы пары провайдеров можно
 
за границу. Тарифные планы пары провайдеров можно
поместить в базу данных и использовать для определён-
+
поместить в базу данных и использовать для определённых звонков провайдера, предложившего более низкую цену. Подробную информацию можно получить на
ных звонков провайдера, предложившего более низ-
+
кую цену. Подробную информацию можно получить на
+
 
http://cpan.uwinnipeg.ca/htdocs/Asterisk-LCR.
 
http://cpan.uwinnipeg.ca/htdocs/Asterisk-LCR.
  
Строка 165: Строка 230:
 
Теперь – наша вторая задача. Все телефоны, кроме самых
 
Теперь – наша вторая задача. Все телефоны, кроме самых
 
простых, способны принимать трёхсторонние звонки, так
 
простых, способны принимать трёхсторонние звонки, так
что можно организовать небольшую конференцию с дву-
+
что можно организовать небольшую конференцию с двумя другими абонентами. Если участников больше трёх,
мя другими абонентами. Если участников больше трёх,
+
 
это усложняется и требует усовершенствованного
 
это усложняется и требует усовершенствованного
решения, ориентированного на группы або-
+
решения, ориентированного на группы абонентов. Даже если вы проводите основную
нентов. Даже если вы проводите основную
+
 
часть своих групповых дискуссий в сети, не
 
часть своих групповых дискуссий в сети, не
 
мешает знать, как создать мост конференций
 
мешает знать, как создать мост конференций
Строка 175: Строка 238:
 
неработоспособна.
 
неработоспособна.
  
Для поддержки
+
Для поддержки телефонных конференций Asterisk предоставляет приложение, известное как MeetMe; примеры конфигураций
телефонных конфе-
+
включены в поставку Asterisk. Основная зависимость MeetMe – подсистема времени Asterisk. Обычно, чтобы предоставить точные часы,
ренций Asterisk предоставляет приложение, известное как MeetMe; примеры конфигураций
+
включены в поставку Asterisk. Основная зависимость MeetMe – под-
+
система времени Asterisk. Обычно, чтобы предоставить точные часы,
+
 
Asterisk использует драйвер Zaptel и физические устройства; однако это
 
Asterisk использует драйвер Zaptel и физические устройства; однако это
 
доступно не всегда, особенно в случае серверов-стоек, где разъёмы PCI
 
доступно не всегда, особенно в случае серверов-стоек, где разъёмы PCI
Строка 187: Строка 247:
 
при подгруженном ztdummy всё работает гораздо более гладко.
 
при подгруженном ztdummy всё работает гораздо более гладко.
  
Построить мост конференций в MeetMe.conf совсем не сложно, тре-
+
Построить мост конференций в MeetMe.conf совсем не сложно, требуется только номер ID конференции и необязательный PIN-код для
буется только номер ID конференции и необязательный PIN-код для
+
 
доступа:
 
доступа:
 
  conf => 2345,9938
 
  conf => 2345,9938
Строка 211: Строка 270:
  
 
=== Управление очередью ===
 
=== Управление очередью ===
Теперь мы можем заняться третьей задачей Asterisk, которая ждёт свое-
+
{{Врезка
го часа, слушая мелодию Greensleeves буквально с самого начала урока.
+
|Заголовок=СОВЕТЫ
Любая организация, клиентов у которой намного больше, чем сотрудни-
+
|Содержание=
ков на телефоне, должна рационально расставить приоритеты звонков
+
* На загруженной системе Asterisk не пяльтесь зря на командную строку управления (CLI). Каждое сообщение, отправленное на CLI, приводит к тому, что Asterisk блокирует свою систему обработки вызовов, задерживая новые звонки.
 +
* Команда show может предоставить много полезной статистики: show queues для очередей, show channels для обрабатываемых звонков, и т.д.
 +
* После изменения опций команда reload перезапустит Asterisk без сброса установленных соединений. Это очень полезно при редактировании добавочных телефонных номеров или модификации очередей.
 +
* Запуск iax2 show channels предоставит информацию по задержкам и помехам для каждого активного вызова IAX2, бесценную для поиска неисправностей сети.
 +
|Ширина=200px}}
 +
Теперь мы можем заняться третьей задачей Asterisk, которая ждёт своего часа, слушая мелодию Greensleeves буквально с самого начала урока.
 +
Любая организация, клиентов у которой намного больше, чем сотрудников на телефоне, должна рационально расставить приоритеты звонков
 
и обрабатывать их так, чтобы люди не спятили окончательно. Очереди
 
и обрабатывать их так, чтобы люди не спятили окончательно. Очереди
звонков хороши для решения первой проблемы, хотя некоторые счита-
+
звонков хороши для решения первой проблемы, хотя некоторые считают, что они могут серьёзно подорвать психическое здоровье клиентов.
ют, что они могут серьёзно подорвать психическое здоровье клиентов.
+
 
Типичная очередь – это система, когда дозвонившийся абонент слушает
 
Типичная очередь – это система, когда дозвонившийся абонент слушает
 
некоторое время музыку, затем один из агентов может поднять телефон
 
некоторое время музыку, затем один из агентов может поднять телефон
Строка 246: Строка 310:
 
Строки announce позволяют приложению периодически сообщать
 
Строки announce позволяют приложению периодически сообщать
 
звонящему, сколько он просидел в очереди и какова его позиция, и
 
звонящему, сколько он просидел в очереди и какова его позиция, и
радовать его позорными сообщениями типа: «Вы – следующий на оче-
+
радовать его позорными сообщениями типа: «Вы – следующий на очереди, среднее время разговора – пять часов». Опция reportholdtime
реди, среднее время разговора – пять часов». Опция reportholdtime
+
включает уведомления агенту о том, как долго звонящий ждал соединения. Отделам технической поддержки такая информация полезна для
включает уведомления агенту о том, как долго звонящий ждал соеди-
+
нения. Отделам технической поддержки такая информация полезна для
+
 
определения тенденций по времени вызова и может быть включена в
 
определения тенденций по времени вызова и может быть включена в
 
документацию по запросу.
 
документацию по запросу.
Строка 255: Строка 317:
 
В нашей базовой конфигурации очереди есть только статические
 
В нашей базовой конфигурации очереди есть только статические
 
агенты, которые не могут покинуть очередь, пока не переведут свои
 
агенты, которые не могут покинуть очередь, пока не переведут свои
телефоны в режим DnD (Do not Disturb, «не беспокоить») или не отклю-
+
телефоны в режим DnD (Do not Disturb, «не беспокоить») или не отключатся. Для людей, которые приходят и уходят, или для удалённых пользователей использование агентов позволяет подключаться к очереди,
чатся. Для людей, которые приходят и уходят, или для удалённых поль-
+
зователей использование агентов позволяет подключаться к очереди,
+
 
когда они хотят ответить на звонок. Система отсоединит их, если они не
 
когда они хотят ответить на звонок. Система отсоединит их, если они не
 
смогут ответить в течение определённого времени. Создадим agents.
 
смогут ответить в течение определённого времени. Создадим agents.
Строка 267: Строка 327:
 
agent => 1235,0000,Agent2_Name</source>
 
agent => 1235,0000,Agent2_Name</source>
 
Для подключения и отсоединения используется команда
 
Для подключения и отсоединения используется команда
AgentCallBackLogin в файле extensions.conf, чтобы предоставить рас-
+
AgentCallBackLogin в файле extensions.conf, чтобы предоставить расширение для аутентификации пользователей по их ID и PIN-коду, прежде чем они присоединятся к очереди в качестве агента:
ширение для аутентификации пользователей по их ID и PIN-коду, пре-
+
жде чем они присоединятся к очереди в качестве агента:
+
 
  exten => 700,1,AgentCallBackLogin(|${CALLERIDNUM}@local)
 
  exten => 700,1,AgentCallBackLogin(|${CALLERIDNUM}@local)
В этом примере вызовы для очереди будут выполняться на иденти-
+
В этом примере вызовы для очереди будут выполняться на идентификатор подключённого лица, исключая необходимость определять его
фикатор подключённого лица, исключая необходимость определять его
+
 
местоположение. Однако имейте в виду: если ваш телефонный номер
 
местоположение. Однако имейте в виду: если ваш телефонный номер
 
снабжен добавочным, идентификатор может оказаться неправильным
 
снабжен добавочным, идентификатор может оказаться неправильным

Версия 13:30, 17 декабря 2008

Содержание

Asterisk: замените вашу АТС

Душа горит желанием внедрить в своей организации VoIP взамен недешёвой АТС, но не уверены, что справитесь? Попробуйте эту открытую систему и добавьте отличные функции – например, конференции с интернет-вызовами.

Выход технологии за пределы круга своих приверженцев в коммерческий мир всегда волнителен. Это произошло с Интернетом в середине девяностых; с Linux незадолго до смены тысячелетий; и теперь это происходит с IP-телефонией. Поскольку «голос поверх IP» (Voice over IP, VoIP) – это сервис, работающий поверх общедоступного Интернета (или, возможно, сегмента частной LAN/WAN), большинство протоколов и стандартов, используемых данной технологией, открыты, и это способствует разработке широкой номенклатуры программ и оборудования. Есть несколько различных реализаций VoIP, каждая из которых имеет свои преимущества и недостатки.


Приложение, которое я здесь демонстрирую, Asterisk – это открытая УАТС (учрежденческая АТС), или телефонный узел частного пользования (private branch exchange, PBX). Хотя Asterisk был разработан для использования с VoIP – и поддерживает богатый набор протоколов VoIP, включая SIP и H.323 – им вполне можно бесплатно заменить УАТС даже и без функций VoIP. Мы особо приглашаем собрать её для себя любителей удушающе больших счетов от телекоммуникационных компаний и непристойных тарифов на «дальние» и международные звонки (см. врезку «Подключение к телефонной сети общего пользования»).

На этом уроке я предполагаю, что вы пошли путём свободного VoIP. Мы сосредоточимся на трёх специфических функциях Asterisk:

  • Как уберечь передачу вызовов от нестабильности Интернета.
  • Как поддерживать связь с друзьями и коллегами с помощью конференции.
  • Как помещать входящие звонки в очередь

Но как это работает? Кто использует УАТС? И о чём я вообще тут толкую?

Если вы не привыкли к телефонии, вам придётся потерпеть, пока я коротко опишу её функционирование – но, с другой стороны, крутые хакеры вроде вас должны бы терпимо относиться к техническим разъяснениям. Приступим. Любая реализация VoIP в принципе состоит из двух компонентов: процесс, передающий звуковую информацию от пользователя в сеть VoIP (обычно, телефон), и процесс, позволяющий оборудованию VoIP взаимодействовать с телефонной сетью общего пользования (ТфОП). Хотя люди с техническим складом ума из многих стран терпеть не могут общую телефонную сеть, всё же это стандарт, и к ней подсоединён почти каждый. Как бы ни была хороша технология VoIP, пользуются ею не все, так что не обойтись без способности звонить на стандартные телефонные системы и принимать вызовы практически от любого абонента в мире.

Наша задача согласовать две отдельные телефонные сети не нова – любое предприятие с более чем пятью сотрудниками, вероятно, имеет внутреннюю телефонную сеть с расширениями и голосовыми услугами. Чтобы подключить эту сеть к общей коммутационной сети (public switched telephone network, PSTN), используется УАТС. УАТС можно рассматривать как телефонный маршрутизатор, со своим внутренним диапазоном адресов (известных также как добавочные номера или расширения, extensions) и доступом к общим номерам снаружи. УАТС хорошего качества стоят не дёшево (несколько тысяч долларов и более за абсолютный минимум функций), зато предоставляют ожидаемую пользователями надёжность почти со 100%-й готовностью на протяжении нескольких лет, если не десятилетий.

При формировании среды VoIP, для ИТ-персонала УАТС – первоочередная область внимания, поскольку это линия фронта между ТфОП и нашими пользователями. Коммерческие системы УАТС с поддержкой VoIP предлагаются почти всеми, кто использует стандартные устройства УАТС – посмотрите на решения Nortel (http://www.nortel.com), Lucent (http://www.lucent.com) и Cisco (http://cisco.com) – но имеется замечательная альтернатива в настоящем стиле open source, работающая на стандартном оборудовании Intel. И здесь мы возвращаемся к Asterisk.


Будем знакомы

Эта программа была разработана Марком Спенсером [Mark Spencer], чья телефонная компания Digiun оказала проекту разработке Asterisk первичную поддержку, а вообще-то поставляет телекоммуникационное оборудование. Asterisk бесплатен для загрузки, что делает использование УАТС возможным для очень маленьких фирм и даже отдельных пользователей.

Во многих дистрибутивах, включая Fedora Core и Debian, доступны двоичные пакеты Asterisk, а также модули ядра и требуемые библиотеки поддержки. Пока оборудование для соединения с ТфОП (PSTN) не используется, поддержка на уровне ядра не нужна. Пользователи Debian могут просто выполнить apt-get install Asterisk, чтобы загрузить и установить систему Asterisk, или скачать исходные коды с http://www.Asterisk.org.

Сборка Asterisk проста, хотя и требует компиляции libpri и zaptel для C-заголовков. Установить его можно стандартно: make && make install с правами суперпользователя – для большинства пользователей сборка пройдёт успешно. Asterisk потребует немного времени на компиляцию, но, будучи установленным, он будет использовать некоторые файлы конфигурации по умолчанию, поставляемые с пакетом.

Мы можем протестировать установленный нами Asterisk, выполнив от имени суперпользователя:

# Asterisk -cvvvvv

На экране замелькает всевозможная информация, по мере загрузки каждого модуля, но в конечном счёте мы увидим простенькое приглашение, с помощью которого сможем управлять нашей системой Asterisk:

Asterisk Ready.
CLI>

Командная строка Asterisk весьма напоминает Cisco IOS, так что если вы знакомы с этим популярным ПО для маршрутизаторов, то моментально в ней разберётесь. Команда show version выведет текущую версию Asterisk, а все команды можно просмотреть, введя ? в командной строке. Поначалу наиболее полезной командой будет show modules, которая отображает все модули, входящие в комплекс Asterisk. Каждая из возможностей Asterisk, например, обеспечение протоколов телефонии, кодеки для сжатия звука и различные устанавливаемые по умолчанию приложения, представлена в Asterisk в виде модуля.

Устойчивая маршрутизация вызовов

Теперь, после установки, самое время воспользоваться Asterisk для решения нашей первой общей проблемы телефонии: непрофессиональная маршрутизация вызовов.

Понятно, что полным-полно провайдеров VoIP с бизнес-моделями отнюдь не звёздного уровня (см. врезку «Выбор вашего оператора VoIP», там перечислены операторы, имеющие репутацию солидных). Пусть они и предлагают звонки в Тибет за копейки, но человек разумный вряд ли будет ожидать высокой стабильности их сети. Asterisk предоставляет достаточную гибкость в подключении к более чем одному оператору VoIP для обработки вызовов, и мы можем построить логику нашей УАТС так, что если один оператор вдруг «умрёт», для звонков во внешний мир станет использоваться другой метод.

Жизненно важная составляющая в этой смеси – приведённый ниже макрос «дозвона», он важнее всех тех, что вам доведётся увидеть (по крайней мере, сегодня на уроке):

[macro-dial]
exten=>s,1,Dial(${ARG1},120)
exten=>s,2,Goto(s-${DIALSTATUS},1)
exten=>s-NOANSWER,1,Handup
exten=>s-BUSY,1,Busy(45)
exten=>s-CONGESTION,1,NoOp
exten=>s-CHANUNAVAIL,1,NoOp
exten=>s-.,1,Goto(s-NOANSWER,1)

Как видите, макрос позволяет нам создать список методов для передачи клиентских звонков и не волноваться об «уборке» после себя.

Мы можем реализовать этот макрос в соответствии с нашим номерным планом и логикой, используемой для перенаправления вызовов, в extensions.conf:

exten=>_0.,1,Macro(dial,IAX2/carrier1/${EXTEN})
exten=>_0.,2,ResetCDR
exten => _0.,3,Macro(dial,IAX2/carrier2/${EXTEN})
exten=>_0.,4,Hangup()

Эту конфигурацию можно расширять как угодно, добавляя в список других операторов VoIP. Её недостаток – когда звонок уже принят, нет гарантии, что он пройдёт гладко. Немногие конечные пользователи хотели бы иметь дело с недостатками вроде плавающего или одностороннего звука и прерванных соединений, но как только провайдер VoIP берёт вызов в свои руки, мы, естественно, предполагаем, что он всё сделает правильно. Если у вас достаточно времени, вы, думаю, сможете набросать что-то в пять строк на Perl для анализа вызовов, сделанных из Asterisk, и определить, какие маршруты более надёжны.

В больших системах основное преимущество даёт маршрутизация по критерию наименьшей стоимости (Least Cost Routing, LCR), разновидность услуги сравнения, особенно когда у провайдеров различаются тарифы для звонков за границу. Тарифные планы пары провайдеров можно поместить в базу данных и использовать для определённых звонков провайдера, предложившего более низкую цену. Подробную информацию можно получить на http://cpan.uwinnipeg.ca/htdocs/Asterisk-LCR.

Строим конференц-связь

Теперь – наша вторая задача. Все телефоны, кроме самых простых, способны принимать трёхсторонние звонки, так что можно организовать небольшую конференцию с двумя другими абонентами. Если участников больше трёх, это усложняется и требует усовершенствованного решения, ориентированного на группы абонентов. Даже если вы проводите основную часть своих групповых дискуссий в сети, не мешает знать, как создать мост конференций и запустить его, на случай, если сеть IRC будет неработоспособна.

Для поддержки телефонных конференций Asterisk предоставляет приложение, известное как MeetMe; примеры конфигураций включены в поставку Asterisk. Основная зависимость MeetMe – подсистема времени Asterisk. Обычно, чтобы предоставить точные часы, Asterisk использует драйвер Zaptel и физические устройства; однако это доступно не всегда, особенно в случае серверов-стоек, где разъёмы PCI в большом дефиците. Вместо этого, в ядре 2.6 и текущем релизе Zaptel вы можете использовать модуль ядра ztdummy, и всё замечательно заработает. Многие функции Asterisk связаны с синхронизацией, так что при подгруженном ztdummy всё работает гораздо более гладко.

Построить мост конференций в MeetMe.conf совсем не сложно, требуется только номер ID конференции и необязательный PIN-код для доступа:

conf => 2345,9938

Мы можем затем переключиться на этот мост из нашего extensions. conf:

exten => 2000,1,MeetMe(2345)

Первому позвонившему сообщат, что он пока только один, и будет проигрываться мелодия ожидания. Как только присоединится второй абонент, мелодия ожидания завершится, и они смогут побеседовать. При подключении или отсоединении очередного абонента все будут оповещаться об этом звуковым сигналом. MeetMe имеет огромный набор опций, включая расширения для подключения к конференции с различными предпочтениями. Это идеально, когда мы хотим, чтобы определённые абоненты подсоединились и послушали, но не смогли ввязаться в разговор; или когда к мосту уже подключено несколько человек, но мелодия ожидания звучит до тех пор, пока не объявится некая конкретная личность.

Есть ряд версий мостов конференций сторонних разработчиков, работающих с Asterisk, но MeetMe имеет так много опций, что его замену обосновать очень трудно.

Управление очередью

Теперь мы можем заняться третьей задачей Asterisk, которая ждёт своего часа, слушая мелодию Greensleeves буквально с самого начала урока. Любая организация, клиентов у которой намного больше, чем сотрудников на телефоне, должна рационально расставить приоритеты звонков и обрабатывать их так, чтобы люди не спятили окончательно. Очереди звонков хороши для решения первой проблемы, хотя некоторые считают, что они могут серьёзно подорвать психическое здоровье клиентов. Типичная очередь – это система, когда дозвонившийся абонент слушает некоторое время музыку, затем один из агентов может поднять телефон и ответить на звонок. Asterisk легко с этим справляется при помощи приложения Queue.

Очереди определены в файле queues.conf, который имеет ту же структуру, что и другие файлы конфигурации Asterisk. Каждая очередь строится с собственной конфигурацией и списком агентов. Простейшая очередь может выглядеть примерно так:

[support]
musiconhold=default
strategy=roundrobin
timeout=15
retry=5
wrapuptime=30
maxlen=0
announce-frequency=90
announce-holdtime=yes
announce-round-seconds=60
context=operator
reportholdtime=yes
member => SIP/200
member => SIP/208
member => SIP/212

Большая часть этой конфигурации довольно прямолинейна, хотя есть ряд опций, подстраиваемых под требования конкретной очереди. Строки announce позволяют приложению периодически сообщать звонящему, сколько он просидел в очереди и какова его позиция, и радовать его позорными сообщениями типа: «Вы – следующий на очереди, среднее время разговора – пять часов». Опция reportholdtime включает уведомления агенту о том, как долго звонящий ждал соединения. Отделам технической поддержки такая информация полезна для определения тенденций по времени вызова и может быть включена в документацию по запросу.

В нашей базовой конфигурации очереди есть только статические агенты, которые не могут покинуть очередь, пока не переведут свои телефоны в режим DnD (Do not Disturb, «не беспокоить») или не отключатся. Для людей, которые приходят и уходят, или для удалённых пользователей использование агентов позволяет подключаться к очереди, когда они хотят ответить на звонок. Система отсоединит их, если они не смогут ответить в течение определённого времени. Создадим agents. conf, похожий на этот:

[agents]
ackcall=no ; Агент не нажал #, чтобы ответить на звонок
musiconhold => default
agent => 1234,0000,Agent1_Name
agent => 1235,0000,Agent2_Name

Для подключения и отсоединения используется команда AgentCallBackLogin в файле extensions.conf, чтобы предоставить расширение для аутентификации пользователей по их ID и PIN-коду, прежде чем они присоединятся к очереди в качестве агента:

exten => 700,1,AgentCallBackLogin(|${CALLERIDNUM}@local)

В этом примере вызовы для очереди будут выполняться на идентификатор подключённого лица, исключая необходимость определять его местоположение. Однако имейте в виду: если ваш телефонный номер снабжен добавочным, идентификатор может оказаться неправильным местом для перенаправления вызова.

Узнайте больше

Нарождающаяся технология развивается с необычайной быстротой – за ней трудно уследить. Сайт http://www.voip-info.org – чудесный ресурс для каждого, кто работает с VoIP, даже если Asterisk не является «частью уравнения». Даже не пытайтесь настроить VoIP-телефон от Cisco или Polycom, не посетив этот сайт: без толкового руководства вы можете зря потратить время, пытаясь во всём разобраться.

Персональные инструменты
купить
подписаться
Яндекс.Метрика