freeswitch新增app接口

原创 2016年06月01日 17:34:27

1,  概述

freeswitch自带了许多app接口和api接口,可以满足常用的大部分需求,但是有些定制化需求仍然需要我们自己增加或修改当前接口

2,  环境

Centos:CentOS release 6.7 (Final)

Freeswitch:v1.6.5

3,  目的

原本的回拨流程:

呼叫1001用户

originate  {origination_uuid=1}user/1001  &echo()

1001 answer后呼叫1002用户

originate  {origination_uuid=2}user/1002  &echo()

1002answer后发送命令把1001和1002桥接起来

uuid_bridge  1  2

 

新的需求:

1002返回sip 183消息后,需要把1002的彩铃透传给1001

为了实现这一点,我们就需要在1002ring后,把1001和1002桥接起来

并且原本的流程中,originate1002到uuid_bridge之间的实现有些繁琐和冗余(因为&echo()的关系,需要收到answer和execute之后才能执行uuid_bridge,否则有可能桥接失败)

 

新的回拨流程:

呼叫1001用户

originate  {origination_uuid=1}user/1001  &echo()

1001 answer后呼叫1002用户,并把1001和1002桥接起来

originate  {origination_uuid=2}user/1002  &uuid_bridge(1,2)

 

新的问题:

originate 1002的时候,&后面需要的是一个app接口,但是uuid_bridge是一个api接口,不能这样调用

研究之后决定,新增一个实现uuid_bridge的功能的app接口,app_uuid_bridge()

 

4,  代码

修改fs1.6.5\src\mod\applications\mod_dptools\mod_dptools.c

#define APP_UUID_BRIDGE_SYNTAX "UUIDA UUIDB"

SWITCH_STANDARD_APP(app_uuid_bridge_function)

{

    char *uuida;

    char *uuidb;

 

char *mydata, *argv[2]= { 0 };

 

   switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,"app_uuid_bridge_function\n");

 

if (!zstr(data)&& (mydata = switch_core_session_strdup(session, data))) {

           switch_separate_string(mydata,',', argv, (sizeof(argv) / sizeof(argv[0])));

} else {

           switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),SWITCH_LOG_ERROR, "No uuid specified.\n");

           return;

}

 

uuida = argv[0];

uuidb = argv[1];

 

   switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,"app_uuid_bridge_function(UUIDA=%s, UUIDB=%s)\n", uuida, uuidb);

   

   switch_ivr_uuid_bridge(uuida, uuidb);

}

 

SWITCH_ADD_APP(app_interface, "app_uuid_bridge","app_uuid_bridge", "bridge by uuid",app_uuid_bridge_function, APP_UUID_BRIDGE_SYNTAX, SAF_SUPPORT_NOMEDIA);

 

5,  编译安装

cd  fs1.6.5/src/mod/applications/mod_dptools/

make

make install

 

6,  运行

因为mod_dptools是接口模块,无法unload,只能重启freeswitch

/usr/local/freeswitch/bin/freeswitch  -stop

/usr/local/freeswitch/bin/freeswitch  -nc

 

7,  测试

originate{origination_uuid=1}user/1001 &echo()

originate{origination_uuid=2}user/1002 &app_uuid_bridge(1,2) 

1002ring之后,1001就可以听到1002的彩铃声音了

 

如果有更好的方法或建议,请留言,谢谢

Freeswitch Api 之uuid_bridge

uuid_bridge    uuid_bridge与App的bridge不同,只产生一次CHANNEL_BRIDGE事件,并且只在a-leg上产生CHANNEL_BRIDGE事件...
  • okhelp
  • okhelp
  • 2017年02月06日 15:58
  • 980

FreeSWITCH dialplan APPlication

freeswitch dialplan application
  • u010317005
  • u010317005
  • 2016年07月17日 23:52
  • 5286

基于freeswitch+linphone客户端开发对讲系统

基于freeswitch+linphone客户端开发对讲系统基本思路:freeswitch开启conference call (3100), 并进行一些配置(例如,没有moh,刚刚进入时静音禁止视频等...
  • thrill008
  • thrill008
  • 2017年10月11日 14:55
  • 451

FreeSwitch FsClient 客户端

  • 2014年08月31日 13:34
  • 5.87MB
  • 下载

FreeSwitch FsClient 客户端

  • 2014年11月10日 19:02
  • 5.87MB
  • 下载

Freeswitch for windows(客户端、服务器打包)

  • 2014年01月26日 15:07
  • 36.24MB
  • 下载

多台 FreeSWITCH 服务器级联

其实,只要你吃透了前些章节的内容,做 FreeSWITCH 级联是没有任何问题的。但这个问题还常常被众网友问到,我就索性再写一篇。 双机级联 假设你有两台 FreeSWITCH 机器, 分...
  • educast
  • educast
  • 2014年01月07日 21:56
  • 2932

freeswitch软件架构

转自http://zhshquan.blog.163.com/blog/static/1041432011315112257603/ FreeSWITCH 使用线程模型来处理并发请求,每个连接都...
  • wtswjtu
  • wtswjtu
  • 2014年06月09日 09:23
  • 1316

freeswitch 使用外部directory 动态加载配置信息 2

FreeSwitch使用Lua动态创建 directory 数据 1.配置lua.conf.xml 让lua脚本接管directory ...
  • gredn
  • gredn
  • 2014年10月29日 17:46
  • 1230

freeswitch 高级主题之 提高系统并发

freeswitch 出身时就以高性能著称,尤其是在做为sip 媒体服务器时,但是具体性能根据实际使用环境差异很大,经常有人问freeswitch性能有多高,这是一个很难回答的问题 因为一个小的使用...
  • perfectpdl
  • perfectpdl
  • 2016年03月30日 11:03
  • 2969
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:freeswitch新增app接口
举报原因:
原因补充:

(最多只允许输入30个字)