使用freeSwitch

使用freeSwitch
Photo by Sung Jin Cho / Unsplash

FreeSWITCH 提供了多种方式来使用和管理,包括通过 配置文件 定制行为、使用 命令行工具fs_cli)、以及通过 API 和接口 进行编程操作。以下是如何使用和调用 FreeSWITCH 的具体方法:


1. 通过 SIP 客户端注册并测试

FreeSWITCH 默认支持 SIP 注册。可以通过以下方式进行测试:

配置 SIP 客户端

  1. 默认账号信息
    • 用户名:1000
    • 密码:1234(可在 /etc/freeswitch/directory/default/1000.xml 查看)
    • 服务器地址:FreeSWITCH 的 IP 地址
  2. 常用 SIP 客户端
    • 桌面客户端:Zoiper、MicroSIP。
    • 手机客户端:Zoiper、Linphone。
  3. SIP 注册步骤
    • 在客户端中输入用户名、密码、服务器地址。
    • 确保 FreeSWITCH 的 5060 端口开放并配置正确的防火墙。
  4. 拨号测试
    • 使用其他用户(如 1001)的账号进行注册。
    • 拨打分机号,例如 1001 -> 1000

2. 使用 FreeSWITCH 命令行接口(fs_cli

启动命令行接口

运行以下命令进入 FreeSWITCH 的 CLI(命令行界面):

sudo fs_cli

常用命令

重载配置

reloadxml

挂断所有通话

fsctl shutdown

查看活跃呼叫

show calls

查看 SIP 注册信息

sofia status

查看系统状态

status

3. 使用 FreeSWITCH 的 REST API

FreeSWITCH 内置了一个 Event Socket Layer (ESL) 接口,可以通过 REST API 调用。

启用 ESL 服务

重新加载配置:

reloadxml

确保 ESL 模块加载: 在 /etc/freeswitch/autoload_configs/event_socket.conf.xml 中,检查以下内容:

<configuration name="event_socket.conf" description="Socket Client">
    <settings>
        <param name="listen-ip" value="127.0.0.1"/>
        <param name="listen-port" value="8021"/>
        <param name="password" value="ClueCon"/>
    </settings>
</configuration>

修改 listen-iplisten-port 为合适值,默认密码为 ClueCon

使用 ESL 客户端连接

通过 netcat 测试:

nc 127.0.0.1 8021

输入密码进行认证:

auth ClueCon

4. FreeSWITCH 的 HTTP API

FreeSWITCH 支持通过 HTTP 接口调用命令。

启用 HTTP 服务

编辑 /etc/freeswitch/autoload_configs/http_cache.conf.xml

<configuration name="http_cache.conf" description="HTTP Cache">
    <settings>
        <param name="enable" value="true"/>
        <param name="http-port" value="8080"/>
        <param name="http-ip" value="0.0.0.0"/>
    </settings>
</configuration>

重新加载配置:

reloadxml

调用 HTTP API

示例请求:

curl -u ClueCon:ClueCon "http://<Freeswitch-IP>:8080/api/sofia_status"

5. 使用 FreeSWITCH 脚本语言

FreeSWITCH 支持多种脚本语言(如 Lua、JavaScript、Python)来控制和编排呼叫。

Lua 示例

重载拨号计划

reloadxml

拨号计划配置: 在 /etc/freeswitch/dialplan/default.xml 添加:

<extension name="hello">
    <condition field="destination_number" expression="^1234$">
        <action application="lua" data="hello.lua"/>
    </condition>
</extension>

创建脚本: 在 /usr/share/freeswitch/scripts/hello.lua 中添加:

session:answer()
session:streamFile("hello.wav")
session:hangup()

6. 自定义模块和扩展接口

FreeSWITCH 支持通过定制模块开发扩展功能:

  1. 开发 FreeSWITCH 模块
    • 编写模块代码。
    • 编译和安装。
    • 加载模块到 FreeSWITCH 中。
  2. 常见模块
    • mod_callcenter:呼叫中心。
    • mod_voicemail:语音邮件。
    • mod_conference:会议桥。

7. 其他资源和文档