FreeSWITCH入门到精通系列(五):FreeSWITCH 脚本与自动化

FreeSWITCH 脚本与自动化

FreeSWITCH 提供了多种脚本语言支持,如 Lua、JavaScript、Python、Perl 等,允许开发者自动化拨号、通话控制、事件处理等操作。本文将介绍 FreeSWITCH 支持的脚本语言如何使用 Lua 进行自动化 ,并提供一个完整的 自动外呼示例


1. FreeSWITCH 脚本支持

FreeSWITCH 允许使用以下脚本语言编写自动化逻辑:

语言 模块 适用场景
Lua mod_lua 轻量级应用、拨号计划控制
JavaScript mod_v8 复杂业务逻辑、事件监听
Python mod_python 数据处理、AI 集成
Perl mod_perl 兼容 Perl 生态
Java mod_java 企业应用、Web 集成

其中,Lua(mod_lua) 是最常用的 FreeSWITCH 脚本语言,因其轻量级、高效、易于嵌入的特性,适用于各种自动化需求。


2. Lua 脚本基础

2.1 启用 mod_lua

FreeSWITCH 默认支持 Lua,确保已加载 mod_lua

sh 复制代码
fs_cli -x "load mod_lua"

如果未加载,可以在 /etc/freeswitch/autoload_configs/modules.conf.xml 中添加:

xml 复制代码
<load module="mod_lua"/>

然后重启 FreeSWITCH:

sh 复制代码
systemctl restart freeswitch

2.2 在拨号计划中调用 Lua

FreeSWITCH 拨号计划 (dialplan) 可以直接调用 Lua 脚本:

xml 复制代码
<extension name="TestLua">
    <condition field="destination_number" expression="^9001$">
        <action application="lua" data="hello.lua"/>
    </condition>
</extension>

当用户拨打 9001 时,FreeSWITCH 将执行 hello.lua

2.3 编写 Hello World 脚本

/usr/local/freeswitch/scripts/ 目录下创建 hello.lua

lua 复制代码
session:answer()
session:sleep(1000)
session:execute("playback", "ivr/ivr-welcome.wav")
session:hangup()

此脚本:

  1. 接听来电
  2. 播放欢迎语音
  3. 挂断通话

3. FreeSWITCH 事件监听

FreeSWITCH 提供 事件系统 (Event Socket Layer, ESL),可以用 Lua 监听并处理事件,例如来电、挂机等。

3.1 监听 FreeSWITCH 事件

创建 event_listener.lua

lua 复制代码
freeswitch.consoleLog("NOTICE", "Lua Event Listener Started\n")

local event = freeswitch.EventConsumer("CHANNEL_CREATE")

while true do
    local e = event:pop()
    if e then
        freeswitch.consoleLog("INFO", "New Call: " .. e:getHeader("Caller-Caller-ID-Number") .. "\n")
    end
end

运行:

sh 复制代码
fs_cli -x "luarun event_listener.lua"

这段代码会监听 CHANNEL_CREATE 事件,每当有新通话进入,就打印出主叫号码。


4. 事件驱动的自动外呼 (Auto Dialer)

4.1 自动外呼 Lua 脚本

创建 auto_dial.lua

lua 复制代码
-- 定义外呼目标
local destination = "1001"
local gateway = "sofia/gateway/mygateway/"

-- 构造拨号字符串
local dial_string = gateway .. destination

-- 启动会话
session = freeswitch.Session(dial_string)

-- 检查是否接通
if session:ready() then
    session:execute("playback", "ivr/ivr-welcome.wav")
    session:sleep(2000)
    session:hangup()
end

运行:

sh 复制代码
fs_cli -x "luarun auto_dial.lua"

此脚本会:

  1. 自动拨打 1001
  2. 播放欢迎语音
  3. 挂断电话

4.2 定时批量外呼

可以结合 cron 定时执行:

sh 复制代码
crontab -e

添加:

复制代码
0 9 * * * /usr/bin/fs_cli -x "luarun auto_dial.lua"

此任务每天早上 9 点自动外呼。


