Описание Dialplan Freeswitch (Часть пятая)
Пятая часть статьи. Все статьи находится по адресу : Раздел 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:".
© Внимание! Все права на перевод принадлежат фирме Гарантум. При ссылке или цитировании данной информации обязательно вставляйте ссылку на источник.