support direct call to conference (#746)

* support direct call to conference

* wip

* wip

* wip
This commit is contained in:
Hoan Luu Huu
2024-05-28 21:30:52 +07:00
committed by GitHub
parent 10b98630d3
commit c53ad89154
4 changed files with 29 additions and 5 deletions

View File

@@ -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':

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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;
} }
} }