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 dialplan APPlication

freeswitch dialplan application

FreeSWITCH代码分析

什么是FreeSWITCH FreeSWITCH 是一个可扩展的开源跨平台的电话平台,支持音频、视频、文本或任何其他形式的媒体使用的协议的路由与交互。它于2006年成立。FreeSWITCH也提...
  • educast
  • educast
  • 2014年01月07日 21:40
  • 8638

linux下的Freeswitch,fusionpbx,以及对JAVA的ESL接口安装文档

linux下的Freeswitch,fusionpbx,以及对JAVA的ESL接口安装文档 1,fs安装 由于在公司内链接git较慢,采用了解压缩文档的安装方法 wgethttp://files.fr...

FreeSWITCH学习笔记 第一场 第八个镜头 API和App

FreeSWITCH的API和App简单介绍
  • ErErFei
  • ErErFei
  • 2017年10月27日 11:28
  • 99

freeswitch 回拨实例

实现: 回拨实例。 使用lua实现,主要用于熟悉originate命令。 调用示例: lua callback.lua 1377XXX4955 180XXXX9957 2345677 ...
  • sbvfhp
  • sbvfhp
  • 2014年10月18日 00:07
  • 2867

Freeswitch callback 回拨

ESL 执行 LUA脚本 写好脚本上传到目录  /usr/local/freeswitch/scripts 供 调用
  • gredn
  • gredn
  • 2014年10月29日 18:05
  • 1471

Freeswitch Api 之uuid_bridge

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

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

Radon变换理论介绍与matlab实现--经验交流

本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。 Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:freeswitch新增app接口
举报原因:
原因补充:

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