+7(3532) 54-07-08
atsip@atsip.ru +7(3532) 40-95-05
ГЛАВА 2

Книга Asterisk - Будущее телефонии 4 редакция

ГЛАВА 2

Posted in Книга Asterisk - Будущее телефонии 4 редакция

Архитектура Asterisk

Сначала с начала, но не обязательно в таком порядке.

—Доктор Кто

Asterisk сильно отличается от других, более традиционных АТС, поскольку диалплан в Asterisk рассматривает все входящие каналы практически одинаково.

В традиционной АТС существует логическое различие между станциями (телефонными аппаратами) и транками (ресурсами, которые подключаются к внешнему миру). Это означает, например, что вы не можете установить внешний шлюз на порт станции и перенаправлять внешние вызовы на него, не требуя, чтобы ваши пользователи сначала набирали внутренний номер. Кроме того, концепцию автономного ресурса (например, приемной) гораздо сложнее реализовать на традиционной АТС, поскольку система не позволит внешним ресурсам иметь доступ к внутренним функциям. Справедливости ради следует отметить, что многие традиционные АТС предлагают такую функциональность. Тем не менее, она обычно клонируется, ограничивается в функциях и требует сложного, запатентованного программного обеспечения, которое должно быть установлено в АТС (например, расширения для конкретного поставщика).

С другой стороны, у Asterisk нет внутренней концепции транков или станций. В Asterisk все, что приходит или выходит из системы, проходит через какой-то канал. Существует много разных каналов; однако диалплан Asterisk обрабатывает все каналы аналогичным образом, и это означает, что, например, внутренний пользователь может существовать на конце внешней соединительной линии (например, сотового телефона) и обрабатываться диалпланом точно так же, как это был бы обычный пользователь и находился на внутреннем номере. Если вы не работали с традиционной АТС, возможно, не сразу видно, насколько это мощно и освобождает. Рисунок 2-1 иллюстрирует различия между двумя архитектурами.

2 1

Рисунок 2-1. Архитектура Астериск и АТС

Модули

Asterisk построен на модулях. Модуль является загружаемым компонентом, который предоставляет определенные функции, такие как драйвер канала (например, chan_sip.so), или ресурс, который позволяет подключаться к внешней технологии (например, func_odbc.so). Модули Asterisk загружаются на основе файла /etc/asterisk/modules.conf. Мы обсудим использование многих модулей в этой книге. На этом этапе мы просто хотим представить концепцию модулей и дать вам представление о типах доступных модулей.

На самом деле можно запустить Asterisk без каких-либо модулей, хотя в этом состоянии он не сможет ничего сделать. Полезно понять модульную природу Asterisk, чтобы оценить архитектуру.

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

Типы модулей в Asterisk включают следующее:

  • Приложения

  • Мостовые модули

  • Модуль детальной записи вызовов (CDR)

  • Модуль регистрации события канала (CEL)

  • Драйверы канала

  • Конверторы кодеков

  • Интерпретаторы формата

  • Функции диалплана

  • Модули PBX

  • Модули ресурсов

  • Дополнительные модули

  • Тестовые модули

В следующих разделах мы перечислим каждый модуль, доступный в этих категориях, кратко определим его цель и выскажем наше мнение о его относительной популярности и/или важности (в то время как некоторые модули доказанно и заслуженно популярны, другие - довольно старые, едва ли когда-либо используемые и поддерживаются только с целью обратной совместимости). Подробная информация о том, как работают определенные модули, будет рассмотрена в разных главах всей книги, в зависимости от того, что представляет собой модуль и что он делает. Некоторые модули будут рассмотрены полностью; другие не могут быть охвачены вообще.

Что касается столбца Популярность/Статус в следующих таблицах, следующий список содержит наше мнение относительно значений, которые мы выбрали (ваше мнение может отличаться):

Ничтожный

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

Ненадежный

Этот модуль является новым или экспериментальным и не подходит для продакшена.

Полезный

Этот модуль является актуальным, поддерживается, популярен и рекомендуется.

Годный

Этот модуль работает, но может быть неполным или непопулярным и/или не рекомендуется авторами.

Новый

Этот модуль является совершенно новым, и его полноту и популярность в настоящее время трудно измерить.

Устаревший

Этот модуль был заменен чем-то, что считается превосходящим.

Ограниченный

Этот модуль имеет ограничения, которые могут сделать его непригодным для ваших требований.

Существенный

Это модуль, который вам обязательно понадобится.

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

core (ядро)

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

расширенные

Расширенные модули, которые поддерживаются сообществом. Поиск проблем и отчетность о них для отслеживания по-прежнему будет сортироваться, как и все отправленные проблемы, но может не получить должного внимания.

устаревшие

Устаревшие модули не получают поддержки и обычно не поддерживаются. Модули, которые попадают в категорию устаревших, должны иметь альтернативные модули как в расширенном, так и в состоянии поддержки ядро (core).

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

И теперь, без лишнего шума, давайте посмотрим на модули, сгруппированные по типу модуля.

Приложения

Приложения диалплана используются в extensions.conf для определения различных действий, которые могут быть применены к вызову. Например, приложение Dial() отвечает за выполнение исходящих подключений к внешним ресурсам и, возможно, является самым важным приложением диалплана. Доступные приложения перечислены в Таблице 2-1.

Таблица 2-1. Приложения диалплана

Имя

Назначение

Популярность/Статус

app_adsiprog

Загружает сценарии интерфейса аналогового отображения (ADSI) в совместимые аналоговые телефоны

Ничтожный

app_alarmreceiver

Поддерживает получение аварийных отчетов от оборудования

Ничтожный

app_amd

Обнаруживает автоответчики

Ненадежный

app_authenticate

Сравнивает двухтональный многочастотный (DTMF) ввод с предоставленной строкой (паролем)

Полезный

app_cdr

Делает специальную запись в CDR

Полезный

app_celgenuserevent

Создает пользовательские события для CEL

Новый

app_chanisavail

Проверяет состояние канала

Ничтожный

app_channelredirect

Перенаправляет канал в другую часть диалплана

Полезный

app_chanspy

Позволяет каналу прослушивать аудио на другом канале

Полезный

app_confbridge

Обеспечивает конференц-связь (новая версия)

Полезный в Астериск 10,

Ограниченный в Астериск 1.8

app_controlplayback

Воспроизводит приглашение и предлагает быстрые функции перемотки вперед и назад

Полезный

app_dahdibarge

Позволяет подключаться к каналу DAHDI

Устаревший, смотри app_chanspy

app_dahdiras

Создает RAS (сервер удаленного доступа) по каналу DAHDI (не модемная эмуляция)

Ничтожный

app_db

