Четвертая часть статьи. Все статьи находится по адресу : здесь

Примеры диалплана 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>

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