从零开始搭建云呼叫中心之FreeSwitch实战

京东云开发者
• 阅读 47

一. 开篇

在当今快速发展的数字化时代,企业对于高效率、低成本、可扩展性强的通信解决方案的需求日益增长。云呼叫中心作为一种新兴的服务模式,正逐渐取代传统的硬件呼叫中心。FreeSwitch,作为一款强大的开源通信平台,因其卓越的性能和灵活性而成为搭建云呼叫中心的理想选择。

本文将从零开始,详细介绍如何使用FreeSwitch搭建一个简单的云呼叫中心。将一步步探讨FreeSwitch的安装、配置、以及如何利用其提供的丰富特性来实现一个云呼叫中心的核心功能。

无论您是通信技术的初学者,还是希望为您的企业寻找一种创新的通信解决方案,这篇文章都将为您提供一个全面的指南,帮助您快速入门并实践搭建一个基于FreeSwitch的云呼叫中心。

二. freeswitch简介

FreeSWITCH是一个自由开源的软交换。它采用Mozilla Public License授权协议,MPL是一个开源的软件协议。它的核心库libfreeswitch可以嵌入其它系统或产品中,也可以做一个单独的应用存在。

您可以使用freeswitch搭建一个简单的云呼叫中心,实现互联网中的语音通话,因为其符合标准的sip通信协议,你也可以使用一些开源的实现了标准SIP协议的客户端sdk,从而将语音呼叫集成在各种设备中,例如手机,或者别的嵌入式的设备中。你也可以通过对接能提供标准SIP呼叫的供应商,实现呼出到用户真实的手机号。

freeswitch还提供了一套非常易用的扩展模块,你可以使用他实现非常多的功能,包括控制通话路由,控制录音文件的生成,对通话进行拦截等。

freeswitch还允许你自行编写模块,从而实现你定制化的功能。

三. freeswitch典型功能

  • 在线计费、预付费功能
  • 电话路由服务器
  • 语音转码服务器
  • 多点会议服务器
  • IVR、语音通知服务器
  • VoiceMail服务器
  • PBX应用和软交换
  • 应用层网关
  • 防火墙/NAT穿越应用
  • 私有服务器
  • 第三方呼叫控制应用
  • 业务生成环境运行时引擎
  • 会话边界控制器
  • IMS中的S-CSCF/P-CSCF/I-CSCF
  • SIP网间互联网关
  • SBC及安全网关
  • 传真服务器、T.30到T.38网关

四. 通话建立过程

一通电话要能正常,主要分为两个过程,信令协商过程,媒体传输过程,而实际上媒体传输需要的一些信息是在信令协商过程中完成的,即先进行信令协商,后进行媒体传输。信令协商使用的是SIP协议进行,协商过程会SIP会携带SDP信息完成媒体过程的协商,而媒体传输的传输层使用的是RTP协议。

1. 协议层

从零开始搭建云呼叫中心之FreeSwitch实战

从上图可以看出,RTP协议和SIP协议都是应用层协议,都是基于TCP/UDP的,而SIP和RTP普遍大家都是基于UDP。

2. 相关术语

2.1 UAC/UAS

用户代理客户端(UAC)指的是启动呼叫流程的应用程序。用户代理服务器(UAS)则是接收端,它的主要职责是接收呼叫、将呼叫重定向或拒绝呼叫,并对传入的呼叫提供相应的回应。UAC和UAS这两个角色是相对的,当一个SIP设备(例如:VoIP软件)发起呼叫时,它扮演的是UAC;而当它接收到呼叫时,它则作为UAS。

2.2 Register Server

在SIP设备(无论软电话还是硬件电话)使用之前,它需要向一个服务器发送REGISTER请求以注册自己。这个负责处理REGISTER请求的服务器被称为注册服务器。

2.3 Location Server

位置服务器负责追踪用户的位置信息。位置服务器与注册服务器通常是逻辑上的区分,在实际应用中,它们常常由同一个服务器实体承担这两种角色。

2.4 Proxy Server

代理服务器的职责是接收SIP请求并进行转发。如有必要,它还可以解析和修改SIP信息,但不得干扰请求或会话的状态。

