FreeSwitch 提供了一个APP实现通道的监听功能,它的名字是:eavesdrop。 如果要持续监听某个用户,那么要用mod_spy里实现。
在监听过程中,可以用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。
以下的片段摘自安装后自带拨号方案的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>下面这个实例,首先呼叫分机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 。
