asterisk-book/chapter-02.md

54 KiB
Raw Blame History

Глава 2. Архитектура Asterisk

Прежде всего, но не обязательно в таком порядке.

Доктор Кто

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

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

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

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

Модули

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

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

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

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

  • Приложения - рабочие лошадки диалплана, такие как Dial(), Voicemail(), Playback(), Queue() и т.д.
  • Модули соединения — механизмы, которые соединяют каналы (вызовы) друг с другом
  • Модули записи деталей вызовов (CDR)
  • Модули регистрации событий канала (CEL)
  • Драйверы каналов — различные соединения с системой и из системы; SIP (Session Initiation Protocol) использует канальный драйвер PJSIP
  • Трансляторы кодеков — преобразовывают различные кодеки как G729, G711, G722, Speex и так далее
  • Интерпретаторы форматов — как указано выше, но относящиеся к файлам, хранящимся в файловой системе
  • Функции диалплана — расширенные возможности диалплана
  • Модули УАТС
  • Модули ресурсов
  • Дополнительные модули
  • Тестовые модули

Существует официальный список типов статуса поддержки, включенных в menuselect2.

Приложения

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

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

Имя Назначение
app_authenticate Сравнивает сигналы набора DTMF с указанной строкой (паролем)
app_cdr Записывает данные в CDR
app_chanspy Позволяет каналу прослушивать аудио на другом канале
app_confbridge Обеспечивает конференц-связь
app_dial Используется для соединения каналов вместе (т. е. для совершения телефонных звонков)
app_directed_pickup Отвечает на вызов, который вызывает другой добавочный номер
app_directory Представляет список имен из voicemail.conf
app_dumpchan Дамп переменных канала в интерфейс командной строки Asterisk (CLI)
app_echo Эхо-сигналы, полученные обратно в исходный канал (может быть полезно для демонстрации задержки)
app_exec Содержит Exec(), TryExec() и ExecIf(): выполняет приложение диалплана по условию
app_mixmonitor Записывает обе стороны вызова (передача и прием) и смешивает их вместе в один файл
app_originate Позволяет логике диалплана инициировать вызов (в отличие от вызова, поступающего на канал)
app_page Создает несколько аудио соединений с указанными устройствами для публичного вещания (пейджинг)
app_parkandannounce Включает автоматическое оповещение о припаркованных вызовах
app_playback Воспроизведение файла в канал (не принимает ввод)
app_playtones Воспроизведение пар тонов указанных частот (в основном DTMF)
app_queue Обеспечивает автоматическое распределение вызовов (ACD)
app_read Запрашивает ввод цифр от абонентов и назначает ввод переменной
app_readexten Запрашивает ввод цифр у вызывающих абонентов и передает вызов на указанный добавочный номер и контекст
app_record Запись полученного аудио в файл
app_senddtmf Передает DTMF вызывающей стороне
app_stack Обеспечивает Gosub(), GoSubIf(), Return(), SteckPop(), LOCAL() и Local_PEEK()
app_stasis Передает управление вызовами в приложение ARI - многие разработчики Asterisk используют это приложение, а оттуда обрабатывают всю остальную часть своей разработки за пределами диалплана Asterisk
app_system Выполняет команды в Linux shell
app_transfer Выполняет трансфер на текущем канале
app_voicemail Предоставляет голосовую почту
app_while Включает While(), EndWhile(), ExitWhile() и ContinueWhile(); обеспечивает функциональность цикла while в диалплане

Модули соединений

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

Таблица 2-2. Модули соединений

Имя Назначение
bridge_builtin_features Выполняет соединение при использовании встроенных пользовательских функций (например, найденных в features.conf).
bridge_multiplexed Выполняет сложное мультиплексирование, как требуется в большом конференц-зале (несколько участников). В настоящее время используется только app_confbridge.
bridge_simple Выполняет простое соединение канал-канал.
bridge_softmix Выполняет простое мультиплексирование, как требуется в большом конференц-зале (несколько участников). В настоящее время используется только app_confbridge.

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

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

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

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

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

