Реализация мульти-доменной IP-АТС (Multi-Tenant PBX) на базе FreeSwitch

Опубликовано в Freeswitch

MULTI-TENANT PBX FREESWITCHIP-АТС FreeSWITCH может быть, сконфигурирован для подключения нескольких отдельных компаний, в многопользовательском режиме, на одном запущенном экземпляре FreeSWITCH. Это будет интересно коммерческих провайдеров, обслуживающих многочисленные компании клиентов, каждой из которых необходима изоляция друг от друга в отношении внутренних абонентов, диалплана, внешних шлюзов и т.д.

Такая конфигурация проста: SIP домены являются основой для разделение компании на одном физическом сервере. SIP домены предлагает преимущество, которое позволяет повторно использовать тот же диалплан, для каждой компании. Исключение составляют, при использовании некоторыми компаниями IVR.

FreeSWITCH является очень гибкой платформой, предоставляющей много путей для достижения этой задачи.

Предположим, что у нас есть две компании (A и B) и один физический сервер с установленной системой FreeSWITCH. В DNS сервере нашего домена необходимо прописать две MX записи (компания А и B) pbx-a.voiplab.by и pbx-b.voiplab.by на IP адрес сервера телефонии. Изначально необходимо изменить настройки нашего основного SIP профиля (conf/sip_profiles/internal.xml) закомментировав следующее:

param name="force-register-domain" value="$${domain}"
param name="force-subscription-domain" value="$${domain}"
param name="force-register-db-domain" value="$${domain}"
 

Создаем конфигурации и директорию для наших компания А и B:

nano conf/directory/pbx-a.voiplab.by.xml
<include>
  <!--the domain or ip (the right hand side of the @ in the addr-->
  <domain name="pbx-a.voiplab.by">
    <params>
      <param name="dial-string" value="{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
    </params>
    <variables>
      <variable name="record_stereo" value="true"/>
      <variable name="default_gateway" value="$${default_provider}"/>
      <variable name="default_areacode" value="$${default_areacode}"/>
      <variable name="transfer_fallback_extension" value="operator"/>
      <variable name="user_context" value="pbx-a.voiplab.by"/>
    </variables>
    <groups>
      <group name="pbx-a.voiplab.by">
        <users>
          <X-PRE-PROCESS cmd="include" data="pbx-a.voiplab.by/*.xml"/>
        </users>
      </group>
    </groups>
  </domain>
</include>
nano conf/directory/pbx-b.voiplab.by.xml
<include>
  <!--the domain or ip (the right hand side of the @ in the addr-->
  <domain name="pbx-b.voiplab.by">
    <params>
      <param name="dial-string" value="{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
    </params>
    <variables>
      <variable name="record_stereo" value="true"/>
      <variable name="default_gateway" value="$${default_provider}"/>
      <variable name="default_areacode" value="$${default_areacode}"/>
      <variable name="transfer_fallback_extension" value="operator"/>
      <variable name="user_context" value="pbx-b.voiplab.by"/>
    </variables>
    <groups>
      <group name="pbx-b.voiplab.by">
        <users>
          <X-PRE-PROCESS cmd="include" data="pbx-b.voiplab.by/*.xml"/>
        </users>
      </group>
    </groups>
  </domain>
</include>

Теперь необходимо создать абонентов в новых созданных директориях: для примера добавим двух пользователей, один в conf/directory/pbx-a.voiplab.by и еще одного в conf/directory/pbx-b.voiplab.by, что-то вроде этого:

nano conf/directory/pbx-a.voiplab.by/1000.xml
<include>
  <user id="1000">
    <params>
      <param name="password" value="$${default_password}"/>
      <param name="vm-password" value="1000"/>
    </params>
    <variables>
      <variable name="toll_allow" value="domestic,international,local"/>
      <variable name="accountcode" value="1000"/>
      <!--<variable name="user_context" value="default"/>-->
      <variable name="effective_caller_id_name" value="Extension 1000"/>
      <variable name="effective_caller_id_number" value="1000"/>
      <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
      <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
      <variable name="callgroup" value="techsupport"/>
    </variables>
  </user>
</include>
nano conf/directory/pbx-b.voiplab.by/1000.xml
<include>
  <user id="1000">
    <params>
      <param name="password" value="$${default_password}"/>
      <param name="vm-password" value="1000"/>
    </params>
    <variables>
      <variable name="toll_allow" value="domestic,international,local"/>
      <variable name="accountcode" value="1000"/>
      <!--<variable name="user_context" value="default"/>-->
      <variable name="effective_caller_id_name" value="Extension 1000"/>
      <variable name="effective_caller_id_number" value="1000"/>
      <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
      <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
      <variable name="callgroup" value="techsupport"/>
    </variables>
  </user>
</include>

Копируем тестовые диалпланы для обоих компании A и B:

cp conf/dialplan/default.xml conf/dialplan/pbx-a.voiplab.by.xml
 
cp conf/dialplan/default.xml conf/dialplan/pbx-b.voiplab.by.xml
 

Коментарии: