Пятая часть статьи. Все статьи находится по адресу : Блог Freeswitch

Примеры диалплана Freeswitch

Пример 19: DISA

Получите возможность звонить на FS box и заставьте dialtone опять работать, также как на Asterisk DISA() В FS/conf/dialplan/public/*.xml

<!-- -->
<!-- -->
<!-- -->
<!-- ВНИМАНИЕ!!! Здесь осуществляется ПЕРЕХОД. Возможные уязвимости в безопасности. ВНИМАНИЕ!!! -->
<!-- -->
<!-- -->
<!-- -->
<extension name="incoming-bri-wor">
    <condition field="destination_number" expression="^(disa_target)$">
        <action application="answer"/>
        <action application="start_dtmf"/>
        <action application="play_and_get_digits" data="2 5 3 37000 #
$${base_dir}/sounds/en/us/callie/ivr/8000/ivr-please_enter_pin_followed_by_pound.wav
$${base_dir}/sounds/en/us/callie/ivr/8000/ivr-pin_or_extension_is-invalid.wav
            digits ^$${DISA_PASSWORD}$"/>
        <action application="transfer" data="$1 XML default"/>
    </condition>
</extension>

В FS/conf/dialplan/default/03_DISA.xml

<!--
    DISA - позволяет звонить на ящик и получить dialtone как при новом соединении
-->

<include>
<extension name="DISA for FS">
    <condition field="destination_number" expression="^(disa_target)$">
        <action application="answer"/>
        <action application="read" data="2 15 'tone_stream://%(10000,0,350,440)' digits 30000 #"/>
        <action application="execute_extension" data="${digits}"/>
                <action application="transfer" data="disa_target XML default"/>
    </condition>
</extension>
</include>

Пожалуйста, замените "disa_target" на ваш номер направления.

Этот метод можно использовать для звонка на ваш ящик с pstn / мобильного телефона и получения dialtone для чего-либо.

Пример 20: замена неправильного caller ID

Если вы столкнулись с проблемой, где B-Leg не нравится неверный ID абонента; например, вами получено пригласительное сообщение с From: sip:Unavailable@Unavailable.invalid:5060, вы можете принудительно заменить недопустимый номер на правильный. В следующем примере проверяется правильность NANPA CLID:

 <extension name="invalid_caller_id_fix" continue="true">
     <condition field="caller_id_number" expression="^1?([2-9]d{2}[2-9]d{6})$">
       <action application="set" data="effective_caller_id_number=$1"/>
       <anti-action application="set" data="effective_caller_id_number=2135551212"/>
     </condition>
   </extension>

Пример 21: Блокирование исходящего caller ID

Чтобы получить блок ID абонента для звонящей стороны, набрав *67 после номера абонента, необходимо сделать следующее:

<extension name="block_caller_id">
      <condition field="destination_number" expression="^*67(d+)$">
        <action application="privacy" data="full"/>
        <action application="set" data="sip_h_Privacy=id"/>
        <action application="set" data="privacy=yes"/>
        <action application="transfer" data="$1 XML default"/>
     </condition>
  </extension>

Пример 22: Проигрывание музыки (MOH) идет поиск в данных

Если вы хотите, чтобы MOH играла во время загрузки данных, которая занимает много времени, способ сделать это без использования ESL – заставить диалплан использовать FSAPI через переменное расширение, вызвав luarun из скрипта. Таким образом будет запущен новый поток для выполнения скрипта Lua.

<extension name="Get_Data">
      <condition field="destination_number" expression="^(Get_Data)$">
            <action application="play_and_get_digits" data="4 16 3 7000 # phrase:Enter_Case_Number phrase:Invalid_entry case_number d+" />
            <action application="set" data="x=${expand(luarun GetDataFromLDAP.lua ${case_number}${uuid})}"/>
            <action application = "playback" data="/tmp/LongMusicFile.wav"/>
       </condition>
    </extension>

В скрипте Lua можно использовать подходящий аргумент «uuid», чтобы прервать MOH или перевести на другое направление

--GetDataFromLDAP.lua
key = argv[1]
sessionId = argv[2]
api = freeswitch.API()

--Здесь выполняется обработка данных

--Как только операции с базой данных будут выполнены, вы можете просто остановить MOH или перейти на другое направление

api:execute("uuid_break", sessionId) -- остановка MOH

Строка набора SIP

Набор SIP имеет несколько вариантов. Вот несколько аспектов того, что можно назвать анатомией строки набора SIP.

Пример SIP URI

Базовый синтаксис такой: sofia/my_profile/user@host Хост может быть именем или IP-адресом, например:

sofia/my_profile/1234@192.168.0.1

Для этого надо набрать 1234 на хосте 192.168.0.1 для профиля "my_profile". Если вы используете имя вместо IP-адреса, Sofia будет пытаться представить это имя в качестве записи NAPTR или SRV, прежде чем попробовать его в качестве стандартной A записи.

Набор зарегистрированным пользователем

Есть два варианта в зависимости от того, используется ли псевдоним для домена. Без псевдонима вы можете делать так:

sofia/my_profile/1234%mydomain.com

Если у вас есть псевдоним для домена, такой синтаксис является допустимым:

sofia/mydomain.com/1234

Обратите внимание, что профиль не должен быть явным образом задан в строке набора.

Также для пользователей, определенных в каталоге можно сделать таким образом:

user/1234@mydomain.com

Набор через шлюз (gateway) (SIP провайдер)

Шлюз является средством для совершения исходящих звонков через SIP провайдера. Например:

sofia/gateway/mygateway.com/1234

В этом случае набор номера происходит через шлюз "mygateway.com" для пользователя 1234. Обратите внимание, что здесь нет необходимости добавлять что-либо после номера пользователя "1234" Вот пример, как не надо делать:

sofia/gateway/mygateway.com/1234@mygateway.com <==== НЕПРАВИЛЬНО НЕПРАВИЛЬНО НЕПРАВИЛЬНО

Набор с определенным протоколом

Иногда вам может понадобиться указать транспортный протокол, например TCP, UDP, TLS или SCTP. Это делается путем добавления точки с запятой и названия метода протокола. Например:

sofia/my_profile/1234@192.168.0.1;transport=tcp

Определение кодека

Иногда вы можете пожелать заставить систему использовать какой-то конкретный кодек. В этом случае синтаксис будет выглядеть так:

{absolute_codec_string=XXXX}sofia/my_profile/user@your.domain.com

В этом примере ХХХХ представляет кодек, который должен использоваться. Возможные значения кодеков перечислены здесь. Дополнительные примеры номеров на Absolute Codec String variable.

Getting Fancy With PortAudio

Если у вас есть работающий PortAudio и вы хотите указать кодек, необходимо создать первый и подсоединить второй:

originate {absolute_codec_string=XXXX}sofia/default/foo@bar.com bridge:portaudio/auto_answer inline

Изменение SIP Contact пользователя

FreeSWITCH обычно использует mod_sofia@ip:port для внутренних SIP контактов. Чтобы изменить это на foo@ip:port, существует переменная sip_contact_user:

{sip_contact_user=foo}sofia/my_profile/1234@192.168.0.1;transport=tcp

Использование пользовательского SIP URI

FreeSWITCH позволяет указать пользовательские URI в случае необходимости. Например, у вас может появиться неоходимость во взаимодействии с оборудованием, которое принимает URI, только отформатированный определенным образом. Смысл в том, чтобы поставить перед SIP URI префикс "sip:", например в строке набора. Например:

sofia/my_profile/sip:xxxx;phone-context=cdp.udp@somedomain.com;user=phone

Приведенный выше пример будет отправлять URI точно как указано после префикса "sip:".

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