5. Python 集成 FreeSWITCH

FreeSWITCH 也支持 mod_python,可以用 Python 进行事件监听和自动化任务。

5.1 确保 mod_python 已加载

sh 复制代码
fs_cli -x "load mod_python"

5.2 编写 Python 监听脚本

创建 event_listener.py

python 复制代码
import ESL

def event_handler():
    con = ESL.ESLconnection("localhost", "8021", "ClueCon")
    if con.connected():
        con.events("plain", "CHANNEL_CREATE")
        while True:
            e = con.recvEvent()
            if e:
                print("New Call from:", e.getHeader("Caller-Caller-ID-Number"))

event_handler()

运行:

sh 复制代码
python3 event_listener.py

该脚本监听 CHANNEL_CREATE 事件,并打印主叫号码。


6. 结合 Fail2Ban 进行安全自动化

FreeSWITCH 可以结合 fail2ban 进行安全自动化,检测异常登录并封禁 IP。

6.1 配置 Fail2Ban

编辑 /etc/fail2ban/jail.local

ini 复制代码
[freeswitch]
enabled = true
port = 5060,5061
filter = freeswitch
logpath = /var/log/freeswitch/freeswitch.log
maxretry = 3
bantime = 3600

6.2 编写 Fail2Ban 过滤器

创建 /etc/fail2ban/filter.d/freeswitch.conf

ini 复制代码
[Definition]
failregex = .*sofia_reg_parse_auth.*invalid password.*from ip <HOST>
ignoreregex =

重启 fail2ban

sh 复制代码
systemctl restart fail2ban

这将自动封禁连续 3 次密码错误的 IP 地址。


7. 总结

  • FreeSWITCH 支持 Lua、Python、JavaScript 等脚本语言,可以进行通话控制、事件监听和自动化任务。
  • Lua 是最常用的脚本语言 ,可直接在拨号计划 (dialplan) 中执行。
  • 事件监听 允许 FreeSWITCH 监控通话状态,结合 Python 可实现 实时监控
  • 自动外呼 让 FreeSWITCH 能够主动发起通话,结合 cron 可定时拨号。
  • 结合 Fail2Ban 提高系统安全性,自动封禁异常 IP。

掌握 FreeSWITCH 脚本能力,你可以轻松实现 IVR 交互、自动外呼、通话录制、智能路由等功能 🚀

相关推荐
微硬创新4 小时前
耐达讯自动化 CC-Link IE 转 PROFINET网关在污水厂智能化升级实战
人工智能·物联网·网络协议·自动化·信息与通信
Byron Loong8 小时前
【视觉】工业相机通讯协议对比GigE Vision、USB3 Vision、CXP、CL、UVC、RTSP、NDI
计算机视觉·视觉检测·实时音视频
沐禾安信9 小时前
AVI 视频打不开?2026 四款转 MP4 工具封神
音视频·电脑录屏
壮哥_icon10 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
xexpertS10 小时前
分布式系统过载治理:如何通过较小服务控制请求节奏
微服务·自动化
兵叔物联10 小时前
基于FFmpeg的短视频自动剪辑工具
ffmpeg·音视频
AORUO奥偌11 小时前
从“拼凑”到“集成”:音视频系统如何重塑弱电智能化建设逻辑
音视频·公共广播系统·音视频系统·多媒体会议与ip广播系统·多媒体会议系统
AOwhisky11 小时前
Python 学习笔记(第十三期)——运维自动化(下·前篇):远程命令执行——paramiko基础篇
运维·python·学习·云原生·自动化·运维开发·paramiko
禹亮科技11 小时前
大型国企会议室音视频集成实战:3间120㎡空间Poly G7500+LED大屏+讯飞多语言会议系统落地方案
音视频·视频会议系统集成·上海禹亮科技·讯飞听见多语言会议系统·poly g7500
AOwhisky12 小时前
Python 学习笔记(第十四期)——运维自动化(下·中篇):远程文件传输——paramiko进阶篇
运维·python·学习·云原生·自动化·文件传输·paramiko