Используется для добавления/изменения/удаления записей в встроенной базе данных SQLite Asterisk

Устаревший, смотри func_db

app_dial

Используется для соединения каналов (т.е. совершает телефонные звонки)

Существенный

app_dictate

Воспроизведение записи и функции запуска/остановки

Полезный

app_directed_pickup

Отвечает на вызов другого внутреннего номера

Полезный

app_directory

Представляет список имен из voicemail.conf

Полезный

app_disa

Обеспечивает тональный сигнал ответа станции и принимает вход DTMF

Полезныйa

app_dumpchan

Переключает переменные канала в интерфейсе командной строки Asterisk (CLI)

Полезный

app_echo

Возвращает полученное аудио исходному каналу

Полезный

app_exec

Содержит Exec(), TryExec() и ExecIf(); выполняет приложение диалплана на основе условий

Полезный

app_externalivr

Элементы управления Asterisk как с AGI, только асинхронно

Полезный

app_fax

Предоставляет SendFax() и ReceiveFax()

Полезныйb

app_festival

Позволяет преобразовывать текст в речь с использованием движка Festival TTS

Годный

app_flash

Выполняет флеш-переключение на каналах (в основном аналоговые)

Полезный

app_followme

Выполняет Найди-меня/Следуйте-сюда на основе followme.conf

Полезный

app_forkcdr

Запускает новую запись CDR при текущем вызове

Годный

app_getcpeid

Получает идентификатор CPE ADSI

Ничтожный

app_ices

Отправляет аудио на сервер Icecast

Годный

app_image

Передача изображения на поддерживаемые устройства

Ограниченный

app_ivrdemo

Пример приложения для разработчиков

Ничтожный

app_jack

Работает с JACK Audio Connection Kit для обмена звуком между совместимыми приложениями

Полезный

app_macro

Запускает макросы диалплана

Устаревший — смотри GoSub()

app_meetme

Обеспечивает многопользовательскую конференц-связь

Полезный — полнофункциональный, но устаревший в пользу ConfBridge() с Астериск 10, поскольку ConfBridge() не требует DAHDI

app_milliwatt

Генерирует тональный сигнал 1004 Гц для тестирования потерь на аналоговых цепях

Полезный

app_minivm

Предоставляет примитивные функции, позволяющие вам создавать собственное приложение голосовой почты в диалплане

Годный

app_mixmonitor

Записывает обе стороны вызова и сводит их вместе

Полезный

app_morsecode

Генерирует код Морзе

Годный

app_mp3

Использует mpg123 для воспроизведения MP3

Ничтожный

app_nbscat

Потоки аудио от Network Broadcast Stream (NBS)

Ничтожный

app_originate

Позволяет инициировать вызов

Полезный

app_osplookup

Выполняет поиск Open Settlement Protocol (OSP)

Годный

app_page

Создает несколько аудиосоединений для определенных устройств для общего доступа (пейджинг)

Полезный

app_parkandannounce

Позволяет автоматическое объявление припаркованных вызовов

Годный

app_playback

Воспроизводит файл для канала (не принимает ввод)

Полезный

app_playtones

Воспроизведение пар тонов заданных частот

Полезный

app_privacy

Запрашивает ввод номера телефона вызывающего абонента, если не получен CallerID

Ничтожный

app_queue

Обеспечивает автоматическое распределение вызовов (ACD) - очереди

Полезный

app_read

Запрашивает ввод цифр от абонента и назначает переменную для присвоения ввода

Полезный

app_readexten

Запрашивает ввод цифр от абонентов и передает вызов назначенному внутр.номеру и контексту

Годный

app_readfile

Загружает содержимое текстового файла в переменную канала

Устаревший — смотри функцию FILE() в func_env

app_record

Записывает звук в файл

Полезный

app_sayunixtime

Воспроизведение времени в указанном формате

Полезный

app_senddtmf

Передача DTMF вызывающей стороне

Полезный

app_sendtext

Отправляет текстовую строку на совместимые каналы

Ничтожный

app_setcallerid

Устанавливает CallerID для канала

Устаревший — смотри func_callerid

app_skel

Пример приложения для разработчиков

Полезныйc

app_sms

Отправляет SMS-сообщение в совместимых странах

Ограниченный

app_softhangup

Запрашивает завершение канала

Полезный

app_speech_utils

Обеспечивает инструменты, связанные с распознаванием речи

Полезныйd

app_stack

Предоставляет Gosub(), GoSubIf(), Return(), StackPop(), LOCAL() и LOCAL_PEEK()

Существенный

app_system

Выполняет команды в оболочке Linux

Полезный

app_talkdetect

Подобно app_background, но позволяет любому принятому аудио прерывать воспроизведение

Полезный

app_test

Приложение для тестирования клиентов/серверов

Годный

app_transfer

Выполняет трансфер на текущем канале

Полезный

app_url

Передает URI на вызываемый канал

Ограниченный

app_userevent

Создает пользовательское событие в AMI

Полезный

app_verbose

Создает пользовательское событие в CLI Asterisk

Полезный

app_voicemail

Предоставляет голосовую почту

Существенный

app_waitforring

Ожидает событие сигнализации RING (не путать с RINGING); скорее всего, не нужно, поскольку работает только с chan_dahdi с аналоговыми каналами, в которых принимается звонок (например, порт FXO) и генерируется событие сигнализации RING

Ничтожный

app_waitforsilence

Включает функции WaitForSilence() и WaitForNoise(); прослушивает входящий канал для заданного количества миллисекунд шума/тишины

Полезный

app_waituntil

Ожидает, что текущая эпоха Linux соответствует указанной эпохе

Полезный

app_while

Включает While(), EndWhile(), ExitWhile() и ContinueWhile(); обеспечивает функциональность цикла while в диалплане

Полезный

app_zapateller

Генерирует SIT (специальный информационный тон), чтобы препятствовать телемаркетингам

Годный

a Использование (DISA) может представлять угрозу безопасности, если вы не будете осторожны с контролем доступа диалплана.

b Требуется подходящий движок DSP для обработки кодирования/декодирования факсимильной сигнализации (см. Главу 19).

c Если Вы разработчик.

d Требуется внешнее приложение распознавания речи.

Мостовые модули

Мостовые модули выполняют фактическое соединение каналов в новом мостовом API. Каждый из них предоставляет различные функции, которые используются в разных ситуациях в зависимости от того, что требуется мосту. Эти модули, перечисленные в Таблице 2-2, в настоящее время используются только (и имеют важное значение) для app_confbridge.

Таблица 2-2. Мостовые модули

Имя

Назначение

Популярность/Статус

bridge_builtin_features

Выполняет соединение при использовании встроенных пользовательских функций (например, найденных в features.conf).

Новый

