Вторая часть статьи. Первая находится по адресу : здесь

Буквенно-цифровое отображение пользователя

Предположим, вы хотите, чтобы ваш идентификатор пользователя был буквенно-цифровым (как адрес электронной почты), например, 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"/>

© Внимание! Все права на перевод принадлежат фирме Гарантум. При ссылке или цитировании данной информации обязательно вставляйте ссылку на источник.