Четвертая часть статьи. Все статьи находится по адресу : http://garantum.ru/content/category/8-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>

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