bridge_multiplexed

Выполняет сложное мультиплексирование, как это требовалось бы в большом конференц-зале (несколько участников). В настоящее время используется только app_confbridge.

Полезный

bridge_simple

Выполняет простое межканальное соединение

Полезный

bridge_softmix

Выполняет простое мультиплексирование, как это требовалось бы в большом конференц-зале (несколько участников). В настоящее время используется только app_confbridge.

Полезный

Модули записи деталей вызовов (CDR)

Модули CDR, перечисленные в Таблице 2-3, предназначены для облегчения как можно большего количества способов записи деталей вызовов. Вы можете хранить CDR в файле (по умолчанию), базе данных, на Удаленной службе аутентификации дозванивающихся пользователей (Remote Authentication Dial In User Service - RADIUS) или syslog.

Записи деталей вызовов не предназначены для использования в сложных биллинговых приложениях. Если вам требуется больше контроля над биллингом и отчетах о вызовах, вам нужно будет посмотреть журнал событий канала (CEL), обсужденный ниже. Преимущество CDR заключается в том, что он просто работает.

Таблица 2-3. Модули записи деталей вызовов

Имя

Назначение

Популярность/Статус

cdr_adaptive_odbc

Позволяет записывать CDR через структуру ODBC с возможностью добавления настраиваемых полей

Полезный

cdr_csv

Записывает CDR на диск как файл значений, разделенных запятыми

Годный

cdr_custom

Записывает CDR в CSV-файл, но позволяет добавлять настраиваемые поля

Полезный

cdr_manager

Выводит CDR в AMI

Полезный

cdr_odbc

Записывает CDR через структуру ODBC

Годный

cdr_pgsql

Записывает CDR в PostgreSQL

Полезный

cdr_radius

Записывает CDR в RADIUS

Годный — не поддерживает пользовательские поля

cdr_sqlite

Записывает CDR в базу данных SQLite2

Устаревший — используйте cdr_sqlite3_custom

cdr_sqlite3_custom

Записывает CDR в базу данных SQLite3 с пользовательскими полями

Полезный

cdr_syslog

Записывает CDR в syslog

Полезный

cdr_tds

Записывает CDR в Microsoft SQL и Sybase

Годный - требуется старая версия libtds

Мы обсудим некоторые пакеты отчетов, которые вы, возможно, захотите использовать с CDR, в Главе 25.

Модули журналирования событий канала

Журнал событий канала (Channel Event Logging - CEL) обеспечивает гораздо более мощный контроль над сообщениями об активности вызовов. Точно так же это требует более тщательного планирования вашего диалплана и отнюдь не будет работать автоматически. Модули CEL Asterisk перечислены в Таблице 2-4.

Таблица 2-4. Модули журналирования событий канала

Имя

Назначение

Популярность/Статус

cel_custom

CEL на диск/файл

Полезный

cel_manager

CEL в AMI

Полезный

cel_odbc

CEL в ODBC

Полезный

cel_pgsql

CEL в PostgreSQL

Полезный

cel_radius

CEL в RADIUS

Годный — не поддерживает пользовательские поля

cel_sqlite3_custom

CEL в SQLite3

Полезный

cel_tds

CEL в Microsoft SQL или Sybase

Годный — требуется старая версия libtds

Драйверы канала

Без драйверов каналов Asterisk не сможет звонить. Каждый драйвер канала специфичен для протокола или типа канала, который он поддерживает (SIP, ISDN и т.д.). Канальный модуль выступает в качестве шлюза к ядру Asterisk. Драйверы канала Asterisk перечислены в Таблице 2-5.

Таблица 2-5. Драйверы канала

Имя

Назначение

Популярность/Статус

chan_agent

Предоставляет канал агента для Queues()

Популярный

chan_alsa

Обеспечивает подключение к Advanced Linux Sound Architecture (ALSA)

Популярный

chan_bridge

Используется внутри приложения ConfBridge(); не следует использовать напрямую

Существенныйa

chan_console

Использует библиотеку portaudio для предоставления кросс-платформенного драйвера консольного канала, который использует звуковое устройство системы

Популярный

chan_dahdi

Обеспечивает подключение к PSTN-картам, использующим драйверы канала DAHDI

Популярный

chan_gtalk

Обеспечивает подключение к Google Talk

Устаревший с Asterisk 11 - см. chan_motif

chan_h323

Обеспечивает подключение к конечным устройствам H.323

Устаревший - см. chan_ooh323 в Таблице 2-17

chan_iax2

Обеспечивает подключение к конечным устройствам IAX2

Полезный

chan_jingle

Обеспечивает подключение к конечным устройствам с поддержкой Jingle

Устаревший с Asterisk 11 - см. chan_motif

chan_local

Предоставляет механизм для обработки части диалплана в качестве канала

Полезный

chan_mgcp

Драйвер канала протокола Media Gateway

Годный

chan_misdn

Обеспечивает подключение к ISDN-картам, поддерживающим mISDN

Ограниченный

chan_motif

Реализует протокол Jingle, включая возможность подключения к Google Talk и Google Voice; введен в Asterisk 11

Полезный

chan_multicast_rtp

Обеспечивает соединение с потоками многоадресного трафика в реальном времени (RTP)

Полезный

chan_nbs

Драйвер канала сетевого широковещательного звука (NBS)

Ничтожный

chan_oss

Драйвер открытой звуковой системы (OSS)

Полезный

chan_phone

Драйвер интерфейса телефонии Linux (очень старый)

Ничтожный

chan_sip

Драйвер канала протокола установления сеанса (SIP)

Существенный

chan_skinny

Драйвер канала Cisco Skinny Client Control (SCCP)

Годный

chan_unistim

Драйвер канала протокола Nortel Unistim

Годный

a Если вы используете приложение ConfBridge().

Конверторы кодеков

Конверторы кодеков (Таблица 2-6) позволяют Asterisk преобразовывать форматы аудиопотока между вызовами. Поэтому, если вызов поступает через линию PRI (с использованием G.711) и должен быть передан сжатым в SIP-канал (например, с использованием G.729, одного из многих кодеков, который может поддерживать SIP), соответствующий конвертор кодеков будет выполнять преобразование.1

Если кодек (например, G.729) использует сложный алгоритм кодирования, интенсивное использование транскодирования может наложить огромную нагрузку на процессор. Специализированное оборудование для декодирования/кодирования G.729 доступно от производителей оборудования, таких как Sangoma и Digium (и, вероятно, других).

Таблица 2-6. Конверторы кодеков

Имя

Назначение

Популярность/Статус

codec_adpcm

Кодек для адаптивной дифференциальной импульсно-кодовой модуляции (ADPCM)

Ничтожный

codec_alaw

