Asterisk Realtime: extconfig.conf

Реалтайм Архитектура Asterisk - набор драйверов и функций для конфигурации в режиме реального времени. Существует два типа конфигурации - статический и динамический:

  1. Статический хранит конфигурации в БД, как конфигурационные файлы и также обновляет данные при перезагрузке модулей.
  2. Динамический используется для создания и обновления объектов в режиме реального времени, при совершении вызовов.

Оба режима могут использоваться одновременно.

Реалтайм архитектура поддерживает разные типы хранилищ. В данный момент, большинство драйверов основаны на 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

Файлы конфигурации Asterisk

  • asterisk/cf/extconfig.conf.txt
  • Последние изменения: 2018/07/03