LXF82:Asterisk

Материал из Linuxformat.

Перейти к: навигация, поиск

Содержание

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

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

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

РАСШИФРОВКА ТЕРМИНОВ 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 — это открытая УАТС (учрежденческая АТС), или телефонный узел частного пользования (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.

ПОДКЛЮЧЕНИЕ К ТЕЛЕФОННОЙ СЕТИ ОБЩЕГО ПОЛЬЗОВАНИЯ
Интернет ненадёжен? Звоните через старую добрую сеть общего пользования (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, который выглядит примерно так:

fxsks=1
fxoks=2
loadzone=us
defaultzone=us

Строки fxsks и fxoks сообщат оборудованию, что следует использовать метод сигнализации KewlStart, это стандартный протокол аналоговых телефонных линий (POTS) в западных странах для взаимодействия с коммутатором телефонной компании. Если порт FXO не исходит от банка каналов на магистральную линию, где сигнализация может придерживаться метода, зависящего от выбора, сделанного при подготовке линии, KewlStart – та опция, которая нам нужна.

Как только /etc/zaptel.conf будет создан, мы можем загрузить модули, настроить Zaptel и проверить, что всё работает как надо:

# 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)

Чтобы обрабатывать исходящие и входящие вызовы, нужно настроить /etc/asterisk/zapata.conf и /etc/asterisk/extensions.conf.

signalling=fxs_ks
context=from-pstn
channel => 1
signalling=fxo_ks
context=internal
channel => 2

Любой входящий вызов будет подпадать под контекст from-pstn в extensions.conf, а исходящие звонки мы можем сбрасывать на канал Zap/1. Также доступен канал Zap/2, к которому можно присоединить стандартный телефон, как к стандартной телефонной линии. Получая входящий звонок на наш канал Zap/1, мы можем использовать стандартные телефоны, а также затейливую трубку Cisco SIP.

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

Эта программа была разработана Марком Спенсером [Mark Spencer], чья телефонная компания Digium оказала проекту разработке 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 в виде модуля.

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

ВЫБОР ВАШЕГО ОПЕРАТОРА VOIP

Если вы планируете использовать Asterisk с сервисом VoIP, чтобы звонить через интернет, вам потребуется подключиться к оператору, который сможет перенаправлять ваши звонки. Проверьте:

Есть также несколько проектов сообщества, которые не умеют перенаправлять звонки в сеть ТфОП, но удобны для соединения в Интернете с другими владельцами систем VoIP:

Множество подробной информации о провайдерах VoIP можно найти на http://www.voip-info.org/wiki-VOIP+Service+Providers.

Теперь, после установки, самое время воспользоваться 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 не пяльтесь зря на командную строку управления (CLI). Каждое сообщение, отправленное на CLI, приводит к тому, что Asterisk блокирует свою систему обработки вызовов, задерживая новые звонки.
  • Команда show может предоставить много полезной статистики: show queues для очередей, show channels для обрабатываемых звонков, и т.д.
  • После изменения опций команда reload перезапустит Asterisk без сброса установленных соединений. Это очень полезно при редактировании добавочных телефонных номеров или модификации очередей.
  • Запуск iax2 show channels предоставит информацию по задержкам и помехам для каждого активного вызова IAX2, бесценную для поиска неисправностей сети.

Теперь мы можем заняться третьей задачей 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, не посетив этот сайт: без толкового руководства вы можете зря потратить время, пытаясь во всём разобраться.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию