您当前的位置:首页 > 电脑百科 > 网络技术 > 网络设置

freeswitch设置最大呼叫时长

时间:2022-06-16 12:23:00  来源:  作者:求真得真
freeswitch设置最大呼叫时长

 

概述

freeswitch 作为开源VOIP软交换,对经过fs的每一通电话都要有足够的控制。

在一通电话呼叫中,通话时长是一个重要的数据,客户在实际使用过程中,会有各种针对呼叫时长的场景需求。

本篇文档讨论fs如何设置最大呼叫时长,并从源代码的角度解析fs的实现原理。

 

环境

centos:CentOS release 7.0 (Final)或以上版本

freeswitch:v1.8.7

GCC:4.8.5

 

定时挂机

freeswitch提供了App接口“sched_hangup”,帮助使用者实现定时挂机功能,以达到设置最大呼叫时长的需求。

使用方法很简单,根据fs的官方文档,调用格式如下。

//在拨号计划中的调用格式
<action application="sched_hangup" data="[+]<time>[ <hangup_cause>]"/>
//作为API接口的调用格式
sched_hangup [+]<time> <uuid>[ <hangup_cause>]"

//实例,C++代码
//设置最大通话时长,默认55秒
ptmp = switch_core_get_variable("max_duration");
max_duration = (ptmp? ptmp: "+55");
if (SWITCH_STATUS_SUCCESS != switch_core_session_execute_application(session, "sched_hangup", max_duration))
{
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING,
"sched_hangup fAIled, max_duration = %sn", max_duration);
}

//实例,拨号计划
<action application="sched_hangup" data="+55 allotted_timeout"/>
<action application="sched_hangup" data="+55"/>
<action application="sched_hangup" data="55"/>

 

上面的拨号计划实例中,三种调用方式的参数不同,但是实际测试结果是一样的。

这一点和官方接口文档有差异。

Time in seconds.

If used with + then the call will be hung up after that number of seconds.

If used without + then the given value is considered the number of seconds since the epoch, 1970-01-01 00:00:00 UTC

 

接口描述中,“sched_hangup +55”和“sched_hangup 55”的结果应该是有区别的。

下面从源代码里找找看有什么地方做了特殊处理。

 

源代码

sched_hangup接口代码在mod_dptools模块,逻辑很简单,处理参数,调用“
switch_ivr_schedule_hangup”接口。

处理参数的过程中,对于参数1中“+”号的处理,代码如下

int sec = atol(argv[0] + 1);
if (*argv[0] == '+') {
	when = switch_epoch_time_now(NULL) + sec;
} else {
	when = atol(argv[0]);
}
//处理之后,when的值为”now+55”和“55”

 


switch_ivr_schedule_hangup接口代码在“switch_ivr_async.c”中,接口中直接调用“switch_scheduler_add_task”创建了一个定时任务,定时任务的逻辑就是对指定的呼叫挂机。

 

上面的逻辑中,都没有涉及执行时间的特殊处理,只剩下“switch_scheduler_add_task”创建任务接口,该接口在之前的文章“freeswitch的任务引擎实现分析”中有详细介绍。

//switch_scheduler_add_task,任务执行时间的特殊处理,小于now则+now
if (task_runtime < now) {
  container->task.repeat = (uint32_t)task_runtime;
  task_runtime += now;
}

这样处理之后,上面“sched_hangup”调用中“+55”和“55”俩种参数的结果就统一了。

 

总结

freeswitch的功能接口部分有很多实用的功能和代码流程,适合有fs深度定制需求的开发参考。

最后放一张简图,便于理解。定时任务的数据结构和处理实际上要比这个复杂。

 

freeswitch设置最大呼叫时长

 

 

空空如常

求真得真



