diff --git a/lib/session/call-session.js b/lib/session/call-session.js index 17e66b3f..54ef7973 100644 --- a/lib/session/call-session.js +++ b/lib/session/call-session.js @@ -7,7 +7,8 @@ const { TaskName, KillReason, RecordState, - AllowedSipRecVerbs + AllowedSipRecVerbs, + AllowedConfirmSessionVerbs } = require('../utils/constants'); const moment = require('moment'); const assert = require('assert'); @@ -1420,6 +1421,19 @@ Duration=${duration} ` tasks = pruned; } } + else if (this.isConfirmCallSession) { + const pruned = tasks.filter((t) => AllowedConfirmSessionVerbs.includes(t.name)); + if (0 === pruned.length) { + this.logger.info({tasks}, + 'CallSession:replaceApplication - filtering verbs allowed on an confirmSession call'); + return; + } + if (pruned.length < tasks.length) { + this.logger.info( + 'CallSession:replaceApplication - removing verbs that are not allowed for confirmSession call'); + tasks = pruned; + } + } this.tasks = tasks; this.taskIdx = 0; this.stackIdx++; diff --git a/lib/utils/constants.json b/lib/utils/constants.json index fab0ae55..58ce7a21 100644 --- a/lib/utils/constants.json +++ b/lib/utils/constants.json @@ -30,6 +30,7 @@ "Transcribe": "transcribe" }, "AllowedSipRecVerbs": ["config", "gather", "transcribe", "listen", "tag"], + "AllowedConfirmSessionVerbs": ["config", "gather", "plays", "say", "tag"], "CallStatus": { "Trying": "trying", "Ringing": "ringing", diff --git a/lib/utils/place-outdial.js b/lib/utils/place-outdial.js index b5d8ddbd..3353877a 100644 --- a/lib/utils/place-outdial.js +++ b/lib/utils/place-outdial.js @@ -353,6 +353,7 @@ class SingleDialer extends Emitter { const json = await this.requestor.request('dial:confirm', confirmHook, this.callInfo.toJSON()); if (!json || (Array.isArray(json) && json.length === 0)) { this.logger.info('SingleDialer:_executeApp: no tasks returned from confirm hook'); + this.emit('accept'); return; } const tasks = normalizeJambones(this.logger, json).map((tdata) => makeTask(this.logger, tdata));