Директории пользователей (User directory). Часть вторая
Вторая часть статьи. Первая находится по адресу : здесь
Буквенно-цифровое отображение пользователя
Предположим, вы хотите, чтобы ваш идентификатор пользователя был буквенно-цифровым (как адрес электронной почты), например, johnsmith@pbx.example.com. Такие пользователи имеют буквенно-цифровые имена в своих SIP-конфигурациях, но вы хотите сопоставить их логины SIP с числовыми направлениями.
Начиная с версии 1.0.4 во FreeSWITCH эта задача выполняется довольно тривиально. ID пользователя может быть любой буквенно-цифровой строкой, которая легко может быть привязана к добавочному номеру с помощью свойства 'number-alias'. Это свойство создает запись в каталоге псевдонима, указывающую на буквенно-цифровой логин пользователя.
Примечание: При использовании этого атрибута вы должны быть осторожны, чтобы не создать конфликт каталогов, когда ID одного пользователя совпадает с псевдонимом другого.
Вот пример из каталога пользователя:
<user id="johnsmith" number-alias="1001">
<!--Вставьте сюда переменные и параметры конфигурации обычного пользователя,
включая пароль пользователя, пароль для голосовой почты, информацию об ID вызывающего абонента и т. д. -->
<variables>
<variable name="mailbox" value="1001"/>
<variable name="effective_caller_id_name" value="1001"/>
<variable name="effective_caller_id_number" value="1001"/>
<variable name="voicemail_alternate_greet_id" value="1001"/>
</variables>
</user>
Поэтому, когда пользователь набирает направление 1001, ваш диалплан может использовать функцию 'user_data' для поиска атрибута ID, псевдонимом которого является этот номер. В диалплане по умолчанию можно создать раздел 'Local Extension' для работы с небольшими изменениями на линии 'bridge':
<action application="bridge" data="user/${user_data(${destination_number}@${domain_name} attr id)}"/>
Примечание: Использование функции user_data в сочетании с mod_xml_curl будет генерировать дополнительный запрос при каждом вызове функции user_data. Обратите внимание, что её однажды уже вызывали в разделе Local Extension для определения группы вызовов. Остерегайтесь осложнений от высокой производительности этого алгоритма на системах с большой пропускной способностью.
Больше разных примеров
Каждый может также иметь собственные переменные и шлюзы с собственными конфигурациями разной степени сложности.
Назначенный пользователю шлюз
<user id="user1">
<params>
<param name="password" value="1"/>
</params>
<variables>
<variable name="register-gateway" value="user1out"/>
</variables>
<gateways>
<gateway name="user1out">
<param name="username" value="4347382173"/>
<param name="password" value="1"/>
<param name="proxy" value="sip.example.com"/>
<param name="register" value="false"/>
</gateway>
</gateways>
</user>
Переменной может быть присвоено имя конкретного шлюза, список из нескольких перечисленных через запятую шлюзов или "all". При установке в ней одного или нескольких шлюзов они будут зарегистрированы, когда зарегистрируется во FreeSWITCH (независимо от того, к какому пользователю относятся эти шлюзы). Установка для этой переменной значения "all" зарегистрирует все шлюзы отдельных пользователей.
Групповой вызов с подтверждением ответа
В следующем примере создается пользователь, доступный на нескольких телефонных номерах в сетях SIP и PSTN. При вызове на мобильный телефон может быть получен ответ в виде сообщения, что мобильный пользователь недоступен или произведено переключение на голосовую почту. Во избежание таких ситуаций используется group_confirm_key, чтобы попросить пользователя нажать «1» для подтверждения вызова.
Петлевая конечная точка дублирует все канальные переменные, так что если group_confirm_key настроена глобально, ключ подтверждения будет затребован дважды. Поэтому он должен применяться с квадратными скобками [] для ограничения до единственной ветви. Петлевая конечная точка используется для отправения звонков на PSTN номер, подразумевая, что пользователям в контексте по умолчанию разрешено набирать международные номера, и они направляются на соответствующий шлюз.
<!-- dialplan/default.xml -->
<extension name="global" continue="true">
<condition>
<action application="set" data="group_confirm_file=phrase:press_one_to_answer"/>
<action application="set" data="group_confirm_read_timeout=1000"/>
</condition>
</extension>
<extension name="dvop_groupcall">
<condition field="destination_number" expression="^(71[1-9]0)$">
<action application="answer"/>
<action application="set" data="ringback=$${hold_music}"/>
<action application="set" data="call_timeout=60"/>
<action application="set" data="hangup_after_bridge=true"/>
<action application="bridge" data="${group_call(hunt_$1@${domain_name}+A)}"/>
</condition>
</extension>
<!-- directory/default.xml -->
<users>
<user id="7012">
<params>
<param name="a1-hash" value="538db5a1dcf95cd9df62bf2ff0466c4b"/>
</params>
<variables>
<variable name="user_context" value="default"/>
</variables>
</user>
<user id="7017">
<params>
<param name="dial-string" value="[group_confirm_key=1]loopback/00491637743380/default"/>
</params>
</user>
</users>
<groups>
<group name="hunt_7190">
<users>
<user id="7012" type="pointer"/>
<user id="7017" type="pointer"/>
</users>
</group>
</groups>
Параметры домена и пользователя
Теги и являются действительными внутри тегов , и .
Параметры и переменные, заданные в домене будут применяться ко всем пользователям в домене, а параметры и переменные, заданные в группе будут применяться ко всем пользователям группы. Приоритет будет отдаваться идентичным параметрам и переменным в следующем порядке: пользователи, группы, домены.
Password
<param name="password" value="123456"/>
Не Разрешайте Пустой Пароль
Если не включить параметр 'password', любой человек сможет зарегистрироваться как пользователь без использования пароля. Всегда целесообразно включать этот параметр в раздел каталога, на случай, если какой-нибудь пользователь не установит собственнный пароль:
<param name="allow-empty-password" value="false"/>
Dial String
Строка набора обязательно должна быть определена, так как она контролирует процесс вызова, когда производится набор пользователя. Параметр dial-string используется в user/ endpoint. Значение по умолчанию выглядит следующим образом:
<param name="dial-string" value="${sofia_contact(${dialed_user}@${dialed_domain})}"/>
Канальные переменные, применяющиеся для строки набора
transfer_fallback_extension
presence_id
<param name="dial-string" value="{transfer_fallback_extension=${dialed_user}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
Подключение конечных точек для приёма вызова
<param name="dial-string" value="${sofia_contact(${dialed_user}@${dialed_domain})},pickup/${dialed_user}@${dialed_domain}"/>
Расширенная строка набора
Задает наличие и создает конечную точку для приёма вызова
<param name="dial-string" value="{sip_invite_domain=${dialed_domain},presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})},pickup/${dialed_user}@${dialed_domain}"/>
Переменные
Любые переменные, определенные для домена или пользователя будут определяться как канальные переменные при поступлении звонка для этого пользователя или при входящих вызовах от него.
Принудительное назначение пользователя определенным расширениям
В среде PABX прошедший аутентификацию пользователь может специально определить своё нахождение на произвольном направлении. Эта функция может быть ограничена двумя способами. Чтобы заставить пользователя применять определённые направления, добавьте
<variable name="sip-force-user" value="<extension>"/>
в каталог этого пользователя.
Альтернативный вариант: чтобы проверить, что пользователи проходят аутентификацию с тем самым логином, который указан в поле контакта для всего профиля, добавьте
<variable name="inbound-reg-force-matching-username" value="true"/>
в определение этого профиля.
Кроме того, посмотрите на [1] - простой способ регистрации пользователей с различными SIP ID (заголовок контакта) и именами пользователя (заголовок авторизации).
Обработка просрочки регистрации
Чтобы помочь предотвратить просрочку регистрации, вы можете переопределить указанный клиентом срок регистрации. Это делается в каталоге профиля клиента простым добавлением переменной
<variable name="sip-force-expires" value="180"/>
© Внимание! Все права на перевод принадлежат фирме Гарантум. При ссылке или цитировании данной информации обязательно вставляйте ссылку на источник.