FreeSWITCH 简单图形化界面58 - 拨号应用userspy模块监听呼叫使用

FreeSWITCH 简单图形化界面58 - 拨号应用userspy模块监听呼叫使用

  • [00、 一个fs的web配置界面预览](#00、 一个fs的web配置界面预览)
  • [01、 Web 配置界面预览](#01、 Web 配置界面预览)
  • [02、 Web界面安装参考](#02、 Web界面安装参考)
  • [1. 模块介绍](#1. 模块介绍)
  • [2. 模块安装](#2. 模块安装)
  • [3. 拨号计划应用](#3. 拨号计划应用)
    • [3.1 userspy应用介绍](#3.1 userspy应用介绍)
    • [3.2 userspy使用示例](#3.2 userspy使用示例)
  • [4. 模块命令](#4. 模块命令)
    • [4.1 userspy_show命令](#4.1 userspy_show命令)
    • [4.2 userspy_show使用示例](#4.2 userspy_show使用示例)
  • [5. 复杂场景(UUID保存+持续监听脚本,Lua实现)](#5. 复杂场景(UUID保存+持续监听脚本,Lua实现))

00、 一个fs的web配置界面预览

如果您想通过图形化界面管理 FreeSWITCH 的场景,可直接访问以下 Web 配置界面。

01、 Web 配置界面预览

界面地址 备用地址 登录信息
http://www.fspbx.cn/ http://myfs.f3322.net:8020/ 用户名:admin密码:admin

02、 Web界面安装参考

若需自行部署 FreeSWITCH 图形化界面,包含 Docker、脚本、ISO 镜像三种安装方式,适配不同系统环境:

  1. Docker 安装:快速部署;
  2. 脚本安装:适配 Almalinux、RockyLinux、Debian、Ubuntu 、欧拉等系统,提供一键安装命令,安装后需重启初始化;
  3. ISO 镜像安装:基于 Almalinux制作的镜像,刻录到 U 盘或光盘后可自动安装,适合全新服务器部署。

1. 模块介绍

mod_spy模块核心实现了userspy应用程序,该应用借助mod_dptools: eavesdrop(监听模块),可对与特定用户桥接的所有信道进行监听

通俗说明:当需要对某个用户(如分机1000)的所有通话进行持续监听时,通过mod_spy模块的userspy应用,可实现全程监听------无论该用户接入多少个通话信道,监听信道都会持续跟进,无需重复操作。

2. 模块安装

mod_spy模块需手动编译安装并加载,具体步骤如下:

  1. 编辑FreeSWITCH源码目录下的modules.conf文件(路径:/usr/src/freeswitch/trunk/modules.conf),找到并取消以下行的注释(删除开头的#):
    #applications/mod_spy

  2. 重新编译并安装模块,执行以下命令:
    make ; make install

  3. 加载模块:编辑modules.conf.xml文件,取消以下行的注释,实现模块开机自动加载:
    <load module="mod_spy"/>

  4. 重启FreeSWITCH生效,或通过以下命令手动加载模块(无需重启):
    load mod_spy

3. 拨号计划应用

3.1 userspy应用介绍

userspy是mod_spy模块的核心应用,用于实现对特定用户的持续监听,支持两个参数配置:

  • 第一个参数(必填):指定需要监听的用户,格式为「user@domain」(如1000@192.168.1.1);

  • 第二个参数(可选):指定该用户已存在的信道UUID,作用与eavesdrop模块一致,用于精准监听某一个已建立的通话信道;

  • 补充说明:若该用户当前无活跃通话信道,监听信道会播放音乐(moh),直至该用户有新的通话桥接,或监听方主动挂断。

3.2 userspy使用示例

结合hash命令查询监听目标的UUID,实现精准持续监听,示例如下:

xml 复制代码
<action application="userspy" data="1000@192.168.1.1 ${hash(select/${domain_name}-spymap/1000)}"/>

说明:1000@192.168.1.1是监听目标用户(user@domain),KaTeX parse error: Expected '}', got 'EOF' at end of input: {hash(select/{domain_name}-spymap/1000)}用于查询该用户对应的通话UUID,实现精准监听。

4. 模块命令

4.1 userspy_show命令

该命令用于查看当前所有正在进行监听的监听者(spyers)信息,包括监听目标(user@domain)和监听者的信道UUID。

4.2 userspy_show使用示例

在FreeSWITCH控制台输入以下命令,即可查看当前监听状态:

plain 复制代码
userspy_show

命令执行后,输出示例如下:

plain 复制代码
1000@192.168.1.1 : 54995932-2a7c-11de-af08-93e49196b898
1 total spy

输出说明:

  • 1000@192.168.1.1:userspy应用中指定的监听目标(user@domain);

  • 54995932-2a7c-11de-af08-93e49196b898:监听者(执行监听操作的用户)的信道UUID;

  • 1 total spy:当前共有1个活跃的监听任务。

5. 复杂场景(UUID保存+持续监听脚本,Lua实现)

结合UUID保存逻辑,使用handle-userspy-one.lua脚本实现"持续监听某一个通话"功能,支持密码验证、DTMF操作(插话、三方通话等),可直接部署使用,完整示例如下。

步骤1:呼叫时保存UUID(用于功能号码监听)

呼叫建立时,通过hash命令保存UUID,支持全组监听和指定组监听,为后续持续监听提供支持:

lua 复制代码
-- 保存UUID,用于功能号码监听
-- 没有指定组为所有组,都能通过设置的功能代码监听该UUID
session:execute("hash", string.format("insert/${domain}-feacode/%s/${uuid}",destination_number))
session:execute("hash", string.format("insert/${domain}-feacode-group-%s/%s/${uuid}",callee_callgroup,destination_number))
session:execute("hash", string.format("insert/${domain}-feacode-group-%s/lastcall/${uuid}",callee_callgroup))

步骤2:持续监听脚本(handle-userspy-one.lua)

该脚本实现"持续监听指定通话"功能,包含密码验证、日志打印、DTMF操作配置、userspy执行等逻辑,适配mod_spy模块的userspy应用:

lua 复制代码
#!/usr/bin/lua

-- 功能号码
-- 持续监听某一个通话(基于mod_spy模块userspy应用)
------------------打印日志-------------------
-- CONSOLE : console loglevel 0
-- ALERT   : console loglevel 1
-- CRIT    : console loglevel 2
-- ERR     : console loglevel 3
-- WARNING : console loglevel 4
-- NOTICE  : console loglevel 5
-- INFO    : console loglevel 6
-- DEBUG   : console loglevel 7
local flag = true
local level = "NOTICE"
local log = function(session, str)
    if (flag == true and session:ready()) then
        session:consoleLog(level, str)
    end
end

if (session:ready()) then
    local caller_id_number = session:getVariable("caller_id_number")
    local userspy_number = argv[1]
    local userspy_one_password = argv[2] and argv[2] or ''
    local userspy_one_operator = "true"

    session:consoleLog("info", "#======= start handle-userspy-one.lua ======\r\n")
    session:consoleLog("info", string.format("# 主叫:%s,持续监听:%s\r\n", caller_id_number, userspy_number))
    session:sleep(500)
    -- 密码验证:输入正确密码方可启动监听,提升安全性
    local digits = session:read(1, 20, "default/eavesdrop-one-input-start.gsm", 10000, "#")
    if (digits == userspy_one_password) then
        -- 启动在监听中执行其他操作(如插话、三方通话)
        if (userspy_one_operator == "true") then
            session:execute("set", "eavesdrop_enable_dtmf=true")
            -- DTMF操作说明(适配userspy监听)
            -- 按2:与所监听的UUID(主叫方)讲话
            -- 按1:与所监听的UUID(被叫方)讲话
            -- 按3:发起三方通话
            -- 按0:恢复纯监听状态
            -- 按*:监听下一个通话(多个通话时有效)
            session:execute("set", "eavesdrop_bridge_aleg=true")
            session:execute("set", "eavesdrop_bridge_bleg=true")
            session:execute("set", "eavesdrop_whisper_aleg=true")
            session:execute("set", "eavesdrop_whisper_bleg=true")
            session:execute("queue_dtmf", "0") -- 默认恢复纯监听状态
        else
            session:execute("set", "eavesdrop_enable_dtmf=false") -- 关闭监听中的操作权限
        end

        -- 执行持续监听(调用mod_spy模块的userspy应用)
        session:execute("userspy", string.format("%s@${domain_name}", userspy_number))
    else
        -- 密码输入错误,播放提示音后挂断
        session:sleep(500)
        session:execute("playback", "default/eavesdrop-one-input-error-bye.gsm")
        session:sleep(500)
        session:hangup()
    end
    session:consoleLog("info", "#=======  end handle-userspy-one.lua  ======\r\n")
    return
end

脚本说明

  1. 日志功能:按INFO级别打印脚本执行日志,清晰记录主叫号码、监听目标号码等关键信息,方便排查问题;

  2. 密码验证:监听前需输入正确密码(通过session:read读取输入),验证通过方可启动监听,提升监听操作的安全性;

  3. DTMF操作配置:启用eavesdrop_enable_dtmf=true后,监听过程中可通过按键执行多样化操作,适配不同监听场景需求;

  4. 监听执行:通过userspy命令(mod_spy模块核心应用)执行持续监听,指定监听目标号码及域名,确保监听精准;

  5. 异常处理:密码输入错误时,播放错误提示音后自动挂断,流程规范,避免误操作。

💗 2026年

🐂 祝君成功,好运连连,牛气冲天

相关推荐
贾宝玉的玉宝贾17 天前
FreeSWITCH 简单图形化界面55 - 拨号应用tansfer盲转/拨号计划跳转使用
voip·freeswitch·sip·ippbx·图形化界面·freeswitch图形化界面
贾宝玉的玉宝贾17 天前
FreeSWITCH 简单图形化界面54 - 拨号应用att_xfer协商转移使用
voip·freeswitch·ippbx·pbx·sip通信
REDcker22 天前
SIP 协议原理及应用精解
音视频·ims·sip·sdp·移动通信·volte·h323
REDcker24 天前
从 SS7 到 VoLTE:核心信令协议栈与移动网络演进详解
开发语言·网络·sip·移动网络·volte·ss7·七号信令
顶顶通-FreeSWITCH二次开发接口1 个月前
顶顶通SIP电话客户
sip
wMoqi1 个月前
freeswitch接入E1/T1数据中继语音网关配置
freeswitch·数字中继网关
代码浪人2 个月前
Freeswitch-基础配置-wss-api简化-acl
freeswitch
贾宝玉的玉宝贾2 个月前
FreeSWITCH 简单图形化界面52 - 拨号应用 Answer 介绍
python·django·voip·freeswitch·sip·ippbx·jssip
Pafey3 个月前
PJSIP中的单通问题以及STUN服务器原理
服务器·网络·sip