397 lines
54 KiB
Markdown
397 lines
54 KiB
Markdown
|
# Глава 2. Архитектура Asterisk
|
|||
|
|
|||
|
> *Прежде всего, но не обязательно в таком порядке.*
|
|||
|
>
|
|||
|
> – Доктор Кто
|
|||
|
|
|||
|
Asterisk очень отличается от других, более традиционных УАТС тем, что диалплан в Asterisk обрабатывает все входящие каналы по существу одинаково, а не разделяя их на станции, транки, периферийные модули и т.д.
|
|||
|
|
|||
|
В традиционной АТС существует логическое различие между станциями (телефонными аппаратами) и транками (магистралями - ресурсами, которые подключаются к внешнему миру). Это ограничение делает творческую маршрутизацию в традиционных УАТС очень сложной или невозможной.
|
|||
|
|
|||
|
Asterisk, с другой стороны, не имеет внутреннего понятия транков или станций. В Asterisk все, что входит или выходит из системы, проходит через какой-то канал. Существует множество различных типов каналов; однако диалплан Asterisk обрабатывает все каналы аналогичным образом, что означает, например, внутренний пользователь может существовать на конце внешнего транка (например, сотовый телефон) и обрабатываться диалпланом точно так же, как если бы пользователь был на внутреннем номере. Если вы не работали с традиционной АТС[1](#sdfootnote1sym), то может быть не сразу очевидно насколько это является мощным и освобождающим. Рисунок 2-1 иллюстрирует различия между этими двумя архитектурами.
|
|||
|
|
|||
|
![Рисунок 2-1. Архитектура Asterisk против УАТС](pics/pic2-1.png)
|
|||
|
*Рисунок 2-1. Архитектура Asterisk против УАТС*
|
|||
|
|
|||
|
## Модули
|
|||
|
|
|||
|
Asterisk построена на *модулях*. Модуль — это загружаемый компонент, обеспечивающий определенную функциональность, такую как драйвер канала (например, chan_pjsip.so) или ресурс, который позволяет подключиться к внешней технологии (например func_odbc.so). Модули Asterisk загружаются на основе параметров, определенных в файле */etc/asterisk/modules.conf*. Мы обсудим использование многих модулей в этой книге, но на этом этапе мы просто хотим представить концепцию модулей и дать вам представление о типах модулей, которые доступны.
|
|||
|
|
|||
|
На самом деле можно запустить Asterisk вообще без каких-либо модулей, хотя в этом состоянии он ничего не сможет сделать. Это бывает полезно для понимания модульной природы Asterisk для оценки архитектуры.
|
|||
|
|
|||
|
В![img](file:///tmp/lu11103ktjkbj.tmp/lu11103ktjkcp_tmp_5d7740068e6bed33.png) ы можете запустить Asterisk без модулей, загружаемых по умолчанию и загружать каждый нужный модуль вручную из консоли, но это не то, что вы хотели бы запустить в продакшн; это было бы полезно только в том случае, если бы вы настраивали производительность системы, в которой хотели убрать все, что не требуется вашим конкретным приложением Asterisk.
|
|||
|
|
|||
|
Типы модулей в Asterisk включают в себя следующие:
|
|||
|
|
|||
|
- Приложения - рабочие лошадки диалплана, такие как Dial(), Voicemail(), Playback(), Queue() и т.д.
|
|||
|
- Модули соединения — механизмы, которые соединяют каналы (вызовы) друг с другом
|
|||
|
- Модули записи деталей вызовов (CDR)
|
|||
|
- Модули регистрации событий канала (CEL)
|
|||
|
- Драйверы каналов — различные соединения с системой и из системы; SIP (Session Initiation Protocol) использует канальный драйвер PJSIP
|
|||
|
- Трансляторы кодеков — преобразовывают различные кодеки как G729, G711, G722, Speex и так далее
|
|||
|
- Интерпретаторы форматов — как указано выше, но относящиеся к файлам, хранящимся в файловой системе
|
|||
|
- Функции диалплана — расширенные возможности диалплана
|
|||
|
- Модули УАТС
|
|||
|
- Модули ресурсов
|
|||
|
- Дополнительные модули
|
|||
|
- Тестовые модули
|
|||
|
|
|||
|
Существует официальный список типов статуса поддержки, включенных в menuselect[2](#sdfootnote2sym).
|
|||
|
|
|||
|
### Приложения
|
|||
|
|
|||
|
Приложения диалплана используются в *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](file:///tmp/lu11103ktjkbj.tmp/lu11103ktjkcp_tmp_5d7740068e6bed33.png) аписи деталей вызовов не предназначены для использования в сложных приложениях биллинга. Если вам требуется больше контроля над биллингом и отчетностью о вызовах - обратите внимание на журнал событий канала (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](#sdfootnote3sym) (часто называемые *транскодерами*) позволяют Asterisk конвертировать форматы аудиопотоков между вызовами. Поэтому, если вызов поступает по каналу PRI (используя G.711) и должен быть передан в сжатый канал SIP (например, используя G.729 - один из многих кодеков, которые может обрабатывать SIP), соответствующий транслятор кодека выполнит преобразование.
|
|||
|
|
|||
|
Кодеки - это сложные алгоритмы, обрабатывающие преобразование аналоговой информации (в данном случае звука, но также может быть и видео) в цифровой формат. Многие кодеки также обеспечивают сжатие и исправление ошибок, но это не является обязательным требованием.
|
|||
|
|
|||
|
Е![img](file:///tmp/lu11103ktjkbj.tmp/lu11103ktjkcp_tmp_5d7740068e6bed33.png) сли кодек (например 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 Произносится как “мью-лоу”, но так же вы часто будете слышать как "ю-лоу".
|
|||
|
|
|||
|
D![img](file:///tmp/lu11103ktjkbj.tmp/lu11103ktjkcp_tmp_a3840d58b3bba40d.png) igium предоставляет некоторые дополнительные полезные модули кодеков: codec_g729, codec_silk, codec_siren7 и codec_siren14. Эти модули кодеков не являются open source по различным причинам. Вы должны приобрести лицензию на использование codec_g729, но остальные являются бесплатными. Вы можете найти их на сайте Digium.
|
|||
|
|
|||
|
### Интерпретаторы формата
|
|||
|
|
|||
|
Интерпретаторы форматов в Таблице 2-7 выполняют ту же функцию, что и трансляторы кодеков, но они работают с файлами, а не с каналами, и обрабатывают не только аудио. Если у вас есть запись в меню, которая была сохранена как GSM - вам нужно будет использовать интерпретатор формата для воспроизведения этой записи на любые каналы, не использующие кодек GSM[4](#sdfootnote4sym).
|
|||
|
|
|||
|
Если вы храните запись в нескольких форматах одновременно (например, WAV, GSM и т. д.), Asterisk определит наименее затратный формат[5](#sdfootnote5sym) для использования, когда каналу необходимо воспроизвести эту запись.
|
|||
|
|
|||
|
*Таблица 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 (смотри [Глав](https://translaster.github.io/Definitive-Guide-5th-Edition/glava-18.md)[у](https://translaster.github.io/Definitive-Guide-5th-Edition/glava-18.md)[ 18](https://translaster.github.io/Definitive-Guide-5th-Edition/glava-18.md)) |
|
|||
|
| 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 позволяет избежать создания регрессий в коде. Отправляя свои собственные тесты в проект - вы можете чувствовать себя более уверенно в будущих обновлениях.
|
|||
|
|
|||
|
Более подробная информация о тестах доступна в разделе [“](http://bit.ly/14SLEqs)[Asterisk Test Suite](http://bit.ly/14SLEqs)[”](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*. Это можно сделать либо вручную, либо с помощью make uninstall.
|
|||
|
|
|||
|
### Библиотека ресурсов
|
|||
|
|
|||
|
Существует несколько ресурсов, которым требуются внешние источники данных. Например, музыка на удержании (MOH) не может воспроизводиться если у вас нет какой-то музыки для воспроизведения. Системные подсказки также должны храниться где-то на жестком диске. В папке */var/lib/asterisk* хранятся системные приглашения, сценарии AGI, музыка на удержание и другие файлы ресурсов.
|
|||
|
|
|||
|
### Spool
|
|||
|
|
|||
|
Spool - это место, где приложения хранят файлы в системе Linux, которые будут часто меняться или которые будут обрабатываться другими процессами позднее. Например, задания на печать в Linux и ожидающие сообщения электронной почты обычно записываются в спул, пока они не будут обработаны.
|
|||
|
|
|||
|
В Asterisk спул используется для хранения временных элементов, таких как голосовые сообщения, записи вызовов[6](#sdfootnote6sym), файлы вызовов и так далее.
|
|||
|
|
|||
|
Спул 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](http://bit.ly/2XTb5Wl), и мы призываем вас перейти на последние подробности о версиях Asterisk.
|
|||
|
|
|||
|
Эта книга была написана и протестирована с использованием версии 16, но вы обнаружите, что фундаментальные концепции, которые мы исследуем, будут актуальны для большинства версий Asterisk. Концептуальная структура Asterisk не менялась в течение достаточно долгого времени, и на момент написания этой статьи не было никаких известных планов изменить это в будущем. Будущие версии будут предоставлять более мощные мультимедийные и конференц-возможности, конечно, но они, вероятно, будут реализованы в рамках существующей структуры.
|
|||
|
|
|||
|
## Вывод
|
|||
|
|
|||
|
Asterisk состоит из множества различных технологий, большинство из которых сложны сами по себе. В результате понимание архитектуры Asterisk может быть ошеломляющим. Тем не менее, реальность такова, что Asterisk хорошо спроектирован для того, что он делает, и, по нашему мнению, достиг замечательного баланса между гибкостью и сложностью.
|
|||
|
|
|||
|
[1](#sdfootnote1anc)Хорошим показателем того, что вы работали с традиционными УАТС, является наличие большой мозоли на лбу, полученной в результате слишком большого количества ударов головой о кирпичную стену, чтобы сосчитать.
|
|||
|
|
|||
|
[2](#sdfootnote2anc)Эта команда доступна как часть процесса установки. Мы обсудим использование menuselect в главе об установке.
|
|||
|
|
|||
|
[3](#sdfootnote3anc)Термин кодек - это сокращение от «кодер-декодер».
|
|||
|
|
|||
|
[4](#sdfootnote4anc)Отчасти по этой причине мы не рекомендуем формат GSM по умолчанию для системных записей. WAV-записи будут звучать лучше и использовать меньше тактов процессора.
|
|||
|
|
|||
|
[5](#sdfootnote5anc)Некоторые кодеки создают значительную нагрузку на ЦП, настолько, что система, которая может поддерживать несколько сотен каналов без транскодирования, будет обрабатывать только несколько десятков при его использовании.
|
|||
|
|
|||
|
[6](#sdfootnote6anc)Не записи деталей вызовов (CDR), а скорее аудиозаписи вызовов, генерируемых MixMonitor() и связанными приложениями.
|