mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 16:50:39 +00:00
changes for updateCall pause/resume listen audio
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
const Emitter = require('events');
|
||||
const config = require('config');
|
||||
const {CallDirection, TaskPreconditions, CallStatus} = require('../utils/constants');
|
||||
const {CallDirection, TaskPreconditions, CallStatus, TaskName} = require('../utils/constants');
|
||||
const hooks = require('../utils/notifiers');
|
||||
const moment = require('moment');
|
||||
const assert = require('assert');
|
||||
@@ -63,6 +63,18 @@ class CallSession extends Emitter {
|
||||
return this.application.speech_recognizer_language;
|
||||
}
|
||||
|
||||
get hasStableDialog() {
|
||||
return this.dlg && this.dlg.connected;
|
||||
}
|
||||
|
||||
get isOutboundCallRinging() {
|
||||
return this.direction === CallDirection.Outbound && this.req && !this.dlg;
|
||||
}
|
||||
|
||||
get isInboundCallAnswered() {
|
||||
return this.direction === CallDirection.Inbound && this.res.finalResponseSent;
|
||||
}
|
||||
|
||||
async exec() {
|
||||
this.logger.info(`CallSession:exec starting task list with ${this.tasks.length} tasks`);
|
||||
while (this.tasks.length && !this.callGone) {
|
||||
@@ -128,18 +140,45 @@ class CallSession extends Emitter {
|
||||
|
||||
async updateCall(opts) {
|
||||
this.logger.debug(opts, 'CallSession:updateCall');
|
||||
if (opts.call_status === 'completed' && this.dlg) {
|
||||
|
||||
if (opts.call_status === CallStatus.Completed && this.dlg) {
|
||||
this.logger.info('CallSession:updateCall hanging up call due to request from api');
|
||||
this._callerHungup();
|
||||
}
|
||||
else if (opts.call_status === CallStatus.NoAnswer) {
|
||||
if (this.direction === CallDirection.Inbound) {
|
||||
if (this.res && !this.res.finalResponseSent) {
|
||||
this.res.send(503);
|
||||
this._callReleased();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (this.req && !this.dlg) {
|
||||
this.req.cancel();
|
||||
this._callReleased();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (opts.call_hook && opts.call_hook.url) {
|
||||
const hook = this.normalizeUrl(opts.call_hook.url, opts.call_hook.method, opts.call_hook.auth);
|
||||
this.logger.info({hook}, 'CallSession:updateCall replacing application due to request from api');
|
||||
const {actionHook} = hooks(this.logger, this.callInfo);
|
||||
if (opts.call_status_hook) this.call_status_hook = opts.call_status_hook;
|
||||
const tasks = await actionHook(hook);
|
||||
this.logger.info({tasks}, 'CallSession:updateCall new task list');
|
||||
this.replaceApplication(tasks);
|
||||
}
|
||||
else if (opts.listen_status) {
|
||||
const task = this.currentTask;
|
||||
if (!task || ![TaskName.Dial, TaskName.Listen].includes(task.name)) {
|
||||
return this.logger.info(`CallSession:updateCall - disregarding listen_status in task ${task.name}`);
|
||||
}
|
||||
const listenTask = task.name === TaskName.Listen ? task : task.listenTask;
|
||||
if (!listenTask) {
|
||||
return this.logger.info('CallSession:updateCall - disregarding listen_status as Dial does not have a listen');
|
||||
}
|
||||
listenTask.updateListen(opts.listen_status);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -262,6 +301,7 @@ class CallSession extends Emitter {
|
||||
}
|
||||
return {ms: this.ms, ep: this.ep};
|
||||
}
|
||||
|
||||
_notifyCallStatusChange({callStatus, sipStatus, duration}) {
|
||||
assert((typeof duration === 'number' && callStatus === CallStatus.Completed) ||
|
||||
(!duration && callStatus !== CallStatus.Completed),
|
||||
|
||||
@@ -26,7 +26,7 @@ class InboundCallSession extends CallSession {
|
||||
this.logger.info('InboundCallSession:_onTasksDone auto-generating non-success response to invite');
|
||||
this.res.send(603);
|
||||
}
|
||||
else if (this.dlg.connected) {
|
||||
else if (this.dlg && this.dlg.connected) {
|
||||
assert(this.dlg.connectTime);
|
||||
const duration = moment().diff(this.dlg.connectTime, 'seconds');
|
||||
this.emit('callStatusChange', {callStatus: CallStatus.Completed, duration});
|
||||
|
||||
Reference in New Issue
Block a user