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 镜像三种安装方式,适配不同系统环境:
- 安装指南地址:https://blog.csdn.net/jia198810/article/details/137820796
- 核心安装方式概览:
- Docker 安装:快速部署;
- 脚本安装:适配 Almalinux、RockyLinux、Debian、Ubuntu 、欧拉等系统,提供一键安装命令,安装后需重启初始化;
- 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日】