A-law PCM кодек, используемый во всем мире (кроме Канады/США) на ТфОП

Существенный

codec_g729

Не поставляется с Asterisk из-за того, что он не является кодеком общего доступа, но можно приобрести у Digium; очень популярный кодек, если требуется хорошее сжатие (и использование ЦП не является проблемой)

Полезный

codec_a_mu

Прямой конвертор A-law - mu-law

Полезный

codec_dahdi

Использует проприетарную аппаратную карту кодирования Digium

Существенныйa

codec_g722

Широкополосный аудиокодек

Полезный

codec_g726

Привкус ADPCM

Ничтожный

codec_gsm

Кодек глобальной системы мобильной связи (GSM)

Полезный

codec_ilbc

Интернет-кодек с низким битрейтом (ILBC)

Ничтожный

codec_lpc10

Вокодер линейного предсказательного кодирования (чрезвычайно низкая полоса пропускания)

Ничтожный

codec_resample

Пересемплирование между 8 и 16-битными линейными подписями

Годный

codec_speex

Speex-кодек

Годный

codec_ulaw

mu-law PCM-кодек, используемый в Канаде/США на ТфОП (PSTN)

Существенный

a Если вы используете карту транскодера для кодеков Digium.

Digium распространяет некоторые дополнительные полезные модули кодеков: codec_g729, codec_silk, codec_siren7 и codec_siren14. Эти модули кодеков не являются открытыми по разным причинам. Вы должны приобрести лицензию на использование codec_g729, но остальные бесплатные. Вы можете найти их на сайте Digium.

Интерпретаторы формата

Интерпретаторы формата (Таблица 2-7) выполняют функцию кодеков-переводчиков, но выполняют свою работу не по каналам, а по файлам. Если у вас есть запись в меню, которая была сохранена как GSM, для воспроизведения этой записи необходимо использовать интерпретатор формата для любых каналов, не использующих кодек GSM.2

Если вы сохраняете запись в нескольких форматах (например, WAV, GSM и т.д.), Asterisk определит наименее затратный формат3, который будет использоваться, когда канал требует этой записи.

Таблица 2-7. Интерпретаторы формата

Имя

Воспроизведение файлов, хранящихся в

Популярность/Статус

format_g723

G.723: .g723

Ничтожный

format_g726

G.726: .g726

Ничтожный

format_g729

G.729: .g729

Полезный

format_gsm

RPE-LTP (оригинальный кодек GSM): .gsm

Годный

format_h263

H.263—видео: .h263

Годный

format_h264

H.264—видео: .h264

Годный

format_ilbc

Интернет-кодек с низким битрейтом: .ilbc

Ничтожный

format_jpeg

Графические файлы: .jpeg, .jpg

Ничтожный

format_ogg_vorbis

Контейнер ogg: .ogg

Годный

format_pcm

Различные форматы импульсно-кодовой модуляции: .alaw, .al, .alw, .pcm, .ulaw, .ul, .mu, .ulw, .g722, .au

Полезный

format_siren14

G.722.1 Приложение C (14 кГц): .siren14

Новый

format_siren7

G.722.1 (7 кГц): .siren7

Новый

format_sln16

16-разрядная линейная подпись: .sln16

Новый

format_sln

8-разрядная линейная подпись: .sln, .raw

Полезный

format_vox

.vox

Ничтожный

format_wav

.wav

Полезный

format_wav_gsm

Звук GSM в контейнере WAV: .wav, .wav49

Годный

Функции диалплана

Функции диалплана, перечисленные в Таблице 2-8, дополняют приложения диалплана (см. «Приложения» на стр. 23). Они предоставляют множество полезных улучшений для таких вещей, как обработка строк, переборка времени и даты и возможность подключения ODBC.

Таблица 2-8. Функции диалплана

Имя

Назначение

Популярность/Статус

func_aes

Шифрует/дешифрует строку AES

Полезный

func_audiohookinherit

Позволяет записывать вызовы после передачи

Полезный

func_base64

Кодирует/декодирует строку base-64

Годный

func_blacklist

Записывает/читает черный список в astdb

Полезный

func_callcompletion

Получает/задает параметры конфигурации завершения вызова для канала

Новый

func_callerid

Получает/устанавливает CallerID

Полезный

func_cdr

Получает/задает переменную CDR

Полезный

func_channel

Получает/задает информацию о канале

Полезный

func_config

Включает AST_CONFIG(); читает переменные из файла конфигурации

Годный

func_connectedline

Изменяет информацию о подключенной линии на поддерживаемых телефонах

Новый

func_curl

Использует cURL для получения данных из URI

Полезный

func_cut

Нарезает кубиками строки

Полезный

func_db

Обеспечивает функции astdb

Полезный

func_devstate

Получает состояние устройства

Полезный

func_dialgroup

Создает группу для одновременного набора номера

Полезный

func_dialplan

Подтверждает, что назначенная цель существует в диалплане

Полезный

func_enum

Выполняет поиск ENUM

Полезный

func_env

Включает FILE(), STAT() и ENV(); выполняет действия операционной системы

Полезный

func_extstate

Возвращает статус намеченного внутр.номера

Полезный

func_global

Получает/задает глобальные переменные

Полезный

func_groupcount

Получает/задает количество каналов для членов группы

Полезный

func_hangupcause

Получает/задает информацию о завершении канала

Полезный

func_iconv

Преобразует между наборами символов (кодировками)

Годный

func_jitterbuffer

Включает функцию JITTERBUFFER(), которая позволяет размещать джиттер-буфер на канале.

Полезный

func_lock

Включает функции LOCK(), UNLOCK() и TRYLOCK(); устанавливает блокировку, которая может использоваться для предотвращения условий гонки в диалплане

Полезный

func_logic

Включает ISNULL(), SET(), EXISTS(), IF(), IFTIME() и IMPORT(); выполняет различные логические функции

Полезный

func_math

Включает MATH(), INC() и DEC(); выполняет математические функции

Полезный

func_md5

Преобразует поставляемую строку в MD5-хэш

Полезный

func_module

Проверяет, загружен ли установленный модуль в память

Годный

func_odbc

Позволяет интегрировать в диалплан ресурсы ODBC

Полезный

func_pitchshift

Сдвигает высоту звукового потока

Полезный

func_presencestate

Получает/устанавливает состояние присутствия; используется в основном при интеграции Asterisk с телефонами Digium

Полезный

func_rand

Возвращает случайное число в заданном диапазоне

Полезный

func_realtime

Выполняет поиск в архитектуре Asterisk Realtime (ARA)

Полезный

func_redirecting

Предоставляет доступ к информации о том, откуда был перенаправлен этот вызов

Полезный

func_sha1