2.5 Redirect Server

重定向服务器的作用是将请求的地址映射到一个新的地址,并对请求进行重定向。它与代理服务器的不同之处在于,重定向服务器不会转发INVITE请求。

2.6 B2BUA

背靠背用户代理(B2BUA)是用户代理客户端(UAC)和用户代理服务器(UAS)的结合体。简而言之,它同时扮演两者的角色。FreeSWITCH就是一个典型的B2BUA实例。

2. 通话建立

            Alice         FreeSwitch        Bob
             |                |  INVITE F1   |
             |   INVITE F2    |<-------------|
             |<---------------|              |
             |   200 OK F3    |              |
             |--------------->|  200 OK F4   |
             |                |------------->|
             |                |    ACK F5    |
             |     ACK F6     |<-------------|
             |<---------------|              |
             |    Both way RTP Established   |
             |<=============================>|
             |     BYE F7     |              |
             |--------------->|   BYE F8     |
             |                |------------->|
             |                |   200 OK F9  |
             |    200 OK F10  |<-------------|
             |<---------------|              |

上图是一个使用了Freeswitch的最基础的sip建立过程,并且由Bob向Alice发起通话,最终由Alice发起挂断请求,实际上不管谁发起呼叫或者挂断请求,都只是方向不同而已。
当F1~F6完成后,双方即开始进行媒体流的传输,上面可以发现媒体流不通过freeswitch,这样freeswitch只用来处理信令,这种方式没法控制录音等。实际上freeswitch针对媒体处理非常灵活,支持三种方式:

媒体代理方式 描述 适用场景 性能
默认方式 媒体经过FreeSwitch,RTP的媒体流被FreeSwitch接收后转发,并且freeswitch控制编码协商,提供转码能力,支持录音、二次拨号等。 呼叫中心等应用 相对较低
代理模式(Proxy Media) 媒体通过FreeSwitch转发但不处理,不提供转码能力,只改动SDP中的IP,不控制SDP参数。终端需有一致编码,不支持录音、二次拨号。 处理NAT问题 比默认方式好
旁路模式(Bypass Media) 不转发也不处理媒体,FreeSwitch作为信令代理服务,媒体不经过给freeswitch,无录音、二次拨号功能。 信令代理 最高

五. freeswitch安装(windows)

5.1 下载

windows官方提供了编译好的二进制 MSI 安装程序,可以直接下载安装

下载地址: https://files.freeswitch.org/windows/installer/x64/

5.2 配置文件

freeswitch的配置文件非常重要,几乎所有的功能都离不开配置文件

默认安装路径为:C:\Program Files\FreeSWITCH
配置文件路径:C:\Program Files\FreeSWITCH\conf

conf/目录和文件 说明

5.3 配置文件修改

freeswitch默认配置已经非常完善了,我们只需要修改某些配置文件就能轻易完成配置

打开vars.xml文件,我们需要修改一些配置信息:

  1. 修改监听的本地的ipv4地址
    从零开始搭建云呼叫中心之FreeSwitch实战
  2. 修改external_sip_ip为本地ipv4地址
    从零开始搭建云呼叫中心之FreeSwitch实战

5.4 freeswitch启动

我们回到freeswitch安装目录C:\Program Files\FreeSWITCH,双击FreeSwitchConsole.exe即可启动,启动成功后会默认进入其控制台。

从零开始搭建云呼叫中心之FreeSwitch实战

我们也可以通过安装目录下的fs_cli.exe工具,直接进入控制台:

./fs_cli.exe -H 127.0.0.1 -P 8021

通过控制台我们可以输入一些命令,如:reloadxml,这个可以在我们修改配置文件后,让freeswitch重新加载配置文件里的内容

常见命令:

  • /exit 退出
  • console loglevel (0~7)越往上级别越大 修改日志级别
  • sofia global siptrace on/off 开启/关闭sip路径追踪
  • sofia status profile internal reg 获取已经注册的用户
  • show calls 展示当前正在进行的通话
  • status 展示当前freeswitch的状态

六. 客户端配置

