mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 16:50:39 +00:00
rest dial dtmf
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user