Преобразует поставляемую строку в хэш SHA1

Полезный

func_shell

Выполняет операции оболочки Linux и возвращает результаты

Полезный

func_speex

Уменьшает шум и выполняет усиление/потерю dB в аудиопотоке

Полезный

func_sprintf

Выполняет функции строкового формата, подобные функциям C с таким же именем

Полезный

func_srv

Выполняет поиск SRV в диалплане

Полезный

func_strings

Включает более дюжины функций манипуляции строкой

Полезный

func_sysinfo

Получает системную информацию, такую как оперативная память, своп, средняя загрузка и т.д.

Полезный

func_timeout

Получает/устанавливает таймауты на канале

Полезный

func_uri

Преобразует строки в URI-безопасное кодирование

Полезный

func_version

Возвращает информацию о версии Asterisk

Годный

func_vmcount

Возвращает количество сообщений в папке голосовой почты для определенного пользователя

Полезный

func_volume

Устанавливает громкость на канале

Полезный

Модули УАТС

Модули УАТС представляют собой периферийные модули, которые обеспечивают улучшенные механизмы управления и конфигурирования. Например, pbx_config - это модуль, который загружает традиционный диалплан Asterisk. Доступные в настоящее время модули АТС перечислены в Таблице 2-9.

Таблица 2-9. Модули PBX

Имя

Назначение

Популярность/Статус

pbx_ael

Asterisk Extension Logic (AEL) предлагает язык сценариев диалплана, который выглядит как современный язык программирования.

Годныйa

pbx_config

Это традиционный и самый популярный язык диалплана для Asterisk. Без этого модуля, Asterisk не сможет читать extensions.conf.

Полезный

pbx_dundi

Выполняет поиск данных на удаленных системах Asterisk.

Полезный

pbx_loopback

Выполняет что-то подобное include диалплана, но устаревшим способом.

Ничтожныйb

pbx_lua

Позволяет создавать диалплан с использованием языка сценариев Lua.

Полезный

pbx_realtime

Обеспечивает функциональность, связанную с архитектурой Asterisk Realtime.

Полезный

pbx_spool

Предоставляет поддержку исходящей очереди, относящуюся к файлам звонков Asterisk.

Полезный

a Мы не нашли большое количество людей, использующих AEL. Мы подозреваем, что это связано с тем, что большинство разработчиков склонны использовать AGI/AMI если не хотят использовать традиционный диалплан.

b Мы никогда не слышали о том, что это используется в продакшене.

Модули ресурсов

Модули ресурсов интегрируют Asterisk с внешними ресурсами. Эта группа модулей эффективно превратилась в универсальную для вещей, которые не подходят для других категорий. Мы разделим их на некоторые подгруппы связанных между собой модулей.

Конфигурирование

По умолчанию Asterisk настроен с использованием текстовых файлов в /etc/asterisk. Эти модули, перечисленные в Таблице 2-10, предлагают альтернативные методы настройки. Подробную документацию по настройке конфигурации с поддержкой базы данных см. в Главе 16.

Table 2-10. Модули конфигурирования

Имя

Назначение

Популярность/Статус

res_config_curl

Выводит информацию о конфигурации с помощью cURL

Полезный

res_config_ldap

Выводит информацию о конфигурации с помощью LDAP

Годный

res_config_odbc

Выводит информацию о конфигурации с помощью ODBC

Полезный

res_config_pgsql

Выводит информацию о конфигурации с помощью PostgreSQL

Годный

res_config_sqlite

Выводит информацию о конфигурации с помощью SQLite (версия 2)

Годный

res_config_sqlite3

Выводит информацию о конфигурации с помощью SQLite (версия 3)

Годный

Интерфейсы синхронизации

Некоторые операции в Asterisk требуют источника синхронизации. Эти модули обеспечивают синхронизацию с Asterisk из разных источников. Некоторые случаи, когда Asterisk нуждается в источнике синхронизации, включают воспроизведение файлов и конференц-связь с использованием приложения ConfBridge().

Общая точка путаницы предполагает, что конференц-связь с использованием приложения MeetMe() также требует использования одного из этих источников синхронизации. Это не относится к делу. MeetMe() не использует интерфейс синхронизации Asterisk и вместо этого использует DAHDI напрямую. Хотя DAHDI предоставляет интерфейс синхронизации, MeetMe() не использует его. DAHDI представляет собой полный механизм конференц-связи, который является ядром приложения MeetMe().

Если по какой-либо причине вы не можете использовать res_timing_dahdi, например, запустить на компьютере, где вы не можете добавить модули ядра DAHDI, вы должны использовать res_timing_timerfd. Избегайте использования модуля res_timing_pthread, если это вообще возможно, поскольку он намного менее эффективен и повлияет на производительность Asterisk. В Таблице 2-11 перечислены модули интерфейса синхронизации.

Table 2-11. Модули интерфейсов синхронизации

Имя

Назначение

Популярность/Статус

res_timing_dahdi

Обеспечивает синхронизацию с использованием интерфейса ядра DAHDI

Полезный

res_timing_kqueue

Обеспечивает синхронизацию с использованием функции ядра в некоторых BSD, включая Mac OS X

Полезный

res_timing_pthread

Обеспечивает синхронизацию с использованием только частей стандартного API pthread; менее эффективен, но более переносим, чем другие модули синхронизации

Годный

res_timing_timerfd

Обеспечивает синхронизацию с использованием API-интерфейса timerfd, предоставляемого более новыми версиями ядра Linux

Полезный

Интеграция календаря

Asterisk включает некоторую интеграцию с системами календаря. Вы можете читать и записывать календарную информацию из диалплана. Вы также можете получать вызовы, созданные на основе записей календаря. Интеграция основного календаря обеспечивается модулем res_calendar. Остальные модули обеспечивают возможность подключения к определенным типам серверов календаря. В Таблице 2-12 перечислены модули интеграции календаря.

Таблица 2-12. Модули интеграции календаря

Имя

Назначение

Популярность/Статус

res_calendar

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

Полезный

res_calendar_caldav

Позволяет функциям, предоставляемым res_calendar подключаться к календарям через CalDAV

Полезный

res_calendar_exchange

Позволяет функциям, предоставляемым res_calendar подключаться к MS Exchange

Полезный

res_calendar_icalendar

Позволяет функциям, предоставляемым res_calendar подключаться к Apple/Google iCalendar

Полезный

Реализация RTP

Ядро Asterisk не включает реализацию RTP. Если вы используете один из драйверов VoIP-канала, который использует RTP, вы также должны загрузить модуль res_rtp_asterisk. Эта реализация RTP может быть заменена пользовательской, если Asterisk использовался в системе, которая включала настраиваемое оборудование, такое как DSP с более эффективной обработкой RTP.

