diff --git a/lib/session/call-session.js b/lib/session/call-session.js index ac81dc8ff..31871d26c 100644 --- a/lib/session/call-session.js +++ b/lib/session/call-session.js @@ -2005,6 +2005,11 @@ Duration=${duration} ` if (this.direction === CallDirection.Inbound) { if (task.earlyMedia && !this.req.finalResponseSent) { this.res.send(183, {body: ep.local.sdp}); + this._notifyCallStatusChange({ + callStatus: CallStatus.EarlyMedia, + sipStatus: 183, + sipReason: 'Early Media' + }); return {ep}; } this.logger.debug('propogating answer'); diff --git a/lib/session/inbound-call-session.js b/lib/session/inbound-call-session.js index fc27c1d74..2482e2018 100644 --- a/lib/session/inbound-call-session.js +++ b/lib/session/inbound-call-session.js @@ -35,11 +35,21 @@ class InboundCallSession extends CallSession { _onCancel() { this.rootSpan.setAttributes({'call.termination': 'caller abandoned'}); this.callInfo.callTerminationBy = 'caller'; + const wasEarlyMedia = this.callInfo.callStatus === 'early-media'; this._notifyCallStatusChange({ callStatus: CallStatus.NoAnswer, sipStatus: 487, sipReason: 'Request Terminated' }); + if (wasEarlyMedia) { + const duration = 0; // Set duration to 0 for early media termination, required param + this._notifyCallStatusChange({ + callStatus: CallStatus.Completed, + sipStatus: 487, + sipReason: 'Call Terminated During Early Media', + duration: duration + }); + } this._callReleased(); }