📞 FreeSWITCH:让你的电脑变身超级电话总机的魔法指南 🎩✨

143 阅读10分钟

适合人群:从小白到大神,只要你会用电脑,就能看懂!
作者寄语:这不是一篇枯燥的技术文档,而是一场有趣的语音通信冒险之旅!🚀


🎯 目录导航

  1. FreeSWITCH 是个啥?
  2. 工作原理:就像邮局寄信一样简单
  3. 核心架构:认识 FreeSWITCH 的"器官"
  4. 安装教程:手把手教你"养"一个 FreeSWITCH
  5. 基础配置:给你的"电话总机"装修装修
  6. 实战应用:让我们打个电话吧!
  7. 高级玩法:解锁隐藏技能
  8. 常见问题:踩坑指南
  9. 总结:你已经是 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 语音流)           │

核心概念解释 📚

  1. SIP(Session Initiation Protocol) = 通话邀请卡 💌

    • 就像你发送微信语音通话邀请,对方点击接受
    • SIP 负责"建立、修改、终止"通话会话
  2. RTP(Real-time Transport Protocol) = 实际语音数据包 🎵

    • 通话接通后,你说的话变成数据包传输
    • 就像视频流一样,实时传输语音
  3. 分机/Extension = 电话号码 📞

    • 每个用户有个编号(如 1001、1002)
    • 就像酒店房间号
  4. 网关/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-1999
  • application="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:注册并测试

  1. 注册成功标志:软电话显示"已注册"或绿色图标 ✅
  2. 拨打测试号码
    • 9196:回声测试(你说啥它重复啥)
    • 9195:播放保持音乐
  3. 分机互拨:注册多个分机(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:使用会议室

  1. 多个分机拨打 3000
  2. 进入同一个会议室
  3. 可以同时讲话,实现多人通话

会议控制命令 🎛️:

  • 按 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
✅ 如何连接外部电话网络
✅ 常见问题的排查和解决

接下来学什么? 🚀

想进一步深入?可以探索:

  1. Lua/JavaScript 脚本编程:自定义复杂的呼叫逻辑
  2. Event Socket:与其他系统集成(CRM、工单系统)
  3. mod_xml_curl:动态生成拨号计划和用户配置
  4. 集群部署:搭建高可用的多服务器架构
  5. WebRTC 深入:开发网页端的视频通话应用

推荐资源 📖

最后的话 💬

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)

默认端口列表

端口协议用途
5060UDPSIP 信令(内部)
5080UDPSIP 信令(外部)
8021TCPEvent Socket
8081TCPVerto(WebRTC)
16384-32768UDPRTP 媒体流

重要目录路径

路径说明
/usr/local/freeswitch/conf/配置文件
/usr/local/freeswitch/log/日志文件
/usr/local/freeswitch/sounds/语音文件
/usr/local/freeswitch/scripts/Lua/JS 脚本
/usr/local/freeswitch/recordings/录音文件

🎊 彩蛋:FreeSWITCH 的趣闻

  1. 名字由来:FreeSWITCH 的"SWITCH"是"Softswitch"(软交换)的缩写
  2. 诞生时间:2006 年诞生,比微信还早 5 年!
  3. 创始人:Anthony Minessale II(江湖人称"Tony 大神")
  4. 代码量:超过 200 万行 C/C++ 代码
  5. 使用者:全球数百万企业和开发者在使用
  6. 默认密码梗:默认 ESL 密码是"ClueCon"(FreeSWITCH 年度大会名称)

版权声明:本文档基于 FreeSWITCH 官方文档和社区资料编写,遵循 MPL 1.1 许可证。

作者:AI 助手 🤖
最后更新:2025 年 10 月
文档版本:v1.0


🎉 恭喜你看到最后!现在去实践吧,祝你玩得开心!
有问题随时回来查阅这份指南!加油!💪

记住:最好的学习方法就是动手实践!🛠️