Имя Назначение
cdr_adaptive_odbc Позволяет записывать CDR через платформу ODBC с возможностью добавления пользовательских полей
cdr_csv Записывает CDR на диск в файл с разделителями-запятыми (CSV)
cdr_custom Записывает CDR в файл CSV, но допускает добавление пользовательских полей
cdr_odbc Пишет CDR через ODBC фреймворк
cdr_syslog Записывает CDR в syslog

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

Регистрация событий канала (CEL) обеспечивает гораздо более мощный контроль над отчетами об активности вызовов. Кроме того, он требует более тщательного планирования вашего плана набора и ни в коем случае не будет работать автоматически. Модули Asterisk CEL перечислены в Таблице 2-4.

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

Имя Назначение
cel_custom CEL на диск/файл
cel_manager CEL в AMI
cel_odbc CEL в ODBC

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

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

Таблица 2-5. Популярные драйверы каналов

Имя Назначение
chan_bridge Используется внутри приложения ConfBridge(); не должен использоваться напрямую
chan_dahdi Обеспечивает подключение к картам ТфОП, использующим драйверы каналов DAHDI
chan_local Предоставляет механизм для обработки части диалплана как канала
chan_motif Реализует протокол Jingle, включая возможность подключения к Google Talk и Google Voice; представлен в Asterisk 11
chan_multicast_rtp Обеспечивает подключение к потокам многоадресного Realtime Transport Protocol (RTP)
chan_pjsip Драйвер канала Session Initiation Protocol (SIP)

Трансляторы кодеков

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

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

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

Asterisk делает довольно хорошую работу по поддержке кодеков, но в основном сосредоточен на кодеках, обычно используемых телефонными приложениями (в отличие от кодеков, используемых, скажем, для музыки или видео, таких как MP3 или MP4). Они перечислены в Таблице 2-6.

Таблица 2-6. Общие трансляторы кодеков

Название Назначение
codec_alaw Кодек PCM A-law используется во всем мире для ТфОП (кроме Канады/США). Этот кодек (вместе с ulaw) должен быть включен на всех ваших каналах.
codec_g729 До недавнего времени это был запатентованный кодек, но теперь он является бесплатным. На момент написания этой статьи он по-прежнему продается Digium в качестве дополнения, но его также можно найти в виде бесплатного пакета. Это очень популярный кодек, если требуется сжатие (и использование процессора не является проблемой), но он накладывает нагрузку на процессор, добавляет задержку к вызовам, немного снижает качество и никоим образом не уменьшает накладные расходы.
codec_a_mu Прямой конвертер A-law в mu-law.
codec_g722 Широкополосный аудиокодек.
codec_gsm Кодек Global System for Mobile Communications (GSM). Очень низкое качество звука.
codec_ilbc Интернет-кодек с низким битрейтом (iLBC).
codec_lpc10 Линейный предсказательный кодирующий вокодер (чрезвычайно низкая пропускная способность).
codec_opus Предназначен для замены speex (и vorbis).
codec_resample Пересемлирование между 8-ми и 16-тибитными линейными сигналами.
codec_speex Кодек Speex.
codec_ulaw Кодек PCM Mu-law, используемый на ТфОП в Канаде/США. Более точно описывается как μ-закон, но не у многих людей есть греческая буква μ на клавиатуре, поэтому обычно пишется как ulawa. Часто является кодеком по умолчанию, и должен быть включен на всех ваших каналах.

a Произносится как “мью-лоу”, но так же вы часто будете слышать как "ю-лоу".

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

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

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

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

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

Название Воспроизведение файлов, хранящихся в
format_g729 G.729: .g729
format_gsm RPE-LTP (оригинальный кодек GSM): .gsm
format_h264 H.264 video: .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 Annex C (14 kHz): .siren14
format_siren7 G.722.1 (7 kHz): .siren7
format_sln 8-bit signed linear: .sln, .raw
format_vox .vox
format_wav .wav
format_wav_gsm GSM аудио в контейнере WAV: .wav, .wav49

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

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

Таблица 2-8. Cписок полезных функций диалплана

