微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

原文地址:https://www.jb51.cc/centos/382173.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。