SIP-аккаунты в FS построены по принципу электронной почты. Каждый аккаунт принадлежит определенному домену. Например, 1000@example.com — это абонент с номером 1000 в домене example.com. Доменом может выступать ip-адрес FS’а или доменное имя, которое с помощью DNS преобразуется в тот же ip-адрес.
В общем виде структура домена выглядит следующим образом:
<include>
<!-- имя домена -->
<domain name="example.com">
<!-- здесь указываем общие параметры для всех аккаунтов домена -->
<params>
<param name="имя_параметра" value="значение_параметра"/>
...
</params>
<!-- здесь указываем общие переменные для всех аккаунтов домена -->
<variables>
<variable name="имя_переменной" value="значение_переменной"/>
...
</variables>
<!-- Пользователей домена можно объединять в группы -->
<groups>
<group name="example.com">
<users>
<user id="1000">
<params>
<param name="password" value="$${default_password}"/>
<param name="имя_параметра" value="значение_параметра"/>
</params>
<variables>
<variable name="имя_переменной" value="значение_переменной"/>
</variables>
</user>
</users>
</group>
</groups>
</domain>
</include>
Вот такая иерархия:
- есть домен;
- домену принадлежат пользователи;
- пользователи могут объединяться в группы;
- пользователи могут находиться в нескольких группах одновременно.
Параметры (params) и переменные (variables) могут быть указаны в настройках:
- домена — тогда они распостраняются на всех пользователей домена;
- группы — распостраняются на пользователей группы;
- отдельного пользователя — соответсвенно, распостраняются только на этого пользователя.
Чем ниже уровень вложения, тем выше приоритет настроек. Например, если один и тот же параметр указан в настройках и домена, и отдельно пользователя, но имеет разные значения, конкретно для этого пользователя будет применяться его настройка, а не всего домена.
Расположение файлов пользователей
$FS_ROOT/conf/directory/
Дефолтная конфигурация FS предлагает вести конфигурационные файлы домена и пользователей следующим образом:
- есть отдельно файл домена example.com.xml
- и есть директория , в котором хранится множество xml-файлов пользователей — по одному файлу на каждого пользователя;
- директория с пользователями example.com подключается к файлу домена example.com.xml с помощью X-PRE-PROCESS. Вот как это выглядит в файле домена:
$FS_ROOT/conf/directory/example.com.xml
<include>
<domain name="example.com">
<groups>
<group name="example.com">
<users>
<X-PRE-PROCESS cmd="include" data="example.com/*.xml"/>
</users>
</group>
</groups>
</domain>
</include>
Минимальная конфигурация подключения пользователя предполагает задание значений ID (логин) и password (пароль):
$FS_ROOT/conf/directory/example.com/1000.xml
<include>
<user id="1000">
<params>
<param name="password" value="password_for_1000"/>
</params>
</user>
</include>
Группы пользователей
Группа (group) — это логическое объединение пользователей. Может использоваться для задания общих параметров, чтобы не прописывать их для каждого пользователя отдельно; также применяется для групповых вызовов, чем упрощает написание диалплана.
Следующий пример конфигурации домена говорит о том, что:
- в домене example.com создаем группу из всех пользователей домена, называем группу example.com;
- создаем группу managers, которая состоит из пользователей 1000, 1001 и 1002;
- создаем группу support, которая состоит из пользователей 1000, 2000 и 2001;
$FS_ROOT/conf/directory/example.com.xml
<include>
<domain name="example.com">
...
<groups>
<group name="example.com">
<users>
<X-PRE-PROCESS cmd="include" data="example.com/*.xml"/>
</users>
</group>
<group name="managers">
<users>
<user id="1000" type="pointer"/>
<user id="1001" type="pointer"/>
<user id="1002" type="pointer"/>
</users>
</group>
<group name="support">
<users>
<user id="1000" type="pointer"/>
<user id="2000" type="pointer"/>
<user id="2001" type="pointer"/>
</users>
</group>
</groups>
</domain>
</include>
В группы managers и support пользователи были добавлены с указанием типа «pointer» — указатель — именно благодаря этому можно одного и того же пользователя добавлять одновременно в несколько групп.