gpt4 book ai didi

linux - Telnet 套接字网关到 Coldfusion 事件网关以连接到 Asterisk AMI

转载 作者:太空狗 更新时间:2023-10-29 12:12:03 24 4
gpt4 key购买 nike

我希望我的 ColdFusion 应用程序能够通过 Management API 记录从 Asterisk 主机通过 telnet 流式传输的事件。 . ColdFusion 事件网关可以监听特定端口但不能自己发起连接,所以我需要一个网关可以发起到 Asterisk 主机(在指定端口上)的 telnet 连接并将流式事件推送到 ColdFusion 服务器(在指定端口)。我真的不想重新发明轮子,所以有没有可以做到这一点的实用程序?

我的术语可能不正确,因为我不是那么专业,但我希望我已经充分解释了要求! “实用程序”可以驻留在 Linux 或 Windows 平台上。

编辑:要连接到 Asterisk 主机 telnet 流并由其进行身份验证,必须发送以下内容:

Action: login<CRLF>
Username: usr<CRLF>
Secret: abc123<CRLF>
<CRLF>

我知道之前发布了一个与此类似的问题(但没有回答),但我很高兴在 ColdFusion 之外找到解决方案

谢谢

最佳答案

如果您需要做的只是从 Asterisk 服务器捕获事件,我建议采用不同的方法。

因为您似乎正在使用 Asterisk AMI,请查看 Asterisk-Java .据我所知,它是一个 java 库,可以为您处理低级套接字通信和解析,并提供与 Asterisk 服务器交互的高级接口(interface)。因此它能够启动连接、捕获事件等等。

理论上,您可以打开连接并注册以在应用程序启动时接收事件。只要连接保持打开状态,应用程序就会从 Asterisk 接收事件。当应用程序结束时,只需关闭连接即可停止事件。

初始化连接

要简单地捕获事件,首先要创建到 Asterisk 服务器的连接。只需提供正确的主机和凭据:

managerFactory = createObject("java", "org.asteriskjava.manager.ManagerConnectionFactory");
connection = managerFactory.init( hostNameOrIP
, portNum
, userName
, theSecret ).createManagerConnection();

注册事件

为了接收事件,您必须先注册一个 ManagerEventListener与连接。通常这需要编写一个自定义 java 类来实现适当的 interface .然而,有点 dynamic proxy magic ,您可以改用标准 CFC。来自 Asterisk 的任何事件都将直接路由到 CFC,并可以使用 CF 代码进行处理。

要添加监听器,请创建一个带有名为 onManagerEvent 的函数的 CFC .只要 Asterisk 服务器上发生注册事件,就会调用此函数。

// YourCFCListener.cfc
component {
public void function onManagerEvent(any managerEvent)
{
// For demo purposes, just output a summary of the event to a log file
WriteLog( text=arguments.managerEvent.toString(), file="AsteriskListenerLog" );
}
}

接下来创建一个代理并将其注册到连接中。

proxyListener = createDynamicProxy("path.YourCFCListener"
, [ "org.asteriskjava.manager.ManagerEventListener"] );
connection.addEventListener( proxyListener );

接收事件:

要开始接收事件,请登录并连接到服务器。使用掩码指定要接收的事件:"off""on" 或以逗号分隔的特定事件列表(即 "system,call , 日志")。

// receive ALL events
connection.login("on");

连接打开后,您将看到写入演示日志文件的事件(假设有服务器事件)。对于一次性测试,让页面 sleep() 几秒钟以允许一些事件流动。然后关闭连接并停止事件:

sleep(4000);
connection.logoff()

在真实的应用程序中,您可能会打开一次连接并将其存储在持久范围中,例如 application.然后仅在应用程序关闭时关闭它。

看看 API,您可以用它做很多事情。但是,上面应该提供一个基本的 POC 示例,让您开始捕获事件。

关于linux - Telnet 套接字网关到 Coldfusion 事件网关以连接到 Asterisk AMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39930914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com