从node.js发送和执行命令到bash

时间:2011-12-23 12:30:12

标签: node.js socket.io asterisk

我正在为Asterisk开发一种Flash Operator Pannel,但是使用Node.js和Socket.io而不是依赖Flash。

我已经完善了节点服务器和前端但是我不知道如何将事件从Asterisk发送到节点服务器并执行将通过套接字发送的内容。

鉴于我们有一个经过大量调整的Asterisk以满足我们公司的需求,连接到AMI和Asterisk套接字将解决我的问题,因为我们没有使用真正的扩展。

所以,尽管有Asterisk部分,但我想知道如何通过bash或curls或其他任何方式向节点发送信息

我考虑过将curls用于服务器,但这可能导致知道命令的人(非常不可能)可能会使用虚幻数据改变应用程序流。

编辑:重新思考一下,我只想通过套接字/服务器接收请求?然后能够执行将通过socket.io发出的动作。

这甚至可能吗?

4 个答案:

答案 0 :(得分:1)

答案实际上取决于您尝试从Asterisk到Node获取的具体数据。您正在尝试更换Flash操作面板,但您没有真正的扩展。我猜你正在使用Asterisk作为SBC /代理的各种代理。

如果您真的想要一个事件驱动的方法,我建议您修改您的拨号方案,以便在需要时使用您想要的任何数据与Node联系。这最容易通过调用带有一些参数(用任何语言编写)的AGI脚本来实现,然后通过HTTP POST,套接字或其他方式连接到Node。

如果您想要更加被动的方法,可以让节点流读取数据的星号日志文件,或者,如已经建议的那样,连接到Asterisk Manager接口(AMI)并从那里流。与之前所说的相反,我认为这不是一项非常艰巨的任务。

答案 1 :(得分:0)

您想打开从Node到Asterisk的AMI(星号管理器界面)的套接字。我从未使用过Node,但我认为代码看起来大致如下:

var astman = new net.socket().connect(5038);//connect to port 5039 on localhost
astman.on('data', function(data) {
    //do something with received data
});

维护得最好的ami库之一是FreePBX的php-astmanager。虽然它是用PHP编写的,但它可以让你很好地了解你需要做什么。

答案 2 :(得分:0)

您当然可以将node.js程序设置为在套接字上侦听来自Asterisk的消息。但是你必须推出自己的连接管理方案,身份验证方案,消息持久性(可能)等等。

或者 - 尤其是如果节点服务器和星号服务器不在同一台机器上 - 您可以使用像RabbitMQ这样的消息队列程序。这样可以处理进程间通信中涉及的许多重要细节。它也很简单。在节点方面,请查看https://github.com/postwait/node-amqp

答案 3 :(得分:-1)

我从未使用过Asterisk,但可以使用child_process模块​​运行命令行程序。

http://nodejs.org/docs/latest/api/child_processes.html