JAVA FreeSWITCH ESL 开发指南

因为我从来没写过java程序,也不熟悉ava语法,所以代码可能无法编译,或者语法错误。请自行更正。

配置 event_socket.conf.xml

打开/usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml(yum apt安装是/etc/freeswitch/autoload_configs/event_socket.conf.xml)

<configuration name="event_socket.conf" description="Socket Client">
<settings>
<param name="nat-map" value="false"/>
<param name="listen-ip" value="0.0.0.0"/>
<param name="listen-port" value="8021"/>
<param name="password" value="ClueCon"/>
<param name="apply-inbound-acl" value="loopback.auto"/>
<!--<param name="stop-on-bind-error" value="true"/>-->
</settings>
</configuration>

  • 如果你的系统不支持IPV6把 listen-ip 设置为 “0.0.0.0”默认是”::”。
  • apply-inbound-acl 是配置允许哪些IP可以连接esl接口,默认是只允许本机。可以修改为”loopback.auto,你的IP/32”,如果你和FreeSWITCH服务器不在一个网络,请设置”loopback.auto,你的公网IP/32”,/32是掩码,比如你想192.168.1.0整个网段都可以访问,就是”192.168.1.0/24”。
  • 修改配置后,重启FreeSWITCH才会生效。

下载 java esl-client

git cloen https://github.com/esl-client/esl-client.git

连接esl

final Client inboudClient = new Client();
inboudClient.connect(new InetSocketAddress("localhost", 8021), "ClueCon", 10);
inboudClient.addEventListener(new IEslEventListener() {
@Override
public void onEslEvent(EslEvent eslEvent) {
//这里添加事件处理代码
}
});
//订阅你需要的ESl事件,all是订阅所有事件。
//具体事件列表请看https://freeswitch.org/confluence/display/FREESWITCH/Event+List
inboudClient.setEventSubscriptions(EventFormat.PLAIN, "all");

执行API

sendApiCommand或者sendBackgroundApiCommand(bgapi后台执行,比拨号命令 originate就需要bgapi执行 )。
具体命令参考https://freeswitch.org/confluence/display/FREESWITCH/mod_commands

sendBackgroundApiCommand("originate","user/1000 9999")

执行APP

sendMessage可以用来执行APP。具体APP参考https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools

SendMsg msg = new SendMsg("呼叫的uuid");
msg.addCallCommand("execute");
msg.addExecuteAppName("playback");
msg.addExecuteAppArg("file.wav");
inboudClient.sendMessage(msg);

参考