diff --git a/lib/tasks/make_task.js b/lib/tasks/make_task.js index 9440a729..8e13bbea 100644 --- a/lib/tasks/make_task.js +++ b/lib/tasks/make_task.js @@ -30,6 +30,9 @@ function makeTask(logger, obj) { case TaskName.Play: const TaskPlay = require('./play'); return new TaskPlay(logger, data); + case TaskName.Pause: + const TaskPause = require('./pause'); + return new TaskPause(logger, data); case TaskName.Gather: const TaskGather = require('./gather'); return new TaskGather(logger, data); diff --git a/lib/tasks/pause.js b/lib/tasks/pause.js new file mode 100644 index 00000000..a4515bc4 --- /dev/null +++ b/lib/tasks/pause.js @@ -0,0 +1,26 @@ +const Task = require('./task'); +const {TaskName} = require('../utils/constants'); + +class TaskPause extends Task { + constructor(logger, opts, parentTask) { + super(logger, opts); + + this.length = this.data.length; + } + + get name() { return TaskName.Pause; } + + async exec(cs, ep) { + super.exec(cs); + this.timer = setTimeout(this.notifyTaskDone.bind(this), this.length * 1000); + await this.awaitTaskDone(); + } + + async kill() { + super.kill(); + clearTimeout(this.timer); + this.notifyTaskDone(); + } +} + +module.exports = TaskPause; diff --git a/lib/tasks/specs.json b/lib/tasks/specs.json index f56d2cae..9320e0f1 100644 --- a/lib/tasks/specs.json +++ b/lib/tasks/specs.json @@ -108,6 +108,14 @@ "url" ] }, + "pause": { + "properties": { + "length": "number" + }, + "required": [ + "length" + ] + }, "redirect": { "properties": { "action": "string", diff --git a/lib/utils/constants.json b/lib/utils/constants.json index 70b65cc9..7f77fcd0 100644 --- a/lib/utils/constants.json +++ b/lib/utils/constants.json @@ -4,6 +4,7 @@ "Gather": "gather", "Hangup": "hangup", "Listen": "listen", + "Pause": "pause", "Play": "play", "Redirect": "redirect", "RestDial": "rest:dial", diff --git a/test/data/good/pause.json b/test/data/good/pause.json new file mode 100644 index 00000000..f6d8ff8f --- /dev/null +++ b/test/data/good/pause.json @@ -0,0 +1,5 @@ +{ + "pause": { + "length": 3 + } +} \ No newline at end of file diff --git a/test/unit-tests.js b/test/unit-tests.js index 4d9df559..31b8bfdb 100644 --- a/test/unit-tests.js +++ b/test/unit-tests.js @@ -36,6 +36,9 @@ test('app payload parsing tests', (t) => { task = makeTask(logger, require('./data/good/dial-listen')); t.ok(task.name === 'dial', 'parsed dial w/ listen'); + task = makeTask(logger, require('./data/good/pause')); + t.ok(task.name === 'pause', 'parsed pause'); + const alt = require('./data/good/alternate-syntax'); const normalize = require('../lib/utils/normalize-jamones'); normalize(logger, alt).forEach((t) => {