Asterisk Realtime: extconfig.conf
Реалтайм Архитектура Asterisk - набор драйверов и функций для конфигурации в режиме реального времени. Существует два типа конфигурации - статический и динамический:
- Статический хранит конфигурации в БД, как конфигурационные файлы и также обновляет данные при перезагрузке модулей.
- Динамический используется для создания и обновления объектов в режиме реального времени, при совершении вызовов.
Оба режима могут использоваться одновременно.
Реалтайм архитектура поддерживает разные типы хранилищ. В данный момент, большинство драйверов основаны на SQL, но есть и поддержка других методов, например LDAP и CURL.
В данный момент поддерживаются следующие бэкенды:
- ODBC: интегрированная в Asterisk UnixODBC подсистема поддерживает множество разных БД.
- MySQL: нативная поддержка MySQL, интегрирована в Asterisk
- PostgreSQL: нативная поддержка PostgreSQL, интегрирована в Asterisk
- SQLite и SQLite3: для небольших БД можно использовать SQLite3.
- LDAP: получайте учетные данные из LDAP директорий.
- cURL: Получайте и отправляйте данные веб приложениям и связанным с ними БД.
На вашей волне
Статическая конфигурация
Использует базы данных, как хранилище статических конфигураций. Конфигурации обновляются при загрузке модулей, как и в случае с конфигурационными файлами.
Все настройки записываются под одной категорией - [settings]
Конфиг ⇒ Драйвер БД, имя категории из конфига драйвера res_<driver>, таблица базы данных. Если таблица не указана, будет использовано имя конф. файла.
file.conf => driver,category DB res_....conf[,table[,priority]]
Пример записи для загрузки 'queues.conf' через ODBC и 'extensions.conf' из SQlite:
queues.conf => odbc,asterisk,ast_config extensions.conf => sqlite,asterisk,ast_config
Следующие конфиги НЕ МОГУТ быть использованы в реалтайм хранилище:
- asterisk.conf
- extconfig.conf (данный файл)
- logger.conf
Также, некоторые конфиги не загрузятся из Realtime хранилища, если драйвер БД (хранилища) не был, ранее, загружен оператором 'preload' в конфиге 'modules.conf':
- manager.conf
- cdr.conf
- rtp.conf
- features.conf
- cel.conf
- indications.conf
Списки контроля доступа (ACL) также не смогут быть использованы в manager.conf без предварительной загрузки драйвера хранилища. /etc/asterisk/modules.conf
[modules] preload => res_odbc.so preload => res_config_odbc.so
Структура таблицы статической базы данных
Структура статической таблицы БД реалтайм архитектуры Asterisk значительно отличается от, собственно, Realtime таблиц. Она предполагает единую схему для всех подключаемых конфигов.
static ast_config.sql
create table ast_config ( id int(11) NOT NULL auto_increment, cat_metric int(11) NOT NULL default '0', var_metric int(11) NOT NULL default '0', commented int(11) NOT NULL default '0', filename varchar(128) NOT NULL default '', category varchar(128) NOT NULL default '', var_name varchar(128) NOT NULL default '', var_val varchar(128) NOT NULL default '', PRIMARY KEY (id), KEY `filename_comment` (`filename`,`commented`) )ENGINE = InnoDB;
- 'cat_metric' и 'var_metric' определяют порядок (очередность). 'cat_metric' во всей конфигурации, а 'var_metric', внутри категории. Метрика с меньшим значением представляется раньше, метрика с большим позднее. На примере порядка выбора кодеков в sip.conf, это будет работать так: 'disallow=all' - метрика 0 представляется 1-й, затем 'allow=alaw' - метрика 1 и далее 'allow=g729'
- Если поле 'commented' не равно '0', строка считается закомметированной и игнорируется.
- `filename` - Конфиг которому предназначены данные (например extensions.conf).
- 'category' - контекст диалплана или категория конфига.
- `var_name` - опция (параметр) конфига, напрмер exten в диалплане.
- `var_val` - собственно данные, после знака '⇒' в конфиге.
Пример статической конфигурации extensions.conf
extconfig.conf
extensions.conf => odbc,asterisk,ast_config
Опции и диалплан в extensions.conf:
[general] static=yes [globals] RECDIR=/mnt/record ; Директория записи [from-internal] exten => _9X.,1,Dial(PJSIP/${EXTEN:1}@trunk,60,trU(sub-monitor,s,1) exten => _9X.,n,Hangup [sub-monitor] exten => s,1,Noop(**rec to mount**) exten => s,n,MixMonitor(${RECDIR}/${UNIQUEID}.wav) exten => s,n,Return
В таблице ast_config будут представлены так:
MariaDB [asterisk]> select * from ast_config; +----+------------+------------+-----------+-----------------+---------------+----------+--------------------------------------------------------------------+ | id | cat_metric | var_metric | commented | filename | category | var_name | var_val | +----+------------+------------+-----------+-----------------+---------------+----------+--------------------------------------------------------------------+ | 1 | 0 | 0 | 0 | extensions.conf | general | static | yes | | 2 | 1 | 0 | 0 | extensions.conf | globals | RECDIR | /mnt/record | | 3 | 2 | 0 | 0 | extensions.conf | from-internal | exten | _9X.,1,Dial(PJSIP/${EXTEN:1}@siptrunk,60,trU(sub-monitor,s,1) | | 4 | 2 | 1 | 0 | extensions.conf | from-internal | exten | _9X.,n,Hangup | | 5 | 3 | 0 | 0 | extensions.conf | sub-monitor | exten | s,1,Noop(**rec to mount**) | | 6 | 3 | 1 | 0 | extensions.conf | sub-monitor | exten | s,n,MixMonitor(${RECDIR}/${UNIQUEID}.wav) | | 7 | 3 | 2 | 0 | extensions.conf | sub-monitor | exten | s,n,Return | +----+------------+------------+-----------+-----------------+---------------+----------+--------------------------------------------------------------------+ 7 rows in set (0.00 sec)
Реалтайм конфигурация
Работа в режиме реального времени. Любые изменения в реалтайм хранилище, используются системой при новых вызовах, без перезагрузки модулей и применения настроек. Данные реалтайм хранилищ, могут модифицироваться во время выполнения диалплана, при помощи встроенных функций.
Конфигурация вызывает заданное семейство реалтайм в формате: драйвер базы данных, имя категории из конфига драйвера res_<driver>, таблица БД, приоритет (если таблица не задана, будет использовано имя семейства (family)): family => Driver DB,category DB res_...conf[,Table][,prioritet]
example => odbc,asterisk,alttable,1 example => mysql,asterisk,alttable,2 example2 => ldap,"dc=oxymium,dc=net",example2
Приоритет - необязательный параметр , применяется в случае ошибки
получения данных. Если соединению с приоритетом 1 не удалось получить данные,
будет произведена попытка получить данные через соединение с приоритетом 2.
Приоритеты должны быть упорядочены: 1,2,3, но не 1,2,4
Доступные бакенды
- odbc … res_config_odbc
- sqlite … res_config_sqlite
- sqlite3 … res_config_sqlite3
- pgsql … res_config_pgsql
- curl … res_config_curl
- ldap … res_config_ldap
- mysql … res_config_mysql (через add-ons в menuselect)
В конфигах res_pgsql и res_config_sqlite БД назначаются в категории [general] и всегда используется эта БД. В res_config_mysql БД тоже назначается в секции [general], но можно указать несколько баз данных (см. конфиг mysql)
Использование и подключение
Созданные семейства реалтайм можно подключать директивой switch ⇒ в диалплане, как в случае с extensions.conf:
[default] switch => Realtime/mycontext@extensions
или вызывать при помощи специальных функций диалплана (в описании функций, можно найти примеры):
пример extconfig.conf
- iaxusers ⇒ odbc,asterisk
- iaxpeers ⇒ odbc,asterisk
- sippeers ⇒ odbc,asterisk ;- Asterisk 13 RealTime SIP
- sipregs ⇒ odbc,asterisk ; (рекомендуется не использовать по возможности)
- ps_endpoints ⇒ odbc,asterisk ;- Asterisk PJSIP Realtime
- ps_auths ⇒ odbc,asterisk ;- Asterisk PJSIP Realtime
- ps_aors ⇒ odbc,asterisk ; - Asterisk PJSIP Realtime
- ps_domain_aliases ⇒ odbc,asterisk
- ps_endpoint_id_ips ⇒ odbc,asterisk
- voicemail ⇒ odbc,asterisk
- extensions ⇒ odbc,asterisk
- extensions ⇒ mysql,general,extensions ; - Asterisk Realtime Extensions with MySQL
- meetme ⇒ mysql,general
- queues ⇒ odbc,asterisk - Таблица реалтайм очереди Asterisk
- queue_members ⇒ odbc,asterisk - Таблица реалтайм очереди Asterisk
- queue_rules ⇒ odbc,asterisk
- acls ⇒ odbc,asterisk
- musiconhold ⇒ mysql,general
- queue_log ⇒ mysql,general
- queue_log ⇒ odbc,asterisk,queue_log ; - Asterisk: queue_log в MySQL через unixODBC