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)

btree

Удалить пару 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)}"/>

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 обеспечивает постоянное хранилище данных для установки ограничений (вызовов). При использовании ODBC, такая внутренняя БД может быть общией для кластера АТС.

Данный бэкенд не используется для тарификации вызовов, для этого может быть применен Freeswitch: mod_nibblebill

 

  • freeswitch/mod/mod_db.txt
  • Последние изменения: 2023/07/25