mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 08:40:38 +00:00
LCC: add conference hold and unhold actions
This commit is contained in:
@@ -34,7 +34,7 @@ class CallSession extends Emitter {
|
||||
* @param {array} opts.tasks - tasks we are to execute
|
||||
* @param {callInfo} opts.callInfo - information about the call
|
||||
*/
|
||||
constructor({logger, application, srf, tasks, callInfo, accountInfo}) {
|
||||
constructor({logger, application, srf, tasks, callInfo, accountInfo, memberId, confName, confUuid}) {
|
||||
super();
|
||||
this.logger = logger;
|
||||
this.application = application;
|
||||
@@ -42,6 +42,9 @@ class CallSession extends Emitter {
|
||||
this.callInfo = callInfo;
|
||||
this.accountInfo = accountInfo;
|
||||
this.tasks = tasks;
|
||||
this.memberId = memberId;
|
||||
this.confName = confName;
|
||||
this.confUuid = confUuid;
|
||||
this.taskIdx = 0;
|
||||
this.stackIdx = 0;
|
||||
this.callGone = false;
|
||||
@@ -196,6 +199,27 @@ class CallSession extends Emitter {
|
||||
return this.accountInfo?.account?.webhook_secret;
|
||||
}
|
||||
|
||||
get isInConference() {
|
||||
return this.memberId && this.confName && this.confUuid;
|
||||
}
|
||||
|
||||
setConferenceDetails(memberId, confName, confUuid) {
|
||||
assert(!this.memberId && !this.confName && !this.confUuid);
|
||||
assert (memberId && confName && confUuid);
|
||||
|
||||
this.logger.debug(`session is now in conference ${confName}:${memberId} - uuid ${confUuid}`);
|
||||
this.memberId = memberId;
|
||||
this.confName = confName;
|
||||
this.confUuid = confUuid;
|
||||
}
|
||||
|
||||
clearConferenceDetails() {
|
||||
this.logger.debug(`session has now left conference ${this.confName}:${this.memberId}`);
|
||||
this.memberId = null;
|
||||
this.confName = null;
|
||||
this.confUuid = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for speech credentials for the specified vendor
|
||||
* @param {*} vendor - google or aws
|
||||
@@ -436,15 +460,12 @@ class CallSession extends Emitter {
|
||||
task.mute(callSid, mute).catch((err) => this.logger.error(err, 'CallSession:_lccMuteStatus'));
|
||||
}
|
||||
|
||||
async _lccConfHoldStatus(callSid, hold) {
|
||||
this.logger.debug(`_lccConfHoldStatus ${hold}`);
|
||||
async _lccConfHoldStatus(callSid, opts) {
|
||||
const task = this.currentTask;
|
||||
if (!task || TaskName.Conference !== task.name) {
|
||||
return this.logger.info('CallSession:_lccConfHoldStatus - invalid command as conference verb is not active');
|
||||
if (!task || TaskName.Conference !== task.name || !this.isInConference) {
|
||||
return this.logger.info('CallSession:_lccConfHoldStatus - invalid command as call is not in conference');
|
||||
}
|
||||
// now do the mute/unmute, deaf/undeaf
|
||||
task.mute(callSid, hold).catch((err) => this.logger.error(err, 'CallSession:_lccMuteStatus'));
|
||||
task.deaf(callSid, hold).catch((err) => this.logger.error(err, 'CallSession:_lccMuteStatus'));
|
||||
task.doConferenceHold(this, opts);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -517,7 +538,7 @@ class CallSession extends Emitter {
|
||||
await this._lccMuteStatus(callSid, opts.mute_status === 'mute');
|
||||
}
|
||||
else if (opts.conf_hold_status) {
|
||||
await this._lccConfHoldStatus(callSid, opts.conf_hold_status === 'hold');
|
||||
await this._lccConfHoldStatus(callSid, opts);
|
||||
}
|
||||
|
||||
// whisper may be the only thing we are asked to do, or it may that
|
||||
|
||||
Reference in New Issue
Block a user