FreeSWITCH 简单图形化界面 70 - 监听/密语的lua脚本


FreeSWITCH 简单图形化界面 70 - 监听/密语的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、创建dialplan

创建一个extension,拨打*74+被监听分机号执行对应的lua脚本。

xml 复制代码
<extension name="功能号码:无密码监听某一通话">
	<condition expression="^\*74(\d+)$" field="destination_number">
		<action application="answer"/>
		<action application="lua" data="handle-eavesdrop-one-nopwd.lua $1"/>
	</condition>
</extension>

说明:*74 后跟要监听的分机号,例如拨 *741001 监听分机1001;脚本内通过 argv[1] 获取该号码。

2、编写lua脚本

lua 复制代码
#!/usr/bin/env lua
-- 功能号码
-- 无密码监听某一个通话
------------------打印日志-------------------
-- 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 eavesdrop_number       = argv[1]
    local eavesdrop_one_operator = "true"
    log(session, "#===== start handle-eavesdrop-one-nopwd.lua ======\r\n")
    log(session, string.format("# 主叫:%s,监听:%s\r\n", caller_id_number, eavesdrop_number))
    session:execute("set", string.format("eavesdrop_uuid=${hash(select/${domain_name}-feacode/%s)", eavesdrop_number))
    local eavesdrop_uuid = session:getVariable("eavesdrop_uuid")
    if (eavesdrop_uuid) then
        -- 判断uuid是否通话中
        session:execute("set", string.format("eavesdrop_uuid_is_exists=${uuid_exists(%s)}", eavesdrop_uuid))
        local eavesdrop_uuid_is_exists = session:getVariable("eavesdrop_uuid_is_exists")
        if (eavesdrop_uuid_is_exists == "true") then
            session:sleep(500)
            -- 启动在监听中执行其他操作
            if (eavesdrop_one_operator == "true") then
                session:execute("set", "eavesdrop_enable_dtmf=true")
                -- 按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
            -- 执行监听
            session:execute("eavesdrop", eavesdrop_uuid)
            return
        end
    end
    log(session, string.format("# 监听的分机:%s,未在通话中,结束监听\r\n", eavesdrop_number))
    session:sleep(500)
    session:execute("playback", "default/eavesdrop-one-start.gsm")
    session:sleep(500)
    for i = 1, string.len(eavesdrop_number) do
        local digit = string.sub(eavesdrop_number, i, i)
        local sound = string.format("default/digits/%s.wav", digit)
        session:execute("playback", sound)
        session:sleep(200)
    end
    log(session, "#=======  end handle-eavesdrop-one.lua  ======\r\n")
    log(session, "#=====  end handle-eavesdrop-one-nopwd.lua  ======\r\n")
    session:execute("playback", "default/eavesdrop-one-error-bye.gsm")
    session:sleep(500)
    session:hangup()
    return
end

祝君好运!

💗 2026年

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


【本文由"FreeSWITCH手记"发布,2026年10月11日】

相关推荐
dialect_1 天前
KMP算法
开发语言·c++·算法
总要学点什么1 天前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
开开心心_Every1 天前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c1 天前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
吴卫斌1 天前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
超级架构师1 天前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
叼烟扛炮1 天前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
LMT流氓兔1 天前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
专注仿真1 天前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放1 天前
Python基础语法练习题(75)
开发语言·python·学习