mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-19 04:17:44 +00:00
added redirect verb
This commit is contained in:
@@ -14,28 +14,31 @@ class CallSession extends Emitter {
|
||||
this.callSid = callSid;
|
||||
this.tasks = tasks;
|
||||
|
||||
this.taskIdx = 0;
|
||||
this.stackIdx = 0;
|
||||
this.callGone = false;
|
||||
}
|
||||
|
||||
async exec() {
|
||||
let idx = 0;
|
||||
this.logger.info(`CallSession:exec starting task list with ${this.tasks.length} tasks`);
|
||||
while (this.tasks.length && !this.callGone) {
|
||||
const taskNum = ++this.taskIdx;
|
||||
const stackNum = this.stackIdx;
|
||||
const task = this.tasks.shift();
|
||||
this.logger.debug({task}, `CallSession:exec starting task #${++idx}: ${task.name}`);
|
||||
this.logger.debug({task}, `CallSession:exec starting task #${stackNum}:${taskNum}: ${task.name}`);
|
||||
try {
|
||||
const resources = await this._evaluatePreconditions(task);
|
||||
this.currentTask = task;
|
||||
await task.exec(this, resources);
|
||||
this.currentTask = null;
|
||||
this.logger.debug(`CallSession:exec completed task #${idx}: ${task.name}`);
|
||||
this.logger.debug(`CallSession:exec completed task #${stackNum}:${taskNum}: ${task.name}`);
|
||||
} catch (err) {
|
||||
this.currentTask = null;
|
||||
if (err.message.includes(BADPRECONDITIONS)) {
|
||||
this.logger.info(`CallSession:exec task #${idx}: ${task.name}: ${err.message}`);
|
||||
this.logger.info(`CallSession:exec task #${stackNum}:${taskNum}: ${task.name}: ${err.message}`);
|
||||
}
|
||||
else {
|
||||
this.logger.error(err, `Error executing task #${idx}: ${task.name}`);
|
||||
this.logger.error(err, `Error executing task #${stackNum}:${taskNum}: ${task.name}`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -64,7 +67,9 @@ class CallSession extends Emitter {
|
||||
*/
|
||||
replaceApplication(tasks) {
|
||||
this.tasks = tasks;
|
||||
this.logger.info({tasks}, `CallSession:replaceApplication - set ${tasks.length} new tasks`);
|
||||
this.logger.info({tasks}, `CallSession:replaceApplication - reset application with ${tasks.length} new tasks`);
|
||||
this.taskIdx = 0;
|
||||
this.stackIdx++;
|
||||
}
|
||||
_evaluatePreconditions(task) {
|
||||
switch (task.preconditions) {
|
||||
|
||||
@@ -39,6 +39,9 @@ function makeTask(logger, obj) {
|
||||
case TaskName.Listen:
|
||||
const TaskListen = require('./listen');
|
||||
return new TaskListen(logger, data);
|
||||
case TaskName.Redirect:
|
||||
const TaskRedirect = require('./redirect');
|
||||
return new TaskRedirect(logger, data);
|
||||
}
|
||||
|
||||
// should never reach
|
||||
|
||||
23
lib/tasks/redirect.js
Normal file
23
lib/tasks/redirect.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const Task = require('./task');
|
||||
const {TaskName} = require('../utils/constants');
|
||||
|
||||
/**
|
||||
* Redirects to a new application
|
||||
*/
|
||||
class TaskRedirect extends Task {
|
||||
constructor(logger, opts) {
|
||||
super(logger, opts);
|
||||
|
||||
this.action = this.data.action;
|
||||
this.method = this.data.method || 'POST';
|
||||
}
|
||||
|
||||
get name() { return TaskName.Redirect; }
|
||||
|
||||
async exec(cs) {
|
||||
super.exec(cs);
|
||||
await this.performAction(this.method, this.auth);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = TaskRedirect;
|
||||
@@ -102,6 +102,19 @@
|
||||
"url"
|
||||
]
|
||||
},
|
||||
"redirect": {
|
||||
"properties": {
|
||||
"action": "string",
|
||||
"method": {
|
||||
"type": "string",
|
||||
"enum": ["GET", "POST"]
|
||||
},
|
||||
"auth": "#auth"
|
||||
},
|
||||
"required": [
|
||||
"action"
|
||||
]
|
||||
},
|
||||
"transcribe": {
|
||||
"properties": {
|
||||
"transcriptionCallback": "string",
|
||||
|
||||
@@ -25,6 +25,10 @@ class Task extends Emitter {
|
||||
return this.cs;
|
||||
}
|
||||
|
||||
toJSON() {
|
||||
return this.data;
|
||||
}
|
||||
|
||||
async exec(cs) {
|
||||
this.cs = cs;
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"Hangup": "hangup",
|
||||
"Listen": "listen",
|
||||
"Play": "play",
|
||||
"redirect": "redirect",
|
||||
"Redirect": "redirect",
|
||||
"SipDecline": "sip:decline",
|
||||
"SipNotify": "sip:notify",
|
||||
"SipRedirect": "sip:redirect",
|
||||
|
||||
Reference in New Issue
Block a user