freeswitch新增app接口

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),"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","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的彩铃声音了

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

相关文章

Centos下搭建性能监控Spotlight
CentOS 6.3下Strongswan搭建IPSec VPN
在CentOS6.5上安装Skype与QQ
阿里云基于centos6.5主机VPN配置
CentOS 6.3下配置multipah
CentOS安装、配置APR和tomcat-native