FreeSWITCH小结:呼叫的发起与跟踪
需求描述##
虽然现有的FreeSWITCH功能已经很强大,但是很多情况下,为了配合业务上的功能,还需要做一些定制开发。
有一个基本需求是:如何控制fs外呼,并跟踪外呼后的一系列状态。
解决方案##
下面我就把自己现有的解决方案跟大家分享下,以便抛砖引玉,引出大家更好的方案。
我的方案也简单,在呼叫之前,指定呼叫的uuid,然后根据该uuid跟踪呼叫到完整状态。
1.获取可用的通道UUID
所以说freeswitch考虑比较周到,连获取uuid的方法都提供了!
当然,你也可以使用自己到方式来生成uuid。不过,一旦uuid出现重复,可是会出现比较麻烦的问题,所以还是使用freeswitch的官方提供的方法比较靠谱。
命令如下:
create_uuid
该命令会返回一个可用的uuid。
2.发起呼叫###
无需多说,此处originate命令登场,不过和平时使用区别的地方是需要指定呼叫的uuid。
下面是两种指定方法,可选择性试用:
方案一:在呼叫时,指定A腿uuid
originate {origination_uuid=xxxxx}user/60401 60402
方案二:在呼叫时,同时指定A腿和B腿的UUID
originate {origination_uuid=xxxxx}user/60401 &bridge({origination_uuid=yyyyy}user/60402)
在使用该命令后,通过命令show channels就可看到两个新创建的通道和指定的通道uuid,xxxxx和yyyyy。
此处留给大家自己去验证了!
同时也感谢杜老大的书,这条命令是从他的书上学来的。
3.跟踪呼叫###
跟踪呼叫,说白了,其实很简单,只是有的人可能没留意到而已,就是利用FreeSWITCH的事件机制进行跟踪。关于事件如何订阅,不是这里的重点,略去不说。
下面先说说一些基本常识:
1、跟呼叫相关的通道事件有如下几个:
Channel_Create:通道创建事件
Channel_Progress:通道振铃事件
Channel_Answer:通道应答事件
Channel_Bridge:通道桥接事件
Channel_Hangup:通道挂断事件
2、通道事件的Unique_ID字段与我们呼叫前指定的UUID相同,这个也是我们能跟踪的前提。
有了上面两个条件之后,跟踪就变得简单和美妙起来!在呼叫开始前,将呼叫对象与uuid的对应关系存到数据库中,在收到不同的事件后,根据事件的Unique_ID找到对应的呼叫对象,然后更新它的呼叫状态即可。
4.注意事项###
1)Channel_Create事件比较特殊,含有的内容比较少,所以处理起来要特别注意。
该事件是在呼叫开始Routing之前就被抛出来,换句话说,你在dialplan中定义的任何变量都不会被读取到。如果这点没注意到的话,会导致判断逻辑出现问题。
2)Channel_Bridge事件中同时含有A腿和B腿的UUID,具体字段我是不打了,感兴趣的可以自己看看
FreeSWITCH小结:呼叫的发起与跟踪的更多相关文章
- FreeSWITCH小结:关于export的原理介绍及应用
FreeSWITCH小结:关于export的原理介绍及应用 Export原理 普通export用法 在dialplan中经常会用到export,如下所示: <action application ...
- FreeSWITCH在呼叫失败的情况下播放语音提示
看到好多网友问到这个问题.一般我们在打电话时会听到“您拨的电话正在通话中,请稍后再拨....”,或“电话无应答...”之类的提示,我们在 freeswitch 里也可以这样做. 其实很简单,默认的配置 ...
- FreeSWITCH小结:关于sip的UDP、TCP与MTU
1.关于SIP的UDP与MTU的关系 如果sip消息的大小超过了MTU,则有可能被网络中的某一节点分片,而UDP处理分片会有很大的问题,从而导致sip消息传输失败.要解决该问题的话,两种方案: 1)减 ...
- SIP协议 会话发起协议(一)
会话发起协议(SIP)是VoIP技术中最常用的协议之一.它是一种应用层协议,与其他应用层协议协同工作,通过Internet控制多媒体通信会话. SIP - 概述 以下是有关SIP的几点注意事项 - S ...
- 【转】SIP协议 会话发起协议
转自:https://www.cnblogs.com/gardenofhu/p/7299963.html 会话发起协议(SIP)是VoIP技术中最常用的协议之一.它是一种应用层协议,与其他应用层协议协 ...
- 基于OpenSIPS做注册服务下,场景A打B,一方发起BYE挂断后收到500,另一方无法挂断的问题
基于OpenSIPS做注册服务下,场景A打B,一方发起BYE挂断后收到500,另一方无法挂断的问题 最近在工作中遇到一个看似很奇怪的,排除起来很费劲,但最后的解决方式又及其简单的问题,下面我们 ...
- [百科] - SIP(会话发起协议)
SIP(会话发起协议)SIP是类似于HTTP的基于文本的协议.SIP可以减少应用特别是高级应用的开发时间.由于基于IP协议的SIP利用了IP网络,固定网运营商也会逐渐认识到SIP技术对于他们的深远意义 ...
- 开源软交换系统 FreeSwitch 与 Asterisk 比较
Asterisk 与freeswitch都是流行的开源软交换服务器,Asterisk出现的比较早,大概在1999年开始此项目,应该是最流行的开源软交换服务器,整个社区上下游都已经很成熟. freesw ...
- PJSUA2开发文档--第七章 呼叫 Calls类
7 呼叫Calls 呼叫由Call类处理 7.1 子类化Call类 要使用Call类,应用程序应创建子类,如: class MyCall : public Call { public: MyCal ...
随机推荐
- js阻止浏览器、元素的默认事件与js阻止事件冒泡、阻止事件流
嵌套的div元素,如果父级和子元素都绑定了一些事件,那么在点击最内层子元素时可能会触发父级元素的事件,下面介绍一下js阻止默认事件与js阻止事件冒泡示例,大家参考使用吧 1. event.prev ...
- Eclipse调试远程服务器
原文:https://blog.csdn.net/fengshizty/article/details/45126737 Eclipse提供能调试远程服务器的功能,最近做微信开发,需要部署到远程服务器 ...
- Scut快速开发
1 开发环境 Scut Lib版本:5.2.3.2 需要安装的软件 a) IIS和消息队列(MSMQ) b) 数据库,Sql2005以上版本 c) V ...
- vue项目如何实现剪切板功能--vue-clipboard2
一.vue项目利用vue-clipboard2实现剪切板的功能 1.安装vue-clipboard2插件:cnpm install --save vue-clipboard2 2.main.js添加 ...
- JavaScript 中的不可变对象(Immutable Objects)
默认情况下,JavaScript 中的对象是可变的.我们可以更改原始值(字符串,数字等)和对象.我们来看看这个对象: let obj = { num: , obj: { content: " ...
- [Python爬虫] 之九:Selenium +phantomjs抓取活动行中会议活动(单线程抓取)
思路是这样的,给一系列关键字:互联网电视:智能电视:数字:影音:家庭娱乐:节目:视听:版权:数据等.在活动行网站搜索页(http://www.huodongxing.com/search?city=% ...
- 第八章:SCRT搭建ES搜索引擎步骤
1.打开SecureCRT工具,输入服务器IP.端口号,确认后根据提示输入账号密码. 2.进入后判断服务器是否安装过JDK(1.6.0以上版本), 输入命令:# java –version 3.如 ...
- Linux远程执行Windows机器任务
Linux远程执行Windows机器任务 近期测试人员提出需求需要在Linux下调用Windows系统下的cmd的命令完成自动构建和测试并生成测试报告. 环境: Windows Server2 ...
- idea 设置jetty进程jvm参数
/** * MyEclipse6.5通过Jetty跑Web应用时提示OutOfMemoryError: PermGen space的解决办法 * @see ---------------------- ...
- [ES6] 10. Array Comprehensions
ES6 decided that Array Comprehensions will not included in this version, ES7 will include this. Ther ...