Реализация многоадресного RTP используется только канальным драйвером chan_multicast_rtp, который является полезным для поддержки большого количества телефонов. Для получения дополнительной информации о многоадресном RTP см. Главу 11. Модули реализации RTP перечислены в Таблице 2-13.

Таблица 2-13. Модули реализации RTP

Имя

Назначение

Популярность/Статус

res_rtp_asterisk

Предоставляет RTP

Существенный

res_rtp_multicast

Предоставляет многоадресный RTP

Новый

Обработчики атрибутов формата

Одним из интерфейсов, которые может реализовать модуль Asterisk, является обработка атрибутов, связанных с определенными аудио- и видеоформатами. Группа модулей, перечисленных в Таблице 2-14, реализует этот интерфейс.

Таблица 2-14. Модули обработчиков атрибутов формата

Имя

Назначение

Популярность/Статус

res_format_attr_celt

Обрабатывает детали атрибутов формата для аудиоформата CELT

Полезный

res_format_attr_h263

Обрабатывает детали атрибутов формата для видеоформата H.263

Полезный

res_format_attr_h264

Обрабатывает детали атрибутов формата для видеоформата H.264

Полезный

res_format_attr_silk

Обрабатывает детали атрибутов формата для аудиоформата SILK

Полезный

Расширения CLI

Эта группа модулей включает в себя дополнительные функции для интерфейса командной строки Asterisk (CLI).

Таблица 2-15. Модули расширения CLI

Имя

Назначение

Популярность/Статус

res_clialiases

Создает альясы CLI

Полезный

res_clioriginate

Предоставляет команду CLI Asterisk для инициации вызовов

Годный

res_convert

Предоставляет команду CLI Asterisk для преобразования файлов/форматов

Годный

res_limit

Позволяет регулировать системные ограничения для процесса Asterisk

Годный

res_realtime

Предоставляет команды консоли для архитектуры Asterisk Realtime (ARA)

Полезный

Прочие модули ресурсов

Таблица 2-16 включает остальные модули ресурсов, которые не вписывались ни в одну из подгрупп, которые мы определили ранее в этом разделе.

Таблица 2-16. Модули ресурсов

Имя

Назначение

Популярность/Статус

res_adsi

Предоставляет ADSI

Существенныйa

res_ael_share

Предоставляет общие процедуры для использования с pbx_ael

Существенный, если вы используете AEL

res_agi

Предоставляет интерфейс шлюза Asterisk (AGI) (см. Главу 21)

Полезный

res_corosync

Предоставляет индикацию ожидающего сообщения (MWI) и уведомления о состоянии устройства через Corosync Cluster Engine

Полезный

res_crypto

Предоставляет криптографические возможности

Полезный

res_curl

Предоставляет общие подпрограммы для других модулей cURL

Полезный

res_fax

Предоставляет общие подпрограммы для других модулей факса

Полезный

res_fax_spandsp

Плагин для факса с использованием пакета spandsp

Полезный

res_http_post

Обеспечивает поддержку загрузки POST для HTTP-сервера Asterisk

Годный

res_http_websocket

Обеспечивает поддержку WebSocket для внутреннего HTTP-сервера Asterisk; также используется chan_sip для обеспечения SIP через соединение WebSocket, которое полезно для rtcweb

Годный

res_jabber

Предоставляет ресурсы Jabber/XMPP

Устаревший (с Asterisk 11) - смотри res_xmpp

res_monitor

Предоставляет ресурсы для записи вызовов

Полезный

res_musiconhold

Предоставляет ресурсы музыки в режиме ожидания (MOH)

Существенный

res_mutestream

Позволяет заглушать/восстанавливать аудиопотоки

Новый

res_odbc

Предоставляет общие подпрограммы для других модулей ODBC

Полезный

res_phoneprov

Провижинг телефонов с сервера Asterisk HTTP

Новый

res_pktccops

Предоставляет ресурсы COPS PacketCable

Новый

res_security_log

Позволяет регистрировать события безопасности, созданные другими частями Астериск

Новый

res_smdi

Предоставляет уведомление о голосовой почте с использованием протокола SMDI

Ограниченный

res_snmp

Предоставляет информацию о состоянии системы в сети, управляемой SNMP

Годный

res_speech

Общий интерфейс распознавания речи

Ограниченныйb

res_xmpp

Предоставляет ресурсы Jabber/XMPP

Полезный

a Хотя большинство функций ADSI в Asterisk никогда не используется, приложение голосовой почты использует этот ресурс.

b Для использования требуется отдельный лицензионный продукт.

Дополнительные модули

Дополнительные модули представляют собой модули, разработанные сообществом, с различными правами использования или распространения, отличными от основного кода. Они хранятся в отдельном каталоге и не компилируются и не устанавливаются по умолчанию. Чтобы включить эти модули, используйте утилиту конфигурации menuselect. Доступные дополнительные модули перечислены в Таблице 2-17.

Таблица 2-17. Дополнительные модули

Имя

Назначение

Популярность/Статус

app_mysql

Выполняет MySQL-запросы с помощью приложения диалплана

Устаревший - см. func_odbc

app_saycountpl

Говорит польские слова

Устаревший - теперь интегрирован в say.conf

cdr_mysql

Записывает CDR в базу данных MySQL

Годный - мы рекомендуем cdr_adaptive_odbc вместо этого

chan_mobile

Позволяет создавать и принимать телефонные звонки с помощью сотовых телефонов по Bluetooth

Ограниченныйa

chan_ooh323

Позволяет совершать и принимать VoIP-звонки с использованием протокола H.323

Годный

format_mp3

Позволяет Asterisk воспроизводить файлы MP3

Годный

res_config_mysql

Использует базу данных MySQL как базовую конфигурацию в реальном времени

Полезный

a Хотя chan_mobile отлично работает со многими телефонами, с некоторыми моделями сообщалось о проблемах. Когда проблема возникает, разработчикам очень сложно решить проблему, если у них нет телефона той же модели для тестирования.

Тестовые модули

Тестовые модули используются командой разработчиков Asterisk для проверки нового кода. Они постоянно меняются и добавляются, и не будут полезны, если вы не разрабатываете программное обеспечение Asterisk.

Однако, если вы разработчик Asterisk, вам может быть интересен Asterisk Test Suite, так как вы можете создавать автоматические тесты для Asterisk и отправлять их обратно в проект, который работает на нескольких разных операционных системах и типах машин. Постоянно расширяя количество тестов, проект Asterisk избегает создания регрессий в коде. Предоставляя собственные тесты для проекта, вы можете чувствовать себя более уверенно в будущих обновлениях.