Название Назначение
func_audiohookinherit Позволяет записывать звонки после трансфера
func_blacklist Пишет/читает черный список в astdb
func_callcompletion Получает/устанавливает параметры конфигурации завершения вызова для канала
func_callerid Получает/устанавливает идентификатор звонящего (Caller ID)
func_cdr Получает/устанавливает переменную CDR
func_channel Получает/устанавливает информацию канала
func_config Включает AST_CONFIG(); считывает переменные из файла конфигурации
func_curl Использует cURL для получения данных из URI
func_cut Делит и нарезает строки
func_db Предоставляет функции astdb
func_devstate Получает состояние устройства
func_dialgroup Создает группу для одновременного набора
func_dialplan Проверяет, что назначенная цель существует в диалплане
func_env Включает FILE(), STAT() и ENV(); выполняет действия операционной системы
func_global Получает/устанавливает глобальные переменные
func_groupcount Получает/устанавливает количество каналов для участников группы
func_hangupcause Получает/устанавливает информацию о зависании из канала
func_logic Включает ISNULL(), SET(), EXISTS(), IF(), IFTIME()и IMPORT(); выполняет различные логические функции
func_math Включает MATH(), INC() и DEC(); выполняет математические функции
func_odbc Позволяет интегрировать диалплан с ресурсами ODBC
func_rand Возвращает случайное число в заданном диапазоне
func_realtime Выполняет поиск в Asterisk Realtime Architecture (ARA)
func_redirecting Предоставляет доступ к информации о том, откуда был перенаправлен этот вызов
func_shell Выполняет операции оболочки Linux и возвращает результаты
func_sprintf Выполняет функции строкового формата, аналогичные функции C с тем же именем
func_srv Выполняет поиски SRV в диалплане
func_strings Включает в себя более десятка функций обработки строк
func_timeout Получает / устанавливает таймауты на канале
func_uri Преобразует строки в URI-безопасную кодировку
func_vmcount Возвращает количество сообщений в папке голосовой почты для определенного пользователя.

PBX Модули

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

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

Название Назначение
pbx_config Этот модуль предоставляет традиционный, популярный язык диалплана для Asterisk. Без этого модуля Asterisk не может читать extensions.conf.
pbx_dundi Выполняет поиск данных в удаленных системах Asterisk.
pbx_realtime Предоставляет функциональные возможности, связанные с архитектурой Asterisk Realtime.
pbx_spool Обеспечивает поддержку исходящих сообщений, относящихся к файлам вызовов Asterisk.

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

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

Бэкэнды конфигурации

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

Таблица 2-10. Конфигурационные бэкэнд-модули

Название Назначение
res_config_curl Получает информацию о конфигурации, используя cURL
res_config_ldap Получает информацию о конфигурации, используя LDAP
res_config_odbc Получает информацию о конфигурации, используя ODBC

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

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

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

Название Назначение
res_calendar Обеспечивает базовую интеграцию с календарными системами
res_calendar_caldav Позволяет функциям, предоставляемым res_calendar , подключаться к календарям через CalDAV
res_calendar_exchange Позволяет функциям res_calendar подключаться к MS Exchange
res_calendar_icalendar Позволяет функциям res_calendar подключаться к Apple/Google iCalendar

Другие модули ресурсов

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

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

