495 lines
54 KiB
Markdown
495 lines
54 KiB
Markdown
|
# Глава 2. Архитектура Asterisk
|
|||
|
|
|||
|
> _Прежде всего, но не обязательно в таком порядке._
|
|||
|
>
|
|||
|
> -- Доктор Кто
|
|||
|
|
|||
|
Asterisk очень отличается от других, более традиционных УАТС тем, что диалплан в Asterisk обрабатывает все входящие каналы по существу одинаково, а не разделяет их на станции, транки, периферийные модули и т.д.
|
|||
|
|
|||
|
В традиционной АТС существует логическое различие между станциями (телефонными аппаратами) и транками (магистралями - ресурсами, которые подключаются к внешнему миру). Это ограничение делает творческую маршрутизацию в традиционных УАТС очень сложной или невозможной.
|
|||
|
|
|||
|
Asterisk, с другой стороны, не имеет внутреннего понятия транков или станций. В Asterisk все, что входит или выходит из системы, проходит через какой-то канал. Существует множество различных типов каналов; однако диалплан Asterisk обрабатывает все каналы аналогичным образом, что означает, например, внутренний пользователь может существовать на конце внешнего транка (например, сотовый телефон) и обрабатываться диалпланом точно так же, как если бы пользователь был на внутреннем номере. Если вы не работали с традиционной АТС<sup><a href="#sn1">1</a></sup>, то может быть не сразу очевидно насколько это является мощным и освобождающим. [Рисунок 2-1](pics/pic2-1.png) иллюстрирует различия между этими двумя архитектурами.
|
|||
|
|
|||
|
![Рисунок 2-1. Архитектура Asterisk против УАТС](pics/pic2-1.png)
|
|||
|
|
|||
|
_Рисунок 2-1. Архитектура Asterisk против УАТС_
|
|||
|
|
|||
|
## Модули
|
|||
|
|
|||
|
Asterisk построен на модулях. Модуль - это загружаемый компонент, который обеспечивает определенную функциональность, такую как драйвер канала (например, `chan_pjsip.so`) или ресурс, который позволяет подключиться к внешней технологии (например `func_odbc.so`). Модули Asterisk загружаются на основе параметров, определенных в файле _/etc/asterisk/modules.conf_. Мы обсудим использование многих модулей в этой книге, но на этом этапе мы просто хотим представить концепцию модулей и дать вам представление о типах модулей, которые доступны.
|
|||
|
|
|||
|
На самом деле можно запустить Asterisk вообще без каких-либо модулей, хотя в этом состоянии он ничего не сможет сделать. Это бывает полезно, чтобы понять модульную природу Asterisk для оценки архитектуры.
|
|||
|
|
|||
|
<table border="1" width="100%" cellpadding="5">
|
|||
|
<tr>
|
|||
|
<td>
|
|||
|
<p><img src="pics/note.png" height="100" align="left">Вы можете запустить Asterisk без модулей, загружаемых по умолчанию и загружать каждый нужный модуль вручную из консоли, но это не то, что вы хотели бы запустить в продакшен; это было бы полезно только в том случае, если бы вы настраивали производительность системы, в которой хотели убрать все, что не требуется вашим конкретным приложением Asterisk.</p>
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
</table>
|
|||
|
|
|||
|
Типы модулей в Asterisk включают в себя следующие:
|
|||
|
|
|||
|
* Приложения - рабочие лошадки диалплана, такие как `Dial()`, `Voicemail()`, `Playback()`, `Queue()` и т.д.
|
|||
|
* Модули соединения - механизмы, которые соединяют каналы (вызовы) друг с другом
|
|||
|
* Модули записи деталей вызовов (CDR)
|
|||
|
* Модули регистрации событий канала (CEL)
|
|||
|
* Драйверы каналов — различные соединения с системой и из системы; SIP (Session Initiation Protocol) использует канальный драйвер PJSIP
|
|||
|
* Трансляторы кодеков — преобразовывают различные кодеки как G729, G711, G722, Speex и так далее
|
|||
|
* Интерпретаторы форматов — как указано выше, но относящиеся к файлам, хранящимся в файловой системе
|
|||
|
* Функции диалплана — расширенные возможности диалплана
|
|||
|
* Модули УАТС
|
|||
|
* Модули ресурсов
|
|||
|
* Дополнительные модули
|
|||
|
* Тестовые модули
|
|||
|
|
|||
|
Существует официальный список типов статуса поддержки, включенных в `menuselect`<sup><a href="#sn2">2</a></sup>.
|
|||
|
|
|||
|
### Приложения
|
|||
|
|
|||
|
Приложения диалплана используются в _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_.
|
|||
|
|
|||
|
<table border="1" width="100%" cellpadding="5">
|
|||
|
<tr>
|
|||
|
<td>
|
|||
|
<p><img src="pics/note.png" height="100" align="left">Записи деталей вызовов не предназначены для использования в сложных приложениях биллинга. Если вам требуется больше контроля над биллингом и отчетностью о вызовах - обратите внимание на журнал событий канала (CEL), обсуждаемый далее. Преимущество CDR заключается в том, что он просто работает.</p>
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
</table>
|
|||
|
|
|||
|
Таблица 2-3. _Общие модули записи деталей вызова_
|
|||
|
|
|||
|
| Имя | Назначение |
|
|||
|
| :------------------ | :--------- |
|
|||
|
| `cdr_adaptive_odbc` | Позволяет записывать CDR через платформу ODBC с возможностью добавления пользовательских полей |
|
|||
|
| `cdr_csv` | Записывает CDR на диск с разделителями-запятыми (CSV) файл |
|
|||
|
| `cdr_custom` | Записывает CDR в файл CSV, но допускает добавление пользовательских полей |
|
|||
|
| `cdr_odbc` | Пишет CDR через ODBC фреймворк |
|
|||
|
| `cdr_syslog` | Записывает CDR в системный журнал |
|
|||
|
|
|||
|
### Модули логирования событий канала
|
|||
|
|
|||
|
Регистрация событий канала (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) |
|
|||
|
|
|||
|
### Трансляторы кодеков
|
|||
|
|
|||
|
Трансляторы кодеков<sup><a href="#sn3">3</a></sup> (часто называемые _транскодерами_) позволяют Asterisk конвертировать форматы аудиопотоков между вызовами. Поэтому, если вызов поступает по каналу PRI (используя G.711) и должен быть передан в сжатый канал SIP (например, используя G.729, один из многих кодеков, которые может обрабатывать SIP), соответствующий транслятор кодека выполнит преобразование.
|
|||
|
|
|||
|
Кодеки-это сложные алгоритмы, которые обрабатывают преобразование аналоговой информации (в данном случае звука, но также может быть и видео) в цифровой формат. Многие кодеки также обеспечивают сжатие и исправление ошибок, но это не является обязательным требованием.
|
|||
|
|
|||
|
<table border="1" width="100%" cellpadding="5">
|
|||
|
<tr>
|
|||
|
<td>
|
|||
|
<p><img src="pics/note.png" height="100" align="left">Если кодек (например G.729) использует сложный алгоритм кодирования, интенсивное использование транскодинга может создать огромную нагрузку на процессор. Специализированное оборудование для декодирования/кодирования G.729 доступно от производителей оборудования, таких как Sangoma и Digium (и, вероятно, других).</p>
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
</table>
|
|||
|
|
|||
|
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, используемый на ТфОП в Канаде/США. Это более формально написано как μ-закон, но не у многих людей есть греческая буква μ на клавиатуре, поэтому обычно пишется как ulaw<sup><a href="#snta">a</a></sup>. Часто является кодеком по умолчанию, и должен быть включен на всех ваших каналах. |
|
|||
|
|
|||
|
<sup><a name="snta">a</a></sup> Произносится как “мью-лоу,” но так же вы часто будете слышать как "ю-лоу".
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
<table border="1" width="100%" cellpadding="5">
|
|||
|
<tr>
|
|||
|
<td>
|
|||
|
<p><img src="pics/tip.png" height="100" align="left">Digium предоставляет некоторые дополнительные полезные модули кодеков: <code>codec_g729</code>, <code>codec_silk</code>, <code>codec_siren7</code> и <code>codec_siren14</code>. Эти модули кодеков не являются open source по различным причинам. Вы должны приобрести лицензию на использование <code>codec_g729</code>, но остальные являются бесплатными. Вы можете найти их на <a href="http://downloads.digium.com/pub/telephony/">сайте Digium</a>.</p>
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
</table>
|
|||
|
|
|||
|
### Интерпретаторы формата
|
|||
|
|
|||
|
Интерпретаторы форматов в Таблице 2-7 выполняют ту же функцию, что и переводчики кодеков, но они работают с файлами, а не с каналами, и обрабатывают не только аудио. Если у вас есть запись в меню, которое было сохранено как GSM, вам нужно будет использовать интерпретатор формата для воспроизведения этой записи на любые каналы, не использующие кодек GSM<sup><a href="#sn4">4</a></sup>.
|
|||
|
|
|||
|
Если вы храните запись в нескольких форматах одновременно (например, WAV, GSM и т. д.), Asterisk определит наименее затратный формат<sup><a href="#sn5">5</a></sup> для использования, когда каналу необходимо воспроизвести эту запись.
|
|||
|
|
|||
|
Таблица 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, дополняют приложения диалплана (смотри [“Приложения”](glava-02.md#приложения). Они предоставляют множество полезных улучшений для таких вещей, как обработка строк, смещение времени и даты и подключение ODBC.
|
|||
|
|
|||
|
Таблица 2-8. _Cписок полезных функций диалплана_
|
|||
|
|
|||
|
| Name | Назначение |
|
|||
|
| :---------------------- | :--------- |
|
|||
|
| `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](glava-15.md) для получения подробной документации по настройке конфигурации на основе базы данных.
|
|||
|
|
|||
|
Таблица 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. _Модули ресурсов_
|
|||
|
|
|||
|
<table>
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th style="text-align:left">Name</th>
|
|||
|
<th style="text-align:left">Purpose</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_adsi</td>
|
|||
|
<td style="text-align:left">Предоставляет ADSI<sup><a href="#sn6">6</a></sup>
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_agi</td>
|
|||
|
<td style="text-align:left">Предоставляет Asterisk Gateway Interface (смотри <a href="glava-18.md">Главу 18</a></td>)
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_corosync</td>
|
|||
|
<td style="text-align:left">Предоставляет распределенные сообщения индикации ожидания (MWI) и состояние устройства уведомления через Corosync Cluster Engine</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_crypto</td>
|
|||
|
<td style="text-align:left">Предоставляет криптографические возможности</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_curl</td>
|
|||
|
<td style="text-align:left">Предоставляет общие подпрограммы для других модулей cURL</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_fax</td>
|
|||
|
<td style="text-align:left">Предоставляет общие подпрограммы для других факсимильных модулей</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_fax_spandsp</td>
|
|||
|
<td style="text-align:left">Плагин для факса с использованием пакета <code>spandsp</code></td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_http_post</td>
|
|||
|
<td style="text-align:left">Обеспечивает поддержку POST upload для HTTP-сервера Asterisk</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_http_websocket</td>
|
|||
|
<td style="text-align:left">Обеспечивает поддержку WebSocket для внутреннего HTTP-сервера Asterisk (требуется WebRTC)</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_monitor</td>
|
|||
|
<td style="text-align:left">Предоставляет ресурсы записи разговоров</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_musiconhold</td>
|
|||
|
<td style="text-align:left">Предоставляет ресурсы музыки на удержании (MOH)</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_mutestream</td>
|
|||
|
<td style="text-align:left">Позволяет заглушить / включить звук аудиопотоков</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_odbc</td>
|
|||
|
<td style="text-align:left">Предоставляет общие подпрограммы для других модулей ODBC</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_phoneprov</td>
|
|||
|
<td style="text-align:left">Автонастройка телефонов с HTTP сервера Asterisk</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_pktccops</td>
|
|||
|
<td style="text-align:left">Предоставляет ресурсы PacketCable COPS</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_security_log</td>
|
|||
|
<td style="text-align:left">Включает ведение журнала событий безопасности, генерируемых другими частями Asterisk</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_snmp</td>
|
|||
|
<td style="text-align:left">Предоставляет информацию о состоянии системы в SNMP-managed network</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_speech</td>
|
|||
|
<td style="text-align:left">Общий API распознавания речи<sup><a href="#sn7">7</a></sup>
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_stasis</td>
|
|||
|
<td style="text-align:left">Связывает различные компоненты инфраструктуры приложений Stasis</td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td style="text-align:left">res_xmpp</td>
|
|||
|
<td style="text-align:left">Предоставляет ресурсы XMPP (FKA Jabber)</td>
|
|||
|
</tr>
|
|||
|
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
|
|||
|
### Дополнительные модули
|
|||
|
|
|||
|
Дополнительные модули - это разработанные сообществом модули с правами на использование или распространение, отличными от основного кода (Таблица 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”](http://bit.ly/14SLEqs), или вы можете присоединиться к каналу _#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. Это можно сделать либо вручную, либо with the “uninstall” make (`make uninstall`) target.
|
|||
|
|
|||
|
### Библиотека ресурсов
|
|||
|
|
|||
|
Существует несколько ресурсов, которым требуются внешние источники данных. Например, музыка на удержании (MOH) не может произойти, если у вас нет какой-то музыки для воспроизведения. Системные подсказки также должны храниться где-то на жестком диске. В папке _/var/lib/asterisk_ хранятся системные приглашения, сценарии AGI, музыка на удержании и другие файлы ресурсов.
|
|||
|
|
|||
|
### Spool
|
|||
|
|
|||
|
Спул - это место, где приложения хранят файлы в системе Linux, которые будут часто меняться или которые будут обрабатываться другими процессами позднее. Например, задания на печать в Linux и ожидающие сообщения электронной почты обычно записываются в спул, пока они не будут обработаны.
|
|||
|
|
|||
|
В Asterisk спул используется для хранения временных элементов, таких как голосовые сообщения, записи вызовов<sup><a href="#sn8">8</a></sup>, файлы вызовов и так далее.
|
|||
|
|
|||
|
Спул Asterisk находится в каталоге _/var/spool/asterisk_.
|
|||
|
|
|||
|
### Журналирование
|
|||
|
|
|||
|
Asterisk может генерировать несколько разных типов лог-файлов. Папка _/var/log/asterisk_ - это место, где записываются подробные записи вызовов (CDR), события канала из CEL, журналы отладки, журналы очереди, сообщения, ошибки и другие выходные данные.
|
|||
|
|
|||
|
Эта папка будет чрезвычайно важна для любых предпринимаемых вами действий по устранению неполадок. Мы поговорим подробнее о том, как использовать логи Asterisk в [Главе 21](glava-21.md).
|
|||
|
|
|||
|
## Диалплан
|
|||
|
|
|||
|
Диалплан - это сердце Asterisk. Все каналы, поступающие в систему, будут проходить через dialplan, который содержит сценарии потока вызовов, определяющие порядок обработки входящих вызовов.
|
|||
|
|
|||
|
Диалплан обычно пишется с использованием собственного синтаксиса 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, а также в устранении неисправностей и подготовке традиционных сетей PSTN.
|
|||
|
|
|||
|
Если вам необходимо взаимодействовать с традиционными сетями ТфОП с использованием Asterisk, мы рекомендуем вам сохранить Asterisk в качестве платформы только для SIP и взаимодействовать с помощью стороннего шлюза какого-либо рода. Имейте в виду: это не материал начального уровня, и если вы только начинаете использовать Asterisk, вам настоятельно рекомендуется оставить свои первоначальные решения только для SIP.
|
|||
|
|
|||
|
## Версии Asterisk
|
|||
|
|
|||
|
Методология выпуска Asterisk прошла через несколько стилей. В прошлом это приводило к некоторой путанице, но в наши дни управление версиями довольно простое и относительно простое для понимания. Digium сохранил отличную ссылку на [Asterisk wiki](http://bit.ly/2XTb5Wl), и мы призываем вас перейти на последние подробности о версиях Asterisk.
|
|||
|
|
|||
|
Эта книга была написана и протестирована с использованием версии 16, но вы обнаружите, что фундаментальные концепции, которые мы исследуем, будут актуальны для большинства версий Asterisk. Концептуальная структура Asterisk не менялась в течение достаточно долгого времени, и на момент написания этой статьи не было никаких известных планов изменить это в будущем. Будущие версии будут предоставлять более мощные мультимедийные и конференц-возможности, конечно, но они, вероятно, будут реализованы в рамках существующей структуры.
|
|||
|
|
|||
|
## Вывод
|
|||
|
|
|||
|
Asterisk состоит из множества различных технологий, большинство из которых сложны сами по себе. В результате понимание архитектуры Asterisk может быть ошеломляющим. Тем не менее, реальность такова, что Asterisk хорошо спроектирован для того, что он делает, и, по нашему мнению, достиг замечательного баланса между гибкостью и сложностью.
|
|||
|
##
|
|||
|
<ol>
|
|||
|
<li id="sn1"> Хорошим показателем того, что вы работали с традиционными УАТС, является наличие большой мозоли на лбу, полученной в результате слишком большого количества ударов головой о кирпичную стену, чтобы сосчитать.</li>
|
|||
|
|
|||
|
<li id="sn2"> Эта команда доступна как часть процесса установки. Мы обсудим использование <code>menuselect</code> в главе об установке.</li>
|
|||
|
|
|||
|
<li id="sn3"> Термин кодек - это сокращение от «кодер-декодер».</li>
|
|||
|
|
|||
|
<li id="sn4"> Отчасти по этой причине мы не рекомендуем формат GSM по умолчанию для системных записей. WAV-записи будут звучать лучше и использовать меньше тактов процессора.</li>
|
|||
|
|
|||
|
<li id="sn5"> Некоторые кодеки создают значительную нагрузку на ЦП, настолько, что система, которая может поддерживать несколько сотен каналов без транскодирования, будет обрабатывать только несколько десятков, когда транскодирование используется.</li>
|
|||
|
<li id="sn6"> Хотя большинство функций ADSI в Asterisk никогда не используется, приложение голосовой почты использует этот ресурс.</li>
|
|||
|
|
|||
|
<li id="sn7"> Для использования требуется отдельно лицензируемый продукт.</li>
|
|||
|
|
|||
|
<li id="sn8"> Не подробные записи вызовов (CDRs), а скорее аудиозаписи вызовов, генерируемых <code>MixMonitor()</code> и связанными приложениями.</li>
|
|||
|
</ol>
|
|||
|
|
|||
|
[Глава 1. Революция в телефонии](glava-01.md) | [Содержание](SUMMARY.md) | [Глава 3. Установка Asterisk](glava-03.md)
|