Более подробную информацию об установке Asterisk Test Suite можно найти в этом блоге. Более подробная информация о строительных тестах содержится в этом документе или вы можете присоединиться к каналу #asterisk-testing в сети IRC Freenode.

Файловая структура

Asterisk - сложная система, состоящая из множества ресурсов. Эти ресурсы используют файловую систему несколькими способами. Поскольку Linux настолько гибкий в этом отношении, полезно понять, какие данные хранятся, чтобы вы могли понять, где вы, вероятно, найдете конкретный бит хранимых данных (например, сообщения голосовой почты или файлы логов).

Файлы конфигурации

Файлы конфигурации Asterisk включают extensions.conf, sip.conf, modules.conf и десятки других файлов, которые определяют параметры для различных каналов, ресурсов, модулей и функций, которые могут быть использованы.

Эти файлы будут найдены в /etc/asterisk. Вы будете много работать в этой папке при настройке и администрировании своей системы Asterisk.

Модули

Модули Asterisk обычно устанавливаются в папку /usr/lib/asterisk/modules. Обычно вам не нужно взаимодействовать с этой папкой; однако, будет время от времени полезно знать, где находятся модули. Например, если вы обновляете Asterisk и выбираете разные модули на этапе установки menuselect, старые (несовместимые) модули из предыдущей версии Asterisk не будут удалены, и вы получите предупреждение из сценария установки. Эти старые файлы необходимо будет удалить из папки модулей. Это можно сделать либо вручную, либо командой make «uninstall» (make uninstall).

Библиотека ресурсов

Существует несколько ресурсов, которые требуют внешних источников данных. Например, музыка в режиме ожидания (MOH) не может сработать, если у вас нет музыки для воспроизведения. Системные подсказки также должны храниться где-то на жестком диске. В папке /var/lib/asterisk хранятся системные подсказки, скрипты AGI, музыка в режиме ожидания и другие файлы ресурсов.

Spool

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

В Asterisk spool используется для хранения переходных элементов, таких как голосовые сообщения, записи вызовов,4 файлы вызова и т.д.

Spool Asterisk будет найдена в каталоге /var/spool/asterisk.

Журналирование (логирование)

Asterisk способен генерировать несколько разных файлов журналов. В папке /var/log/asterisk записываются такие вещи, как записи подробной информации о вызовах (CDR), события канала из CEL, журналы отладки, журналы очереди, сообщения, ошибки и другой вывод.

Эта папка будет чрезвычайно важна для любых усилий по устранению неполадок, которые вы предпринимаете.

Мы поговорим больше о том, как использовать журналы Asterisk в Главе 24.

Диалплан

Диалплан является сердцем Asterisk. Все каналы, которые поступают в систему, будут проходить через диалплан, который содержит сценарий потока вызовов, который определяет, как обрабатываются входящие вызовы.

Диалплан можно написать одним из трех способов:

  • Использование традиционного синтаксиса диалплана Asterisk в файле /etc/asterisk/extensions.conf

  • Использование логики расширения Asterisk (AEL) в /etc/asterisk/extensions.ael

  • Использование Lua в файле /etc/asterisk/extensions.lua

Позже в этой книге мы посвящаем несколько разделов тем тому, как написать диалплан, используя традиционный синтаксис диалплана (безусловно самый популярный выбор). Как только вы изучите этот язык, довольно легко перейти на AEL или Lua, если пожелаете.

Аппаратные средства

Asterisk способен общаться с огромным количеством различных технологий. В общем, эти соединения выполняются через сетевое соединение; однако для подключения к более традиционным телекоммуникационным технологиям, таким как PSTN, требуется специальное оборудование.

Многие компании производят это оборудование, например Digium (спонсор, владелец и главный разработчик Asterisk), Sangoma, Rhino, OpenVox, Pika, Voicetronix, Junghanns, Dialogic, Xorcom, beroNet и многие другие. Авторы предпочитают карты от Digium и Sangoma, однако продукты, предлагаемые другими производителями оборудования Asterisk, могут быть более подходящими для ваших требований.

Самое популярное оборудование для Asterisk, как правило, предназначено для работы через интерфейс аппаратного устройства Digium Asterisk (известный как DAHDI). Все эти карты будут иметь разные требования к установке и разные расположения файлов.

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

Управление версиями Asterisk

В течение последних нескольких лет методология выпуска Asterisk прошла пару итераций, и этот раздел призван помочь вам понять, что означают номера версий. Особое значение имеет изменение в версии, которое произошло с версиями выпусков версии 1.6.x, которые следуют другой логике нумерации, чем все другие выпуски Asterisk (от 1.0 до 1.8), и где мы сейчас находимся.

Предыдущие методологии выпуска

Этот раздел имеет историческую ценность, но его можно пропустить, если вы не будете работать со старыми версиями Asterisk.

Когда у нас были только Asterisk 1.2 и 1.4 вся новая разработка была выполнена в стволе (это все еще есть) и только исправления ошибок попали в ветви 1.2 и 1.4. (Все ветви до 1.8 были отмечены как EOL [End of Life] и больше не получают исправлений ошибок или обновлений безопасности.)

Поскольку вся новая разработка была выполнена в стволе, пока не была создана ветвь 1.6, люди не смогли получить доступ к новым функциям и функциональности. Это не означает, что новые функции недоступны, но со всеми изменениями, которые могут произойти в стволе, для запуска на нем производственного сервера требуется очень знакомый Asterisk (и C-код).

Чтобы попытаться облегчить давление на администраторов и обеспечить более быстрый доступ к новым функциям (в течение нескольких месяцев, а не лет), была создана новая методология. Ветви в 1.6 действительно будут отмечены как 1.6.0, 1.6.1, 1.6.2 и т. д., Причем третье число увеличивается на единицу каждый раз, когда создается новый функциональный релиз. Цель заключалась в том, чтобы предоставлять новые версии функций каждые три-четыре месяца (которые были бы разветвлены из ствола), обеспечивая более короткий и понятный путь обновления для администраторов. Если вам нужна новая функция, вам нужно будет подождать несколько месяцев и затем перейти к следующей ветви.

Теги из этих ветвей выглядят следующим образом:

  • 1.6.0.1 -- 1.6.0.2 -- 1.6.0.3 -- 1.6.0.4 -- etc.

  • 1.6.1.1 -- 1.6.1.2 -- 1.6.1.3 -- 1.6.1.4 -- etc.

  • 1.6.2.1 -- 1.6.2.2 -- 1.6.2.3 -- 1.6.2.4 -- etc.

    На рисунке 2-2 представлено визуальное представление процесса ветвления и тегирования по отношению к стволу Asterisk.

2 2

Рисунок 2-2. Процесс выпуска Asterisk 1.6.x