Название Назначение
res_adsi Предоставляет ADSIa
res_agi Предоставляет Asterisk Gateway Interface (смотри Главу 18)
res_corosync Предоставляет распределенные сообщения индикации ожидания (MWI) и состояние устройства уведомления через Corosync Cluster Engine
res_crypto Предоставляет криптографические возможности
res_curl Предоставляет общие подпрограммы для других модулей cURL
res_fax Предоставляет общие подпрограммы для других факсимильных модулей
res_fax_spandsp Плагин для факса с использованием пакета spandsp
res_http_post Обеспечивает поддержку POST upload для HTTP-сервера Asterisk
res_http_websocket Обеспечивает поддержку WebSocket для внутреннего HTTP-сервера Asterisk (требуется WebRTC)
res_monitor Предоставляет ресурсы записи разговоров
res_musiconhold Предоставляет ресурсы музыки на удержании (MOH)
res_mutestream Позволяет заглушить/включить звук аудиопотоков
res_odbc Предоставляет общие подпрограммы для других модулей ODBC
res_phoneprov Автонастройка телефонов с HTTP-сервера Asterisk
res_pktccops Предоставляет ресурсы PacketCable COPS
res_security_log Включает ведение журнала событий безопасности, генерируемых другими частями Asterisk
res_snmp Предоставляет информацию о состоянии системы в SNMP-managed network
res_speech Общий API распознавания речиb
res_stasis Связывает различные компоненты инфраструктуры приложений Stasis
res_xmpp Предоставляет ресурсы XMPP (FKA Jabber)

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

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

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

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

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

Название Назначение Популярность/статус
chan_ooh323 Позволяет совершать и принимать VoIP звонки по протоколу H323 Usable
format_mp3 Позволяет Asterisk воспроизводить MP3 файлы Usable
res_config_mysql Использует базу данных MySQL как сервер конфигурации в режиме реального времени Useful

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

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

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

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

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

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

Конфигурационные файлы

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

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

Модули

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

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

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

Spool

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

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

Спул Asterisk находится в каталоге /var/spool/asterisk.

Журналирование

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

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

Диалплан

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

Диалплан обычно пишется с использованием собственного синтаксиса Asterisk, который хранится в файле с именем /etc/asterisk/extensions.conf . Существуют и другие способы управления потоком вызовов, и мы рассмотрим их позже, но независимо от того, какой метод вы в конечном итоге используете, вы обнаружите, что базовое понимание традиционной схемы диалплана будет чрезвычайно полезным. Именно на этом мы сосредоточимся большую часть первых двух третей этой книги.

Позже мы рассмотрим обработку потока вызовов вне диалплана, используя такие технологии, как AMI, AGI и ARI.

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

Asterisk способен общаться с огромным количеством различных технологий. Как правило, эти соединения выполняются через сетевое соединение TCP/IP (обычно с использованием SIP). Однако подключения к более традиционным телекоммуникационным каналам, таким как PRI (T1, E1 и т.д.), BRI (EuroISDN) SS7 (в основном T1 и E1), и аналоговым (все, от нескольких портов FXO и FXS до крупных банков каналов, питаются через соединения T1/E1 CAS/RBS), также может быть достигнуто с помощью физических карт, установленных на сервере.

Многие компании производят это оборудование, такие как Digium (спонсор, владелец и основной разработчик Asterisk), Sangoma (который недавно приобрел Digium), Dialogic (также компания Sangoma), OpenVox, Pika, Voicetronix, beroNet и многие другие. Все эти компании были связаны с Asterisk на протяжении многих лет.

Наиболее популярное оборудование для Asterisk, как правило, предназначено для работы через интерфейс аппаратного устройства Digium Asterisk (известный как DAHDI). Это сложная архитектура и она выходит за рамки этой книги. Все серверные телефонные карты будут иметь требования к установке, уникальные для производителя, и вам потребуются навыки в установке оборудования Linux, а также в устранении неисправностей и подготовке традиционных сетей ТфОП.

Если вам необходимо взаимодействовать с традиционными линиями ТфОП с использованием Asterisk, мы рекомендуем вам сохранить Asterisk в качестве платформы только для SIP и взаимодействовать с помощью стороннего шлюза какого-либо рода. Имейте в виду: это не материал начального уровня, и если вы только начинаете использовать Asterisk - вам настоятельно рекомендуется оставить свои первоначальные решения только для SIP.

Версии Asterisk

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

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

Вывод

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

1Хорошим показателем того, что вы работали с традиционными УАТС, является наличие большой мозоли на лбу, полученной в результате слишком большого количества ударов головой о кирпичную стену, чтобы сосчитать.

2Эта команда доступна как часть процесса установки. Мы обсудим использование menuselect в главе об установке.

3Термин кодек - это сокращение от «кодер-декодер».

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

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

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