首页> 中国专利> 基于中间件和FreeSwitch的通信建立方法、通信方法及系统

基于中间件和FreeSwitch的通信建立方法、通信方法及系统

摘要

本发明涉及通信技术领域,公开了一种基于中间件和FreeSwitch的通信建立方法、通信方法及系统,旨在解决现有基于FreeSwitch的通信方法存在开发困难以及线程阻塞的问题,主要方案包括:呼叫系统启动后创建中间件实例;所述中间件实例创建一个处理连接的线程池,以及一个非阻塞的TCP连接通道;所述中间件实例创建启动类作为组件容器,连接所述线程池和TCP连接通道,使得该线程池对TCP连接通道进行监听;所述启动类创建方法句柄,并加载所需的参数连接FreeSwitch;所述中间件实例订阅监听事件并启动监听器开始对FreeSwitch的通话事件进行监听。本发明减少了程序设计的复杂性,适用于呼叫系统。

著录项

  • 公开/公告号CN113286380A

    专利类型发明专利

  • 公开/公告日2021-08-20

    原文格式PDF

  • 申请/专利权人 四川优家库信息技术有限公司;

    申请/专利号CN202110816905.6

  • 发明设计人 刘国伟;卢弘一;邹岭琨;

    申请日2021-07-20

  • 分类号H04W76/10(20180101);H04L29/08(20060101);H04L29/06(20060101);

  • 代理机构51124 成都虹桥专利事务所(普通合伙);

  • 代理人陈春光

  • 地址 610000 四川省成都市中国(四川)自由贸易试验区成都高新区天府五街200号4栋8层802室

  • 入库时间 2023-06-19 12:16:29

说明书

技术领域

本发明涉及通信技术领域,具体来说涉及一种基于中间件和FreeSwitch的通信建立方法、通信方法及系统。

背景技术

FreeSwitch是一个电话的软交换解决方案,包括一个软电话和软交换机用以提供语音和聊天的产品驱动,FreeSwitch广泛运用于交换机引擎、PBX、多媒体网关以及多媒体服务器等领域。FreeSwitch作为一款开源软交换平台,功能强大且提供二次开发功能易于扩展,相较于其他传统的软交换平台(如asterisk),具有并发高,caps处理强,ivr处理灵活等特点,在一些中大型语音场景应用较多。

FreeSwitch在呼叫系统中可作为信令服务器,转发服务器等提供网络电话功能。目前呼叫业务系统与FreeSwitch对接主要有两种方式:

第一种是通过开源TCP客户端调用FreeSwitch,开发FreeSwitch应用和实现外呼流程控制,这种方式需要企业针对各自的场景开发属于自己的cti server,但开源TCP客户端年代久远,代码不易理解和二次开发,且技术实现采用了同步阻塞通道连接FreeSwitch,即单线程客户端,其指令执行是串行的而不是并行的,任何读写操作都会阻塞当前线程,直到完成才允许其他操作。例如,现在要实现一个需求,要求在电话呼出的同时播放一段通话前音乐,该客户端由于是单线程模型,只有等电话呼出指令到达FreeSwitch,并且FreeSwitch返回执行成功才能执行下一个播放音乐指令。

第二种是FreeSwitch连接业务数据库,并在业务数据库中编写嵌入式开发lua脚本执行业务逻辑。这种方式相当于在FreeSwitch一侧监听呼叫流程,触发业务规则再执行数据库操作。这种方式编写代码量大,业务对象与FreeSwitch高度耦合,又因为没有建立业务系统和FreeSwitch的双向通信,无法由业务系统给FreeSwitch发送操作指令。

发明内容

本发明旨在解决现有基于FreeSwitch的通信方法存在开发困难以及线程阻塞的问题,提出一种基于中间件和FreeSwitch的通信建立方法、通信方法及系统。

本发明解决上述技术问题所采用的技术方案是:

第一方面,本发明提出一种基于中间件和FreeSwitch的通信建立方法,应用于呼叫系统,包括以下步骤:

步骤1、呼叫系统启动后创建中间件实例,所述中间件实例携带有连接FreeSwitch所需的参数,中间件实例中包括事件回调执行器,所述事件回调执行器用于在监听到通话事件之后执行相应的业务逻辑;

步骤2、所述中间件实例创建一个处理连接的线程池,以及一个非阻塞的TCP连接通道;

步骤3、所述中间件实例创建启动类作为组件容器,连接所述线程池和TCP连接通道,使得该线程池对TCP连接通道进行监听;

步骤4、所述启动类创建方法句柄,并加载连接FreeSwitch所需的参数连接FreeSwitch,所述方法句柄为处理由FreeSwitch发送的消息的方法;

步骤5、所述中间件实例订阅FreeSwitch监听事件并启动监听器开始对FreeSwitch的通话事件进行监听。

进一步地,所述步骤4之后还包括:

所述FreeSwitch向中间件实例异步通知连接结果,所述中间件实例判断是否收到连接成功的消息,若是,则向FreeSwitch发送认证指令,执行FreeSwitch认证;

