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

FreeSWITCH: Маршрутизация по времени или дню недели

  • 09 июля 2015

Сегодня трудно представить современный офис без АТС с функциями маршрутизации звонков в зависимости от времени суток или дня недели, поэтому сегодня мы расскажем, как реализовать этот функционал во FreeSWITCH. Давайте приступим.

 

Доступные переменные:

year  - Календарный год, 0-9999

yday - День в году, 1-366

mon  - Месяц , 1-12 (Январь = 1)

mday - День в месяце, 1-31

week - Неделя в году, 1-53

mweek - Неделя в месяце, 1-6

wday - День недели , 1-7 (Воскресенье = 1, Понедельник = 2) или "sun", "mon", "tue".

hour  - Час, 0-23

minute - Минута, 0-59

minute-of-day - Minute of the day, (1-1440)

time-of-day - Временой диапазон формата: hh:mm[:ss]-hh:mm[:ss]. Например: "08:00-17:00"

date-time - Диапазон Дата/Время формата: YYYY-MM-DD hh: mm[:ss]~YYYY-MM-DD hh:mm[:ss]. Например: 2010-10-01 00:00:01~2010-10-15 23:59:59


В основном все офисы работают с понедельника по пятницу с 9:00 до 18:00, так что перейдем в наш диалплан (dialplan) и в начало нашего контекста (context) добавим следующее:

<extension name="Время работы офиса" continue="true">  
    <condition wday="2-6" hour="9-18" break="never">
    <!--С понедельника по пятницу с 9:00 до 18:00 -->
        <action application="set" data="office_status=open" inline="true"/>
        <anti-action application="set" data="office_status=closed" inline="true"/>
    </condition>
</extension>

Теперь в своем диалплане вы можете использовать переменную office_status, которая будет содержать значения “open илиclose”. Добавим в наш диалплан маршрутизацию вызовов в зависимости от времени и дня:

<extension name="Входящий вызов на номер 74997099783">   
    <condition field="destination_number" expression="^(74997099783)$">
        <action application="execute_extension" data="74997099783_${office_status}"/>
        <!-- Проверяем время и день недели и возвращаем статус --> </condition></extension> 
            <extension name="Рабочее время">
                <condition field="destination_number" expression="^(74997099783_open)$">
                    <action application="answer"/> <action application="ivr" data="office-ivr"/>
                    <action application="set" data="ringback=$${hold_music}"/>
                    <action application="set" data="call_timeout=60"/>
                    <action application="bridge" data="user/100"/>
                    <action application="hangup"/>
                </condition>
            </extension>

            <extension name="Офис закрыт">
                <condition field="destination_number" expression="^(74997099783_closed)$">
                    <action application="answer"/>
                    <action application="sleep" data="1000"/>
                    <action application="playback" data="ivr/office-close.wav"/>
                    <action application="sleep" data="500"/>
                </condition>
            </extension>

Сохраняем, переходим в консоль FreeSWITCH (fs_cli) и делаем reloadxml. Теперь входящие вызовы будут обрабатываться в зависимости от заданных вами правил.

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

Добавим в начало диалплана следующее:

 
<extension name="Время работы офиса" continue="true">   
    <condition wday="2-6" hour="0-9" break="never">
        <action application="set" data="office_status=work-close" inline="true"/>
    </condition> <condition wday="2-6" hour="9-18" break="never">
        <action application="set" data="office_status=work-open" inline="true"/>
    </condition>
    <condition wday="2-6" hour="18-24" break="never">
        <action application="set" data="office_status=work-close" inline="true"/>
    </condition> <condition wday="7" hour="10-18" break="never">
        <action application="set" data="office_status=weekend-mobile" inline="true"/>
    </condition> <condition wday="1" break="never">
        <action application="set" data="office_status=weekend-close" inline="true"/>
    <
/condition>
</extension>

Теперь в своем диалплане вы можете использовать переменную office_status, которая будет содержать значения “work-close”, “work-open, “weekend-mobile” или “weekend-close”. Добавим в наш диалплан маршрутизацию вызовов в зависимости от времени и дня:

<extension name="Входящий вызов от оператора">   
    <condition field="destination_number" expression="^(74997099783)$">
        <action application="execute_extension" data="74997099783_${office_status}"/>
    </condition>
    </extension> 

<
extension name="Будни рабочее время">
    <condition field="destination_number" expression="^(74997099783_work-open)$">
        <action application="answer"/>
        <action application="ivr" data="office-ivr"/>
        <action application="set" data="ringback=$${hold_music}"/>
        <action application="set" data="call_timeout=60"/>
        <action application="bridge" data="user/100"/>
        <action application="hangup"/>
    </condition>
</extension>

<extension name="Будни офис закрыт">
    <condition field="destination_number" expression="^(74997099783_work-close)$">
        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <action application="playback" data="ivr/office-close.wav"/>
        <action application="sleep" data="500"/>
    </condition></extension><extension name="Суббота переадресация на мобильный">
    <condition field="destination_number" expression="^(74997099783_weekend-mobile)$">
        <action application="bridge" data="sofia/gateway/mtt/81234567891"/>
        <action application="hangup"/>
    </condition>
</extension>

<
extension name="Воскресенье">
    <condition field="destination_number" expression="^(74997099783_weekend-close)$">
        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <action application="playback" data="ivr/office-close.wav"/>
        <action application="sleep" data="500"/>
    </condition>
<
/extension>

Сохраняем, переходим в консоль FreeSWITCH (fs_cli) и делаем reloadxml. Теперь все должно работать согласно описанной выше логике.

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

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

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