asterisk-book/glava-02.md

495 lines
54 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Глава 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)