适合人群:从小白到大神,只要你会用电脑,就能看懂!
作者寄语:这不是一篇枯燥的技术文档,而是一场有趣的语音通信冒险之旅!🚀
🎯 目录导航
- FreeSWITCH 是个啥?
- 工作原理:就像邮局寄信一样简单
- 核心架构:认识 FreeSWITCH 的"器官"
- 安装教程:手把手教你"养"一个 FreeSWITCH
- 基础配置:给你的"电话总机"装修装修
- 实战应用:让我们打个电话吧!
- 高级玩法:解锁隐藏技能
- 常见问题:踩坑指南
- 总结:你已经是 FreeSWITCH 达人了!
🤔 第一章:FreeSWITCH 是个啥?
生活化比喻时间!
想象一下,你是一家大酒店的前台经理 👔:
- 客人(来电者)来找某个房间(分机号)的住客
- 你(FreeSWITCH)负责接听、转接、留言、会议室预订等等
- 你还能记录对话、群呼所有房间、甚至视频通话
FreeSWITCH 就是这样一个"数字酒店总机"! 🏨
正经点说...
FreeSWITCH 是一款 开源的软件电话交换平台(Softswitch),它能让你的电脑或服务器变成一个功能强大的通信中心。
核心能力 💪:
- ✅ 语音通话(就像打电话)
- ✅ 视频通话(就像微信视频)
- ✅ 文本消息(就像发短信)
- ✅ 会议功能(就像腾讯会议)
- ✅ 呼叫中心(就像 10086 客服)
- ✅ IVR 语音菜单("查话费请按 1..."那种)
技术特点 🔧:
- 🆓 完全免费开源(MPL 1.1 许可证)
- 🌍 跨平台(Linux、Windows、macOS 都能跑)
- 🎨 高度可定制(想怎么改就怎么改)
- 🚀 高性能(能处理成千上万个并发通话)
- 🧩 模块化设计(像乐高积木一样组装功能)
📮 第二章:工作原理 - 就像邮局寄信一样简单
生活例子:打电话就像寄快递 📦
让我用一个超简单的例子来解释 FreeSWITCH 的工作原理:
你(A)想给朋友(B)打电话:
第 1 步:你拿起电话 📱
↓
第 2 步:FreeSWITCH(快递公司)收到你的"寄件请求"
↓
第 3 步:FreeSWITCH 查询朋友 B 的地址(IP 地址)
↓
第 4 步:FreeSWITCH 建立通话线路(就像快递员上门取件)
↓
第 5 步:你和朋友开始聊天(快递送达)🎉
↓
第 6 步:聊完挂断,FreeSWITCH 回收资源(快递员下班)
技术流程图 🎨
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ 用户 A │◄───────►│ FreeSWITCH │◄───────►│ 用户 B │
│ (1001号) │ SIP │ (总机) │ SIP │ (1002号) │
└─────────────┘ └──────────────┘ └─────────────┘
│ │ │
│ 1. 拨号 1002 │ │
├───────────────────────>│ │
│ │ 2. 查找 1002 │
│ │ 3. 转接请求 │
│ ├───────────────────────>│
│ │ 4. 接受通话 │
│ │<───────────────────────┤
│ 5. 建立语音通道 │ │
│<══════════════════════════════════════════════>│
│ 6. 开始聊天(RTP 语音流) │
核心概念解释 📚
-
SIP(Session Initiation Protocol) = 通话邀请卡 💌
- 就像你发送微信语音通话邀请,对方点击接受
- SIP 负责"建立、修改、终止"通话会话
-
RTP(Real-time Transport Protocol) = 实际语音数据包 🎵
- 通话接通后,你说的话变成数据包传输
- 就像视频流一样,实时传输语音
-
分机/Extension = 电话号码 📞
- 每个用户有个编号(如 1001、1002)
- 就像酒店房间号
-
网关/Gateway = 跨界翻译官 🌉
- 连接不同的电话系统(如连接移动电话网络)
- 就像翻译官把中文翻译成英文
🏗️ 第三章:核心架构 - 认识 FreeSWITCH 的"器官"
人体器官比喻 🧠
把 FreeSWITCH 想象成一个人:
🧠 核心引擎(Core)
├─ 大脑中枢,统筹一切
👂 SIP 模块 👁️ WebRTC 模块
├─ 听传统电话 ├─ 看网页通话
💓 媒体处理引擎
├─ 心脏,处理语音流
🦵 数据库模块 🤚 录音模块
├─ 腿,存储数据 ├─ 手,记录通话
📡 网关模块
├─ 嘴巴,对外沟通
详细架构图 🎨
┌────────────────────────────────────────────────────┐
│ FreeSWITCH 核心引擎 │
│ ┌──────────────────────────────────────────────┐ │
│ │ 呼叫控制层(Call Control) │ │
│ │ - 拨号计划(Dialplan) │ │
│ │ - 呼叫路由(Routing) │ │
│ └──────────────────────────────────────────────┘ │
│ ▲ │
│ ┌─────────────────────┴─────────────────────────┐ │
│ │ 模块接口层(Module API) │ │
│ └────────┬──────────┬──────────┬─────────────┬──┘ │
└───────────┼──────────┼──────────┼─────────────┼────┘
│ │ │ │
┌───────▼──┐ ┌───▼────┐ ┌─▼──────┐ ┌───▼─────┐
│ Endpoint │ │ Codec │ │ Format │ │ Database│
│ 模块 │ │ 模块 │ │ 模块 │ │ 模块 │
│ │ │ │ │ │ │ │
│ - SIP │ │ - G.711│ │ - WAV │ │ - MySQL │
│ - WebRTC │ │ - Opus │ │ - MP3 │ │ - Redis │
└──────────┘ └────────┘ └────────┘ └─────────┘
核心模块介绍 🧩
1. Endpoint 模块(通信接口)📡
- mod_sofia:处理 SIP 协议(最常用)
- mod_verto:处理 WebRTC(网页通话)
- mod_h323:处理 H.323 协议(视频会议)
比喻:就像不同品牌的手机充电口,需要不同的转接头
2. Codec 模块(编解码器)🎵
- G.711:高清音质,但占带宽(无损 WAV)
- G.729:省带宽,音质稍差(MP3)
- Opus:新一代神器,音质好且省流量
比喻:就像视频网站的"高清/标清"选项
3. Application 模块(应用功能)🛠️
- mod_conference:多人电话会议
- mod_voicemail:语音信箱
- mod_callcenter:呼叫中心队列
- mod_ivr:语音菜单("按 1 转人工")
比喻:就像手机 APP,每个实现不同功能
4. Dialplan 模块(拨号计划)🗺️
- XML Dialplan:最常用的配置方式
- Lua Script:用 Lua 脚本编写逻辑
- JavaScript:用 JS 编写逻辑
比喻:就像导航软件的路线规划
🛠️ 第四章:安装教程 - 手把手教你"养"一个 FreeSWITCH
环境准备清单 📝
就像养宠物需要准备狗窝、食盆一样,安装 FreeSWITCH 也需要准备环境:
硬件要求 💻:
- CPU:2 核以上(单核也能跑,但会喘)
- 内存:2GB 以上(最低 512MB)
- 硬盘:10GB 以上
软件要求 📦:
- 操作系统:Linux(推荐 Ubuntu 20.04/22.04 或 CentOS 7/8)
- 编译工具:gcc、g++、make、autoconf
- 依赖库:libedit-dev、libsqlite3-dev 等
方法一:源码编译安装(推荐,最新版)🏗️
Ubuntu/Debian 系统
# 第 1 步:更新系统
sudo apt-get update && sudo apt-get upgrade -y
# 第 2 步:安装依赖工具
sudo apt-get install -y \
git gcc g++ make cmake \
autoconf automake libtool \
pkg-config \
libedit-dev libsqlite3-dev \
libcurl4-openssl-dev \
libspeex-dev libspeexdsp-dev \
libldns-dev libjpeg-dev
# 第 3 步:下载 FreeSWITCH 源码
cd /usr/local/src
sudo git clone https://github.com/signalwire/freeswitch.git
cd freeswitch
# 第 4 步:切换到稳定版本(可选)
sudo git checkout v1.10
# 第 5 步:引导配置
sudo ./bootstrap.sh -j
# 第 6 步:配置编译选项
sudo ./configure
# 第 7 步:编译(这一步很慢,去泡杯咖啡吧 ☕)
sudo make
# 第 8 步:安装
sudo make install
# 第 9 步:安装配置文件
sudo make cd-sounds-install cd-moh-install
# 第 10 步:创建软链接(方便启动)
sudo ln -sf /usr/local/freeswitch/bin/freeswitch /usr/bin/freeswitch
sudo ln -sf /usr/local/freeswitch/bin/fs_cli /usr/bin/fs_cli
进度提示 ⏱️:
- bootstrap:1-2 分钟
- configure:2-3 分钟
- make:10-30 分钟(取决于 CPU 性能)
CentOS/RHEL 系统
# 第 1 步:安装 EPEL 源
sudo yum install -y epel-release
# 第 2 步:安装依赖
sudo yum install -y \
git gcc-c++ make cmake \
autoconf automake libtool \
sqlite-devel curl-devel \
speex-devel speexdsp-devel \
libedit-devel libjpeg-devel
# 其他步骤与 Ubuntu 相同...
方法二:包管理器安装(简单快速)📦
Ubuntu/Debian
# 添加官方源
wget -O - https://files.freeswitch.org/repo/deb/debian-release/fsstretch-archive-keyring.asc | sudo apt-key add -
echo "deb https://files.freeswitch.org/repo/deb/debian-release/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/freeswitch.list
# 安装
sudo apt-get update
sudo apt-get install -y freeswitch-meta-all
启动 FreeSWITCH 🚀
# 前台启动(调试模式)
sudo freeswitch
# 后台启动(生产环境)
sudo freeswitch -nc
# 查看运行状态
sudo systemctl status freeswitch
# 连接控制台
sudo fs_cli
成功标志 ✅: 看到以下界面就说明启动成功了!
_____ ______ _____ _____ _____ _____ _ _
| ___| __ ___ ___| _ \ \ / /_ _|_ _/ ____| ____| | | |
| |_ | '__/ _ \/ _ \ |_) \ \ /\ / / | | | || | | _| | |_| |
| _|| | | __/ __/ _ < \ V V / | | | || |___| |___| _ |
|_| |_| \___|\___|_| \_\ \_/\_/ |___| |_| \____|_____|_| |_|
FreeSWITCH Version 1.10.7 (git HEAD)
FreeSWITCH is Ready 🎉
⚙️ 第五章:基础配置 - 给你的"电话总机"装修装修
配置文件结构 📂
FreeSWITCH 的配置文件都在 /usr/local/freeswitch/conf/ 目录下:
conf/
├── autoload_configs/ # 模块配置(各种功能开关)
│ ├── sofia.conf.xml # SIP 配置
│ ├── conference.conf.xml # 会议配置
│ └── ...
├── dialplan/ # 拨号计划(呼叫路由规则)
│ └── default.xml
├── directory/ # 用户目录(分机号配置)
│ └── default/
│ ├── 1000.xml
│ ├── 1001.xml
│ └── ...
├── sip_profiles/ # SIP 配置文件
│ ├── internal.xml # 内部分机
│ └── external.xml # 外部网关
└── vars.xml # 全局变量
任务一:创建你的第一个分机号 👤
步骤 1:复制模板
cd /usr/local/freeswitch/conf/directory/default/
sudo cp 1000.xml 1001.xml
步骤 2:编辑配置文件
sudo nano 1001.xml
修改内容:
<include>
<user id="1001"> <!-- 分机号 -->
<params>
<param name="password" value="mypassword123"/> <!-- 密码 -->
<param name="vm-password" value="1001"/> <!-- 语音信箱密码 -->
</params>
<variables>
<variable name="toll_allow" value="domestic,international"/>
<variable name="accountcode" value="1001"/>
<variable name="user_context" value="default"/>
<variable name="effective_caller_id_name" value="小明"/> <!-- 显示名称 -->
<variable name="effective_caller_id_number" value="1001"/>
</variables>
</user>
</include>
参数解释 📖:
id="1001":分机号(就像你的手机号)password:登录密码(SIP 客户端连接时需要)effective_caller_id_name:来电显示名称
步骤 3:重新加载配置
# 进入 FreeSWITCH 控制台
sudo fs_cli
# 重新加载用户配置
freeswitch> reloadxml
freeswitch> reload mod_sofia
任务二:配置拨号计划(让分机能互打电话)📞
编辑 /usr/local/freeswitch/conf/dialplan/default.xml:
<!-- 在 <context name="default"> 内添加 -->
<!-- 分机互拨:拨打 1000-1999 的号码 -->
<extension name="Local_Extension">
<condition field="destination_number" expression="^(1[0-9]{3})$">
<!-- 拨号时播放回铃音 -->
<action application="set" data="ringback=${us-ring}"/>
<!-- 设置来电显示 -->
<action application="set" data="transfer_ringback=${us-ring}"/>
<!-- 转接到目标分机 -->
<action application="bridge" data="user/${destination_number}@${domain_name}"/>
</condition>
</extension>
<!-- 回声测试:拨打 9196 测试语音 -->
<extension name="echo_test">
<condition field="destination_number" expression="^9196$">
<action application="answer"/>
<action application="echo"/>
</condition>
</extension>
<!-- 保持音乐:拨打 9195 测试音乐播放 -->
<extension name="hold_music">
<condition field="destination_number" expression="^9195$">
<action application="answer"/>
<action application="playback" data="$${hold_music}"/>
</condition>
</extension>
配置解释 📖:
expression="^(1[0-9]{3})$":正则表达式,匹配 1000-1999application="bridge":桥接(转接)通话user/${destination_number}:转接到对应的用户
任务三:配置 SIP 端口和网络 🌐
编辑 /usr/local/freeswitch/conf/sip_profiles/internal.xml:
<profile name="internal">
<settings>
<!-- SIP 端口 -->
<param name="sip-port" value="5060"/>
<!-- 绑定的 IP 地址 -->
<param name="rtp-ip" value="$${local_ip_v4}"/>
<param name="sip-ip" value="$${local_ip_v4}"/>
<!-- RTP 端口范围(语音数据传输端口)-->
<param name="rtp-start-port" value="16384"/>
<param name="rtp-end-port" value="32768"/>
<!-- 编解码器优先级 -->
<param name="inbound-codec-prefs" value="OPUS,G722,PCMU,PCMA"/>
<param name="outbound-codec-prefs" value="OPUS,G722,PCMU,PCMA"/>
</settings>
</profile>
网络配置说明 🌐:
- SIP 端口 5060:用于信令(建立通话)
- RTP 端口 16384-32768:用于传输语音数据
- 防火墙记得开放这些端口! 🔥
# Ubuntu/Debian 开放端口
sudo ufw allow 5060/udp
sudo ufw allow 16384:32768/udp
# CentOS/RHEL 开放端口
sudo firewall-cmd --permanent --add-port=5060/udp
sudo firewall-cmd --permanent --add-port=16384-32768/udp
sudo firewall-cmd --reload
🎮 第六章:实战应用 - 让我们打个电话吧!
场景一:用软电话打内部电话 📱
步骤 1:下载 SIP 客户端
推荐以下软电话(免费):
- Windows/Mac/Linux:Zoiper、MicroSIP、Linphone
- iOS:Linphone、Zoiper
- Android:Linphone、Zoiper
- 网页版:JsSIP(需要 WebRTC)
步骤 2:配置 SIP 账号
以 Zoiper 为例:
┌─────────────────────────────┐
│ Zoiper 账号配置 │
├─────────────────────────────┤
│ 用户名: 1001 │
│ 密码: mypassword123 │
│ 域/主机: 192.168.1.100 │ ← FreeSWITCH 服务器 IP
│ 传输: UDP │
│ 端口: 5060 │
└─────────────────────────────┘
步骤 3:注册并测试
- 注册成功标志:软电话显示"已注册"或绿色图标 ✅
- 拨打测试号码:
- 9196:回声测试(你说啥它重复啥)
- 9195:播放保持音乐
- 分机互拨:注册多个分机(1001、1002),互相拨打
场景二:搭建多人电话会议 🎤
步骤 1:配置会议室
编辑 /usr/local/freeswitch/conf/autoload_configs/conference.conf.xml:
<profile name="default">
<param name="domain" value="$${domain}"/>
<param name="rate" value="16000"/> <!-- 采样率 -->
<param name="interval" value="20"/>
<param name="energy-level" value="300"/> <!-- 静音检测 -->
<!-- 会议室配置 -->
<param name="caller-controls" value="default"/>
<param name="moderator-controls" value="default"/>
<param name="comfort-noise" value="true"/>
</profile>
步骤 2:添加会议室号码
在 dialplan/default.xml 中添加:
<!-- 会议室:拨打 3000 进入第一会议室 -->
<extension name="conference_room">
<condition field="destination_number" expression="^(3\d{3})$">
<action application="answer"/>
<action application="conference" data="$1@default"/>
</condition>
</extension>
步骤 3:使用会议室
- 多个分机拨打 3000
- 进入同一个会议室
- 可以同时讲话,实现多人通话
会议控制命令 🎛️:
- 按 0:静音/取消静音
- 按 #:挂断离开
- **按 ***:锁定/解锁会议室
场景三:搭建 IVR 语音菜单 🎧
什么是 IVR?
就是你打 10086 听到的"查话费请按 1,查流量请按 2"那种语音菜单!
步骤 1:准备语音文件
# 录制或下载语音提示文件,放到这个目录:
/usr/local/freeswitch/sounds/en/us/callie/
步骤 2:创建 IVR 菜单
编辑 /usr/local/freeswitch/conf/autoload_configs/ivr.conf.xml:
<menu name="customer_service"
greet-long="sounds/welcome.wav"
greet-short="sounds/choose_option.wav"
timeout="10000"
max-failures="3">
<!-- 按 1 转人工客服 -->
<entry action="menu-exec-app"
digits="1"
param="transfer 1000 XML default"/>
<!-- 按 2 查询余额 -->
<entry action="menu-exec-app"
digits="2"
param="lua /usr/local/freeswitch/scripts/check_balance.lua"/>
<!-- 按 9 返回上级菜单 -->
<entry action="menu-top" digits="9"/>
<!-- 按 0 重复菜单 -->
<entry action="menu-repeat" digits="0"/>
</menu>
步骤 3:添加 IVR 入口
在拨号计划中添加:
<extension name="customer_service_ivr">
<condition field="destination_number" expression="^6000$">
<action application="answer"/>
<action application="sleep" data="1000"/>
<action application="ivr" data="customer_service"/>
</condition>
</extension>
现在拨打 6000 就能体验自己的 IVR 菜单了!🎉
场景四:连接外部电话(拨打真实手机号)📲
步骤 1:注册 SIP 中继服务商
你需要找一家 VoIP 服务商(类似"云电话服务"),比如:
- 国外:Twilio、Vonage、Plivo
- 国内:阿里云号码隐私保护、腾讯云语音通话
步骤 2:配置 SIP 网关
在 /usr/local/freeswitch/conf/sip_profiles/external/ 创建网关配置:
<include>
<gateway name="my_voip_provider">
<param name="username" value="your_username"/>
<param name="password" value="your_password"/>
<param name="realm" value="sip.provider.com"/>
<param name="proxy" value="sip.provider.com"/>
<param name="register" value="true"/>
</gateway>
</include>
步骤 3:配置外呼拨号规则
<!-- 拨打手机号:加前缀 9 -->
<extension name="outbound_call">
<condition field="destination_number" expression="^9(1[3-9]\d{9})$">
<action application="bridge" data="sofia/gateway/my_voip_provider/$1"/>
</condition>
</extension>
现在拨打 913812345678 就能呼叫真实手机了!📞
🚀 第七章:高级玩法 - 解锁隐藏技能
技能 1:通话录音 🎙️
<!-- 在拨号计划中添加 -->
<action application="set" data="RECORD_STEREO=true"/>
<action application="record_session" data="/var/recordings/${uuid}.wav"/>
录音文件自动保存到 /var/recordings/ 目录。
技能 2:来电弹屏(CTI)💻
使用 FreeSWITCH Event Socket 监听来电事件:
# Python 示例
from eventsocket import EventSocket
es = EventSocket()
es.connect('localhost', 8021, 'ClueCon') # 默认密码
es.events('plain', 'CHANNEL_CREATE')
while True:
event = es.recv_event()
caller = event['Caller-Caller-ID-Number']
print(f"来电:{caller}")
技能 3:WebRTC 网页通话 🌐
配置 Verto 模块实现网页端通话(就像微信网页版语音通话):
# 启用 mod_verto
sudo fs_cli
freeswitch> load mod_verto
配置文件 /usr/local/freeswitch/conf/autoload_configs/verto.conf.xml:
<profile name="default">
<param name="bind-local" value="0.0.0.0:8081"/>
<param name="secure-bind-local" value="0.0.0.0:8082"/>
<param name="enable-text" value="true"/>
</profile>
技能 4:呼叫中心队列 📞
配置呼叫中心模块:
<!-- /usr/local/freeswitch/conf/autoload_configs/callcenter.conf.xml -->
<queue name="support">
<param name="strategy" value="longest-idle-agent"/>
<param name="moh-sound" value="$${hold_music}"/>
<param name="time-base-score" value="queue"/>
<param name="max-wait-time" value="60"/>
<param name="max-wait-time-with-no-agent" value="30"/>
</queue>
<!-- 添加客服坐席 -->
<agent name="agent1001" type="callback" contact="user/1001"/>
技能 5:语音识别(ASR)与合成(TTS)🤖
<!-- 使用 Google TTS 播报文本 -->
<action application="speak" data="tts_commandline|google|你好,欢迎致电客服中心"/>
<!-- 使用语音识别 -->
<action application="detect_speech" data="unimrcp {start-input-timers=false}builtin:grammar/boolean?language=en-US"/>
🐛 第八章:常见问题 - 踩坑指南
问题 1:无法注册 SIP 账号 ❌
症状:软电话显示"注册失败"或"401 未授权"
解决方案:
# 1. 检查用户名密码是否正确
sudo cat /usr/local/freeswitch/conf/directory/default/1001.xml
# 2. 检查 FreeSWITCH 是否运行
sudo systemctl status freeswitch
# 3. 检查防火墙
sudo ufw status
# 4. 查看日志
tail -f /usr/local/freeswitch/log/freeswitch.log
问题 2:能注册但无法通话 📵
症状:电话接通了,但双方都听不到声音
原因:RTP 端口被防火墙阻挡
解决方案:
# 开放 RTP 端口范围
sudo ufw allow 16384:32768/udp
# 检查 NAT 配置(公网服务器)
# 编辑 vars.xml,设置正确的公网 IP
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=YOUR_PUBLIC_IP"/>
<X-PRE-PROCESS cmd="set" data="external_sip_ip=YOUR_PUBLIC_IP"/>
问题 3:编译安装时出错 🛠️
常见错误:
# 错误 1:找不到 libedit
sudo apt-get install libedit-dev
# 错误 2:找不到 SQLite
sudo apt-get install libsqlite3-dev
# 错误 3:内存不足
# 解决:添加 swap 交换空间
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
问题 4:CPU 占用过高 📈
排查步骤:
# 1. 查看当前通话数
sudo fs_cli -x "show channels"
# 2. 查看模块加载情况
sudo fs_cli -x "show modules"
# 3. 禁用不需要的模块
# 编辑 /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
<!-- <load module="mod_xxx"/> --> 注释掉不需要的模块
问题 5:日志文件占满磁盘 💾
解决方案:
# 配置日志轮转
sudo nano /etc/logrotate.d/freeswitch
/usr/local/freeswitch/log/*.log {
daily
rotate 7
compress
missingok
notifempty
sharedscripts
postrotate
/usr/bin/fs_cli -x "fsctl send_sighup" > /dev/null 2>&1
endscript
}
🎉 第九章:总结 - 你已经是 FreeSWITCH 达人了!
你学到了什么? 📚
恭喜你读完这份超长指南!现在你已经掌握了:
✅ FreeSWITCH 的基本概念和工作原理
✅ 如何安装和配置 FreeSWITCH
✅ 如何创建分机号和拨号计划
✅ 如何实现分机互拨、会议、IVR
✅ 如何连接外部电话网络
✅ 常见问题的排查和解决
接下来学什么? 🚀
想进一步深入?可以探索:
- Lua/JavaScript 脚本编程:自定义复杂的呼叫逻辑
- Event Socket:与其他系统集成(CRM、工单系统)
- mod_xml_curl:动态生成拨号计划和用户配置
- 集群部署:搭建高可用的多服务器架构
- WebRTC 深入:开发网页端的视频通话应用
推荐资源 📖
- 官方文档:freeswitch.org/confluence/
- GitHub 仓库:github.com/signalwire/…
- 社区论坛:freeswitch.org/confluence/…
- 中文社区:www.freeswitch.org.cn/
最后的话 💬
FreeSWITCH 就像一个巨大的乐高玩具,你可以用它搭建出:
- 企业内部电话系统 📞
- 呼叫中心 🏢
- 在线教育语音教室 📚
- 物联网设备通话功能 📡
- 智能客服机器人 🤖
可能性是无限的!关键是多动手实践,遇到问题不要慌,查日志、看文档、问社区,总能找到答案。
记住一句话:"Talk is cheap, show me the code!"
用 FreeSWITCH 的话说:"Talking is easy, show me the call!" 😄
🎁 附录:速查手册
FreeSWITCH CLI 常用命令
# 查看运行状态
freeswitch> status
# 重新加载 XML 配置
freeswitch> reloadxml
# 重启模块
freeswitch> reload mod_sofia
# 查看当前通话
freeswitch> show channels
# 查看已注册用户
freeswitch> sofia status profile internal reg
# 踢掉某个用户
freeswitch> sofia profile internal flush_inbound_reg 1001
# 查看呼叫统计
freeswitch> show calls
# 执行系统命令
freeswitch> system echo "hello"
# 退出控制台
freeswitch> /exit
常用测试号码
| 号码 | 功能 |
|---|---|
| 9196 | 回声测试(你说啥它重复啥) |
| 9195 | 播放保持音乐 |
| 5000 | 示例 IVR 菜单 |
| 3000-3999 | 会议室 |
| 4000 | 呼叫泊车(Call Park) |
默认端口列表
| 端口 | 协议 | 用途 |
|---|---|---|
| 5060 | UDP | SIP 信令(内部) |
| 5080 | UDP | SIP 信令(外部) |
| 8021 | TCP | Event Socket |
| 8081 | TCP | Verto(WebRTC) |
| 16384-32768 | UDP | RTP 媒体流 |
重要目录路径
| 路径 | 说明 |
|---|---|
/usr/local/freeswitch/conf/ | 配置文件 |
/usr/local/freeswitch/log/ | 日志文件 |
/usr/local/freeswitch/sounds/ | 语音文件 |
/usr/local/freeswitch/scripts/ | Lua/JS 脚本 |
/usr/local/freeswitch/recordings/ | 录音文件 |
🎊 彩蛋:FreeSWITCH 的趣闻
- 名字由来:FreeSWITCH 的"SWITCH"是"Softswitch"(软交换)的缩写
- 诞生时间:2006 年诞生,比微信还早 5 年!
- 创始人:Anthony Minessale II(江湖人称"Tony 大神")
- 代码量:超过 200 万行 C/C++ 代码
- 使用者:全球数百万企业和开发者在使用
- 默认密码梗:默认 ESL 密码是"ClueCon"(FreeSWITCH 年度大会名称)
版权声明:本文档基于 FreeSWITCH 官方文档和社区资料编写,遵循 MPL 1.1 许可证。
作者:AI 助手 🤖
最后更新:2025 年 10 月
文档版本:v1.0
🎉 恭喜你看到最后!现在去实践吧,祝你玩得开心!
有问题随时回来查阅这份指南!加油!💪记住:最好的学习方法就是动手实践!🛠️