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

news/2025/3/30 5:15:29/

FreeSWITCH 脚本与自动化

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


1. FreeSWITCH 脚本支持

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

语言模块适用场景
Luamod_lua轻量级应用、拨号计划控制
JavaScriptmod_v8复杂业务逻辑、事件监听
Pythonmod_python数据处理、AI 集成
Perlmod_perl兼容 Perl 生态
Javamod_java企业应用、Web 集成

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


2. Lua 脚本基础

2.1 启用 mod_lua

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

fs_cli -x "load mod_lua"

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

<load module="mod_lua"/>

然后重启 FreeSWITCH:

systemctl restart freeswitch

2.2 在拨号计划中调用 Lua

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

<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

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

freeswitch.consoleLog("NOTICE", "Lua Event Listener Started\n")local event = freeswitch.EventConsumer("CHANNEL_CREATE")while true dolocal e = event:pop()if e thenfreeswitch.consoleLog("INFO", "New Call: " .. e:getHeader("Caller-Caller-ID-Number") .. "\n")end
end

运行:

fs_cli -x "luarun event_listener.lua"

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


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

4.1 自动外呼 Lua 脚本

创建 auto_dial.lua

-- 定义外呼目标
local destination = "1001"
local gateway = "sofia/gateway/mygateway/"-- 构造拨号字符串
local dial_string = gateway .. destination-- 启动会话
session = freeswitch.Session(dial_string)-- 检查是否接通
if session:ready() thensession:execute("playback", "ivr/ivr-welcome.wav")session:sleep(2000)session:hangup()
end

运行:

fs_cli -x "luarun auto_dial.lua"

此脚本会:

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

4.2 定时批量外呼

可以结合 cron 定时执行:

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 已加载

fs_cli -x "load mod_python"

5.2 编写 Python 监听脚本

创建 event_listener.py

import ESLdef 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()

运行:

python3 event_listener.py

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


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

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

6.1 配置 Fail2Ban

编辑 /etc/fail2ban/jail.local

[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

[Definition]
failregex = .*sofia_reg_parse_auth.*invalid password.*from ip <HOST>
ignoreregex =

重启 fail2ban

systemctl restart fail2ban

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


7. 总结

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

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


http://www.ppmy.cn/news/1583402.html

相关文章

从“制造”到“智造”,看中集“灯塔”生产线与永洪“数据技术”的紧密融合

“灯塔”工厂&#xff0c;这一由世界经济论坛提出的概念&#xff0c;已成为制造业领域的一个新的标杆&#xff0c;它代表着制造业的最高智能化水平。作为全球领先的制造企业&#xff0c;中集集团一直致力于提升生产效率和产品质量&#xff0c;以满足全球贸易的不断增长需求。永…

C++:背包问题习题

1. 货币系统 1371. 货币系统 - AcWing题库 给定 V 种货币&#xff08;单位&#xff1a;元&#xff09;&#xff0c;每种货币使用的次数不限。 不同种类的货币&#xff0c;面值可能是相同的。 现在&#xff0c;要你用这 V 种货币凑出 N 元钱&#xff0c;请问共有多少种不同的…

2025清华大学:DeepSeek教程全集(PDF+视频精讲,共10份).zip

一、资料列表 第一课&#xff1a;Deepseek基础入门 第二课&#xff1a;DeepSeek赋能职场 第三课&#xff1a;普通人如何抓住DeepSeek红利 第四课&#xff1a;让科研像聊天一样简单 第五课&#xff1a;DeepSeek与AI幻觉 第六课&#xff1a;基于DeepSeek的AI音乐词曲的创造法 第…

C语言-排序

C语言-排序 冒泡排序选择排序 冒泡排序 两两比较&#xff0c;大的放后面。 每比较一轮&#xff0c;记录交换的次数。当交换的次数为零时&#xff0c;则表示排序完成。 char a[10]{9,5,1,2,4,7,6,8,3,0};9大于5 交换 5 9 1 2 4 7 6 8 3 0 9大于1 交换 5 1 9 2 4 7 6 8 3…

【RAGFlow】全由国内镜像源搭建docker版

国内镜像搭建RagFlow平台Docker版 一、部署说明⛳主流镜像源对比&#x1f4a1; RAGFlow 是什么&#xff1f;&#x1f50e; 系统架构&#x1f4dd; 机器配置 二、基础配置&#x1f4dd;系统源&#x1f3de;️Docker配置&#x1f9f1;前提条件&#x1f683;配置Docker镜像源 三、…

Linux中的make与Makefile详解

一、make命令简介 make是Linux系统中一个强大的自动化构建工具&#xff0c;它通过读取名为"Makefile"的文件来执行一系列命令&#xff0c;完成程序的编译和链接等工作。 1. make命令的基本用法 make [选项] [目标] 如果不指定目标&#xff0c;make会默认执行Make…

Elasticsearch快速上手与深度进阶:一站式实战教程

目录 1. Elasticsearch 简介 2. 安装与启动 方式 1&#xff1a;Docker 快速安装&#xff08;推荐&#xff09; 方式 2&#xff1a;手动安装 3. 基础操作 3.1 创建索引 3.2 插入文档 3.3 查询文档 3.4 更新文档 3.5 删除文档 4. 高级查询 4.1 布尔查询 4.2 范围查询…

【Linux系统】Linux权限讲解!!!超详细!!!

目录 Linux文件类型 区分方法 文件类型 Linux用户 用户创建与删除 用户之间的转换 su指令 普通用户->超级用户(root) 超级用户(root) ->普通用户 普通账户->普通账户 普通用户的权限提高 sudo指令 注&#xff1a; Linux权限 定义 权限操作 1、修改文…