Freeswitch: mod_db
mod_db
- реализация обращения через API и Диалплан к хранилищу данных. База данных может быть squlite или ODBC.
Это обеспечивает поддержку групповых вызовов (Freeswitch: mod_dptools: group) и ограничения одновременных вызовов (Freeswitch: mod_dptools: limit).
Требования
Для использования ODBC в качестве бэкенда, FS должен быть скомпилирован с поддержкой ODBC (./configure –enable-core-odbc-support).
См. также Freeswitch Core DB в Postgresql
Установка
mod_db
включен по умолчанию и настроен для использования с sqlite.
Внесите требуемые изменения для включения ODBC в ../autoload_configs/db.conf.xml.
<configuration name="db.conf" description="LIMIT DB Configuration"> <settings> <!--<param name="odbc-dsn" value="dsn:user:pass"/>--> <param name="odbc-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=DB_NAME user=DB_USER password='DB_PASSWORD'"/> </settings> </configuration>
Концепция и структура
realm
и key
являются произвольными строками.
Рассматривайте realm
, как контейнер для key
.
Использование в диалплане
db
Вставить значение в БД:
<action application="db" data="insert/realm/key/value"/>
mod_db
realm/key является уникальным кортежем. Если вы вставите одно и тоже сочетание realm/key несколько раз, каждый предыдущий insert будет перезаписан последующим и только одна уникальная запись сохранится в БД. |
Описание таблицы db_data в СУБД Postgresql
Table "public.db_data" Column | Type | Modifiers ----------+------------------------+----------- hostname | character varying(255) | realm | character varying(255) | data_key | character varying(255) | data | character varying(255) | Indexes: "dd_data_key_realm" UNIQUE, btree (data_key, realm) "dd_realm" btree (realm)
Удалить пару realm/key
из хранилища:
<action application="db" data="delete/realm/key"/>
|
Получить значение из БД и сохранить в переменную канала:
<action application="set" data="var=${db(select/realm/key)}"/>
|
Использовать значение из хранилища как условие:
<condition field="${db(select/realm/key)}" expression="^value$"/>
|
Проверить существует ли кортеж realm/key
в хранилище:
<condition field="${db(exists/realm/key)}" expression="^true$"/>
|
Group
group
- позволяет назначать множественные endpoints
для их одновременного или поочередного вызова.
Вставить адрес вызова в группу:
<action application="group" data="insert:groupname:sipurl"/>
|
Удалить запись из группы:
<action application="group" data="delete:groupname:sipurl"/>
|
Выбрать запись из группы:
<action application="set" data="api_result=${group(call:groupname)}"/>
|
API
db
db insert/realm/key/value db delete/realm/key db select/realm/key db exists/realm/key |
group
group insert:groupname:sipurl group delete:groupname:sipurl group call:groupname[:order] |
Limit
Бэкенд limit обеспечивает постоянное хранилище данных для установки ограничений (вызовов). При использовании ODBC, такая внутренняя БД может быть общией для кластера АТС.
Данный бэкенд не используется для тарификации вызовов, для этого может быть применен Freeswitch: mod_nibblebill |