Skip to content

Instantly share code, notes, and snippets.

@aylarov
Created July 14, 2016 11:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aylarov/c4ed0fcfb4c32904cf3b25d6bcca45a3 to your computer and use it in GitHub Desktop.
Save aylarov/c4ed0fcfb4c32904cf3b25d6bcca45a3 to your computer and use it in GitHub Desktop.
// User Conference
require(Modules.Conference);
require(Modules.Player);
var conf,
user_call,
channel_calls = [],
caller_id,
display_name,
default_channel_ids;
VoxEngine.addEventListener(AppEvents.Started, function (e) {
conf = VoxEngine.createConference();
});
VoxEngine.addEventListener(AppEvents.CallAlerting, function (e) {
user_call = e.call;
caller_id = e.callerid;
display_name = e.displayName;
default_channel_ids = e.headers['X-default-channel-ids'];
e.call.addEventListener(CallEvents.Connected, handleCallConnected);
e.call.addEventListener(CallEvents.Disconnected, handleCallDisconnected);
e.call.addEventListener(CallEvents.MessageReceived, handleMessageReceived);
e.call.answer();
});
function handleMessageReceived(e) {
var result = JSON.parse(e.text);
switch (result.event) {
case "join_channel":
var call = VoxEngine.callConference("channel_" + result.name, caller_id, display_name);
call.addEventListener(CallEvents.Connected, handleChannelConnected);
call.addEventListener(CallEvents.Disconnected, handleChannelDisconnected);
call.addEventListener(CallEvents.MicStatusChange, handleChannelAudio);
call.handleMicStatus(true);
channel_calls.push(call);
break;
case "leave_channel":
for (var i = 0; i < channel_calls.length; i++) {
if (channel_calls[i].number().replace("channel_", "") == result.name) {
channel_calls[i].hangup();
}
}
break;
case "choose_channel":
for (i = 0; i < channel_calls.length; i++) {
if (channel_calls[i].number().replace("channel_", "") == result.name) {
user_call.sendMediaTo(channel_calls[i]);
}
if (channel_calls[i].number().replace("channel_", "") == result.prev) {
user_call.stopMediaTo(channel_calls[i]);
}
}
break;
}
}
function handleCallConnected(e) {
// Connect the user to his conference
var player = VoxEngine.createTTSPlayer("Conference connected");
player.sendMediaTo(conf);
VoxEngine.sendMediaBetween(e.call, conf);
// Make outbound calls to channels user is subscribed to
channel_ids = default_channel_ids.split(',');
for (var i = 0; i < channel_ids.length; i++) {
if (channel_ids[i].length === 0) {
continue;
}
var call = VoxEngine.callConference("channel_" + channel_ids[i], caller_id, display_name);
call.addEventListener(CallEvents.Connected, handleChannelConnected);
call.addEventListener(CallEvents.Disconnected, handleChannelDisconnected);
call.addEventListener(CallEvents.MicStatusChange, handleChannelAudio);
call.handleMicStatus(true);
channel_calls.push(call);
}
}
function handleCallDisconnected(e) {
// Stop conference if user disconnected
VoxEngine.terminate();
}
function handleChannelAudio(e) {
// Send info about channel audio
user_call.sendMessage(JSON.stringify({
event: "channel_activity",
name: e.call.number().replace("channel_", ""),
active: e.active
}));
}
function handleChannelConnected(e) {
// Channel with name ALL was connected successfully
user_call.sendMessage(JSON.stringify({
event: "channel_connected",
name: e.call.number().replace("channel_", "")
}));
// Sending media from the channel to user
e.call.sendMediaTo(conf);
//VoxEngine.sendMediaBetween(conf, e.call);
}
function handleChannelDisconnected(e) {
user_call.sendMessage(JSON.stringify({
event: "channel_disconnected",
name: e.call.number().replace("channel_", "")
}));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment