Описание Dialplan Freeswitch (Часть четвертая)
Четвертая часть статьи. Все статьи находится по адресу : здесь
Примеры диалплана Freeswitch
Пример 11: Маршрутизация основанная на префиксе номера (Route based on number prefix)
В этом примере мы демонстрируем маршрутизацию для различных назначений на основе NPANXX. А также как надо отвечать вызывающей стороне с разнообразными сообщениями об ошибках, которые назначение отправляет на FreeSWITCH.
<extension>
<condition field="network_addr" expression="^(66.123.321.231|70.221.221.221)$" break="on-false"/>
<condition field="destination_number" expression="^d+$" break="never">
<action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,TIMEOUT,NO_ROUTE_DESTINATION"/>
<action application="set" data="bypass_media=true"/>
<action application="set" data="accountcode=myaccount"/>
</condition>
<condition field="destination_number" expression="^(1813d+|1863d+|1727d+|1941d+|404d+)$" break="never">
<action application="bridge" data="sofia/outbound_profile/${sip_to_user}@switch1.mydomain.com"/>
<action application="info"/>
<action application="respond" data="503"/>
<action application="hangup"/>
</condition>
<condition field="destination_number" expression="^(1404d+|1678d+|1770d+)$">
<action application="bridge" data="sofia/outbound_profile/${sip_to_user}@switch2.mydomain.com"/>
<action application="info"/>
<action application="respond" data="503"/>
<action application="hangup"/>
<anti-action application="respond" data="503"/>
<anti-action application="hangup"/>
</condition>
</extension>
Пример 12: Handle calls which match no extension
В этом примере мы покажем, как обнаружить неправильные направления/назначения. Вам нужно добавить это расширение в нижнюю часть диалплана перед подключением ENUM. Смотрите mod_enum.
<extension name="catchall">
<condition field="destination_number" expression=".*" continue="true">
<action application="playback" data="misc/invalid_extension.wav"/>
</condition>
</extension>
Пример 13: Call Screening
В этом примере мы спрашиваем имя абонента, соединяемся с вызываемой стороной и объявляем это имя. Вызываемый абонент может затем нажать 1 для принятия звонка или отклонить его. Если вызываемый абонент отклоняет вызов, звонящий соединяется с автоответчиком.
<extension name="screen">
<condition field="destination_number" expression="^(d{4})$">
<action application="set" data="call_screen_filename=/tmp/${caller_id_number}-name.wav"/>
<action application="set" data="hangup_after_bridge=true" />
<action application="answer"/>
<action application="sleep" data="1000"/>
<action application="phrase" data="voicemail_record_name"/>
<action application="playback" data="tone_stream://%(500, 0, 640)"/>
<action application="set" data="playback_terminators=#*0123456789"/>
<action application="record" data="${call_screen_filename} 7 200 2"/>
<action application="set" data="group_confirm_key=1"/>
<action application="set" data="fail_on_single_reject=true"/>
<action application="set" data="group_confirm_file=phrase:screen_confirm:${call_screen_filename}"/>
<action application="set" data="continue_on_fail=true"/>
<action application="bridge" data="user/$1"/>
<action application="voicemail" data="default $${domain} $1"/>
<action application="hangup"/>
</condition>
</extension>
Пример 14: Media recording
Это расширение используется для воспроизведения/записи медиафайлов в формате аудио (wav) Благодарим за помощь rupa.
<extension name="recording">
<condition field="destination_number" expression="^(2020)$">
<action application="answer"/>
<action application="set" data="playback_terminators=#"/>
<action application="record" data="/tmp/recorded.wav 20 200"/>
</condition>
</extension>
<extension name="playback">
<condition field="destination_number" expression="^(2021)$">
<action application="answer"/>
<action application="set" data="playback_terminators=#"/>
<action application="playback" data="/tmp/recorded.wav"/>
</condition>
</extension>
Пример 15: Озвучивание времени
В этом примере будет озвучивать время с помощью программы для преобразования текста в речь Flite. Смотрите: mod_flite
<include>
<extension name="SpeakTime">
<condition field="destination_number" expression="^2910$">
<action application="set" data="actime=${strftime(%H:%M)}"/>
<action application="set" data="tts_engine=flite"/>
<action application="set" data="tts_voice=slt"/>
<action application="speak" data="It is +${actime}"/>
</condition>
</extension>
</include>
Пример 16: Блокирование определенных кодов
Этот пример направления должен продемонстрировать, как можно заблокировать определенные NPA(коды стран, регионов и прочее), завершать которые вы не хотите; основывается на id кодах регионов и отвечает с SIP:503 вашим источникам, так что они могут переключиться заранее при наличии у них другого соединения для прерывания.
<extension name="blocked_cid_npa">
<condition field="caller_id_number" expression="^(+1|1)?((876|809)d{7})$">
<action application="respond" data="503"/>
<action application="hangup"/>
</condition>
</extension>
Пример 17: Перенаправление факса с входящего номера
Чтобы использовать предопределенное направление fax_receive во freeswitch/conf/dialplan/default.xml для входящих вызовов, поместите это в файл freeswitch/conf/dialplan/public/fax.xml:
<include>
<extension name="incoming-fax">
<condition field="destination_number" expression="^$${local_fax_number}$">
<action application="set" data="domain_name=$${domain}"/>
<action application="transfer" data="9178 XML default"/>
</condition>
</extension>
</include>
Затем во freeswitch/conf/vars.xml установите номер факса 1234 или любой другой:
<X-PRE-PROCESS cmd="set" data="local_fax_number=1234"/>
Пример 18: Добавление международного префикса к effective_caller_id_number в входящих BRI вызовах
При использовании FreeTDM с zaphfc на линии BRI принятые входящие звонки не будут содержать префикс международного вызова в caller_id_number. Это расширение добавляет его в effective_caller_id_number. Префиксы для международных вызовов описаны здесь: http://en.wikipedia.org/wiki/International\_prefix. В Германии префикс для международных вызовов называется "Verkehrsausscheidungsziffer" (VAZ), смотрите http://de.wikipedia.org/wiki/Verkehrsausscheidungsziffer. Префикс для международных вызовов никогда не передается. Его можно предсказать, просматривая информацию ToN.
<extension name="Add-VAZ" continue="true">
<!--
Для входящих вызовов BRI Verkehrsausscheidungsziffer (VAZ) отбрасывается.
Это расширение снова добавляет его к caller_id_number.
TODO: добавить поддержку для международных номеров
-->
<condition field="source" expression="^mod_freetdm$">
<action application="set" data="effective_caller_id_number=0${caller_id_number}"/>
</condition>
© Внимание! Все права на перевод принадлежат фирме Гарантум. При ссылке или цитировании данной информации обязательно вставляйте ссылку на источник.