8(499)-709-97-83
Работаем с 8:00 до 19:00

FreeSWITCH: Мультидоменная виртуальная IP АТС

  • 20 апреля 2015

FreeSWITCH Multi-tenant.FreeSWITCH:Мультидоменная виртуальная IP АТС.Большое время прошло с последней нашей статье про Freeswitch,  поэтому решили исправить эту ситуацию. В одной из предыдущих статей мы рассказывали об Elastix MT(Multi-Tenant), в сегодняшней статье мы решили рассказать вам, как на базе Freeswitch сделать Мультидоменную (Multi-tenant) виртуальную IP АТС. В конце статьи мы добавили возможность протестировать Мультидоменность с созданием своего домена и внутренних номеров.

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

 

Поехали

Откроем conf/sip_profiles/internal.xml и закомментируем следующие параметры:

<!--all inbound reg will look in this domain for the users --> 
<!--<param name="force-register-domain" value="$${domain}"/>-->
<
!--force the domain in subscriptions to this value -->
<
!-- <param name="force-subscription-domain" value="$${domain}"/>-->
<!--all inbound reg will stored in the db using this domain -->
<!--<param name="force-register-db-domain" value="$${domain}"/>-->

Теперь нам нужно создать файл с настройками каждого домена и директорию с их внутренними номерам.

Копируем default настройки, изменив название на имя нашего домена:

cp conf/directory/default.xml  conf/directory/ice.voipnotes.ru.xml
cp conf/directory/default.xml conf/directory/fire.voipnotes.ru.xml

Копируем default папку с внутренними номерами (потом их изменим) в папку нашего домена:

 cp conf/directory/default  conf/directory/ice.voipnotes.ru 
cp conf/directory/default conf/directory/fire.voipnotes.ru

Все вышеперечисленное можно создать самому, не копируя default, но для простоты мы сделали именно так. Теперь нам нужно отредактировать ice.voipnotes.ru.xml, изменив следующие параметры:

<include>  
    <!--изменяем параметр $${domain} на название нашего домена -->
        <
domain name=" ice.voipnotes.ru ">
         <
params>
            <
param name="dial-string" value="{^^:sip_invite_domain=${dialed_domain}:presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(*/${dialed_user}@${dialed_domain})}"/>
            <!-- These are required for Verto to function properly -->
            <!-- <param name="jsonrpc-allowed-methods" value="verto"/> -->
            <!-- <param name="jsonrpc-allowed-event-channels" value="demo,conference,presence"/> -->
            </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"/>
           <
/variables>

           <groups>
            <
!—Меняем название группы -->
            <group name=" ice.voipnotes.ru ">
                <users>
                 <!—указываем путь к папке с внутренними номерами данного домена -->
                 <
X-PRE-PROCESS cmd="include" data=" ice.voipnotes.ru /*.xml"/>
               <
/users>
            </group>
           <
/groups> 
    </domain>
</include>

Точно такие же изменения нужно внести в fire.voipnotes.ru.xml, поменяв параметры как показано в примере выше на fire.voipnotes.ru.

 

Перейдем к настройкам внутренних номеров

Кто-то в офисах использует 4-х значные добавочные (1001,1002), но если офис небольшой и для удобства используются 3-х значные номера, то первое, что нам следует сделать - создать внутренние номера для каждого домена. Мы приведем пример на одном внутреннем номере для домена ice.voipnotes.ru.

Скопируем из default один из внутренних, переименовав его в 100.xml, и отредактируем:

cp  conf/directory/default/1000.xml  conf/directory/ice.voipnotes.ru/100.xml
nano conf/directory/ice.voipnotes.ru/100.xml
<include>  
    <user id="100">
    <params>
     <param name="password" value="$${default_password}"/>
     <param name="vm-password" value="123456"/>
    </params>
   <variables>
    <variable name="toll_allow" value="domestic,international,local"/>
    <variable name="accountcode" value="100"/> <variable name="user_context" value="default"/>
    <variable name="effective_caller_id_name" value="Extension 100"/>
    <variable name="effective_caller_id_number" value="100"/>
    <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
    <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
    <!--Закомментируем группу вызова, так как ice.voipnotes.ru.xml мы ее не описывали-->
    <!--<variable name="callgroup" value="techsupport"/>-->
   </variables>
   </user>
<
/include>

Тоже самое следует проделать для домена fire.voipnotes.ru. Не забываем, что внутренние номера могут пересекаться, то есть и у ice.voipnotes.ru и fire.voipnotes.ru могут быть одинаковые внутренние номера.

Основная часть работы выполнена, и нам осталось только для каждого домена создать свой диалплан (DialPlan). Вы можете скопировать conf/dialplan/default.xml в conf/dialplan/ice.voipnotes.ru и conf/dialplan/fire.voipnotes.ru

cp dialplan/default.xml  conf/dialplan/ ice.voipnotes.ru   
cp dialplan/default.xml conf/dialplan/ fire.voipnotes.ru

и отредактировать context каждого домена в соответствии с его логикой.

conf/dialplan/ ice.voipnotes.ru    



<include>
    
<context name=" ice.voipnotes.ru ">
        
<extension name="unloop">
            
<condition field="${unroll_loops}" expression="^true$"/>
            <condition field="${sip_looped_call}" expression="^true$">
            
<action application="deflect" data="${destination_number}"/>
            
</condition>
        
</extension>
        <extension name="local">
            
<condition field="destination_number" expression="^(\d{3})$">
             <action application="bridge" data="user/$1@${domain_name}"/>
            
<action application="answer"/>
            
<action application="sleep" data="1000"/>
            
<action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/>
            
</condition>
        
</extension>    
    </context>
</include>


conf
/dialplan/ fire.voipnotes.ru


<
include>
    
<context name=" fire.voipnotes.ru ">
        
<extension name="unloop">
            <condition field="${unroll_loops}" expression="^true$"/>
            
<condition field="${sip_looped_call}" expression="^true$">
             <action application="deflect" data="${destination_number}"/>
            
</condition> </extension> <extension name="local">
            
<condition field="destination_number" expression="^(\d{3})$">
             <action application="bridge" data="user/$1@${domain_name}"/>
            
<action application="answer"/>
            
<action application="sleep" data="1000"/>
             <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/>
            </condition>
        
</extension>
    
</context>
<
/include>

В настройках диалплана мы привели минимальную конфигурацию с маршрутизацией только внутренних звонков, чтобы показать принцип работы. Вы же можете добавить входящую и исходящую маршрутизацию, добавить ivr, групповые вызовы и т.д.

 

Теперь перейдем в CLI и сделаем перезагрузку XML

fs_clifreeswitch@internal>reloadxml

Теперь можно зарегистрироваться под номерами 100@ice.voipnotes.ru и 100@fire.voipnotes.ru и совершать вызовы, каждый из которых будет обрабатываться в своем конкретном диалплане со своей маршрутизацией.

На этом наша установка завершена.

Если вы в статье нашли ошибки или несоответствия, мы будем благодарны, если вы напишите нам о них в комментариях.

 
Powered by SEO CMS ver.: 23.1 TOP 2 (opencartadmin.com)
 
Метки: FreeSWITCH