До сих пор у нас есть ветви: 1.2, 1.4, 1.6.0, 1.6.1 и 1.6.2 (нет ветви 1.6). В каждой из этих ветвей мы создаем теги (релизы), которые выглядят как 1.2.14, 1.4.30, 1.6.0.12, 1.6.1.12 и 1.6.2.15.

К сожалению, это не сработало.ветви x создавались из ствола каждые три-четыре месяца: процесс разработки привел к минимальному сроку выпуска от шести до восьми месяцев. Не только это, но 1.6.х методологию нумерации добавляет свои собственные проблемы. Люди путались относительно того, какую версию запускать, а ветви 1.6.0, 1.6.1 и 1.6.2 - это все отдельные модификации основной версии. Когда вы увеличиваете число от 1.2 до 1.4, а затем до 1.8, очевидно, что это разные ветви и основные изменения версии. С 1.6.0, 1.6.1 и 1.6.2 это менее очевидно.

К счастью, все это позади, и, как правило, для новых развертываний вы будете использовать последние LTS (долгосрочная поддержка) или последние ветви регулярного выпуска, которые имеют более разумную структуру, как мы рассмотрим в следующем разделе.

Методология текущей версии

Команда разработчиков многому научилась во время релизов 1.6.x. Идея, окружающая выпуски, была благородной, но реализация оказалась ошибочной, когда ее ввели в реальное использование. Итак, с Asterisk 1.8, методология вернулась, чтобы выглядеть так же, как и в версиях 1.2 и 1.4.

В то время, как команда разработчиков по-прежнему хочет обеспечить доступ к новым функциям и основным изменениям на более регулярной основе (цель - каждые 12 месяцев), есть признание, что также хорошо обеспечить долгосрочную поддержку стабильной, популярной версии Астериска. Вы можете думать о ветве Asterisk 1.4 как о версии LTS. Разделы 1.6.0, 1.6.1 и 1.6.2 можно рассматривать как текущие релизы, которые продолжают получать исправления ошибок после выпуска, но поддерживаются в течение более короткого периода времени (около года). Первой официальной версией LTS был Asterisk 1.8, получивший исправления ошибок в течение четырех лет с дополнительным годом релизов безопасности после этого. В целом команда разработчиков Digium предпочла предоставить пять лет поддержки от первоначального выпуска для Asterisk 1.8.

Asterisk 1.8 был выпущен в 21 ноября 2010 года и перейдет в режим безопасности только после четырех лет (21 ноября 2014 г.), после чего он получит исправления для проблем безопасности, но не общие исправления ошибок ещё один дополнительный год. А 21 ноября 2015 г. Asterisk 1.8 получит статус EOL, после чего в ветку 1.8 не будут вноситься изменения (Исходный код, как всегда, будет по-прежнему широко распространяться для тех, кто продолжает поддерживать Asterisk 1.8 в своих частных средах).

Эта книга основана на Asterisk 11, которая была выпущена в 25 ноября 2012 году и получит поддержку исправлений ошибок до 25 ноября 2016 года, а также поддержку безопасности в течение года.

Текущее состояние всех ветвей Asterisk - даты их выпуска, когда они войдут в режим только исправления безопасности, и когда они достигнут статуса EOL - все это задокументировано в вики Asterisk.

Упрощение номеров версий

Раньше Марк Спенсер говорил, что число 1 перед номерами версий 1.0, 1.2 и т.д. никогда не изменится, если в базе кода Asterisk не произошел крупный фундаментальный сдвиг в разработке. Теперь, когда Asterisk настолько популярен и широко используется, любой фундаментальный сдвиг в разработке будет невероятно разрушительным как для разработчиков, так и для тех, кто развертывает Asterisk на регулярной основе. В превосходной статье в блоге Кевина Флеминга объясняется, почему вместо перехода от Asterisk 1.8 до 1.10 схема нумерации Asterisk была нарушена, чтобы отбросить ведущую 1 и перейти только к Asterisk 10. По существу, это сводится к следующему: вместо версий, таких как 1.10, 1.12, 1.14 (где нечетные числа пропускаются по историческим причинам), что приводит к потенциальным номерам версий, которые выглядят как 1.10.3.1, а так как основная база Asterisk не изменится так принципиально за релиз, чтобы он оправдывал название 2.0, было бы лучше всего отказаться от 1 с самого начала версии.

Взгляд на текущую структуру ветвей показан на Рисунке 2-3.

2 3

Рисунок 2-3. Текущий процесс ветвления Астериск

Версии, идущие вперёд, будут следовать той же методологии выпуска (что касается чередующихся LTS и регулярных выпусков по хорошо известному графику с предопределенным уменьшением поддержки), кроме того, теперь будет упрощена нумерация версий. Asterisk 10 была первой версией с отказом от 1 в названии, и он был регулярным релизом поддержки. Первым выпуском LTS был Asterisk 11. Таким образом, релизы будут чередоваться между регулярными и LTS.

Вывод

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

1Дополнительная информация о том, какие кодеки и как они работают, доступна в «Кодеки» в Приложении B.

2Отчасти по этой причине мы не рекомендуем использовать формат GSM по умолчанию для системных записей. Запись WAV будет лучше звучать и использовать меньше циклов процессора.

3Некоторые кодеки могут накладывать значительную нагрузку на ЦП, так что система, которая может поддерживать несколько сотен каналов без транскодирования, может обрабатывать только несколько десятков, при использовании транскодирования.

4Не записи деталей вызовов (CDR), а скорее аудиозаписи вызовов, созданных MixMonitor() и связанных с ними приложений.

  • Наши клиенты:

    OOO Газпром межрегионгаз Оренбург    
    ООО "Газпром межрегионгаз Оренбург" Жилой комплекс Экодолье Оренбург Сеть магазинов бытовой техники "Айсберг"
  • Наши клиенты:

          
     Сеть магазинов мебели "Мягков" Администрация г.Орска Орский шпалопропиточный завод
  •   
     Сеть магазинов "Строительный БУМ" ЗАО "Орский завод синтетического спирта" Региональная торговая компания "ШАР"
  •    
     Телерадиокомпания "Евразия" Производственное объединение "Климатвентмаш" Оренбургская региональная сеть
    "Рекламная кампания"
  •  Оператор интернета и тв
    ООО "ОрскТелеком"
    МУП "Орская городская аптека" Автосалон "Вояж"
  • fort
    ozemi gost
    Отель "Фортеция" ЗАО "Завод электромонтажных изделий" Объединенная служба такси
  • novupak 
    logo ormash1  
    Производство и продажа полиэтиленовой пленки

    АО "Орский Машиностроительный завод"

     
Powered by Warp Theme Framework
������.
Яндекс.Метрика