FreeSwtich的監聽功能

雲夢譚發表於2020-10-26

        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 。

相關文章