@webex/contact-center 3.12.0-llmrefactor.12 → 3.12.0-llmrefactor.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.sdd/manifest.json +6 -5
- package/ai-docs/CONTRACTS.md +8 -0
- package/ai-docs/SERVICE_STATE.md +4 -0
- package/ai-docs/contact-center-spec.md +26 -3
- package/ai-docs/features/contact-owner-change-refactor.md +78 -0
- package/dist/cc.js +202 -9
- package/dist/cc.js.map +1 -1
- package/dist/constants.js +5 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.js +25 -10
- package/dist/index.js.map +1 -1
- package/dist/metrics/behavioral-events.js +6 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +6 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/AnswerCallOnWebexService.js +4 -4
- package/dist/services/AnswerCallOnWebexService.js.map +1 -1
- package/dist/services/ApiAiAssistant.js +116 -1
- package/dist/services/ApiAiAssistant.js.map +1 -1
- package/dist/services/WebexCrossClientService.js +5 -2
- package/dist/services/WebexCrossClientService.js.map +1 -1
- package/dist/services/WxAppTelephonyMercurySync.js +6 -3
- package/dist/services/WxAppTelephonyMercurySync.js.map +1 -1
- package/dist/services/config/Util.js +5 -1
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +10 -1
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +51 -0
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +4 -3
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Utils.js +5 -1
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/task/TaskFactory.js +1 -0
- package/dist/services/task/TaskFactory.js.map +1 -1
- package/dist/services/task/TaskManager.js +50 -58
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +63 -44
- package/dist/services/task/voice/Voice.js.map +1 -1
- package/dist/services/task/voice/wxAppOfferObservability.js +145 -0
- package/dist/services/task/voice/wxAppOfferObservability.js.map +1 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js +52 -11
- package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -1
- package/dist/services/wxAppDiagnosticLogging.js +50 -13
- package/dist/services/wxAppDiagnosticLogging.js.map +1 -1
- package/dist/types/cc.d.ts +21 -1
- package/dist/types/constants.d.ts +4 -0
- package/dist/types/index.d.ts +11 -1
- package/dist/types/metrics/constants.d.ts +6 -0
- package/dist/types/services/ApiAiAssistant.d.ts +35 -2
- package/dist/types/services/config/constants.d.ts +5 -0
- package/dist/types/services/config/types.d.ts +15 -2
- package/dist/types/services/core/Utils.d.ts +2 -0
- package/dist/types/services/task/types.d.ts +2 -0
- package/dist/types/services/task/voice/Voice.d.ts +15 -2
- package/dist/types/services/task/voice/wxAppOfferObservability.d.ts +39 -0
- package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +19 -6
- package/dist/types/services/wxAppDiagnosticLogging.d.ts +12 -0
- package/dist/types/types.d.ts +56 -1
- package/dist/types.js +39 -2
- package/dist/types.js.map +1 -1
- package/dist/webex.js +9 -1
- package/dist/webex.js.map +1 -1
- package/package.json +9 -9
- package/src/cc.ts +294 -25
- package/src/constants.ts +4 -0
- package/src/index.ts +11 -0
- package/src/metrics/ai-docs/metrics-spec.md +61 -20
- package/src/metrics/behavioral-events.ts +6 -0
- package/src/metrics/constants.ts +6 -0
- package/src/services/AnswerCallOnWebexService.ts +4 -4
- package/src/services/ApiAiAssistant.ts +153 -1
- package/src/services/WebexCrossClientService.ts +7 -2
- package/src/services/WxAppTelephonyMercurySync.ts +3 -3
- package/src/services/ai-docs/services-spec.md +11 -3
- package/src/services/config/Util.ts +6 -0
- package/src/services/config/ai-docs/config-spec.md +14 -3
- package/src/services/config/constants.ts +12 -0
- package/src/services/config/index.ts +65 -0
- package/src/services/config/types.ts +13 -2
- package/src/services/core/Utils.ts +4 -0
- package/src/services/task/TaskFactory.ts +1 -0
- package/src/services/task/TaskManager.ts +85 -87
- package/src/services/task/ai-docs/task-spec.md +7 -3
- package/src/services/task/types.ts +16 -0
- package/src/services/task/voice/Voice.ts +74 -52
- package/src/services/task/voice/wxAppOfferObservability.ts +204 -0
- package/src/services/task/voice/wxAppVoiceMethods.ts +83 -24
- package/src/services/wxAppDiagnosticLogging.ts +135 -23
- package/src/types.ts +65 -0
- package/src/webex.js +8 -0
- package/test/unit/spec/cc.ts +469 -19
- package/test/unit/spec/services/ApiAiAssistant.ts +134 -2
- package/test/unit/spec/services/WebexCrossClientService.ts +45 -3
- package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +1 -1
- package/test/unit/spec/services/config/Util.ts +44 -0
- package/test/unit/spec/services/config/index.ts +68 -0
- package/test/unit/spec/services/task/TaskManager.ts +214 -3
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +33 -0
- package/test/unit/spec/services/task/voice/Voice.ts +10 -51
- package/test/unit/spec/services/task/voice/wxAppOfferObservability.ts +361 -0
- package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +121 -5
- package/test/unit/spec/services/wxAppDiagnosticLogging.ts +44 -8
- package/test/unit/spec/wellnessSampleUtils.ts +288 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.WxAppOfferObservability = exports.WXAPP_PARTICIPANT_MISMATCH_GRACE_MS = void 0;
|
|
7
|
+
var _constants = require("../../../metrics/constants");
|
|
8
|
+
var _wxAppDiagnosticLogging = require("../../wxAppDiagnosticLogging");
|
|
9
|
+
var _stateMachine = require("../state-machine");
|
|
10
|
+
var _types = require("../types");
|
|
11
|
+
var _wxAppVoiceMethods = require("./wxAppVoiceMethods");
|
|
12
|
+
/** Defer mismatch WARN/metric so transient WS ordering gaps (~200–300 ms) do not false-alarm. */
|
|
13
|
+
const WXAPP_PARTICIPANT_MISMATCH_GRACE_MS = exports.WXAPP_PARTICIPANT_MISMATCH_GRACE_MS = 500;
|
|
14
|
+
/**
|
|
15
|
+
* OFFERED-state wxApp offer diagnostics: acceptReason logging and deferred participant mismatch.
|
|
16
|
+
* Invoked from Voice.updateUiControls — observability only.
|
|
17
|
+
*/
|
|
18
|
+
class WxAppOfferObservability {
|
|
19
|
+
lastLoggedWxAppParticipantMismatch = false;
|
|
20
|
+
disposed = false;
|
|
21
|
+
handleUiControlsUpdate(ctx) {
|
|
22
|
+
if (this.disposed) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (!ctx.getEnableWxBetterTogether()) {
|
|
26
|
+
this.cancelGraceTimer();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const state = ctx.getTaskState();
|
|
30
|
+
if (state !== _stateMachine.TaskState.OFFERED) {
|
|
31
|
+
this.cancelGraceTimer();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const accept = ctx.getAcceptControl();
|
|
35
|
+
if (!accept?.isVisible) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const deps = ctx.getWxAppVoiceDependencies();
|
|
39
|
+
const isOutdial = ctx.isOutdial();
|
|
40
|
+
const isWxAppInboundOffer = ctx.isWxAppInboundOffer();
|
|
41
|
+
const isWxAppOutdialOffer = ctx.isWxAppCallingOffer() && isOutdial;
|
|
42
|
+
const deviceDetails = (0, _wxAppVoiceMethods.getCallingDeviceDetails)(deps);
|
|
43
|
+
const participantDiagnostics = (0, _wxAppVoiceMethods.getWxAppParticipantDiagnostics)(deps);
|
|
44
|
+
const usersubPublished = ctx.getUsersubPublished();
|
|
45
|
+
const acceptReason = (0, _wxAppDiagnosticLogging.deriveWxAppAcceptReason)({
|
|
46
|
+
isWxAppInboundOffer,
|
|
47
|
+
isWxAppOutdialOffer,
|
|
48
|
+
isWebrtc: ctx.getVoiceVariant() === _types.VOICE_VARIANT.WEBRTC,
|
|
49
|
+
isOutdial,
|
|
50
|
+
wxAppAcceptInFlight: ctx.getWxAppAcceptInFlight(),
|
|
51
|
+
wxAppAnswerPending: ctx.getWxAppAnswerPending(),
|
|
52
|
+
enableWxBetterTogether: ctx.getEnableWxBetterTogether(),
|
|
53
|
+
hasDeviceCallId: participantDiagnostics.hasDeviceCallId
|
|
54
|
+
});
|
|
55
|
+
if (acceptReason !== this.lastLoggedWxAppAcceptReason) {
|
|
56
|
+
this.lastLoggedWxAppAcceptReason = acceptReason;
|
|
57
|
+
(0, _wxAppDiagnosticLogging.logWxAppOfferDecision)({
|
|
58
|
+
interactionId: ctx.getInteractionId(),
|
|
59
|
+
acceptVisible: accept.isVisible,
|
|
60
|
+
acceptEnabled: accept.isEnabled,
|
|
61
|
+
acceptReason,
|
|
62
|
+
wxAppParticipantDeviceType: deviceDetails?.deviceType ?? participantDiagnostics.participantDeviceType,
|
|
63
|
+
hasDeviceCallId: participantDiagnostics.hasDeviceCallId,
|
|
64
|
+
hasDeviceId: participantDiagnostics.hasDeviceId,
|
|
65
|
+
usersubPublished
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (participantDiagnostics.hasValidWxAppParticipant || !usersubPublished) {
|
|
69
|
+
this.cancelGraceTimer();
|
|
70
|
+
} else if (!ctx.isOutdial() && !this.lastLoggedWxAppParticipantMismatch) {
|
|
71
|
+
this.scheduleGraceTimer(ctx);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
dispose() {
|
|
75
|
+
this.disposed = true;
|
|
76
|
+
this.cancelGraceTimer();
|
|
77
|
+
}
|
|
78
|
+
cancelGraceTimer() {
|
|
79
|
+
if (this.wxAppParticipantMismatchGraceTimer !== undefined) {
|
|
80
|
+
clearTimeout(this.wxAppParticipantMismatchGraceTimer);
|
|
81
|
+
this.wxAppParticipantMismatchGraceTimer = undefined;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
scheduleGraceTimer(ctx) {
|
|
85
|
+
if (this.disposed || this.lastLoggedWxAppParticipantMismatch || this.wxAppParticipantMismatchGraceTimer !== undefined) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
this.wxAppParticipantMismatchGraceTimer = setTimeout(() => {
|
|
89
|
+
this.wxAppParticipantMismatchGraceTimer = undefined;
|
|
90
|
+
this.emitParticipantMismatchIfStillNeeded(ctx);
|
|
91
|
+
}, WXAPP_PARTICIPANT_MISMATCH_GRACE_MS);
|
|
92
|
+
}
|
|
93
|
+
emitParticipantMismatchIfStillNeeded(ctx) {
|
|
94
|
+
if (this.disposed || !ctx.getEnableWxBetterTogether() || this.lastLoggedWxAppParticipantMismatch) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (ctx.isOutdial()) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (ctx.getTaskState() !== _stateMachine.TaskState.OFFERED) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const accept = ctx.getAcceptControl();
|
|
104
|
+
if (!accept?.isVisible) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const deps = ctx.getWxAppVoiceDependencies();
|
|
108
|
+
const participantDiagnostics = (0, _wxAppVoiceMethods.getWxAppParticipantDiagnostics)(deps);
|
|
109
|
+
const usersubPublished = ctx.getUsersubPublished();
|
|
110
|
+
if (!usersubPublished || participantDiagnostics.hasValidWxAppParticipant) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const isOutdial = ctx.isOutdial();
|
|
114
|
+
const acceptReason = (0, _wxAppDiagnosticLogging.deriveWxAppAcceptReason)({
|
|
115
|
+
isWxAppInboundOffer: ctx.isWxAppInboundOffer(),
|
|
116
|
+
isWxAppOutdialOffer: ctx.isWxAppCallingOffer() && isOutdial,
|
|
117
|
+
isWebrtc: ctx.getVoiceVariant() === _types.VOICE_VARIANT.WEBRTC,
|
|
118
|
+
isOutdial,
|
|
119
|
+
wxAppAcceptInFlight: ctx.getWxAppAcceptInFlight(),
|
|
120
|
+
wxAppAnswerPending: ctx.getWxAppAnswerPending(),
|
|
121
|
+
enableWxBetterTogether: ctx.getEnableWxBetterTogether(),
|
|
122
|
+
hasDeviceCallId: participantDiagnostics.hasDeviceCallId
|
|
123
|
+
});
|
|
124
|
+
this.lastLoggedWxAppParticipantMismatch = true;
|
|
125
|
+
(0, _wxAppDiagnosticLogging.logWxAppOfferParticipantMismatch)({
|
|
126
|
+
interactionId: ctx.getInteractionId(),
|
|
127
|
+
usersubPublished,
|
|
128
|
+
hasDeviceCallId: participantDiagnostics.hasDeviceCallId,
|
|
129
|
+
hasDeviceId: participantDiagnostics.hasDeviceId,
|
|
130
|
+
participantDeviceType: participantDiagnostics.participantDeviceType,
|
|
131
|
+
acceptVisible: accept.isVisible,
|
|
132
|
+
acceptEnabled: accept.isEnabled,
|
|
133
|
+
acceptReason
|
|
134
|
+
});
|
|
135
|
+
ctx.getMetricsManager().trackEvent(_constants.METRIC_EVENT_NAMES.WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING, {
|
|
136
|
+
taskId: ctx.getInteractionId(),
|
|
137
|
+
usersubPublished,
|
|
138
|
+
hasDeviceCallId: participantDiagnostics.hasDeviceCallId,
|
|
139
|
+
hasDeviceId: participantDiagnostics.hasDeviceId,
|
|
140
|
+
acceptReason
|
|
141
|
+
}, ['operational', 'behavioral']);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
exports.WxAppOfferObservability = WxAppOfferObservability;
|
|
145
|
+
//# sourceMappingURL=wxAppOfferObservability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_constants","require","_wxAppDiagnosticLogging","_stateMachine","_types","_wxAppVoiceMethods","WXAPP_PARTICIPANT_MISMATCH_GRACE_MS","exports","WxAppOfferObservability","lastLoggedWxAppParticipantMismatch","disposed","handleUiControlsUpdate","ctx","getEnableWxBetterTogether","cancelGraceTimer","state","getTaskState","TaskState","OFFERED","accept","getAcceptControl","isVisible","deps","getWxAppVoiceDependencies","isOutdial","isWxAppInboundOffer","isWxAppOutdialOffer","isWxAppCallingOffer","deviceDetails","getCallingDeviceDetails","participantDiagnostics","getWxAppParticipantDiagnostics","usersubPublished","getUsersubPublished","acceptReason","deriveWxAppAcceptReason","isWebrtc","getVoiceVariant","VOICE_VARIANT","WEBRTC","wxAppAcceptInFlight","getWxAppAcceptInFlight","wxAppAnswerPending","getWxAppAnswerPending","enableWxBetterTogether","hasDeviceCallId","lastLoggedWxAppAcceptReason","logWxAppOfferDecision","interactionId","getInteractionId","acceptVisible","acceptEnabled","isEnabled","wxAppParticipantDeviceType","deviceType","participantDeviceType","hasDeviceId","hasValidWxAppParticipant","scheduleGraceTimer","dispose","wxAppParticipantMismatchGraceTimer","undefined","clearTimeout","setTimeout","emitParticipantMismatchIfStillNeeded","logWxAppOfferParticipantMismatch","getMetricsManager","trackEvent","METRIC_EVENT_NAMES","WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING","taskId"],"sources":["wxAppOfferObservability.ts"],"sourcesContent":["import MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\nimport {\n deriveWxAppAcceptReason,\n logWxAppOfferDecision,\n logWxAppOfferParticipantMismatch,\n WxAppAcceptReason,\n} from '../../wxAppDiagnosticLogging';\nimport {TaskState} from '../state-machine';\nimport {VoiceVariant, VOICE_VARIANT} from '../types';\nimport {\n getCallingDeviceDetails,\n getWxAppParticipantDiagnostics,\n WxAppVoiceDependencies,\n} from './wxAppVoiceMethods';\n\n/** Defer mismatch WARN/metric so transient WS ordering gaps (~200–300 ms) do not false-alarm. */\nexport const WXAPP_PARTICIPANT_MISMATCH_GRACE_MS = 500;\n\nexport type WxAppOfferObservabilityContext = {\n getInteractionId: () => string;\n getTaskState: () => TaskState | undefined;\n getAcceptControl: () => {isVisible: boolean; isEnabled: boolean} | undefined;\n getVoiceVariant: () => VoiceVariant;\n isOutdial: () => boolean;\n isWxAppInboundOffer: () => boolean;\n isWxAppCallingOffer: () => boolean;\n getWxAppAcceptInFlight: () => boolean;\n getWxAppAnswerPending: () => boolean;\n getEnableWxBetterTogether: () => boolean;\n getUsersubPublished: () => boolean;\n getWxAppVoiceDependencies: () => WxAppVoiceDependencies;\n getMetricsManager: () => MetricsManager;\n};\n\n/**\n * OFFERED-state wxApp offer diagnostics: acceptReason logging and deferred participant mismatch.\n * Invoked from Voice.updateUiControls — observability only.\n */\nexport class WxAppOfferObservability {\n private lastLoggedWxAppAcceptReason?: WxAppAcceptReason;\n private lastLoggedWxAppParticipantMismatch = false;\n private wxAppParticipantMismatchGraceTimer?: ReturnType<typeof setTimeout>;\n private disposed = false;\n\n public handleUiControlsUpdate(ctx: WxAppOfferObservabilityContext): void {\n if (this.disposed) {\n return;\n }\n\n if (!ctx.getEnableWxBetterTogether()) {\n this.cancelGraceTimer();\n\n return;\n }\n\n const state = ctx.getTaskState();\n if (state !== TaskState.OFFERED) {\n this.cancelGraceTimer();\n\n return;\n }\n\n const accept = ctx.getAcceptControl();\n if (!accept?.isVisible) {\n return;\n }\n\n const deps = ctx.getWxAppVoiceDependencies();\n const isOutdial = ctx.isOutdial();\n const isWxAppInboundOffer = ctx.isWxAppInboundOffer();\n const isWxAppOutdialOffer = ctx.isWxAppCallingOffer() && isOutdial;\n const deviceDetails = getCallingDeviceDetails(deps);\n const participantDiagnostics = getWxAppParticipantDiagnostics(deps);\n const usersubPublished = ctx.getUsersubPublished();\n const acceptReason = deriveWxAppAcceptReason({\n isWxAppInboundOffer,\n isWxAppOutdialOffer,\n isWebrtc: ctx.getVoiceVariant() === VOICE_VARIANT.WEBRTC,\n isOutdial,\n wxAppAcceptInFlight: ctx.getWxAppAcceptInFlight(),\n wxAppAnswerPending: ctx.getWxAppAnswerPending(),\n enableWxBetterTogether: ctx.getEnableWxBetterTogether(),\n hasDeviceCallId: participantDiagnostics.hasDeviceCallId,\n });\n\n if (acceptReason !== this.lastLoggedWxAppAcceptReason) {\n this.lastLoggedWxAppAcceptReason = acceptReason;\n\n logWxAppOfferDecision({\n interactionId: ctx.getInteractionId(),\n acceptVisible: accept.isVisible,\n acceptEnabled: accept.isEnabled,\n acceptReason,\n wxAppParticipantDeviceType:\n deviceDetails?.deviceType ?? participantDiagnostics.participantDeviceType,\n hasDeviceCallId: participantDiagnostics.hasDeviceCallId,\n hasDeviceId: participantDiagnostics.hasDeviceId,\n usersubPublished,\n });\n }\n\n if (participantDiagnostics.hasValidWxAppParticipant || !usersubPublished) {\n this.cancelGraceTimer();\n } else if (!ctx.isOutdial() && !this.lastLoggedWxAppParticipantMismatch) {\n this.scheduleGraceTimer(ctx);\n }\n }\n\n public dispose(): void {\n this.disposed = true;\n this.cancelGraceTimer();\n }\n\n private cancelGraceTimer(): void {\n if (this.wxAppParticipantMismatchGraceTimer !== undefined) {\n clearTimeout(this.wxAppParticipantMismatchGraceTimer);\n this.wxAppParticipantMismatchGraceTimer = undefined;\n }\n }\n\n private scheduleGraceTimer(ctx: WxAppOfferObservabilityContext): void {\n if (\n this.disposed ||\n this.lastLoggedWxAppParticipantMismatch ||\n this.wxAppParticipantMismatchGraceTimer !== undefined\n ) {\n return;\n }\n\n this.wxAppParticipantMismatchGraceTimer = setTimeout(() => {\n this.wxAppParticipantMismatchGraceTimer = undefined;\n this.emitParticipantMismatchIfStillNeeded(ctx);\n }, WXAPP_PARTICIPANT_MISMATCH_GRACE_MS);\n }\n\n private emitParticipantMismatchIfStillNeeded(ctx: WxAppOfferObservabilityContext): void {\n if (\n this.disposed ||\n !ctx.getEnableWxBetterTogether() ||\n this.lastLoggedWxAppParticipantMismatch\n ) {\n return;\n }\n\n if (ctx.isOutdial()) {\n return;\n }\n\n if (ctx.getTaskState() !== TaskState.OFFERED) {\n return;\n }\n\n const accept = ctx.getAcceptControl();\n if (!accept?.isVisible) {\n return;\n }\n\n const deps = ctx.getWxAppVoiceDependencies();\n const participantDiagnostics = getWxAppParticipantDiagnostics(deps);\n const usersubPublished = ctx.getUsersubPublished();\n\n if (!usersubPublished || participantDiagnostics.hasValidWxAppParticipant) {\n return;\n }\n\n const isOutdial = ctx.isOutdial();\n const acceptReason = deriveWxAppAcceptReason({\n isWxAppInboundOffer: ctx.isWxAppInboundOffer(),\n isWxAppOutdialOffer: ctx.isWxAppCallingOffer() && isOutdial,\n isWebrtc: ctx.getVoiceVariant() === VOICE_VARIANT.WEBRTC,\n isOutdial,\n wxAppAcceptInFlight: ctx.getWxAppAcceptInFlight(),\n wxAppAnswerPending: ctx.getWxAppAnswerPending(),\n enableWxBetterTogether: ctx.getEnableWxBetterTogether(),\n hasDeviceCallId: participantDiagnostics.hasDeviceCallId,\n });\n\n this.lastLoggedWxAppParticipantMismatch = true;\n\n logWxAppOfferParticipantMismatch({\n interactionId: ctx.getInteractionId(),\n usersubPublished,\n hasDeviceCallId: participantDiagnostics.hasDeviceCallId,\n hasDeviceId: participantDiagnostics.hasDeviceId,\n participantDeviceType: participantDiagnostics.participantDeviceType,\n acceptVisible: accept.isVisible,\n acceptEnabled: accept.isEnabled,\n acceptReason,\n });\n\n ctx.getMetricsManager().trackEvent(\n METRIC_EVENT_NAMES.WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING,\n {\n taskId: ctx.getInteractionId(),\n usersubPublished,\n hasDeviceCallId: participantDiagnostics.hasDeviceCallId,\n hasDeviceId: participantDiagnostics.hasDeviceId,\n acceptReason,\n },\n ['operational', 'behavioral']\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,6 +7,7 @@ exports.acceptOnWebex = acceptOnWebex;
|
|
|
7
7
|
exports.getCallingDeviceDetails = getCallingDeviceDetails;
|
|
8
8
|
exports.getWebexCallingCallId = getWebexCallingCallId;
|
|
9
9
|
exports.getWxAppLineOwnerId = getWxAppLineOwnerId;
|
|
10
|
+
exports.getWxAppParticipantDiagnostics = getWxAppParticipantDiagnostics;
|
|
10
11
|
exports.isWebexAppCallingOffer = isWebexAppCallingOffer;
|
|
11
12
|
exports.isWebexAppInboundCallingOffer = isWebexAppInboundCallingOffer;
|
|
12
13
|
exports.mapWxAppVoiceError = mapWxAppVoiceError;
|
|
@@ -44,6 +45,24 @@ function getWxAppAgentParticipant(deps) {
|
|
|
44
45
|
}
|
|
45
46
|
return Object.values(participants).find(participant => participant?.id === agentId);
|
|
46
47
|
}
|
|
48
|
+
function getWxAppParticipantDiagnostics(deps) {
|
|
49
|
+
const participant = getWxAppAgentParticipant(deps);
|
|
50
|
+
const hasDeviceCallId = typeof participant?.deviceCallId === 'string' && participant.deviceCallId.trim() !== '';
|
|
51
|
+
const hasDeviceId = typeof participant?.deviceId === 'string' && participant.deviceId.trim() !== '';
|
|
52
|
+
return {
|
|
53
|
+
participantDeviceType: participant?.deviceType,
|
|
54
|
+
hasDeviceCallId,
|
|
55
|
+
hasDeviceId,
|
|
56
|
+
hasValidWxAppParticipant: isWxAppParticipant(participant)
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function getWxAppTelephonyMetricContext(deps) {
|
|
60
|
+
const diagnostics = getWxAppParticipantDiagnostics(deps);
|
|
61
|
+
return {
|
|
62
|
+
hasDeviceCallId: diagnostics.hasDeviceCallId,
|
|
63
|
+
hasDeviceId: diagnostics.hasDeviceId
|
|
64
|
+
};
|
|
65
|
+
}
|
|
47
66
|
function getCallingDeviceDetails(deps) {
|
|
48
67
|
const taskData = deps.getTaskData();
|
|
49
68
|
const participant = getWxAppAgentParticipant(deps);
|
|
@@ -104,7 +123,8 @@ function getWxAppTelephonyMetricFailurePayload(deps, error) {
|
|
|
104
123
|
const wxError = error;
|
|
105
124
|
const payload = {
|
|
106
125
|
taskId: getInteractionId(deps) ?? '',
|
|
107
|
-
error: error instanceof Error ? error.toString() : String(error)
|
|
126
|
+
error: error instanceof Error ? error.toString() : String(error),
|
|
127
|
+
...getWxAppTelephonyMetricContext(deps)
|
|
108
128
|
};
|
|
109
129
|
if (wxError.trackingId) {
|
|
110
130
|
payload.trackingId = wxError.trackingId;
|
|
@@ -120,6 +140,7 @@ function getWxAppOutdialDeclineFailurePayload(deps, error) {
|
|
|
120
140
|
if (aqmDetails) {
|
|
121
141
|
return {
|
|
122
142
|
...base,
|
|
143
|
+
...getWxAppTelephonyMetricContext(deps),
|
|
123
144
|
..._MetricsManager.default.getCommonTrackingFieldForAQMResponseFailed(aqmDetails)
|
|
124
145
|
};
|
|
125
146
|
}
|
|
@@ -241,7 +262,7 @@ async function transmitDtmfOnWebex(deps, options) {
|
|
|
241
262
|
(0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('wxApp_call_id_unavailable', interactionId);
|
|
242
263
|
throw new Error('WxApp call ID is unavailable');
|
|
243
264
|
}
|
|
244
|
-
_loggerProxy.default.
|
|
265
|
+
_loggerProxy.default.log('transmitDtmf', {
|
|
245
266
|
module: 'wxAppVoiceMethods',
|
|
246
267
|
method: _constants.METHODS.TRANSMIT_DTMF,
|
|
247
268
|
data: {
|
|
@@ -264,6 +285,7 @@ async function transmitDtmfOnWebex(deps, options) {
|
|
|
264
285
|
}
|
|
265
286
|
async function runWxAppAccept(deps, lifecycle, options) {
|
|
266
287
|
const taskId = getInteractionId(deps);
|
|
288
|
+
const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';
|
|
267
289
|
deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED]);
|
|
268
290
|
try {
|
|
269
291
|
lifecycle.setWxAppAcceptInFlight(true);
|
|
@@ -272,12 +294,17 @@ async function runWxAppAccept(deps, lifecycle, options) {
|
|
|
272
294
|
lifecycle.resetWxAppMuted();
|
|
273
295
|
await lifecycle.syncWxAppMuteFromCallDetails();
|
|
274
296
|
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS, {
|
|
275
|
-
taskId
|
|
297
|
+
taskId,
|
|
298
|
+
acceptReason,
|
|
299
|
+
...getWxAppTelephonyMetricContext(deps)
|
|
276
300
|
}, ['operational', 'behavioral']);
|
|
277
301
|
} catch (error) {
|
|
278
302
|
lifecycle.setWxAppAnswerPending(false);
|
|
279
303
|
logTelephonyFailure('accept', deps, error);
|
|
280
|
-
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED,
|
|
304
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED, {
|
|
305
|
+
acceptReason,
|
|
306
|
+
...getWxAppTelephonyMetricFailurePayload(deps, error)
|
|
307
|
+
}, ['operational', 'behavioral']);
|
|
281
308
|
lifecycle.mapWxAppVoiceError(error, _constants.METHODS.ACCEPT);
|
|
282
309
|
} finally {
|
|
283
310
|
lifecycle.setWxAppAcceptInFlight(false);
|
|
@@ -285,30 +312,42 @@ async function runWxAppAccept(deps, lifecycle, options) {
|
|
|
285
312
|
}
|
|
286
313
|
async function runWxAppReject(deps, lifecycle, options) {
|
|
287
314
|
const taskId = getInteractionId(deps);
|
|
315
|
+
const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';
|
|
288
316
|
deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED]);
|
|
289
317
|
try {
|
|
290
318
|
await rejectOnWebex(deps, options);
|
|
291
319
|
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {
|
|
292
|
-
taskId
|
|
320
|
+
taskId,
|
|
321
|
+
acceptReason,
|
|
322
|
+
...getWxAppTelephonyMetricContext(deps)
|
|
293
323
|
}, ['operational', 'behavioral']);
|
|
294
324
|
} catch (error) {
|
|
295
325
|
logTelephonyFailure('decline', deps, error);
|
|
296
|
-
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,
|
|
326
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED, {
|
|
327
|
+
acceptReason,
|
|
328
|
+
...getWxAppTelephonyMetricFailurePayload(deps, error)
|
|
329
|
+
}, ['operational', 'behavioral']);
|
|
297
330
|
lifecycle.mapWxAppVoiceError(error, _constants.METHODS.REJECT);
|
|
298
331
|
}
|
|
299
332
|
}
|
|
300
|
-
async function runWxAppOutdialDecline(deps, executeCancel) {
|
|
333
|
+
async function runWxAppOutdialDecline(deps, executeCancel, options) {
|
|
301
334
|
const taskId = getInteractionId(deps);
|
|
335
|
+
const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';
|
|
302
336
|
deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED]);
|
|
303
337
|
try {
|
|
304
338
|
const result = await executeCancel();
|
|
305
339
|
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {
|
|
306
|
-
taskId
|
|
340
|
+
taskId,
|
|
341
|
+
acceptReason,
|
|
342
|
+
...getWxAppTelephonyMetricContext(deps)
|
|
307
343
|
}, ['operational', 'behavioral']);
|
|
308
344
|
return result;
|
|
309
345
|
} catch (error) {
|
|
310
346
|
logWxAppOutdialDeclineFailure(deps, error);
|
|
311
|
-
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,
|
|
347
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED, {
|
|
348
|
+
acceptReason,
|
|
349
|
+
...getWxAppOutdialDeclineFailurePayload(deps, error)
|
|
350
|
+
}, ['operational', 'behavioral']);
|
|
312
351
|
throw error;
|
|
313
352
|
}
|
|
314
353
|
}
|
|
@@ -319,7 +358,8 @@ async function runWxAppToggleMute(deps, lifecycle, options) {
|
|
|
319
358
|
await toggleMuteOnWebex(deps, options);
|
|
320
359
|
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS, {
|
|
321
360
|
taskId,
|
|
322
|
-
targetMuted: deps.getWxAppMuted()
|
|
361
|
+
targetMuted: deps.getWxAppMuted(),
|
|
362
|
+
...getWxAppTelephonyMetricContext(deps)
|
|
323
363
|
}, ['operational', 'behavioral']);
|
|
324
364
|
} catch (error) {
|
|
325
365
|
logTelephonyFailure('mute', deps, error);
|
|
@@ -334,7 +374,8 @@ async function runWxAppTransmitDtmf(deps, lifecycle, options) {
|
|
|
334
374
|
await transmitDtmfOnWebex(deps, options);
|
|
335
375
|
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS, {
|
|
336
376
|
taskId,
|
|
337
|
-
dtmfLength: options.dtmf.length
|
|
377
|
+
dtmfLength: options.dtmf.length,
|
|
378
|
+
...getWxAppTelephonyMetricContext(deps)
|
|
338
379
|
}, ['operational', 'behavioral']);
|
|
339
380
|
} catch (error) {
|
|
340
381
|
logTelephonyFailure('dtmf', deps, error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","_Utils","_stateMachine","_MetricsManager","_constants2","_WebexCallingUtils","_wxAppDiagnosticLogging","e","__esModule","default","isWxAppParticipant","participant","deviceType","deviceCallId","trim","deviceId","isOutdialTask","deps","getTaskData","interaction","outboundType","getWxAppAgentParticipant","taskData","participants","agentId","undefined","Object","values","find","id","getCallingDeviceDetails","getWebexCallingDeviceDetailsForAgent","isWebexAppCallingOffer","enableWxBetterTogether","state","getTaskState","TaskState","OFFERED","details","Boolean","isWebexAppInboundCallingOffer","getWebexCallingCallId","IDLE","WRAPPING_UP","TERMINATED","COMPLETED","getWxAppLineOwnerId","lineOwnerId","resolveWxAppLineOwnerId","override","decodedLineOwnerId","getInteractionId","interactionId","logTelephonyFailure","action","error","wxError","logWxAppTelephonyAction","phase","trackingId","httpStatus","status","failureReason","message","getWxAppTelephonyMetricFailurePayload","payload","taskId","Error","toString","String","getWxAppOutdialDeclineFailurePayload","base","aqmDetails","MetricsManager","getCommonTrackingFieldForAQMResponseFailed","logWxAppOutdialDeclineFailure","data","reason","assertWxAppEnabled","logWxAppValidationFailure","answerCallOnWebexService","acceptOnWebex","options","answerCall","callId","endpointId","rejectOnWebex","rejectCall","toggleMuteOnWebex","targetMuted","muted","getWxAppMuted","request","muteCall","bind","unmuteCall","setWxAppMuted","transmitDtmfOnWebex","LoggerProxy","info","module","method","METHODS","TRANSMIT_DTMF","callIdSuffix","length","slice","dtmfLength","dtmf","hasLineOwnerId","transmitDtmf","runWxAppAccept","lifecycle","metricsManager","timeEvent","METRIC_EVENT_NAMES","WXAPP_TASK_ACCEPT_SUCCESS","WXAPP_TASK_ACCEPT_FAILED","setWxAppAcceptInFlight","setWxAppAnswerPending","resetWxAppMuted","syncWxAppMuteFromCallDetails","trackEvent","mapWxAppVoiceError","ACCEPT","runWxAppReject","WXAPP_TASK_DECLINE_SUCCESS","WXAPP_TASK_DECLINE_FAILED","REJECT","runWxAppOutdialDecline","executeCancel","result","runWxAppToggleMute","WXAPP_TASK_MUTE_SUCCESS","WXAPP_TASK_MUTE_FAILED","TOGGLE_MUTE","runWxAppTransmitDtmf","WXAPP_TASK_DTMF_SUCCESS","WXAPP_TASK_DTMF_FAILED","isWxAppTelephonyError","detailedError","getErrorDetails"],"sources":["wxAppVoiceMethods.ts"],"sourcesContent":["import {EventPayload} from '@webex/internal-plugin-metrics/src/metrics.types';\n\nimport AnswerCallOnWebexService, {WxAppTelephonyError} from '../../AnswerCallOnWebexService';\nimport LoggerProxy from '../../../logger-proxy';\nimport {METHODS} from '../../../constants';\nimport {getErrorDetails} from '../../core/Utils';\nimport {Failure} from '../../core/GlobalTypes';\nimport {TaskData, TaskToggleMuteOptions, TaskTransmitDtmfOptions} from '../types';\nimport {TaskState} from '../state-machine';\nimport MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\nimport {\n decodedLineOwnerId,\n getWebexCallingDeviceDetailsForAgent,\n WebexCallingDeviceDetails,\n} from '../WebexCallingUtils';\nimport {\n logWxAppTelephonyAction,\n logWxAppValidationFailure,\n type WxAppTelephonyAction,\n} from '../../wxAppDiagnosticLogging';\n\ntype WxAppParticipant = {\n deviceType?: string;\n deviceCallId?: string;\n deviceId?: string;\n};\n\nexport type WxAppVoiceDependencies = {\n enableWxBetterTogether: boolean;\n answerCallOnWebexService?: AnswerCallOnWebexService;\n agentId?: string;\n metricsManager: MetricsManager;\n getTaskData: () => TaskData;\n getTaskState: () => TaskState | undefined;\n getWxAppMuted: () => boolean;\n setWxAppMuted: (muted: boolean) => void;\n};\n\n/** @deprecated Use {@link WxAppVoiceDependencies} */\nexport type WxAppVoiceDeps = WxAppVoiceDependencies;\n\nexport type WxAppVoiceLifecycle = {\n setWxAppAcceptInFlight: (inFlight: boolean) => void;\n setWxAppAnswerPending: (pending: boolean) => void;\n resetWxAppMuted: () => void;\n syncWxAppMuteFromCallDetails: () => Promise<boolean | undefined>;\n mapWxAppVoiceError: (error: unknown, method: string) => never;\n};\n\nconst isWxAppParticipant = (participant: unknown): participant is WxAppParticipant =>\n (participant as WxAppParticipant)?.deviceType === 'wxApp' &&\n typeof (participant as WxAppParticipant)?.deviceCallId === 'string' &&\n (participant as WxAppParticipant).deviceCallId.trim() !== '' &&\n typeof (participant as WxAppParticipant)?.deviceId === 'string' &&\n (participant as WxAppParticipant).deviceId.trim() !== '';\n\nconst isOutdialTask = (deps: WxAppVoiceDependencies): boolean =>\n deps.getTaskData()?.interaction?.outboundType === 'OUTDIAL';\n\nfunction getWxAppAgentParticipant(deps: WxAppVoiceDependencies): unknown {\n const taskData = deps.getTaskData();\n const participants = taskData.interaction?.participants;\n const agentId = deps.agentId ?? taskData.agentId;\n\n if (!participants || !agentId) {\n return undefined;\n }\n\n if (participants[agentId]) {\n return participants[agentId];\n }\n\n return Object.values(participants).find(\n (participant) => (participant as {id?: string})?.id === agentId\n );\n}\n\nexport function getCallingDeviceDetails(\n deps: WxAppVoiceDependencies\n): WebexCallingDeviceDetails | undefined {\n const taskData = deps.getTaskData();\n const participant = getWxAppAgentParticipant(deps);\n\n if (!isWxAppParticipant(participant)) {\n return undefined;\n }\n\n return getWebexCallingDeviceDetailsForAgent(\n deps.agentId ?? taskData.agentId,\n taskData.interaction?.participants\n );\n}\n\nexport function isWebexAppCallingOffer(deps: WxAppVoiceDependencies): boolean {\n if (!deps.enableWxBetterTogether) {\n return false;\n }\n\n const state = deps.getTaskState();\n if (state !== TaskState.OFFERED) {\n return false;\n }\n\n const details = getCallingDeviceDetails(deps);\n\n return Boolean(details);\n}\n\n/** Inbound wxApp offer only — outdial decline uses CC routing, not telephony reject. */\nexport function isWebexAppInboundCallingOffer(deps: WxAppVoiceDependencies): boolean {\n return isWebexAppCallingOffer(deps) && !isOutdialTask(deps);\n}\n\nexport function getWebexCallingCallId(deps: WxAppVoiceDependencies): string | null {\n const state = deps.getTaskState();\n if (\n !state ||\n state === TaskState.OFFERED ||\n state === TaskState.IDLE ||\n state === TaskState.WRAPPING_UP ||\n state === TaskState.TERMINATED ||\n state === TaskState.COMPLETED\n ) {\n return null;\n }\n\n return getCallingDeviceDetails(deps)?.deviceCallId ?? null;\n}\n\nexport function getWxAppLineOwnerId(deps: WxAppVoiceDependencies): string | undefined {\n const participant = getWxAppAgentParticipant(deps) as {lineOwnerId?: string} | undefined;\n const lineOwnerId = participant?.lineOwnerId;\n\n return typeof lineOwnerId === 'string' && lineOwnerId.trim() !== '' ? lineOwnerId : undefined;\n}\n\nexport function resolveWxAppLineOwnerId(\n deps: WxAppVoiceDependencies,\n override?: string\n): string | undefined {\n if (typeof override === 'string' && override.trim() !== '') {\n return override;\n }\n\n return decodedLineOwnerId(getWxAppLineOwnerId(deps));\n}\n\nfunction getInteractionId(deps: WxAppVoiceDependencies): string | undefined {\n return deps.getTaskData()?.interactionId;\n}\n\nfunction logTelephonyFailure(\n action: WxAppTelephonyAction,\n deps: WxAppVoiceDependencies,\n error: unknown\n): void {\n const wxError = error as WxAppTelephonyError;\n logWxAppTelephonyAction({\n action,\n phase: 'failed',\n interactionId: getInteractionId(deps),\n trackingId: wxError.trackingId,\n httpStatus: wxError.status,\n failureReason: wxError.message,\n });\n}\n\nfunction getWxAppTelephonyMetricFailurePayload(\n deps: WxAppVoiceDependencies,\n error: unknown\n): Record<string, string> {\n const wxError = error as WxAppTelephonyError;\n const payload: Record<string, string> = {\n taskId: getInteractionId(deps) ?? '',\n error: error instanceof Error ? error.toString() : String(error),\n };\n\n if (wxError.trackingId) {\n payload.trackingId = wxError.trackingId;\n }\n\n return payload;\n}\n\ntype AqmWrappedError = {\n details?: Failure;\n};\n\nfunction getWxAppOutdialDeclineFailurePayload(\n deps: WxAppVoiceDependencies,\n error: unknown\n): EventPayload {\n const base: EventPayload = {\n taskId: getInteractionId(deps) ?? '',\n error: error instanceof Error ? error.toString() : String(error),\n };\n const aqmDetails = (error as AqmWrappedError).details;\n\n if (aqmDetails) {\n return {...base, ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(aqmDetails)};\n }\n\n return getWxAppTelephonyMetricFailurePayload(deps, error);\n}\n\nfunction logWxAppOutdialDeclineFailure(deps: WxAppVoiceDependencies, error: unknown): void {\n const aqmDetails = (error as AqmWrappedError).details;\n const wxError = error as WxAppTelephonyError;\n\n logWxAppTelephonyAction({\n action: 'decline',\n phase: 'failed',\n interactionId: getInteractionId(deps),\n trackingId: aqmDetails?.trackingId ?? wxError.trackingId,\n httpStatus: wxError.status,\n failureReason: aqmDetails?.data?.reason ?? wxError.message,\n });\n}\n\nfunction assertWxAppEnabled(deps: WxAppVoiceDependencies): void {\n if (!deps.enableWxBetterTogether) {\n logWxAppValidationFailure('enableWxBetterTogether_disabled', getInteractionId(deps));\n throw new Error('enableWxBetterTogether is disabled');\n }\n\n if (!deps.answerCallOnWebexService) {\n logWxAppValidationFailure('answer_call_on_webex_service_unavailable', getInteractionId(deps));\n throw new Error('AnswerCallOnWebexService is unavailable');\n }\n}\n\nexport async function acceptOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'accept', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n if (!isWebexAppCallingOffer(deps)) {\n logWxAppValidationFailure('not_wxApp_calling_offer', interactionId);\n throw new Error('Task is not a wxApp calling offer');\n }\n\n const details = getCallingDeviceDetails(deps);\n if (!details) {\n logWxAppValidationFailure('wxApp_device_details_unavailable', interactionId);\n throw new Error('WxApp calling device details are unavailable');\n }\n\n await deps.answerCallOnWebexService.answerCall({\n callId: details.deviceCallId,\n endpointId: details.deviceId,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId),\n });\n logWxAppTelephonyAction({action: 'accept', phase: 'success', interactionId});\n}\n\nexport async function rejectOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'decline', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n if (!isWebexAppInboundCallingOffer(deps)) {\n logWxAppValidationFailure('not_wxApp_inbound_calling_offer', interactionId);\n throw new Error('Task is not a wxApp inbound calling offer');\n }\n\n const details = getCallingDeviceDetails(deps);\n if (!details) {\n logWxAppValidationFailure('wxApp_device_details_unavailable', interactionId);\n throw new Error('WxApp calling device details are unavailable');\n }\n\n await deps.answerCallOnWebexService.rejectCall({\n callId: details.deviceCallId,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId),\n });\n logWxAppTelephonyAction({action: 'decline', phase: 'success', interactionId});\n}\n\nexport async function toggleMuteOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string; muted?: boolean}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'mute', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n const callId = getWebexCallingCallId(deps);\n if (!callId) {\n logWxAppValidationFailure('wxApp_call_id_unavailable', interactionId);\n throw new Error('WxApp call ID is unavailable');\n }\n\n const targetMuted = options?.muted ?? !deps.getWxAppMuted();\n const request = targetMuted\n ? deps.answerCallOnWebexService.muteCall.bind(deps.answerCallOnWebexService)\n : deps.answerCallOnWebexService.unmuteCall.bind(deps.answerCallOnWebexService);\n\n await request({\n callId,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId),\n });\n deps.setWxAppMuted(targetMuted);\n logWxAppTelephonyAction({action: 'mute', phase: 'success', interactionId});\n}\n\nexport async function transmitDtmfOnWebex(\n deps: WxAppVoiceDependencies,\n options: {dtmf: string; lineOwnerId?: string}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'dtmf', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n const callId = getWebexCallingCallId(deps);\n if (!callId) {\n logWxAppValidationFailure('wxApp_call_id_unavailable', interactionId);\n throw new Error('WxApp call ID is unavailable');\n }\n\n LoggerProxy.info('transmitDtmf', {\n module: 'wxAppVoiceMethods',\n method: METHODS.TRANSMIT_DTMF,\n data: {\n interactionId,\n callIdSuffix: callId.length <= 8 ? callId : callId.slice(-8),\n dtmfLength: options.dtmf.length,\n hasLineOwnerId: Boolean(options.lineOwnerId),\n },\n });\n\n await deps.answerCallOnWebexService.transmitDtmf({\n callId,\n dtmf: options.dtmf,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options.lineOwnerId),\n });\n logWxAppTelephonyAction({action: 'dtmf', phase: 'success', interactionId});\n}\n\nexport async function runWxAppAccept(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED,\n ]);\n\n try {\n lifecycle.setWxAppAcceptInFlight(true);\n lifecycle.setWxAppAnswerPending(true);\n await acceptOnWebex(deps, options);\n lifecycle.resetWxAppMuted();\n await lifecycle.syncWxAppMuteFromCallDetails();\n\n deps.metricsManager.trackEvent(METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS, {taskId}, [\n 'operational',\n 'behavioral',\n ]);\n } catch (error) {\n lifecycle.setWxAppAnswerPending(false);\n logTelephonyFailure('accept', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED,\n getWxAppTelephonyMetricFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.ACCEPT);\n } finally {\n lifecycle.setWxAppAcceptInFlight(false);\n }\n}\n\nexport async function runWxAppReject(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n ]);\n\n try {\n await rejectOnWebex(deps, options);\n\n deps.metricsManager.trackEvent(METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {taskId}, [\n 'operational',\n 'behavioral',\n ]);\n } catch (error) {\n logTelephonyFailure('decline', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n getWxAppTelephonyMetricFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.REJECT);\n }\n}\n\nexport async function runWxAppOutdialDecline<T>(\n deps: WxAppVoiceDependencies,\n executeCancel: () => Promise<T>\n): Promise<T> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n ]);\n\n try {\n const result = await executeCancel();\n\n deps.metricsManager.trackEvent(METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {taskId}, [\n 'operational',\n 'behavioral',\n ]);\n\n return result;\n } catch (error) {\n logWxAppOutdialDeclineFailure(deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n getWxAppOutdialDeclineFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n throw error;\n }\n}\n\nexport async function runWxAppToggleMute(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: TaskToggleMuteOptions\n): Promise<void> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED,\n ]);\n\n try {\n await toggleMuteOnWebex(deps, options);\n\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS,\n {taskId, targetMuted: deps.getWxAppMuted()},\n ['operational', 'behavioral']\n );\n } catch (error) {\n logTelephonyFailure('mute', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED,\n getWxAppTelephonyMetricFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.TOGGLE_MUTE);\n }\n}\n\nexport async function runWxAppTransmitDtmf(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options: TaskTransmitDtmfOptions\n): Promise<void> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED,\n ]);\n\n try {\n await transmitDtmfOnWebex(deps, options);\n\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS,\n {taskId, dtmfLength: options.dtmf.length},\n ['operational', 'behavioral']\n );\n } catch (error) {\n logTelephonyFailure('dtmf', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED,\n getWxAppTelephonyMetricFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.TRANSMIT_DTMF);\n }\n}\n\nexport function mapWxAppVoiceError(error: unknown, method: string, module: string): never {\n if (\n error instanceof Error &&\n (error as Error & {isWxAppTelephonyError?: boolean}).isWxAppTelephonyError\n ) {\n throw error;\n }\n\n const {error: detailedError} = getErrorDetails(error, method, module);\n throw detailedError;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","_Utils","_stateMachine","_MetricsManager","_constants2","_WebexCallingUtils","_wxAppDiagnosticLogging","e","__esModule","default","isWxAppParticipant","participant","deviceType","deviceCallId","trim","deviceId","isOutdialTask","deps","getTaskData","interaction","outboundType","getWxAppAgentParticipant","taskData","participants","agentId","undefined","Object","values","find","id","getWxAppParticipantDiagnostics","hasDeviceCallId","hasDeviceId","participantDeviceType","hasValidWxAppParticipant","getWxAppTelephonyMetricContext","diagnostics","getCallingDeviceDetails","getWebexCallingDeviceDetailsForAgent","isWebexAppCallingOffer","enableWxBetterTogether","state","getTaskState","TaskState","OFFERED","details","Boolean","isWebexAppInboundCallingOffer","getWebexCallingCallId","IDLE","WRAPPING_UP","TERMINATED","COMPLETED","getWxAppLineOwnerId","lineOwnerId","resolveWxAppLineOwnerId","override","decodedLineOwnerId","getInteractionId","interactionId","logTelephonyFailure","action","error","wxError","logWxAppTelephonyAction","phase","trackingId","httpStatus","status","failureReason","message","getWxAppTelephonyMetricFailurePayload","payload","taskId","Error","toString","String","getWxAppOutdialDeclineFailurePayload","base","aqmDetails","MetricsManager","getCommonTrackingFieldForAQMResponseFailed","logWxAppOutdialDeclineFailure","data","reason","assertWxAppEnabled","logWxAppValidationFailure","answerCallOnWebexService","acceptOnWebex","options","answerCall","callId","endpointId","rejectOnWebex","rejectCall","toggleMuteOnWebex","targetMuted","muted","getWxAppMuted","request","muteCall","bind","unmuteCall","setWxAppMuted","transmitDtmfOnWebex","LoggerProxy","log","module","method","METHODS","TRANSMIT_DTMF","callIdSuffix","length","slice","dtmfLength","dtmf","hasLineOwnerId","transmitDtmf","runWxAppAccept","lifecycle","acceptReason","metricsManager","timeEvent","METRIC_EVENT_NAMES","WXAPP_TASK_ACCEPT_SUCCESS","WXAPP_TASK_ACCEPT_FAILED","setWxAppAcceptInFlight","setWxAppAnswerPending","resetWxAppMuted","syncWxAppMuteFromCallDetails","trackEvent","mapWxAppVoiceError","ACCEPT","runWxAppReject","WXAPP_TASK_DECLINE_SUCCESS","WXAPP_TASK_DECLINE_FAILED","REJECT","runWxAppOutdialDecline","executeCancel","result","runWxAppToggleMute","WXAPP_TASK_MUTE_SUCCESS","WXAPP_TASK_MUTE_FAILED","TOGGLE_MUTE","runWxAppTransmitDtmf","WXAPP_TASK_DTMF_SUCCESS","WXAPP_TASK_DTMF_FAILED","isWxAppTelephonyError","detailedError","getErrorDetails"],"sources":["wxAppVoiceMethods.ts"],"sourcesContent":["import {EventPayload} from '@webex/internal-plugin-metrics/src/metrics.types';\n\nimport AnswerCallOnWebexService, {WxAppTelephonyError} from '../../AnswerCallOnWebexService';\nimport LoggerProxy from '../../../logger-proxy';\nimport {METHODS} from '../../../constants';\nimport {getErrorDetails} from '../../core/Utils';\nimport {Failure} from '../../core/GlobalTypes';\nimport {TaskData, TaskToggleMuteOptions, TaskTransmitDtmfOptions} from '../types';\nimport {TaskState} from '../state-machine';\nimport MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\nimport {\n decodedLineOwnerId,\n getWebexCallingDeviceDetailsForAgent,\n WebexCallingDeviceDetails,\n} from '../WebexCallingUtils';\nimport {\n logWxAppTelephonyAction,\n logWxAppValidationFailure,\n type WxAppAcceptReason,\n type WxAppTelephonyAction,\n} from '../../wxAppDiagnosticLogging';\n\ntype WxAppParticipant = {\n deviceType?: string;\n deviceCallId?: string;\n deviceId?: string;\n};\n\nexport type WxAppVoiceDependencies = {\n enableWxBetterTogether: boolean;\n answerCallOnWebexService?: AnswerCallOnWebexService;\n agentId?: string;\n metricsManager: MetricsManager;\n getTaskData: () => TaskData;\n getTaskState: () => TaskState | undefined;\n getWxAppMuted: () => boolean;\n setWxAppMuted: (muted: boolean) => void;\n /** Read-only observability: whether usersub answer-calls-on-wxcc is active this session. */\n getUsersubPublished?: () => boolean;\n};\n\nexport type WxAppParticipantDiagnostics = {\n participantDeviceType?: string;\n hasDeviceCallId: boolean;\n hasDeviceId: boolean;\n hasValidWxAppParticipant: boolean;\n};\n\n/** @deprecated Use {@link WxAppVoiceDependencies} */\nexport type WxAppVoiceDeps = WxAppVoiceDependencies;\n\nexport type WxAppVoiceLifecycle = {\n setWxAppAcceptInFlight: (inFlight: boolean) => void;\n setWxAppAnswerPending: (pending: boolean) => void;\n resetWxAppMuted: () => void;\n syncWxAppMuteFromCallDetails: () => Promise<boolean | undefined>;\n mapWxAppVoiceError: (error: unknown, method: string) => never;\n};\n\nconst isWxAppParticipant = (participant: unknown): participant is WxAppParticipant =>\n (participant as WxAppParticipant)?.deviceType === 'wxApp' &&\n typeof (participant as WxAppParticipant)?.deviceCallId === 'string' &&\n (participant as WxAppParticipant).deviceCallId.trim() !== '' &&\n typeof (participant as WxAppParticipant)?.deviceId === 'string' &&\n (participant as WxAppParticipant).deviceId.trim() !== '';\n\nconst isOutdialTask = (deps: WxAppVoiceDependencies): boolean =>\n deps.getTaskData()?.interaction?.outboundType === 'OUTDIAL';\n\nfunction getWxAppAgentParticipant(deps: WxAppVoiceDependencies): unknown {\n const taskData = deps.getTaskData();\n const participants = taskData.interaction?.participants;\n const agentId = deps.agentId ?? taskData.agentId;\n\n if (!participants || !agentId) {\n return undefined;\n }\n\n if (participants[agentId]) {\n return participants[agentId];\n }\n\n return Object.values(participants).find(\n (participant) => (participant as {id?: string})?.id === agentId\n );\n}\n\nexport function getWxAppParticipantDiagnostics(\n deps: WxAppVoiceDependencies\n): WxAppParticipantDiagnostics {\n const participant = getWxAppAgentParticipant(deps) as WxAppParticipant | undefined;\n const hasDeviceCallId =\n typeof participant?.deviceCallId === 'string' && participant.deviceCallId.trim() !== '';\n const hasDeviceId =\n typeof participant?.deviceId === 'string' && participant.deviceId.trim() !== '';\n\n return {\n participantDeviceType: participant?.deviceType,\n hasDeviceCallId,\n hasDeviceId,\n hasValidWxAppParticipant: isWxAppParticipant(participant),\n };\n}\n\nfunction getWxAppTelephonyMetricContext(\n deps: WxAppVoiceDependencies\n): Record<string, boolean | string> {\n const diagnostics = getWxAppParticipantDiagnostics(deps);\n\n return {\n hasDeviceCallId: diagnostics.hasDeviceCallId,\n hasDeviceId: diagnostics.hasDeviceId,\n };\n}\n\nexport function getCallingDeviceDetails(\n deps: WxAppVoiceDependencies\n): WebexCallingDeviceDetails | undefined {\n const taskData = deps.getTaskData();\n const participant = getWxAppAgentParticipant(deps);\n\n if (!isWxAppParticipant(participant)) {\n return undefined;\n }\n\n return getWebexCallingDeviceDetailsForAgent(\n deps.agentId ?? taskData.agentId,\n taskData.interaction?.participants\n );\n}\n\nexport function isWebexAppCallingOffer(deps: WxAppVoiceDependencies): boolean {\n if (!deps.enableWxBetterTogether) {\n return false;\n }\n\n const state = deps.getTaskState();\n if (state !== TaskState.OFFERED) {\n return false;\n }\n\n const details = getCallingDeviceDetails(deps);\n\n return Boolean(details);\n}\n\n/** Inbound wxApp offer only — outdial decline uses CC routing, not telephony reject. */\nexport function isWebexAppInboundCallingOffer(deps: WxAppVoiceDependencies): boolean {\n return isWebexAppCallingOffer(deps) && !isOutdialTask(deps);\n}\n\nexport function getWebexCallingCallId(deps: WxAppVoiceDependencies): string | null {\n const state = deps.getTaskState();\n if (\n !state ||\n state === TaskState.OFFERED ||\n state === TaskState.IDLE ||\n state === TaskState.WRAPPING_UP ||\n state === TaskState.TERMINATED ||\n state === TaskState.COMPLETED\n ) {\n return null;\n }\n\n return getCallingDeviceDetails(deps)?.deviceCallId ?? null;\n}\n\nexport function getWxAppLineOwnerId(deps: WxAppVoiceDependencies): string | undefined {\n const participant = getWxAppAgentParticipant(deps) as {lineOwnerId?: string} | undefined;\n const lineOwnerId = participant?.lineOwnerId;\n\n return typeof lineOwnerId === 'string' && lineOwnerId.trim() !== '' ? lineOwnerId : undefined;\n}\n\nexport function resolveWxAppLineOwnerId(\n deps: WxAppVoiceDependencies,\n override?: string\n): string | undefined {\n if (typeof override === 'string' && override.trim() !== '') {\n return override;\n }\n\n return decodedLineOwnerId(getWxAppLineOwnerId(deps));\n}\n\nfunction getInteractionId(deps: WxAppVoiceDependencies): string | undefined {\n return deps.getTaskData()?.interactionId;\n}\n\nfunction logTelephonyFailure(\n action: WxAppTelephonyAction,\n deps: WxAppVoiceDependencies,\n error: unknown\n): void {\n const wxError = error as WxAppTelephonyError;\n logWxAppTelephonyAction({\n action,\n phase: 'failed',\n interactionId: getInteractionId(deps),\n trackingId: wxError.trackingId,\n httpStatus: wxError.status,\n failureReason: wxError.message,\n });\n}\n\nfunction getWxAppTelephonyMetricFailurePayload(\n deps: WxAppVoiceDependencies,\n error: unknown\n): Record<string, string | boolean> {\n const wxError = error as WxAppTelephonyError;\n const payload: Record<string, string | boolean> = {\n taskId: getInteractionId(deps) ?? '',\n error: error instanceof Error ? error.toString() : String(error),\n ...getWxAppTelephonyMetricContext(deps),\n };\n\n if (wxError.trackingId) {\n payload.trackingId = wxError.trackingId;\n }\n\n return payload;\n}\n\ntype AqmWrappedError = {\n details?: Failure;\n};\n\nfunction getWxAppOutdialDeclineFailurePayload(\n deps: WxAppVoiceDependencies,\n error: unknown\n): EventPayload {\n const base: EventPayload = {\n taskId: getInteractionId(deps) ?? '',\n error: error instanceof Error ? error.toString() : String(error),\n };\n const aqmDetails = (error as AqmWrappedError).details;\n\n if (aqmDetails) {\n return {\n ...base,\n ...getWxAppTelephonyMetricContext(deps),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(aqmDetails),\n };\n }\n\n return getWxAppTelephonyMetricFailurePayload(deps, error);\n}\n\nfunction logWxAppOutdialDeclineFailure(deps: WxAppVoiceDependencies, error: unknown): void {\n const aqmDetails = (error as AqmWrappedError).details;\n const wxError = error as WxAppTelephonyError;\n\n logWxAppTelephonyAction({\n action: 'decline',\n phase: 'failed',\n interactionId: getInteractionId(deps),\n trackingId: aqmDetails?.trackingId ?? wxError.trackingId,\n httpStatus: wxError.status,\n failureReason: aqmDetails?.data?.reason ?? wxError.message,\n });\n}\n\nfunction assertWxAppEnabled(deps: WxAppVoiceDependencies): void {\n if (!deps.enableWxBetterTogether) {\n logWxAppValidationFailure('enableWxBetterTogether_disabled', getInteractionId(deps));\n throw new Error('enableWxBetterTogether is disabled');\n }\n\n if (!deps.answerCallOnWebexService) {\n logWxAppValidationFailure('answer_call_on_webex_service_unavailable', getInteractionId(deps));\n throw new Error('AnswerCallOnWebexService is unavailable');\n }\n}\n\nexport async function acceptOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'accept', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n if (!isWebexAppCallingOffer(deps)) {\n logWxAppValidationFailure('not_wxApp_calling_offer', interactionId);\n throw new Error('Task is not a wxApp calling offer');\n }\n\n const details = getCallingDeviceDetails(deps);\n if (!details) {\n logWxAppValidationFailure('wxApp_device_details_unavailable', interactionId);\n throw new Error('WxApp calling device details are unavailable');\n }\n\n await deps.answerCallOnWebexService.answerCall({\n callId: details.deviceCallId,\n endpointId: details.deviceId,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId),\n });\n logWxAppTelephonyAction({action: 'accept', phase: 'success', interactionId});\n}\n\nexport async function rejectOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'decline', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n if (!isWebexAppInboundCallingOffer(deps)) {\n logWxAppValidationFailure('not_wxApp_inbound_calling_offer', interactionId);\n throw new Error('Task is not a wxApp inbound calling offer');\n }\n\n const details = getCallingDeviceDetails(deps);\n if (!details) {\n logWxAppValidationFailure('wxApp_device_details_unavailable', interactionId);\n throw new Error('WxApp calling device details are unavailable');\n }\n\n await deps.answerCallOnWebexService.rejectCall({\n callId: details.deviceCallId,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId),\n });\n logWxAppTelephonyAction({action: 'decline', phase: 'success', interactionId});\n}\n\nexport async function toggleMuteOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string; muted?: boolean}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'mute', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n const callId = getWebexCallingCallId(deps);\n if (!callId) {\n logWxAppValidationFailure('wxApp_call_id_unavailable', interactionId);\n throw new Error('WxApp call ID is unavailable');\n }\n\n const targetMuted = options?.muted ?? !deps.getWxAppMuted();\n const request = targetMuted\n ? deps.answerCallOnWebexService.muteCall.bind(deps.answerCallOnWebexService)\n : deps.answerCallOnWebexService.unmuteCall.bind(deps.answerCallOnWebexService);\n\n await request({\n callId,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId),\n });\n deps.setWxAppMuted(targetMuted);\n logWxAppTelephonyAction({action: 'mute', phase: 'success', interactionId});\n}\n\nexport async function transmitDtmfOnWebex(\n deps: WxAppVoiceDependencies,\n options: {dtmf: string; lineOwnerId?: string}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'dtmf', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n const callId = getWebexCallingCallId(deps);\n if (!callId) {\n logWxAppValidationFailure('wxApp_call_id_unavailable', interactionId);\n throw new Error('WxApp call ID is unavailable');\n }\n\n LoggerProxy.log('transmitDtmf', {\n module: 'wxAppVoiceMethods',\n method: METHODS.TRANSMIT_DTMF,\n data: {\n interactionId,\n callIdSuffix: callId.length <= 8 ? callId : callId.slice(-8),\n dtmfLength: options.dtmf.length,\n hasLineOwnerId: Boolean(options.lineOwnerId),\n },\n });\n\n await deps.answerCallOnWebexService.transmitDtmf({\n callId,\n dtmf: options.dtmf,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options.lineOwnerId),\n });\n logWxAppTelephonyAction({action: 'dtmf', phase: 'success', interactionId});\n}\n\nexport type WxAppAcceptRejectOptions = {\n lineOwnerId?: string;\n acceptReason?: WxAppAcceptReason;\n};\n\nexport async function runWxAppAccept(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: WxAppAcceptRejectOptions\n): Promise<void> {\n const taskId = getInteractionId(deps);\n const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED,\n ]);\n\n try {\n lifecycle.setWxAppAcceptInFlight(true);\n lifecycle.setWxAppAnswerPending(true);\n await acceptOnWebex(deps, options);\n lifecycle.resetWxAppMuted();\n await lifecycle.syncWxAppMuteFromCallDetails();\n\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS,\n {taskId, acceptReason, ...getWxAppTelephonyMetricContext(deps)},\n ['operational', 'behavioral']\n );\n } catch (error) {\n lifecycle.setWxAppAnswerPending(false);\n logTelephonyFailure('accept', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED,\n {acceptReason, ...getWxAppTelephonyMetricFailurePayload(deps, error)},\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.ACCEPT);\n } finally {\n lifecycle.setWxAppAcceptInFlight(false);\n }\n}\n\nexport async function runWxAppReject(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: WxAppAcceptRejectOptions\n): Promise<void> {\n const taskId = getInteractionId(deps);\n const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n ]);\n\n try {\n await rejectOnWebex(deps, options);\n\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS,\n {taskId, acceptReason, ...getWxAppTelephonyMetricContext(deps)},\n ['operational', 'behavioral']\n );\n } catch (error) {\n logTelephonyFailure('decline', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n {acceptReason, ...getWxAppTelephonyMetricFailurePayload(deps, error)},\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.REJECT);\n }\n}\n\nexport type WxAppOutdialDeclineOptions = {\n acceptReason?: WxAppAcceptReason;\n};\n\nexport async function runWxAppOutdialDecline<T>(\n deps: WxAppVoiceDependencies,\n executeCancel: () => Promise<T>,\n options?: WxAppOutdialDeclineOptions\n): Promise<T> {\n const taskId = getInteractionId(deps);\n const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n ]);\n\n try {\n const result = await executeCancel();\n\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS,\n {taskId, acceptReason, ...getWxAppTelephonyMetricContext(deps)},\n ['operational', 'behavioral']\n );\n\n return result;\n } catch (error) {\n logWxAppOutdialDeclineFailure(deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n {acceptReason, ...getWxAppOutdialDeclineFailurePayload(deps, error)},\n ['operational', 'behavioral']\n );\n throw error;\n }\n}\n\nexport async function runWxAppToggleMute(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: TaskToggleMuteOptions\n): Promise<void> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED,\n ]);\n\n try {\n await toggleMuteOnWebex(deps, options);\n\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS,\n {taskId, targetMuted: deps.getWxAppMuted(), ...getWxAppTelephonyMetricContext(deps)},\n ['operational', 'behavioral']\n );\n } catch (error) {\n logTelephonyFailure('mute', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED,\n getWxAppTelephonyMetricFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.TOGGLE_MUTE);\n }\n}\n\nexport async function runWxAppTransmitDtmf(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options: TaskTransmitDtmfOptions\n): Promise<void> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED,\n ]);\n\n try {\n await transmitDtmfOnWebex(deps, options);\n\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS,\n {taskId, dtmfLength: options.dtmf.length, ...getWxAppTelephonyMetricContext(deps)},\n ['operational', 'behavioral']\n );\n } catch (error) {\n logTelephonyFailure('dtmf', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED,\n getWxAppTelephonyMetricFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.TRANSMIT_DTMF);\n }\n}\n\nexport function mapWxAppVoiceError(error: unknown, method: string, module: string): never {\n if (\n error instanceof Error &&\n (error as Error & {isWxAppTelephonyError?: boolean}).isWxAppTelephonyError\n ) {\n throw error;\n }\n\n const {error: detailedError} = getErrorDetails(error, method, module);\n throw detailedError;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,6 +8,7 @@ exports.callIdSuffix = callIdSuffix;
|
|
|
8
8
|
exports.deriveWxAppAcceptReason = deriveWxAppAcceptReason;
|
|
9
9
|
exports.logWxAppMercuryMuteSync = logWxAppMercuryMuteSync;
|
|
10
10
|
exports.logWxAppOfferDecision = logWxAppOfferDecision;
|
|
11
|
+
exports.logWxAppOfferParticipantMismatch = logWxAppOfferParticipantMismatch;
|
|
11
12
|
exports.logWxAppSessionReadiness = logWxAppSessionReadiness;
|
|
12
13
|
exports.logWxAppTelephonyAction = logWxAppTelephonyAction;
|
|
13
14
|
exports.logWxAppValidationFailure = logWxAppValidationFailure;
|
|
@@ -22,8 +23,14 @@ function callIdSuffix(callId) {
|
|
|
22
23
|
}
|
|
23
24
|
return callId.length <= 8 ? callId : callId.slice(-8);
|
|
24
25
|
}
|
|
25
|
-
function
|
|
26
|
-
|
|
26
|
+
function formatLogSuffix(data, keys) {
|
|
27
|
+
const entries = keys ? keys.map(key => [key, data[key]]) : Object.entries(data).filter(([key]) => key !== 'feature' && key !== 'event');
|
|
28
|
+
const parts = entries.filter(([, value]) => value !== undefined && value !== null && value !== '').map(([key, value]) => `${key}=${String(value)}`);
|
|
29
|
+
return parts.length > 0 ? ` ${parts.join(' ')}` : '';
|
|
30
|
+
}
|
|
31
|
+
function logWxApp(message, method, data, suffixKeys) {
|
|
32
|
+
const suffix = formatLogSuffix(data, suffixKeys);
|
|
33
|
+
_loggerProxy.default.log(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {
|
|
27
34
|
module: 'wxAppDiagnosticLogging',
|
|
28
35
|
method,
|
|
29
36
|
data: {
|
|
@@ -32,8 +39,20 @@ function logWxApp(message, method, data) {
|
|
|
32
39
|
}
|
|
33
40
|
});
|
|
34
41
|
}
|
|
35
|
-
function
|
|
36
|
-
|
|
42
|
+
function logWxAppWarn(message, method, data, suffixKeys) {
|
|
43
|
+
const suffix = formatLogSuffix(data, suffixKeys);
|
|
44
|
+
_loggerProxy.default.warn(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {
|
|
45
|
+
module: 'wxAppDiagnosticLogging',
|
|
46
|
+
method,
|
|
47
|
+
data: {
|
|
48
|
+
feature: WXAPP_LOG_FEATURE,
|
|
49
|
+
...data
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function logWxAppError(message, method, data, suffixKeys) {
|
|
54
|
+
const suffix = formatLogSuffix(data, suffixKeys);
|
|
55
|
+
_loggerProxy.default.error(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {
|
|
37
56
|
module: 'wxAppDiagnosticLogging',
|
|
38
57
|
method,
|
|
39
58
|
data: {
|
|
@@ -43,7 +62,7 @@ function logWxAppError(message, method, data) {
|
|
|
43
62
|
});
|
|
44
63
|
}
|
|
45
64
|
function logWxAppSessionReadiness(params) {
|
|
46
|
-
|
|
65
|
+
const data = {
|
|
47
66
|
event: 'session_readiness',
|
|
48
67
|
enableWxBetterTogether: params.enableWxBetterTogether,
|
|
49
68
|
loginOption: params.loginOption,
|
|
@@ -52,7 +71,8 @@ function logWxAppSessionReadiness(params) {
|
|
|
52
71
|
mercurySubscribed: params.mercurySubscribed,
|
|
53
72
|
telephonyTaskType: params.telephonyTaskType,
|
|
54
73
|
skipReason: params.skipReason
|
|
55
|
-
}
|
|
74
|
+
};
|
|
75
|
+
logWxApp('session readiness', 'logWxAppSessionReadiness', data, ['usersubPublished', 'mercurySubscribed', 'loginOption', 'enableWxBetterTogether', 'telephonyTaskType', 'skipReason']);
|
|
56
76
|
}
|
|
57
77
|
function deriveWxAppAcceptReason(params) {
|
|
58
78
|
if (params.isWxAppInboundOffer || params.isWxAppOutdialOffer) {
|
|
@@ -76,15 +96,32 @@ function deriveWxAppAcceptReason(params) {
|
|
|
76
96
|
return 'extension_non_wxApp_offer';
|
|
77
97
|
}
|
|
78
98
|
function logWxAppOfferDecision(params) {
|
|
79
|
-
|
|
99
|
+
const data = {
|
|
80
100
|
event: 'offer_decision',
|
|
81
101
|
interactionId: params.interactionId,
|
|
82
102
|
acceptVisible: params.acceptVisible,
|
|
83
103
|
acceptEnabled: params.acceptEnabled,
|
|
84
104
|
acceptReason: params.acceptReason,
|
|
85
105
|
wxAppParticipantDeviceType: params.wxAppParticipantDeviceType,
|
|
86
|
-
hasDeviceCallId: params.hasDeviceCallId
|
|
87
|
-
|
|
106
|
+
hasDeviceCallId: params.hasDeviceCallId,
|
|
107
|
+
hasDeviceId: params.hasDeviceId,
|
|
108
|
+
usersubPublished: params.usersubPublished
|
|
109
|
+
};
|
|
110
|
+
logWxApp('offer decision', 'logWxAppOfferDecision', data, ['acceptReason', 'hasDeviceCallId', 'hasDeviceId', 'usersubPublished', 'interactionId', 'acceptVisible', 'acceptEnabled']);
|
|
111
|
+
}
|
|
112
|
+
function logWxAppOfferParticipantMismatch(params) {
|
|
113
|
+
const data = {
|
|
114
|
+
event: 'participant_fields_mismatch',
|
|
115
|
+
interactionId: params.interactionId,
|
|
116
|
+
usersubPublished: params.usersubPublished,
|
|
117
|
+
hasDeviceCallId: params.hasDeviceCallId,
|
|
118
|
+
hasDeviceId: params.hasDeviceId,
|
|
119
|
+
participantDeviceType: params.participantDeviceType ?? 'missing',
|
|
120
|
+
acceptVisible: params.acceptVisible,
|
|
121
|
+
acceptEnabled: params.acceptEnabled,
|
|
122
|
+
acceptReason: params.acceptReason
|
|
123
|
+
};
|
|
124
|
+
logWxAppWarn('participant fields mismatch', 'logWxAppOfferParticipantMismatch', data, ['usersubPublished', 'hasDeviceCallId', 'hasDeviceId', 'acceptReason', 'interactionId', 'participantDeviceType']);
|
|
88
125
|
}
|
|
89
126
|
function logWxAppTelephonyAction(params) {
|
|
90
127
|
const payload = {
|
|
@@ -97,9 +134,9 @@ function logWxAppTelephonyAction(params) {
|
|
|
97
134
|
failureReason: params.failureReason
|
|
98
135
|
};
|
|
99
136
|
if (params.phase === 'failed') {
|
|
100
|
-
logWxAppError(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);
|
|
137
|
+
logWxAppError(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload, ['interactionId', 'trackingId', 'httpStatus', 'failureReason']);
|
|
101
138
|
} else {
|
|
102
|
-
logWxApp(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);
|
|
139
|
+
logWxApp(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload, ['interactionId', 'action', 'phase']);
|
|
103
140
|
}
|
|
104
141
|
}
|
|
105
142
|
function logWxAppValidationFailure(reason, interactionId) {
|
|
@@ -107,7 +144,7 @@ function logWxAppValidationFailure(reason, interactionId) {
|
|
|
107
144
|
event: 'validation_failed',
|
|
108
145
|
reason,
|
|
109
146
|
interactionId
|
|
110
|
-
});
|
|
147
|
+
}, ['reason', 'interactionId']);
|
|
111
148
|
}
|
|
112
149
|
function logWxAppMercuryMuteSync(params) {
|
|
113
150
|
logWxApp(`mercury mute sync ${params.phase}`, 'logWxAppMercuryMuteSync', {
|
|
@@ -117,6 +154,6 @@ function logWxAppMercuryMuteSync(params) {
|
|
|
117
154
|
callIdSuffix: params.callIdSuffix,
|
|
118
155
|
interactionId: params.interactionId,
|
|
119
156
|
dropReason: params.dropReason
|
|
120
|
-
});
|
|
157
|
+
}, ['phase', 'muted', 'callIdSuffix', 'interactionId', 'dropReason']);
|
|
121
158
|
}
|
|
122
159
|
//# sourceMappingURL=wxAppDiagnosticLogging.js.map
|