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 |