6.1 Linphone安装

  1. 打开网址:https://www.linphone.org/
  2. 点击页面下面想要安装平台图标
  3. 下载后安装
    从零开始搭建云呼叫中心之FreeSwitch实战

6.2 Linphone配置

当我们的freeswitch启动后,我们配置两个Linphone,以达到两个客户端互相呼叫的目的。

  1. 打开软件
  2. 点击助手
    从零开始搭建云呼叫中心之FreeSwitch实战
  3. 点击使用一个SIP账户

从零开始搭建云呼叫中心之FreeSwitch实战
6. 配置

  • 用户名:默认分配1001~1019共20个账号(在C:\Program Files\FreeSWITCH\conf\directory\default下配置)
  • SIP域:123.456.789.78:5060
  • 密码:1234(在vars.xml中配置)
  • 交通工具:UDP
    从零开始搭建云呼叫中心之FreeSwitch实战
  1. 点击使用
  2. 点击右上角拨号盘输入分机号即可拨打
    从零开始搭建云呼叫中心之FreeSwitch实战

七. 进阶使用(EventSocket模块)

EventSocket是freeswitch提供的一个扩展模块,该模块允许用户使用各种语言,比如java,python等与freeswitch建立socket链接,从而控制freeswitch,或获取通话过程中产生的一些事件,从而进行扩展开发。

EventSocket支持两种模式,内联模式和外联模式,freeswitch支持将自己作为Server端等待client端连接,也可以支持由freeswitch作为client端主动连接server端。

内联模式:
从零开始搭建云呼叫中心之FreeSwitch实战

外联模式:
从零开始搭建云呼叫中心之FreeSwitch实战

java版本示例

我们只需要新建一个maven项目,引入以下依赖:

<dependency>
    <groupId>org.freeswitch.esl.client</groupId>
    <artifactId>org.freeswitch.esl.client</artifactId>
    <version>0.9.2</version>
</dependency>

然后新建一个类,使用以下代码即可监听所有事件:

package com.jd.cloud.freeswitch.esl.inbound;

import org.freeswitch.esl.client.IEslEventListener;
import org.freeswitch.esl.client.inbound.Client;
import org.freeswitch.esl.client.inbound.InboundConnectionFailure;
import org.freeswitch.esl.client.transport.event.EslEvent;

public class test {
    public static void main(String[] args) throws InterruptedException {
        Client client = new Client();
        try {
            //连接freeswitch
            client.connect("127.0.0.1", 8021, "ClueCon", 10);
            client.addEventListener(new IEslEventListener() {
                @Override
                public void eventReceived(EslEvent event) {
                    String eventName = event.getEventName();
                    System.out.println(eventName);
                }
                @Override
                public void backgroundJobResultReceived(EslEvent event) {
                    String jobUuid = event.getEventHeaders().get("Job-UUID");
                    System.out.println("异步回调:" + jobUuid);
                }
            });
            client.setEventSubscriptions("plain", "all");
            //这里必须检查,防止网络抖动时,连接断开
            if (client.canSend()) {
                System.out.println("连接成功,准备发起呼叫...");
                //(异步)向1000用户发起呼叫,用户接通后,播放音乐/tmp/demo1.wav
                String callResult = client.sendAsyncApiCommand("originate", "user/1000 &playback(/tmp/demo.wav)");
                System.out.println("api uuid:" + callResult);
            }
        } catch (InboundConnectionFailure inboundConnectionFailure) {
            System.out.println("连接失败!");
            inboundConnectionFailure.printStackTrace();
        }
    }
}

八. sip sdk使用

通过使用支持标准sip协议的sdk,我们可以使用任何嵌入式设备接入我们的平台,从而实现嵌入式设备呼出

SDK开发参考(liblinphone)SDK仓库 :

https://github.com/BelledonneCommunications/liblinphone

官方其他平台开发示例:https://github.com/BelledonneCommunications

