FreeSwtich的监听功能

        FreeSwitch 提供了一个APP实现通道的监听功能,它的名字是:eavesdrop。 如果要持续监听某个用户,那么要用mod_spy里实现。 

 

用法

Usage

eavesdrop [<uuid>|all]

相关通道变量

<action application="set" data="eavesdrop_require_group=<groupID>"/>
<action application="set" data="eavesdrop_indicate_failed=/sounds/failed.wav"/>         <!-- used in 'eavesdrop all' case -->
<action application="set" data="eavesdrop_indicate_new=/sounds/new_chan_announce.wav"/> <!-- used in 'eavesdrop all' case -->
<action application="set" data="eavesdrop_indicate_idle=/sounds/idle.wav"/>             <!-- used in 'eavesdrop all' case -->
<action application="set" data="eavesdrop_enable_dtmf=true"/> <!-- false means no commands during eavesdrop -->
<action application="set" data="eavesdrop_bridge_aleg=true"/> <!-- enables listen to aleg -->
<action application="set" data="eavesdrop_bridge_bleg=true"/> <!-- enables listen to bleg -->
<action application="set" data="eavesdrop_whisper_aleg=true"/> <!-- enables whisper mode in aleg -->
<action application="set" data="eavesdrop_whisper_bleg=true"/> <!-- enables whisper mode in bleg -->

 监听过程中的DTMF信令

 在监听过程中,可以用DTMF信令控制监听行为:

  • 2 :与UUID私语
  • 1:与UUID的对端么语
  • 3:进入三方通话
  • 0:监听模式,不能与通道私语
  • * :监听下一通道

        如果指定 "eavesdrop_require_group" ,那么监听功能仅作用于特定的群组,群组以通道变量 "eavesdrop_group"的值作为标识,同一组成员的变量值相同。

        如果data参数不指定为all,那么输入星号 '*'则监听终止。

        如果没有指定eavesdrop_bridge_aleg或eavesdrop_bridge_bleg,那么监听功能失效。

模拟

ESL终端可以用uuid_recv_dtmf发送DTMF。 

 

预设DTMF,同被叫方私聊的实例

<extension name="eavesdrop_speak_to_callee" continue="true">
  <condition field="destination_number" expression="^88(.*)$|^\*0(.*)$">
    <action application="answer"/>
    <action application="set" data="eavesdrop_enable_dtmf=true"/>
    <action application="queue_dtmf" data="w1@500"/>
    <action application="eavesdrop" data="${db(select/spymap/$1$2)}"/>
  </condition>
</extension>

 

预设DTMF,同主叫方私聊的实例DTMF Speak to caller Example

<extension name="eavesdrop_speak_to_caller" continue="true">
  <condition field="destination_number" expression="^88(.*)$|^\*0(.*)$">
    <action application="answer"/>
    <action application="set" data="eavesdrop_enable_dtmf=true"/>
    <action application="queue_dtmf" data="w2@500"/>
    <action application="eavesdrop" data="${db(select/spymap/$1$2)}"/>
  </condition>
</extension>


拨号方案实例

        以下的片段摘自安装后自带拨号方案的default.xml。用你的终端拨打88[extension number]试试。比如说,想监听1001分机,拨打881001:

<extension name="global" continue="true">
  <condition>
    <action application="info"/>
    <action application="db" data="insert/spymap/${caller_id_number}/${uuid}"/>
    <action application="db" data="insert/last_dial/${caller_id_number}/${destination_number}"/>
    <action application="db" data="insert/last_dial/global/${uuid}"/>
  </condition>
</extension>

<extension name="eavesdrop">
  <condition field="destination_number" expression="^88(.*)$|^\*0(.*)$">
    <action application="answer"/>
    <action application="eavesdrop" data="${db(select/spymap/$1$2)}"/>
  </condition>
</extension>

 

event socket 发起监听

      下面这个实例,首先呼叫分机2001,然后监听UUID c7709e9c-1517-11dc-842a-d3a3942d3d63的通道:

api originate sofia/default/2001@yourvsp.com &eavesdrop(c7709e9c-1517-11dc-842a-d3a3942d3d63)

如果要使用SRTP:

originate {sip_secure_media=true}user/1000 &eavesdrop(52d87034-4173-11de-99ef-f1acc19bfdf1)

下面这个实例,功能类似,只不过预设的DTMF选项2 (w2@500),这样,监听者可以直接与UUID的对方私语:

originate user/1001 'queue_dtmf:w2@500,eavesdrop:a28739d0-00f0-4a59-8c82-7a5a74ab6861' inline

 

监听群组

        可以定义一个 "group"来限定监听的范围,这样可以有效地保护隐私。

        比如说,你只想监听销售部的来电,那么,可以在呼叫的源通道上,设置"eavesdrop_group"变量:

<action application="set" data="eavesdrop_group=sales_call_eavesdrop"/>

监听指令中,指定"sales_call_eavesdrop"这个小组:

<extension name="eavesdrop">
  <condition field="destination_number" expression="^779$">
    <action application="answer"/>
    <action application="set" data="eavesdrop_require_group=sales_call_eavesdrop"/>
    <action application="eavesdrop" data="all"/>
  </condition>
</extension>

你可以在eavesdrop APP之前设置通道变量eavesdrop_require_group=foo 。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页