Changes between Initial Version and Version 1 of CoferenceOutcallExample


Ignore:
Timestamp:
Dec 15, 2017, 5:01:53 PM (7 years ago)
Author:
alx
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CoferenceOutcallExample

    v1 v1  
     1= Пример конфигурации !FreeSwitch для разговора двух абонентов в конференции =
     2
     3Данная статья описывает пример настройки !FreeSwitch (FS) для реализации сценария вызова одним абонентом другого через конференцию. Задача поставлена в ticket:125 и включает следующеие моменты:
     4
     5- при вызове создается конференция с именем типа `<caller Name>(<caller Number>) -> <callee Name>(<callee Number>)` (например `Вася(123) -> Петя(456)`), вызывающий и вызываемый абоненты добавляются в конференцию и ведут там разговор;
     6- пока вызываемый абонент не вошел в конференцию, вызывающий слышит КПВ;
     7- если вызов заканчивается неудачно (например вызываемый недоступен, вызываемый отказался принять вызов и т.п.), вызывающий должен слышать сигнал "Занято".
     8
     9== Конфигурация конференций ==
     10
     11Создадим профиль конференций для нашей задачи. В файле `/etc/freeswitch/autoload_configs/conference.conf.xml` пишем такой фрагмент:
     12
     13{{{#!xml
     14<configuration name="conference.conf" description="Audio Conference">
     15  ....
     16  <profiles>
     17    ....
     18    <profile name="2-way-calls">
     19      <param name="domain" value="$${domain}"/>
     20      <param name="member-flags" value="mintwo"/>
     21      <param name="rate" value="8000"/>
     22      <param name="interval" value="20"/>
     23      <param name="caller-controls" value="none"/>
     24      <param name="energy-level" value="200"/>
     25      <param name="moh-sound" value="tone_stream://%(1000,3000,440)"/>
     26      <param name="cdr-event-mode" value="content"/>
     27    </profile>
     28    ....
     29  </profiles>
     30  ....
     31</configuration>
     32}}}
     33
     34В приведенном примере профиля есть следующие моменты, важные для решаемой задачи:
     35
     36- `<param name="member-flags" value="mintwo"/>` - этот флаг обеспечит отбой второго абонента когда один из собеседников отключится от конференции;
     37- `<param name="moh-sound" value="tone_stream://%(1000,3000,440)"/>` - пока вызывающий абонент - единственный участник конференции, ему будет воспроизводиться сигнал КПВ.
     38
     39== Дайлплан ==
     40
     41Теперь создадим дайлплан для нашей задачи. Вызывающий абонент будет вызывать номер 456:
     42
     43{{{#!xml
     44<include>
     45  <extension name="call-in-conference">
     46    <!-- Проверим, что вызывается номер 456 -->
     47    <condition field="destination_number" expression="^456$">
     48
     49      <!-- Формируем имя конференции -->
     50      <action application="set" data="conference_name=${caller_id_name}(${caller_id_number}) -> ${callee_id_name}(${destination_number})" />
     51
     52      <!-- Установим параметры функции conference_auto_outcall -->
     53      <action application="set" data="conference_auto_outcall_timeout=60"/>
     54      <action application="set" data="conference_auto_outcall_flags=none"/>
     55      <action application="set" data="conference_auto_outcall_skip_member_beep=true"/>
     56      <!-- Имя и номер вызывающего абонента -->
     57      <action application="set" data="conference_auto_outcall_caller_id_name=${caller_id_name}"/>
     58      <action application="set" data="conference_auto_outcall_caller_id_number=${caller_id_number}"/>
     59      <action application="conference_set_auto_outcall" data="user/${destination_number}"/>
     60
     61      <!-- Включаем вызывающего абонента в конференцию -->
     62      <action application="conference" data="${conference_name}@2-way-calls"/>
     63
     64    </condition>
     65  </extension>
     66</include>
     67}}}
     68
     69В приведенном примере при вызове номера 456 создается конференция с именем типа `Вася(123) -> Петя(456)` и с профилем `2-way-calls`, сконфигурированным ранее, в нее включается вызывающий абонент, и выполняется вызов в конференцию вызываемого абонента 456.
     70
     71В приведенном выше примере не выполняется последнее требование - в случае неудачного вызова вызывающий должен слышать сигнал "Занято". Сейчас же в случае если вызываемый абонент отклонит вызов, вызывающий будет продолжать слушать сигнал КПВ. Для выполнения последнего требования создадим в дайлплане специальное расширение `busy`, которое передает сигнал "Занято":
     72
     73{{{#!xml
     74  <extension name="Play BUSY tone">
     75    <condition field="destination_number" expression="^busy$">
     76      <action application="answer"/>
     77      <action application="playback" data="tone_stream://%(330,330,440);loops=-1"/>
     78    </condition>
     79  </extension>
     80}}}
     81
     82И дополним вызов в конференцию так, чтобы при неудаче вызова исходного абонента вызывалось расширение busy:
     83
     84`<action application="conference_set_auto_outcall" data="user/${destination_number}|loopback/busy"/>`
     85
     86Пример дайлплана, передающего в конференцию "Занято" в случае неудачного вызова:
     87
     88{{{#!xml
     89<include>
     90  <extension name="Play BUSY tone">
     91    <condition field="destination_number" expression="^busy$">
     92      <action application="answer"/>
     93      <action application="playback" data="tone_stream://%(330,330,440);loops=-1"/>
     94    </condition>
     95  </extension>
     96
     97  <extension name="call-in-conference">
     98    <!-- Проверим, что вызывается номер 456 -->
     99    <condition field="destination_number" expression="^456$">
     100
     101      <!-- Формируем имя конференции -->
     102      <action application="set" data="conference_name=${caller_id_name}(${caller_id_number}) -> ${callee_id_name}(${destination_number})" />
     103
     104      <!-- Установим параметры функции conference_auto_outcall -->
     105      <action application="set" data="conference_auto_outcall_timeout=60"/>
     106      <action application="set" data="conference_auto_outcall_flags=none"/>
     107      <action application="set" data="conference_auto_outcall_skip_member_beep=true"/>
     108      <!-- Имя и номер вызывающего абонента -->
     109      <action application="set" data="conference_auto_outcall_caller_id_name=${caller_id_name}"/>
     110      <action application="set" data="conference_auto_outcall_caller_id_number=${caller_id_number}"/>
     111      <action application="conference_set_auto_outcall" data="user/${destination_number}|loopback/busy"/>
     112
     113      <!-- Включаем вызывающего абонента в конференцию -->
     114      <action application="conference" data="${conference_name}@2-way-calls"/>
     115
     116    </condition>
     117  </extension>
     118</include>
     119}}}