所述FreeSwitch向中间件实例异步通知认证结果,所述中间件实例判断是否在第一预设时间段内收到认证通过的消息,若是,则进入步骤5,否则,返回认证过程超时。

进一步地,所述中间件实例通过原子操作判断是否在第一预设时间段内收到认证通过的消息。

进一步地,所述步骤5之后还包括:

设置中间件实例的自动重连和心跳机制,具体包括:中间件实例根据预设周期向FreeSwitch发送心跳事件,FreeSwitch收到心跳事件后向中间件实例返回该心跳事件,若中间件实例在第二预设时间段内没有收到心跳事件,则自动重连。

进一步地,所述通话事件包括:呼叫开始事件和挂断事件,所述呼叫开始事件中至少包含被叫号码。

进一步地,所述事件回调执行器用于在监听到通话事件之后执行相应的业务逻辑包括:

所述事件回调执行器用于在监听到FreeSwitch的呼叫开始事件后,对被叫号码执行业务校验,若校验通过,则不执行操作,否则,向FreeSwitch发送挂断指令,所述业务校验至少包括:校验被叫号码是否为黑名单用户和空号,以及主叫号码或被叫号码的呼叫频次是否超标。

进一步地,所述事件回调执行器用于在监听到通话事件之后执行相应的业务逻辑还包括:

所述事件回调执行器用于在监听到FreeSwitch的挂断事件后,判断是否为被叫挂断,若是,则向FreeSwitch发送播放挂断彩铃的指令。

第二方面,本发明还提出一种基于中间件和FreeSwitch的通信系统,所述通信系统采用上述基于中间件和FreeSwitch的通信建立方法建立。

第三方面,本发明还提出一种基于中间件和FreeSwitch的通信方法,应用于上述基于中间件和FreeSwitch的通信系统,所述通信方法包括以下步骤:

中间件实例中的事件回调执行器在监听到FreeSwitch的呼叫开始事件后,对被叫号码执行业务校验,若校验通过,则不执行操作,否则,向FreeSwitch发送挂断指令,所述业务校验至少包括:校验被叫号码是否为黑名单用户和空号。

进一步地,还包括:

中间件实例中的事件回调执行器在监听到FreeSwitch的挂断事件后,判断是否为被叫挂断,若是,则向FreeSwitch发送播放挂断彩铃的指令。

本发明的有益效果是:本发明所述的基于中间件和FreeSwitch的通信建立方法、通信方法及系统,将中间件作为组件容器跟随业务系统启动,建立业务系统和FreeSwitch的双向通道,通过中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少了程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。同时也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。此外,通过建立非阻塞的TCP连接通道实现中间件和FreeSwitch的异步非阻塞连接,避免了线程阻塞,解决了高并发呼叫应用场景中的系统负载问题。

附图说明

图1为本发明实施例所述的基于中间件和FreeSwitch的通信建立方法的时序示意图;

图2为本发明实施例所述的基于中间件和FreeSwitch的通信方法的一种示意图;

图3为本发明实施例所述的基于中间件和FreeSwitch的通信方法的另一种示意图。

具体实施方式

下面将结合附图对本发明的实施方式进行详细描述。

本发明旨在解决现有基于FreeSwitch的通信方法存在开发困难以及线程阻塞的问题,提出一种基于中间件和FreeSwitch的通信建立方法、通信方法及系统,应用于呼叫系统,其主要的方案包括:呼叫系统启动后创建中间件实例,所述中间件实例携带有连接FreeSwitch所需的参数,中间件实例中包括事件回调执行器,所述事件回调执行器用于在监听到通话事件之后执行相应的业务逻辑;所述中间件实例创建一个处理连接的线程池,以及一个非阻塞的TCP连接通道;所述中间件实例创建启动类作为组件容器,连接所述线程池和TCP连接通道,使得该线程池对TCP连接通道进行监听;所述启动类创建方法句柄,并加载连接FreeSwitch所需的参数连接FreeSwitch,所述方法句柄为处理由FreeSwitch发送的消息的方法;所述中间件实例订阅FreeSwitch监听事件并创建监听器开始对FreeSwitch的通话事件进行监听。

具体而言,当呼叫系统启动后创建中间件实例,该中间件实例中包括:事件回调执行器、创建监听器的方法、连接FreeSwitch的方法、断开连接FreeSwitch的方法、检查是否连接上FreeSwitch的方法以及发送指令给FreeSwitch的方法,中间件实例创建后执行以下流程连接FreeSwitch:创建线程池、非阻塞的TCP连接通道和启动类,连接线程池和TCP连接通道,让线程池监听此通道,启动类创建方法句柄,然后加载连接FreeSwitch所需的参数连接FreeSwitch,最后中间件实例订阅FreeSwitch监听事件并创建监听器开始对FreeSwitch的通话事件进行监听,至此完成通信系统的建立。当监听到FreeSwitch的通话事件后,通过事件回调执行器来执行相应的业务逻辑。

实施例

本发明实施例所述的基于中间件和FreeSwitch的通信建立方法,应用于呼叫系统,如图1所示,包括以下步骤:

