我们的新手机系统正在使用Asterisk管理器API,它允许通过TCP / IP流读取事件和发出命令。我的问题是..是否有任何方法可以使用ColdFusion来读取(并依次处理)事件流?截至目前,我能够通过telnet查看电话事件(来电,转接,挂断等),我想知道是否有可能使用ColdFusion事件网关来处理这些事件?
初始连接(通过telnet)后,我必须提交以下密钥:值,以便在流开始之前验证连接。
Action: login<CRLF>
Username: usr<CRLF>
Secret: abc123<CRLF>
<CRLF>
只是想指明一下,因为我不确定这是否是以这种方式可能使用Web服务的交易破坏者。另请注意,我们正在使用ColdFusion 10 Enterprise。
答案 0 :(得分:0)
是的 - 您想要使用套接字网关。 Ben Nadel撰写了一篇关于如何执行此操作的精彩文章:Using Socket Gateways To Communicate Between ColdFusion And Node.js
虽然他在他的例子中使用了Node.js,你应该可以使用他的指南设置套接字网关,然后根据需要处理传递给它的数据。
答案 1 :(得分:0)
您想要的是服务器端TCP客户端。我建议easySocket,一个简单的UDF,它允许你通过利用Java套接字通过Coldfusion发送TCP消息。
答案 2 :(得分:0)
我意识到这是一个老线程,但我发布这个以防它帮助下一个人......
AFAIK,使用标准CF事件网关无法完成。但是,一种可能性是使用Asterisk-Java。它是一个允许与Asterisk服务器通信的java库。更具体地说,它是Manager界面:
...能够发送[动作]并接收[响应]和 [赛事]。它不会添加任何进一步的功能,而是 为Asterisk的Manager API提供了一个Java视图(让你从中解放出来 TCP / IP连接和解析东西)。
因此它可以用来向服务器发出命令,并接收事件,就像telnet一样。
初学者示例:
下载Asterisk-Java jar并通过Application.cfc中的this.javaSettings加载
使用Asterisk服务器的设置
创建ManagerConnectionfactory = createObject("java", "org.asteriskjava.manager.ManagerConnectionFactory");
connection = factory.init( "hostNameOrIP"
, portNum
, "userName"
, "theSecret" ).createManagerConnection();
创建CFC以充当侦听器。它将接收和处理来自Asterisk的事件:
component {
public void function onManagerEvent(any managerEvent)
{
// For demo purposes, just output a summary of the event
WriteLog( text=arguments.managerEvent.toString(), file="AsteriskLog" );
}
}
使用dynamic proxy magic位,使用连接注册CFC:
proxyListener = createDynamicProxy("path.YourCFCListener"
, ["org.asteriskjava.manager.ManagerEventListener"]);
connection.addEventListener( proxyListener );
登录服务器以开始接收活动。设置适当的事件级别:&#34; off&#34;,&#34; on&#34;或csv可用事件列表 - &#34; system&#34;,&#34; call&#34;和/或&#34; log&#34;。
connection.login("on");
运行一个简单的&#34; Ping&#34;测试验证一切正常。然后睡几秒钟以允许一些事件流动。然后关闭连接。
action = createObject("java", "org.asteriskjava.manager.action.PingAction").init();
response = application.connection.sendAction(action);
writeDump(response.getResponse());
// disconnect and stop events
sleep(4000);
connection.logoff();
检查演示日志文件。它应该包含一个或多个事件。
"Information","http-bio-8500-exec-4","10/14/16","15:17:19","XXXXX","org.asteriskjava.manager.event.ConnectEvent[dateReceived=Fri Oct 14 15:17:19 CDT 2016,....]"
NB:在实际应用程序中,连接可能会在OnApplicationStart中打开一次,并存储在持久范围内。 只要连接保持打开,事件就会继续流动。只应在应用程序时关闭连接 结束,停止事件流。