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日】

相关推荐
Wang's Blog1 小时前
Java 项目部署之 Docker工具快速入门: 镜像命令从 pull 到 load 的完整实操
java·开发语言·docker
北京盛世宏博1 小时前
异地机房采集踩坑笔记:以太网温湿度记录仪跨网段通信调试实战
开发语言·笔记·单片机·php·传感器·温湿度
Wang's Blog1 小时前
Java 项目部署之 Docker工具快速入门: Docker 数据卷命令与挂载实操
java·开发语言·docker
霸道流氓气质1 小时前
AI 应用异常检测与根因分析:语义漂移检测、因果图推理与LLM-as-Judge的 Java 生产级实现
java·开发语言·人工智能
棉猴2 小时前
玩游戏学Python2-IDLE与pgzero入门
开发语言·python·游戏·玩游戏·pgzero·pgzrun
xuxigifxfh2 小时前
牛客:BISHI2 【模板】栈的操作
java·开发语言·windows·算法
(Charon)2 小时前
【C++面试】线程并发与异步:区别、实现原理及使用场景
开发语言·c++
AIFQuant2 小时前
Python A股实时行情API接入:沪深股票数据与WebSocket推送实战
开发语言·python·websocket·金融·a股行情
2302_805771072 小时前
Day23:POM设计模式(封装)
java·开发语言·设计模式