步骤1、呼叫系统启动后创建中间件实例,所述中间件实例携带有连接FreeSwitch所需的参数,中间件实例中包括事件回调执行器,所述事件回调执行器用于在监听到通话事件之后执行相应的业务逻辑;

其中,中间件实例还包括:创建监听器的方法、连接FreeSwitch的方法、断开连接FreeSwitch的方法、检查是否连接上FreeSwitch的方法以及发送指令给FreeSwitch的方法,在通信建立的过程中,中间件实例会调用相应的方法来完成相应的操作。

步骤2、所述中间件实例创建一个处理连接的线程池,以及一个非阻塞的TCP连接通道;

步骤3、所述中间件实例创建启动类作为组件容器,连接所述线程池和TCP连接通道,使得该线程池对TCP连接通道进行监听;

步骤4、所述启动类创建方法句柄,并加载连接FreeSwitch所需的参数连接FreeSwitch,所述方法句柄为处理由FreeSwitch发送的消息的方法;

当启动类加载连接FreeSwitch所需的参数连接FreeSwitch后,FreeSwitch向中间件实例异步通知连接结果,所述中间件实例判断是否收到连接成功的消息,若是,则调用发送指令给FreeSwitch的方法,向FreeSwitch发送认证指令,执行FreeSwitch认证;

为了避免判断认证是否完成的操作被线程调度打断,本实施例中,所述中间件实例可以通过原子操作(atomic operation)判断是否在第一预设时间段内收到认证通过的消息。原子操作不会被线程调度机制打断,原子操作一旦开始,就一直运行到结束,中间不会换到另一个线程。其中,第一预设时间段根据实际情况设置。

当中间件实例向FreeSwitch发送认证指令后,所述FreeSwitch向中间件实例异步通知认证结果,所述中间件实例判断是否在第一预设时间段内收到认证通过的消息,若是,则进入步骤5,否则,返回认证过程超时。

步骤5、所述中间件实例订阅FreeSwitch监听事件并创建监听器开始对FreeSwitch的通话事件进行监听。

为了避免中间件实例和FreeSwitch断线而对通信产生影响,本实施例还包括:设置中间件实例的自动重连和心跳机制,具体包括:中间件实例根据预设周期向FreeSwitch发送心跳事件,FreeSwitch收到心跳事件后向中间件实例返回该心跳事件,若中间件实例在第二预设时间段内没有收到心跳事件,则自动重连。其中,预设周期和第二预设时间段根据实际情况设置。

本实施例中,所监听的FreeSwitch的通话事件包括:呼叫开始事件和挂断事件,所述呼叫开始事件中至少包含被叫号码。

如图2所示,所述中间件实例的事件回调执行器在监听到FreeSwitch的呼叫开始事件后,对被叫号码执行业务校验,若校验通过,则不执行操作,否则,向FreeSwitch发送挂断指令,所述业务校验至少包括:校验被叫号码是否为黑名单用户和空号,以及主叫号码或被叫号码的呼叫频次是否超标。具体地,在监听到FreeSwitch的呼叫开始事件后,判断被叫号码是否为黑名单用户或空号,以及主叫号码和被叫号码的呼叫频次是否超标,若其中一项是,则向FreeSwitch发送挂断指令,FreeSwitch收到挂断指令后挂断。

如图3所示,所述事件回调执行器在监听到FreeSwitch的挂断事件后,判断是否为被叫挂断,若是,则向FreeSwitch发送播放挂断彩铃的指令。由于用户有时不知道被叫用户已经挂断,因此,本实施例当监听到被叫挂断后,向FreeSwitch发送播放挂断彩铃的指令,FreeSwitch收到播放挂断彩铃的指令后,向主叫用户播放挂断彩铃来提醒主叫用户对方已经挂断。

基于上述技术方案,本实施例还提出一种基于中间件和FreeSwitch的通信系统,所述通信系统采用上述基于中间件和FreeSwitch的通信建立方法建立。

基于上述技术方案,本实施例还提出一种基于中间件和FreeSwitch的通信方法,应用于上述基于中间件和FreeSwitch的通信系统,所述通信方法包括以下步骤:

中间件实例中的事件回调执行器在监听到FreeSwitch的呼叫开始事件后,对被叫号码执行业务校验,若校验通过,则不执行操作,否则,向FreeSwitch发送挂断指令,所述业务校验至少包括:校验被叫号码是否为黑名单用户和空号。以及中间件实例中的事件回调执行器在监听到FreeSwitch的挂断事件后,判断是否为被叫挂断,若是,则向FreeSwitch发送播放挂断彩铃的指令。

可以理解,由于本发明实施例所述的基于中间件和FreeSwitch的通信系统和方法是基于实施例所述基于中间件和FreeSwitch的通信建立方法建立的通信系统和方法,对于实施例公开的通信系统和通信方法而言,由于其与实施例公开的通信建立方法相对应,所以描述的较为简单,相关之处参见通信建立方法的部分说明即可。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号