【问题标题】:Mute/kick channel web application (ARI)静音/踢频道 Web 应用程序 (ARI)
【发布时间】:2015-10-12 13:08:36
【问题描述】:

所以我目前有两个函数,当我向桥添加调用时会调用它们,其中的两个函数会自动调用,所以我尝试使用 JQuery,所以它们只有在单击按钮时才会被调用,然后我可以在服务器端工作。

目前的问题是抛出一个错误,说 $ 没有定义。

JQuery 确实有效我正在调用另一个文件,它是所有 JQuery 并处理我的 socket.io 客户端。

 $("#mute").click(function () {
        alert("Handler for .click() called.");

        channel.mute({
            channelId : 111
        },
            function (err) {});
    });

    $("#kick").click(function () {
        alert("Handler for .click() called.");

        channel.hangup({
            channelId : 111
        },

function (err) {});
    });

任何人都有使用这两种方法的经验,甚至对我如何做到这一点有任何建议。

完整代码清单(服务器端);

var ari = require('ari-client');
var util = require('util');
var chanArr = [];
var test;
var mute;
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);

//ARI client
ari.connect('http://localhost:8088', 'asterisk', 'asterisk', clientLoaded);

function clientLoaded(err, client) {
    if (err) {
        throw err;
    }
    // find or create a holding bridges
    var bridge = null;
    client.bridges.list(function (err, bridges) {
        if (err) {
            throw err;
        }

        bridge = bridges.filter(function (candidate) {
                return candidate.bridge_type === 'mixing';
            })[0];

        if (bridge) {
            console.log(util.format('Using bridge %s', bridge.id));
        } else {
            client.bridges.create({
                type : 'mixing'
            }, function (err, newBridge) {
                if (err) {
                    throw err;
                }

                bridge = newBridge;
                console.log(util.format('Created bridge %s', bridge.id));
            });
        }
    });

    // handler for StasisStart event
    function stasisStart(event, channel) {
        console.log(util.format(
                'Channel %s just entered our application, adding it to bridge %s',
                channel.name,
                bridge.id));

        channel.answer(function (err) {
            if (err) {
                throw err;
            }

            bridge.addChannel({
                channel : channel.id
            }, function (err) {
                var id = chanArr.push(channel.name)
                    console.log("Value: " + test);
                test = channel.name;
                updateSip);

                if (err) {
                    throw err;
                }

                //If else statement to start music for first user entering channel, music will stop once more than 1 enters the channel.
                if (chanArr.length <= 1) {
                    bridge.startMoh(function (err) {
                        if (err) {
                            throw err;
                        }
                    });
                } else if (chanArr.length === 2) {
                    bridge.stopMoh(function (err) {
                        if (err) {
                            throw err;
                        }
                    });
                } else {}

            });

        });
        $("#mute").click(function () {
        alert("Handler for .click() called.");

        channel.mute({
            channelId : 111
        },
            function (err) {});
    });

    $("#kick").click(function () {
        alert("Handler for .click() called.");

        channel.hangup({
            channelId : 111
        },
    }

    // handler for StasisEnd event
    function stasisEnd(event, channel) {
        console.log(util.format(
                'Channel %s just left our application', channel.name));
        console.log(channel.name);

        var index = chanArr.indexOf(channel.name);
        chanArr.splice(index, 1);
        updateSip();
    }
    client.on('StasisStart', stasisStart);
    client.on('StasisEnd', stasisEnd);
    client.start('bridge-hold');
}

//Socket.io logic here
server.listen(3009, function () {
    console.log('listening on *:3009');
});

app.use(express.static(__dirname + '/public'));
app.get('/', function (req, res) {
    res.sendfile(__dirname + "/testPage.html");
});

io.sockets.on('connection', function (data) {
    updateSip();
});

io.sockets.on('muting', function (data) {
    mute = data;
    console.log("client side:" + mute);
});

function updateSip() {
    console.log("Value: " + test);
    io.sockets.emit('sip', chanArr);
}

【问题讨论】:

    标签: javascript jquery express socket.io asterisk


    【解决方案1】:

    这就是我从桥上踢频道的方式。

    我目前正在开发静音和取消静音功能,但遇到了一些麻烦,但这就是我通过网络应用程序踢用户的方式

    例如。

    客户端

    点击kick按钮时,将TD中找到的数据发送到服务器端

    $(document).on('click', '.kick', function () {
            var hangup = $(this).closest('td').siblings(':first-child').text();
            socket.emit('hangup', hangup);
        });
    

    服务器端

    将从客户端接收到的数据存储到一个var中,然后调用stasis函数。

    io.sockets.on('connection', function (socket) {
            updateSip();
            socket.on('hangup', function (data) {
                hangup(data);
            });
        });
    

    静止功能

    使用 ARI 客户端命令踢出刚刚从客户端传递到服务器端的通道,用户将被踢出并显示在 stasis 应用程序中。

    function hangup(hangval) {
        console.log("Kicked:" + hangval);
        client.channels.hangup
        ({
            channelId : hangval
        },
            function (err) {
            if (err) {
                throw err;
            }
        });
    
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-17
      • 2021-01-27
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 2016-12-26
      相关资源
      最近更新 更多