mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2026-02-13 01:39:26 +00:00
support direct call to conference (#746)
* support direct call to conference * wip * wip * wip
This commit is contained in:
@@ -30,6 +30,20 @@ const appsMap = {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}]
|
}]
|
||||||
|
},
|
||||||
|
conference: {
|
||||||
|
// Dummy hook to follow later feature server logic.
|
||||||
|
call_hook: {
|
||||||
|
url: 'https://jambonz.org',
|
||||||
|
method: 'GET'
|
||||||
|
},
|
||||||
|
account_sid: '',
|
||||||
|
app_json: [{
|
||||||
|
verb: 'conference',
|
||||||
|
name: '',
|
||||||
|
beep: false,
|
||||||
|
startConferenceOnEnter: true
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -38,6 +52,7 @@ const createJambonzApp = (type, {account_sid, name, caller_id}) => {
|
|||||||
app.account_sid = account_sid;
|
app.account_sid = account_sid;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'queue':
|
case 'queue':
|
||||||
|
case 'conference':
|
||||||
app.app_json[0].name = name;
|
app.app_json[0].name = name;
|
||||||
break;
|
break;
|
||||||
case 'user':
|
case 'user':
|
||||||
|
|||||||
@@ -75,13 +75,19 @@ module.exports = function(srf, logger) {
|
|||||||
req.locals.application_sid = application_sid;
|
req.locals.application_sid = application_sid;
|
||||||
}
|
}
|
||||||
// check for call to queue
|
// check for call to queue
|
||||||
if (uri.user?.startsWith('queue-') && req.locals.originatingUser && clientDb?.allow_direct_queue_calling) {
|
else if (uri.user?.startsWith('queue-') && req.locals.originatingUser && clientDb?.allow_direct_queue_calling) {
|
||||||
const queue_name = uri.user.match(/queue-(.*)/)[1];
|
const queue_name = uri.user.match(/queue-(.*)/)[1];
|
||||||
logger.debug(`got Queue from Request URI header: ${queue_name}`);
|
logger.debug(`got Queue from Request URI header: ${queue_name}`);
|
||||||
req.locals.queue_name = queue_name;
|
req.locals.queue_name = queue_name;
|
||||||
}
|
}
|
||||||
|
// check for call to conference
|
||||||
|
else if (uri.user?.startsWith('conference-') && req.locals.originatingUser && clientDb?.allow_direct_app_calling) {
|
||||||
|
const conference_id = uri.user.match(/conference-(.*)/)[1];
|
||||||
|
logger.debug(`got Conference from Request URI header: ${conference_id}`);
|
||||||
|
req.locals.conference_id = conference_id;
|
||||||
|
}
|
||||||
// check for call to registered user
|
// check for call to registered user
|
||||||
if (!JAMBONES_DISABLE_DIRECT_P2P_CALL && req.locals.originatingUser && clientDb?.allow_direct_user_calling) {
|
else if (!JAMBONES_DISABLE_DIRECT_P2P_CALL && req.locals.originatingUser && clientDb?.allow_direct_user_calling) {
|
||||||
const arr = /^(.*)@(.*)/.exec(req.locals.originatingUser);
|
const arr = /^(.*)@(.*)/.exec(req.locals.originatingUser);
|
||||||
if (arr) {
|
if (arr) {
|
||||||
const sipRealm = arr[2];
|
const sipRealm = arr[2];
|
||||||
@@ -237,6 +243,9 @@ module.exports = function(srf, logger) {
|
|||||||
logger.debug(`calling to registered user ${req.locals.called_user}, generating dial app`);
|
logger.debug(`calling to registered user ${req.locals.called_user}, generating dial app`);
|
||||||
app = createJambonzApp('user',
|
app = createJambonzApp('user',
|
||||||
{account_sid, name: req.locals.called_user, caller_id: req.locals.callingNumber});
|
{account_sid, name: req.locals.called_user, caller_id: req.locals.callingNumber});
|
||||||
|
} else if (req.locals.conference_id) {
|
||||||
|
logger.debug(`calling to conference ${req.locals.conference_id}, generating conference app`);
|
||||||
|
app = createJambonzApp('conference', {account_sid, name: req.locals.conference_id});
|
||||||
} else if (req.locals.application_sid) {
|
} else if (req.locals.application_sid) {
|
||||||
app = await lookupAppBySid(req.locals.application_sid);
|
app = await lookupAppBySid(req.locals.application_sid);
|
||||||
} else if (req.locals.originatingUser) {
|
} else if (req.locals.originatingUser) {
|
||||||
|
|||||||
@@ -1276,7 +1276,7 @@ class CallSession extends Emitter {
|
|||||||
async _lccConferenceParticipantAction(opts) {
|
async _lccConferenceParticipantAction(opts) {
|
||||||
const task = this.currentTask;
|
const task = this.currentTask;
|
||||||
if (!task || TaskName.Conference !== task.name || !this.isInConference) {
|
if (!task || TaskName.Conference !== task.name || !this.isInConference) {
|
||||||
return this.logger.info('CallSession:_lccConferenceParticipantState - invalid cmd, call is not in conference');
|
return this.logger.info('CallSession:_lccConferenceParticipantAction - invalid cmd, call is not in conference');
|
||||||
}
|
}
|
||||||
task.doConferenceParticipantAction(this, opts);
|
task.doConferenceParticipantAction(this, opts);
|
||||||
}
|
}
|
||||||
@@ -1528,7 +1528,7 @@ Duration=${duration} `
|
|||||||
return this._lccTag(opts);
|
return this._lccTag(opts);
|
||||||
}
|
}
|
||||||
else if (opts.conferenceParticipantAction) {
|
else if (opts.conferenceParticipantAction) {
|
||||||
return this._lccConferenceParticipantState(opts);
|
return this._lccConferenceParticipantAction(opts.conferenceParticipantAction);
|
||||||
}
|
}
|
||||||
else if (opts.dub) {
|
else if (opts.dub) {
|
||||||
return this._lccDub(opts);
|
return this._lccDub(opts);
|
||||||
|
|||||||
@@ -518,7 +518,7 @@ class Conference extends Task {
|
|||||||
this.doConferenceMute(cs, {conf_mute_status: 'unmute'});
|
this.doConferenceMute(cs, {conf_mute_status: 'unmute'});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
this.logger.info(`Conference:doConferenceParticipantState - unhandled action ${action}`);
|
this.logger.info(`Conference:doConferenceParticipantAction - unhandled action ${action}`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user