From 41f6397090c58cbd6b4710e8a7fd6940777f2f20 Mon Sep 17 00:00:00 2001 From: surajshivakumar Date: Fri, 9 Aug 2024 17:08:10 -0400 Subject: [PATCH] rest dial dtmf --- lib/tasks/rest_dial.js | 80 +++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/lib/tasks/rest_dial.js b/lib/tasks/rest_dial.js index 568e1212..199d2aa5 100644 --- a/lib/tasks/rest_dial.js +++ b/lib/tasks/rest_dial.js @@ -48,15 +48,15 @@ class TaskRestDial extends Task { this.sipRequestWithinDialogHook = this.data.sipRequestWithinDialogHook; this.referHook = this.data.referHook; - // if (this.dtmfHook) { - // const {parentDtmfCollector, childDtmfCollector} = parseDtmfOptions(logger, this.data.dtmfCapture || {}); - // if (parentDtmfCollector) { - // this.parentDtmfCollector = parentDtmfCollector; - // } - // if (childDtmfCollector) { - // this.childDtmfCollector = childDtmfCollector; - // } - // } + if (this.dtmfHook) { + const {parentDtmfCollector, childDtmfCollector} = parseDtmfOptions(logger, this.data.dtmfCapture || {}); + if (parentDtmfCollector) { + this.parentDtmfCollector = parentDtmfCollector; + } + if (childDtmfCollector) { + this.childDtmfCollector = childDtmfCollector; + } + } this.on('connect', this._onConnect.bind(this)); this.on('callStatus', this._onCallStatus.bind(this)); @@ -99,7 +99,7 @@ class TaskRestDial extends Task { } // Remove DTMF detection - // this._removeDtmfDetection(cs.dlg); + this._removeDtmfDetection(cs.dlg); this.notifyTaskDone(); } @@ -190,43 +190,43 @@ class TaskRestDial extends Task { this.logger.info({evt}, 'Rest:dial:_onAmdEvent'); const {actionHook} = this.data.amd; this.performHook(cs, actionHook, evt) - .catch((err) => { - this.logger.error({err}, 'Rest:dial:_onAmdEvent - error calling actionHook'); - }); + .catch((err) => { + this.logger.error({err}, 'Rest:dial:_onAmdEvent - error calling actionHook'); + }); } _installDtmfDetection(cs, dlg) { dlg.on('info', this._onInfo.bind(this, cs, dlg)); } - // _onInfo(cs, dlg, req, res) { - // res.send(200); - // if (req.get('Content-Type') !== 'application/dtmf-relay') { - // return; - // } - // - // const dtmfDetector = dlg === cs.dlg ? this.parentDtmfCollector : this.childDtmfCollector; - // if (!dtmfDetector) return; - // - // const arr = /Signal=([0-9#*])/.exec(req.body); - // if (!arr) return; - // - // const key = arr[1]; - // const match = dtmfDetector.keyPress(key); - // - // if (match) { - // const b3 = this.getTracingPropagation(); - // const httpHeaders = b3 && {b3}; - // this.logger.info({callSid: cs.callSid}, `RestDial:_onInfo triggered dtmf match: ${match}`); - // - // cs.requestor.request('verb:hook', this.dtmfHook, {dtmf: match, ...cs.callInfo.toJSON()}, httpHeaders) - // .catch((err) => this.logger.info(err, 'RestDial:_onDtmf - error')); - // } - // } + _onInfo(cs, dlg, req, res) { + res.send(200); + if (req.get('Content-Type') !== 'application/dtmf-relay') { + return; + } - // _removeDtmfDetection(dlg) { - // dlg && dlg.removeAllListeners('info'); - // } + const dtmfDetector = dlg === cs.dlg ? this.parentDtmfCollector : this.childDtmfCollector; + if (!dtmfDetector) return; + + const arr = /Signal=([0-9#*])/.exec(req.body); + if (!arr) return; + + const key = arr[1]; + const match = dtmfDetector.keyPress(key); + + if (match) { + const b3 = this.getTracingPropagation(); + const httpHeaders = b3 && {b3}; + this.logger.info({callSid: cs.callSid}, `RestDial:_onInfo triggered dtmf match: ${match}`); + + cs.requestor.request('verb:hook', this.dtmfHook, {dtmf: match, ...cs.callInfo.toJSON()}, httpHeaders) + .catch((err) => this.logger.info(err, 'RestDial:_onDtmf - error')); + } + } + + _removeDtmfDetection(dlg) { + dlg && dlg.removeAllListeners('info'); + } _initSipRequestWithinDialogHandler(cs, dlg) { cs.sipRequestWithinDialogHook = this.sipRequestWithinDialogHook;