[英]Mute/kick channel web application (ARI)
所以我目前有兩個函數,當我添加對橋的調用時會被調用,並且其中的兩個函數會被自動調用,因此我嘗試使用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);
}
這就是從橋上踢渠道的方式。
我目前正在使用“靜音和取消靜音”功能,但遇到了一些麻煩,但這就是我通過網絡應用程序踢用戶的方式
例如。
客戶端
單擊踢按鈕時,將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客戶端命令踢您剛剛從客戶端傳遞到服務器端的通道,用戶將被踢,並將顯示在停滯應用程序中。
function hangup(hangval) {
console.log("Kicked:" + hangval);
client.channels.hangup
({
channelId : hangval
},
function (err) {
if (err) {
throw err;
}
});
}
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.