使用nodeJS在用户Web浏览器上打开URL

问题描述 投票:0回答:1

我正在使用nodeJS上的asterisk-manager模块构建一个简单的VoIP应用程序。星号服务器安装在centos 7(基本安装)上,并托管在虚拟机上。下面的代码,侦听代理登录事件,并在收到dtmf密钥时弹出一个url:

var port = 5038,
    host = 'asteriskIP',
    username = 'popup',
    password = 'popup',
    open = require('open'),
    mysql = require('mysql'),
    ami = new require('asterisk-manager')(port, host, username, password, true);

ami.keepConnected();

//Mysql server connection pool
var pool = mysql.createPool({
    host: host,
    user: 'user',
    password: 'password',
    database: 'db'
});


ami.on('newstate', function (stateEvent) {
    var channelState = stateEvent.channelstate;
    if (channelState === '6') {
        return false;
    }

    /*
    Listen for new channel after agent login
    */
    ami.on('newchannel', function (e) {

        /* Check if caller id number is empty (This is necessary owning to new channel created as a result of
        DTMF. If this returns true, return false else execute mysql query.
        */

        if (e.calleridnum === '' && isNaN(e.calleridnum)) {
            return false;
        } else if (e.calleridnum !== '' && !isNaN(e.calleridnum)) {
            var callerId = e.calleridnum;
            sql = "INSERT INTO dtmf (caller_id) VALUES ?",
                values = [[callerId]];

            pool.query(sql, [values], function (error) {
                if (error) throw error;

            });

            /*
            Listen for DTMF on 'end' and update current caller table
            */
            ami.on('dtmf', function (evt) {
                var end = evt.end;
                if (end === 'Yes') {

                    var digit = evt.digit;
                    sql = `UPDATE dtmf SET caller_lang = ${digit}  WHERE caller_id = ?`,
                        values = [[callerId]];

                    pool.query(sql, [values], function (error) {
                        if (error) throw error;
                    });

                    /*
                    This piece of code retrieves DTMF code input and popsup 
                    a url in the agents browser window.
                    */
                    ami.on('bridge', function (evt) {
                        var state = evt.bridgestate;
                        if (state === 'Link') {
                            switch (digit) {
                                case '1':
                                    open('http://someurl?' + digit);
                                    break;
                                case '2':
                                    open('http://someurl?' + digit);
                                    break;
                                default:
                            }
                        }
                    })
                }

            });

        }
        return false;

    });
});

当我在我的mac上运行此代码时,一切正常。但是,当我将代码部署到虚拟机时,它会正常插入和更新数据库,但浏览器中不会弹出任何URL。请问有什么方法可以在虚拟机上部署nodeJS app,可以在用户本地浏览器上打开一个窗口吗?谢谢。

javascript node.js voip
1个回答
0
投票

出于安全原因,没有浏览器或操作系统可以让您在没有首先连接的情况下在其他计算机上弹出浏览器窗口。

为此,我认为你必须构建一个客户端应用程序,例如可以在个人计算机上运行的小部件,服务或浏览器扩展......这个客户端可以使用Socket.io来监听并响应节点上发生的事件。 js结束。

这可能是一个解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.