Tags:freeswitch   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
CentOS 7 Freeswitch1.10.7 对接百度MrcpServer实现 TTS和ASR
通过百度MrcpServer实现简单的呼叫对话机器人。一、参考百度AI接入指南,创建应用,获取AppID、API Key、Secret Key,用于后续配置使用https://ai.baidu.com/ai-doc/REFERENCE/Ck...【详细内容】
2022-09-28  Search: freeswitch  点击:(683)  评论:(0)  加入收藏
freeswitch设置最大呼叫时长
概述freeswitch 作为开源VOIP软交换,对经过fs的每一通电话都要有足够的控制。在一通电话呼叫中,通话时长是一个重要的数据,客户在实际使用过程中,会有各种针对呼叫时长的场景需...【详细内容】
2022-06-16  Search: freeswitch  点击:(510)  评论:(0)  加入收藏
CentOS7下FreeSwitch1.8源码安装过程完整记录
1、yum 安装相关的依赖包yum install -y git gcc-c++ wget alsa-lib-devel autoconf automake bison broadvoice-devel bzip2 curl-devel db-devel e2fsprogs-devel flite-d...【详细内容】
2022-03-18  Search: freeswitch  点击:(544)  评论:(0)  加入收藏
▌简易百科推荐
iPhone或iPad用户必学:如何通过二维码快速共享Wi-Fi密码,简单又实用!
你有没有想过在不泄露网络密码的情况下与客人共享你的家庭或工作Wi-Fi?你肯定不是第一个这样想的人,我们很高兴地通知你,多亏了以下这个的变通方法,你现在可以使用iPhone或iPad...【详细内容】
2024-01-22  驾驭信息纵横科技    Tags:Wi-Fi密码   点击:(73)  评论:(0)  加入收藏
Windows 11网络连接问题诊断与解决小技巧,轻松解决上网问题!
在日常生活中,如果在连接网络时遇到问题,该如何排查解决?以下是一些故障排除步骤,可帮助你解决戴尔电脑上的无线网络连接问题。一起来看看吧!1、进行基本检查先进行一些基本检查...【详细内容】
2024-01-12  戴尔维修工程师    Tags:   点击:(59)  评论:(0)  加入收藏
配置Cisco AnyConnect VPN的5个步骤,缺一不可
随着越来越多的人远程工作或在混合环境中工作,IT部门和MSP在ASA防火墙上配置Cisco AnyConnect VPN的呼声越来越高。但是Cisco文档可能会非常混乱,这会导致一些组织的配置错误(...【详细内容】
2023-11-14  驾驭信息纵横科技    Tags:VPN   点击:(96)  评论:(0)  加入收藏
如何在Windows 10系统上设置DNS?
如果你正在使用Windows10操作系统,并且想要更好地控制你的网络服务,那么了解如何设置DNS(DomainNameSystem)是非常重要的。DNS是一种将域名解析为IP地址的服务,它能够让你在访问...【详细内容】
2023-11-10  高梦文    Tags:DNS   点击:(197)  评论:(0)  加入收藏
RabbitMQ发送和接收消息的几种方式
channel.basicQos(0, 1, false):0表示对消息的大小无限制,1表示每次只允许消费一条,false表示该限制不作用于channel。同时,我们采用手工ACK的方式,因为我们配置文件配置了 spri...【详细内容】
2023-11-08  程序猿羊  微信公众号  Tags:RabbitMQ   点击:(264)  评论:(0)  加入收藏
CISA发布十大常见网络安全错误配置
美国国家安全局(NSA)和网络安全与基础设施安全局(CISA)在本周五的报告中公布了其红队和蓝队在大型组织网络中发现的十大最常见网络安全误配置。NSA和CISA在安全建议中详细说...【详细内容】
2023-11-07  GoUpSec  微信公众号  Tags:CISA   点击:(262)  评论:(0)  加入收藏
Istio Envoy 配置解读,看这篇就够了
前面我们创建了一个 Gateway 和 VirtualService 对象,用来对外暴露应用,然后我们就可以通过 ingressgateway 来访问 Bookinfo 应用了。那么这两个资源对象是如何实现的呢?Gatew...【详细内容】
2023-11-07  k8s技术圈  微信公众号  Tags:Istio Envoy   点击:(129)  评论:(0)  加入收藏
RabbitMQ的四种交换机详解
交换机主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout。图片一、to...【详细内容】
2023-11-06  程序猿小杨  微信公众号  Tags:交换机   点击:(267)  评论:(0)  加入收藏
路由器配置NAT/UPNP/DMZ方法
常见路由器配置NAT(网络地址转换)、UPnP(通用即插即用)和DMZ(区域暴露)的方法可以根据不同的路由器品牌和型号有所不同,但通常会在路由器的管理界面中找到相关设置。以下是一般步骤...【详细内容】
2023-10-11  晴间多云  今日头条  Tags:路由器配置   点击:(423)  评论:(0)  加入收藏
路由器如何正确安装?后台设置一步即可接入宽带
现在的路由器不论安装还是后台设置都非常方便,但一些网友可能是没有详细了解过相关的知识,所以每次想要更换路由器或者新装路由器的时候并不知道如何安装路由器接入自家宽带,这...【详细内容】
2023-09-21  羽度非凡    Tags:路由器   点击:(303)  评论:(0)  加入收藏
站内最新
站内热门
站内头条