diff --git a/lib/call-session.js b/lib/call-session.js index 6c43932..e5a746f 100644 --- a/lib/call-session.js +++ b/lib/call-session.js @@ -110,6 +110,7 @@ class CallSession extends Emitter { this.decrKey = req.srf.locals.realtimeDbHelpers.decrKey; this.addKey = req.srf.locals.realtimeDbHelpers.addKey; this.retrieveKey = req.srf.locals.realtimeDbHelpers.retrieveKey; + this.retrieveHash = req.srf.locals.realtimeDbHelpers.retrieveHash; const { lookupOutboundCarrierForAccount, @@ -723,10 +724,13 @@ class CallSession extends Emitter { if (this.req.locals.cdr) { const now = Date.now(); const day = new Date(); - const recordAllCalls = this.req.locals.record_all_calls; + // eslint-disable-next-line max-len + const {hasRecording = false} = await this.retrieveHash(`call:${this.account_sid}:${this.req.locals.cdr.call_sid}`) ?? {}; + const recordAllCalls = this.req.locals.record_all_calls || hasRecording; + const record_format = this.req.locals.account.record_format || 'mp3'; let recording_url = `/Accounts/${this.account_sid}/RecentCalls/${this.req.locals.cdr.call_sid}/record`; recording_url += `/${day.getFullYear()}/${(day.getMonth() + 1).toString().padStart(2, '0')}`; - recording_url += `/${day.getDate().toString().padStart(2, '0')}/${recordAllCalls}`; + recording_url += `/${day.getDate().toString().padStart(2, '0')}/${record_format}`; this.writeCdrs({...this.req.locals.cdr, terminated_at: now, termination_reason: dlg.type === 'uas' ? 'caller hungup' : 'called party hungup', @@ -1208,7 +1212,6 @@ Duration=${payload.duration} ` ...(req.has('X-Retain-Call-Sid') && {'X-Retain-Call-Sid': req.get('X-Retain-Call-Sid')}), ...(req.has('X-Account-Sid') && {'X-Account-Sid': req.get('X-Account-Sid')}) }; - const uac = await this.srf.createUAC(referTo.uri, {localSdp: dlg.local.sdp, headers}); this.uas = uac; uac.type = 'uas'; @@ -1217,7 +1220,7 @@ Duration=${payload.duration} ` uac.on('info', this._onInfo.bind(this, uac)); uac.on('modify', this._onReinvite.bind(this, uac)); uac.on('refer', this._onFeatureServerTransfer.bind(this, uac)); - uac.on('destroy', () => { + uac.on('destroy', async() => { this.logger.info('call ended with normal termination'); this.rtpEngineResource.destroy(); this.activeCallIds.delete(this.req.get('Call-ID')); @@ -1226,10 +1229,13 @@ Duration=${payload.duration} ` if (this.req.locals.cdr) { const now = Date.now(); const day = new Date(); - const recordAllCalls = this.req.locals.record_all_calls; + // eslint-disable-next-line max-len + const {hasRecording = false} = await this.retrieveHash(`call:${this.account_sid}:${this.req.locals.cdr.call_sid}`) ?? {} ; + const recordAllCalls = this.req.locals.record_all_calls || hasRecording; + const record_format = this.req.locals.account.record_format || 'mp3'; let recording_url = `/Accounts/${this.account_sid}/RecentCalls/${this.req.locals.cdr.call_sid}/record`; recording_url += `/${day.getFullYear()}/${(day.getMonth() + 1).toString().padStart(2, '0')}`; - recording_url += `/${day.getDate().toString().padStart(2, '0')}/${recordAllCalls}`; + recording_url += `/${day.getDate().toString().padStart(2, '0')}/${record_format}`; this.writeCdrs({...this.req.locals.cdr, terminated_at: now, termination_reason: 'caller hungup',