点赞
收藏
评论区
推荐文章
Stella981 Stella981
2年前
FreeSWITCH协议参数之自定义sip header
一、主动发送1\.加入sip\_h\_前缀这样FreeSWITCH就能自动加上后面的扩展头。2\.示例<actionapplication"set"data"sip_h_XProductID123456"/这样后续的SIP呼叫消息会带上自定义头:XProductID:123456
Wesley13 Wesley13
2年前
UCKeFu 3.0.0 发布,增加呼叫中心平台功能
  UCKeFuv3.0.0发布,UCKeFu基于JAVA语言开发,是一个全渠道融合的客户支持服务平台,聚合企业内部多个客服渠道,帮助各种行业各种规模的企业建立完整客服体系。  通过将邮件、短信、电话语音、WebIM在线客服、微信、微博、H5页面、APP接口等多个渠道来源的客户服务请求与对话汇聚在一个管理平台,用统一的方式来响应和支
Stella981 Stella981
2年前
2019可信云大会 ZStack助力行业3本白皮书发布
 据IDC圈的数据显示,私有云市场是一个快速发展的市场,软件在整体市场中的占比虽低,却是在未来5年发展最快的一个市场。硬件是构建私有云平台不可缺少的基石,软件却是私有云平台的核心。软件的发展方向决定了硬件和服务的发展方向。未来数据中心的发展将朝着软件定义一切的方向发展。与全球私有云市场相比,中国的私有云市场在整体云市场的占比更大,发展也更为迅速。20
Stella981 Stella981
2年前
SAP CRM呼叫中心里Case ID的生成逻辑
进入SAP呼叫中心后,点击Case按钮,会生成自动生成一个新的CaseID。这个ID是根据什么逻辑生成的?!image(https://userimages.githubusercontent.com/5669954/50508247126132800abc11e984da35647c0c4f1b.png)CreatedbyWa
Stella981 Stella981
2年前
FreeSWITCH测试拨号规则实例
现在用户电话已经注册到 FreeSWITCH, 用户可以发起呼叫测试。跳到 TestingtheexampleDialplan 部分。FreeSWITCH 支持通过本地声卡或者外部的耳机连接到 FreeSWITCH 。可以编译可选模块 PortAudiomodule(mod\_portaudio) 启用这个功能。访问http://wiki.fr
可莉 可莉
2年前
2019可信云大会 ZStack助力行业3本白皮书发布
 据IDC圈的数据显示,私有云市场是一个快速发展的市场,软件在整体市场中的占比虽低,却是在未来5年发展最快的一个市场。硬件是构建私有云平台不可缺少的基石,软件却是私有云平台的核心。软件的发展方向决定了硬件和服务的发展方向。未来数据中心的发展将朝着软件定义一切的方向发展。与全球私有云市场相比,中国的私有云市场在整体云市场的占比更大,发展也更为迅速。20
摘星星的猫 摘星星的猫
2个月前
智能化数据中心代理开启网络新纪元
在当今数字化时代,数据被誉为新时代的石油,而数据中心则是这些宝贵资源的驻扎地。然而,随着网络的普及和信息化的进程,企业面临的网络挑战也愈加严峻。在这样的背景下,智能化的数据中心代理成为了企业实现网络安全、高效运营的重要一环。是指一种服务,通过在数据中心部署
Serverless函数计算介绍
随着互联网和移动互联网的快速发展,越来越多的应用程序需要具备高可用性、高扩展性和高性能等特点。而云计算作为一种新兴的计算模型,可以帮助开发者更快速、更高效地开发和部署应用程序。Serverless函数计算作为云计算的一种重要形式,正在逐渐成为云计算的主流模型。
云空间视频监控的可扩展性:适应不断增长的监控需求
随着企业和组织不断扩大,对视频监控系统的需求也在持续增长。云空间视频监控以其卓越的可扩展性,为满足这些日益增长的监控需求提供了理想的解决方案。本文旨在分享云视频监控的可扩展性优势,并提供从开发到部署的详细操作过程。
云服务器怎么搭建:从零到运行的基础指南
随着云计算技术的快速发展,云服务器已经成为企业和个人首选的计算服务。云服务器具有高性能、高可用性、安全可靠、灵活扩展等优势,能够满足各种大规模数据处理、存储、应用部署和管理等需求。本文将详细探讨云服务器的搭建,帮助读者从零开始构建并运行云服务器的基础设施。