@webex/contact-center 3.12.0-llmrefactor.7 → 3.12.0-llmrefactor.9
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 +3 -2
- package/ai-docs/CONTRACTS.md +3 -2
- package/dist/cc.js +108 -6
- package/dist/cc.js.map +1 -1
- package/dist/metrics/MetricsManager.js +16 -0
- package/dist/metrics/MetricsManager.js.map +1 -1
- package/dist/metrics/behavioral-events.js +91 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +16 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/AnswerCallOnWebexService.js +34 -6
- package/dist/services/AnswerCallOnWebexService.js.map +1 -1
- package/dist/services/WebexCrossClientService.js +54 -3
- package/dist/services/WebexCrossClientService.js.map +1 -1
- package/dist/services/WxAppTelephonyMercurySync.js +21 -6
- package/dist/services/WxAppTelephonyMercurySync.js.map +1 -1
- package/dist/services/task/state-machine/TaskStateMachine.js +0 -17
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -1
- package/dist/services/task/state-machine/guards.js +7 -37
- package/dist/services/task/state-machine/guards.js.map +1 -1
- package/dist/services/task/voice/Voice.js +81 -14
- package/dist/services/task/voice/Voice.js.map +1 -1
- package/dist/services/task/voice/wxAppVoiceMethods.js +154 -1
- package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -1
- package/dist/services/wxAppDiagnosticLogging.js +122 -0
- package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
- package/dist/types/cc.d.ts +1 -0
- package/dist/types/metrics/MetricsManager.d.ts +6 -0
- package/dist/types/metrics/constants.d.ts +15 -0
- package/dist/types/services/AnswerCallOnWebexService.d.ts +1 -0
- package/dist/types/services/WebexCrossClientService.d.ts +4 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +0 -42
- package/dist/types/services/task/state-machine/guards.d.ts +4 -4
- package/dist/types/services/task/voice/Voice.d.ts +5 -1
- package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +3 -0
- package/dist/types/services/wxAppDiagnosticLogging.d.ts +51 -0
- package/dist/webex.js +1 -1
- package/package.json +8 -8
- package/src/cc.ts +155 -7
- package/src/metrics/MetricsManager.ts +16 -0
- package/src/metrics/ai-docs/metrics-spec.md +71 -9
- package/src/metrics/behavioral-events.ts +92 -0
- package/src/metrics/constants.ts +18 -0
- package/src/services/AnswerCallOnWebexService.ts +41 -8
- package/src/services/WebexCrossClientService.ts +85 -4
- package/src/services/WxAppTelephonyMercurySync.ts +31 -4
- package/src/services/agent/ai-docs/agent-spec.md +1 -0
- package/src/services/task/ai-docs/task-spec.md +17 -16
- package/src/services/task/state-machine/TaskStateMachine.ts +0 -20
- package/src/services/task/state-machine/ai-docs/AGENTS.md +2 -4
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +8 -9
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +5 -7
- package/src/services/task/state-machine/guards.ts +7 -63
- package/src/services/task/voice/Voice.ts +115 -26
- package/src/services/task/voice/wxAppVoiceMethods.ts +211 -2
- package/src/services/wxAppDiagnosticLogging.ts +174 -0
- package/test/unit/spec/cc.ts +251 -22
- package/test/unit/spec/metrics/MetricsManager.ts +25 -0
- package/test/unit/spec/metrics/behavioral-events.ts +42 -0
- package/test/unit/spec/services/AnswerCallOnWebexService.ts +41 -0
- package/test/unit/spec/services/WebexCrossClientService.ts +207 -1
- package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +23 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +72 -46
- package/test/unit/spec/services/task/state-machine/guards.ts +6 -6
- package/test/unit/spec/services/task/voice/Voice.ts +380 -0
- package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +145 -1
- package/test/unit/spec/services/wxAppDiagnosticLogging.ts +143 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
|
@@ -13,6 +13,7 @@ exports.mapWxAppVoiceError = mapWxAppVoiceError;
|
|
|
13
13
|
exports.rejectOnWebex = rejectOnWebex;
|
|
14
14
|
exports.resolveWxAppLineOwnerId = resolveWxAppLineOwnerId;
|
|
15
15
|
exports.runWxAppAccept = runWxAppAccept;
|
|
16
|
+
exports.runWxAppOutdialDecline = runWxAppOutdialDecline;
|
|
16
17
|
exports.runWxAppReject = runWxAppReject;
|
|
17
18
|
exports.runWxAppToggleMute = runWxAppToggleMute;
|
|
18
19
|
exports.runWxAppTransmitDtmf = runWxAppTransmitDtmf;
|
|
@@ -22,7 +23,10 @@ var _loggerProxy = _interopRequireDefault(require("../../../logger-proxy"));
|
|
|
22
23
|
var _constants = require("../../../constants");
|
|
23
24
|
var _Utils = require("../../core/Utils");
|
|
24
25
|
var _stateMachine = require("../state-machine");
|
|
26
|
+
var _MetricsManager = _interopRequireDefault(require("../../../metrics/MetricsManager"));
|
|
27
|
+
var _constants2 = require("../../../metrics/constants");
|
|
25
28
|
var _WebexCallingUtils = require("../WebexCallingUtils");
|
|
29
|
+
var _wxAppDiagnosticLogging = require("../../wxAppDiagnosticLogging");
|
|
26
30
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
27
31
|
/** @deprecated Use {@link WxAppVoiceDependencies} */
|
|
28
32
|
|
|
@@ -82,21 +86,82 @@ function resolveWxAppLineOwnerId(deps, override) {
|
|
|
82
86
|
}
|
|
83
87
|
return (0, _WebexCallingUtils.decodedLineOwnerId)(getWxAppLineOwnerId(deps));
|
|
84
88
|
}
|
|
89
|
+
function getInteractionId(deps) {
|
|
90
|
+
return deps.getTaskData()?.interactionId;
|
|
91
|
+
}
|
|
92
|
+
function logTelephonyFailure(action, deps, error) {
|
|
93
|
+
const wxError = error;
|
|
94
|
+
(0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
|
|
95
|
+
action,
|
|
96
|
+
phase: 'failed',
|
|
97
|
+
interactionId: getInteractionId(deps),
|
|
98
|
+
trackingId: wxError.trackingId,
|
|
99
|
+
httpStatus: wxError.status,
|
|
100
|
+
failureReason: wxError.message
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
function getWxAppTelephonyMetricFailurePayload(deps, error) {
|
|
104
|
+
const wxError = error;
|
|
105
|
+
const payload = {
|
|
106
|
+
taskId: getInteractionId(deps) ?? '',
|
|
107
|
+
error: error instanceof Error ? error.toString() : String(error)
|
|
108
|
+
};
|
|
109
|
+
if (wxError.trackingId) {
|
|
110
|
+
payload.trackingId = wxError.trackingId;
|
|
111
|
+
}
|
|
112
|
+
return payload;
|
|
113
|
+
}
|
|
114
|
+
function getWxAppOutdialDeclineFailurePayload(deps, error) {
|
|
115
|
+
const base = {
|
|
116
|
+
taskId: getInteractionId(deps) ?? '',
|
|
117
|
+
error: error instanceof Error ? error.toString() : String(error)
|
|
118
|
+
};
|
|
119
|
+
const aqmDetails = error.details;
|
|
120
|
+
if (aqmDetails) {
|
|
121
|
+
return {
|
|
122
|
+
...base,
|
|
123
|
+
..._MetricsManager.default.getCommonTrackingFieldForAQMResponseFailed(aqmDetails)
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return getWxAppTelephonyMetricFailurePayload(deps, error);
|
|
127
|
+
}
|
|
128
|
+
function logWxAppOutdialDeclineFailure(deps, error) {
|
|
129
|
+
const aqmDetails = error.details;
|
|
130
|
+
const wxError = error;
|
|
131
|
+
(0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
|
|
132
|
+
action: 'decline',
|
|
133
|
+
phase: 'failed',
|
|
134
|
+
interactionId: getInteractionId(deps),
|
|
135
|
+
trackingId: aqmDetails?.trackingId ?? wxError.trackingId,
|
|
136
|
+
httpStatus: wxError.status,
|
|
137
|
+
failureReason: aqmDetails?.data?.reason ?? wxError.message
|
|
138
|
+
});
|
|
139
|
+
}
|
|
85
140
|
function assertWxAppEnabled(deps) {
|
|
86
141
|
if (!deps.enableWxBetterTogether) {
|
|
142
|
+
(0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('enableWxBetterTogether_disabled', getInteractionId(deps));
|
|
87
143
|
throw new Error('enableWxBetterTogether is disabled');
|
|
88
144
|
}
|
|
89
145
|
if (!deps.answerCallOnWebexService) {
|
|
146
|
+
(0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('answer_call_on_webex_service_unavailable', getInteractionId(deps));
|
|
90
147
|
throw new Error('AnswerCallOnWebexService is unavailable');
|
|
91
148
|
}
|
|
92
149
|
}
|
|
93
150
|
async function acceptOnWebex(deps, options) {
|
|
151
|
+
const interactionId = getInteractionId(deps);
|
|
152
|
+
(0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
|
|
153
|
+
action: 'accept',
|
|
154
|
+
phase: 'started',
|
|
155
|
+
interactionId
|
|
156
|
+
});
|
|
94
157
|
assertWxAppEnabled(deps);
|
|
95
158
|
if (!isWebexAppCallingOffer(deps)) {
|
|
159
|
+
(0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('not_wxApp_calling_offer', interactionId);
|
|
96
160
|
throw new Error('Task is not a wxApp calling offer');
|
|
97
161
|
}
|
|
98
162
|
const details = getCallingDeviceDetails(deps);
|
|
99
163
|
if (!details) {
|
|
164
|
+
(0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('wxApp_device_details_unavailable', interactionId);
|
|
100
165
|
throw new Error('WxApp calling device details are unavailable');
|
|
101
166
|
}
|
|
102
167
|
await deps.answerCallOnWebexService.answerCall({
|
|
@@ -104,25 +169,50 @@ async function acceptOnWebex(deps, options) {
|
|
|
104
169
|
endpointId: details.deviceId,
|
|
105
170
|
lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId)
|
|
106
171
|
});
|
|
172
|
+
(0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
|
|
173
|
+
action: 'accept',
|
|
174
|
+
phase: 'success',
|
|
175
|
+
interactionId
|
|
176
|
+
});
|
|
107
177
|
}
|
|
108
178
|
async function rejectOnWebex(deps, options) {
|
|
179
|
+
const interactionId = getInteractionId(deps);
|
|
180
|
+
(0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
|
|
181
|
+
action: 'decline',
|
|
182
|
+
phase: 'started',
|
|
183
|
+
interactionId
|
|
184
|
+
});
|
|
109
185
|
assertWxAppEnabled(deps);
|
|
110
186
|
if (!isWebexAppInboundCallingOffer(deps)) {
|
|
187
|
+
(0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('not_wxApp_inbound_calling_offer', interactionId);
|
|
111
188
|
throw new Error('Task is not a wxApp inbound calling offer');
|
|
112
189
|
}
|
|
113
190
|
const details = getCallingDeviceDetails(deps);
|
|
114
191
|
if (!details) {
|
|
192
|
+
(0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('wxApp_device_details_unavailable', interactionId);
|
|
115
193
|
throw new Error('WxApp calling device details are unavailable');
|
|
116
194
|
}
|
|
117
195
|
await deps.answerCallOnWebexService.rejectCall({
|
|
118
196
|
callId: details.deviceCallId,
|
|
119
197
|
lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId)
|
|
120
198
|
});
|
|
199
|
+
(0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
|
|
200
|
+
action: 'decline',
|
|
201
|
+
phase: 'success',
|
|
202
|
+
interactionId
|
|
203
|
+
});
|
|
121
204
|
}
|
|
122
205
|
async function toggleMuteOnWebex(deps, options) {
|
|
206
|
+
const interactionId = getInteractionId(deps);
|
|
207
|
+
(0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
|
|
208
|
+
action: 'mute',
|
|
209
|
+
phase: 'started',
|
|
210
|
+
interactionId
|
|
211
|
+
});
|
|
123
212
|
assertWxAppEnabled(deps);
|
|
124
213
|
const callId = getWebexCallingCallId(deps);
|
|
125
214
|
if (!callId) {
|
|
215
|
+
(0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('wxApp_call_id_unavailable', interactionId);
|
|
126
216
|
throw new Error('WxApp call ID is unavailable');
|
|
127
217
|
}
|
|
128
218
|
const targetMuted = options?.muted ?? !deps.getWxAppMuted();
|
|
@@ -132,18 +222,31 @@ async function toggleMuteOnWebex(deps, options) {
|
|
|
132
222
|
lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId)
|
|
133
223
|
});
|
|
134
224
|
deps.setWxAppMuted(targetMuted);
|
|
225
|
+
(0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
|
|
226
|
+
action: 'mute',
|
|
227
|
+
phase: 'success',
|
|
228
|
+
interactionId
|
|
229
|
+
});
|
|
135
230
|
}
|
|
136
231
|
async function transmitDtmfOnWebex(deps, options) {
|
|
232
|
+
const interactionId = getInteractionId(deps);
|
|
233
|
+
(0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
|
|
234
|
+
action: 'dtmf',
|
|
235
|
+
phase: 'started',
|
|
236
|
+
interactionId
|
|
237
|
+
});
|
|
137
238
|
assertWxAppEnabled(deps);
|
|
138
239
|
const callId = getWebexCallingCallId(deps);
|
|
139
240
|
if (!callId) {
|
|
241
|
+
(0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('wxApp_call_id_unavailable', interactionId);
|
|
140
242
|
throw new Error('WxApp call ID is unavailable');
|
|
141
243
|
}
|
|
142
244
|
_loggerProxy.default.info('transmitDtmf', {
|
|
143
245
|
module: 'wxAppVoiceMethods',
|
|
144
246
|
method: _constants.METHODS.TRANSMIT_DTMF,
|
|
145
247
|
data: {
|
|
146
|
-
|
|
248
|
+
interactionId,
|
|
249
|
+
callIdSuffix: callId.length <= 8 ? callId : callId.slice(-8),
|
|
147
250
|
dtmfLength: options.dtmf.length,
|
|
148
251
|
hasLineOwnerId: Boolean(options.lineOwnerId)
|
|
149
252
|
}
|
|
@@ -153,39 +256,89 @@ async function transmitDtmfOnWebex(deps, options) {
|
|
|
153
256
|
dtmf: options.dtmf,
|
|
154
257
|
lineOwnerId: resolveWxAppLineOwnerId(deps, options.lineOwnerId)
|
|
155
258
|
});
|
|
259
|
+
(0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
|
|
260
|
+
action: 'dtmf',
|
|
261
|
+
phase: 'success',
|
|
262
|
+
interactionId
|
|
263
|
+
});
|
|
156
264
|
}
|
|
157
265
|
async function runWxAppAccept(deps, lifecycle, options) {
|
|
266
|
+
const taskId = getInteractionId(deps);
|
|
267
|
+
deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED]);
|
|
158
268
|
try {
|
|
159
269
|
lifecycle.setWxAppAcceptInFlight(true);
|
|
160
270
|
lifecycle.setWxAppAnswerPending(true);
|
|
161
271
|
await acceptOnWebex(deps, options);
|
|
162
272
|
lifecycle.resetWxAppMuted();
|
|
163
273
|
await lifecycle.syncWxAppMuteFromCallDetails();
|
|
274
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS, {
|
|
275
|
+
taskId
|
|
276
|
+
}, ['operational', 'behavioral']);
|
|
164
277
|
} catch (error) {
|
|
165
278
|
lifecycle.setWxAppAnswerPending(false);
|
|
279
|
+
logTelephonyFailure('accept', deps, error);
|
|
280
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED, getWxAppTelephonyMetricFailurePayload(deps, error), ['operational', 'behavioral']);
|
|
166
281
|
lifecycle.mapWxAppVoiceError(error, _constants.METHODS.ACCEPT);
|
|
167
282
|
} finally {
|
|
168
283
|
lifecycle.setWxAppAcceptInFlight(false);
|
|
169
284
|
}
|
|
170
285
|
}
|
|
171
286
|
async function runWxAppReject(deps, lifecycle, options) {
|
|
287
|
+
const taskId = getInteractionId(deps);
|
|
288
|
+
deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED]);
|
|
172
289
|
try {
|
|
173
290
|
await rejectOnWebex(deps, options);
|
|
291
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {
|
|
292
|
+
taskId
|
|
293
|
+
}, ['operational', 'behavioral']);
|
|
174
294
|
} catch (error) {
|
|
295
|
+
logTelephonyFailure('decline', deps, error);
|
|
296
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED, getWxAppTelephonyMetricFailurePayload(deps, error), ['operational', 'behavioral']);
|
|
175
297
|
lifecycle.mapWxAppVoiceError(error, _constants.METHODS.REJECT);
|
|
176
298
|
}
|
|
177
299
|
}
|
|
300
|
+
async function runWxAppOutdialDecline(deps, executeCancel) {
|
|
301
|
+
const taskId = getInteractionId(deps);
|
|
302
|
+
deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED]);
|
|
303
|
+
try {
|
|
304
|
+
const result = await executeCancel();
|
|
305
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {
|
|
306
|
+
taskId
|
|
307
|
+
}, ['operational', 'behavioral']);
|
|
308
|
+
return result;
|
|
309
|
+
} catch (error) {
|
|
310
|
+
logWxAppOutdialDeclineFailure(deps, error);
|
|
311
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED, getWxAppOutdialDeclineFailurePayload(deps, error), ['operational', 'behavioral']);
|
|
312
|
+
throw error;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
178
315
|
async function runWxAppToggleMute(deps, lifecycle, options) {
|
|
316
|
+
const taskId = getInteractionId(deps);
|
|
317
|
+
deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED]);
|
|
179
318
|
try {
|
|
180
319
|
await toggleMuteOnWebex(deps, options);
|
|
320
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS, {
|
|
321
|
+
taskId,
|
|
322
|
+
targetMuted: deps.getWxAppMuted()
|
|
323
|
+
}, ['operational', 'behavioral']);
|
|
181
324
|
} catch (error) {
|
|
325
|
+
logTelephonyFailure('mute', deps, error);
|
|
326
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED, getWxAppTelephonyMetricFailurePayload(deps, error), ['operational', 'behavioral']);
|
|
182
327
|
lifecycle.mapWxAppVoiceError(error, _constants.METHODS.TOGGLE_MUTE);
|
|
183
328
|
}
|
|
184
329
|
}
|
|
185
330
|
async function runWxAppTransmitDtmf(deps, lifecycle, options) {
|
|
331
|
+
const taskId = getInteractionId(deps);
|
|
332
|
+
deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED]);
|
|
186
333
|
try {
|
|
187
334
|
await transmitDtmfOnWebex(deps, options);
|
|
335
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS, {
|
|
336
|
+
taskId,
|
|
337
|
+
dtmfLength: options.dtmf.length
|
|
338
|
+
}, ['operational', 'behavioral']);
|
|
188
339
|
} catch (error) {
|
|
340
|
+
logTelephonyFailure('dtmf', deps, error);
|
|
341
|
+
deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED, getWxAppTelephonyMetricFailurePayload(deps, error), ['operational', 'behavioral']);
|
|
189
342
|
lifecycle.mapWxAppVoiceError(error, _constants.METHODS.TRANSMIT_DTMF);
|
|
190
343
|
}
|
|
191
344
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","_Utils","_stateMachine","_WebexCallingUtils","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","assertWxAppEnabled","Error","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","data","dtmfLength","dtmf","length","hasLineOwnerId","transmitDtmf","runWxAppAccept","lifecycle","setWxAppAcceptInFlight","setWxAppAnswerPending","resetWxAppMuted","syncWxAppMuteFromCallDetails","error","mapWxAppVoiceError","ACCEPT","runWxAppReject","REJECT","runWxAppToggleMute","TOGGLE_MUTE","runWxAppTransmitDtmf","isWxAppTelephonyError","detailedError","getErrorDetails"],"sources":["wxAppVoiceMethods.ts"],"sourcesContent":["import AnswerCallOnWebexService from '../../AnswerCallOnWebexService';\nimport LoggerProxy from '../../../logger-proxy';\nimport {METHODS} from '../../../constants';\nimport {getErrorDetails} from '../../core/Utils';\nimport {TaskData, TaskToggleMuteOptions, TaskTransmitDtmfOptions} from '../types';\nimport {TaskState} from '../state-machine';\nimport {\n decodedLineOwnerId,\n getWebexCallingDeviceDetailsForAgent,\n WebexCallingDeviceDetails,\n} from '../WebexCallingUtils';\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 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 assertWxAppEnabled(deps: WxAppVoiceDependencies): void {\n if (!deps.enableWxBetterTogether) {\n throw new Error('enableWxBetterTogether is disabled');\n }\n\n if (!deps.answerCallOnWebexService) {\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 assertWxAppEnabled(deps);\n\n if (!isWebexAppCallingOffer(deps)) {\n throw new Error('Task is not a wxApp calling offer');\n }\n\n const details = getCallingDeviceDetails(deps);\n if (!details) {\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}\n\nexport async function rejectOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n assertWxAppEnabled(deps);\n\n if (!isWebexAppInboundCallingOffer(deps)) {\n throw new Error('Task is not a wxApp inbound calling offer');\n }\n\n const details = getCallingDeviceDetails(deps);\n if (!details) {\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}\n\nexport async function toggleMuteOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string; muted?: boolean}\n): Promise<void> {\n assertWxAppEnabled(deps);\n\n const callId = getWebexCallingCallId(deps);\n if (!callId) {\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}\n\nexport async function transmitDtmfOnWebex(\n deps: WxAppVoiceDependencies,\n options: {dtmf: string; lineOwnerId?: string}\n): Promise<void> {\n assertWxAppEnabled(deps);\n\n const callId = getWebexCallingCallId(deps);\n if (!callId) {\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 callId,\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}\n\nexport async function runWxAppAccept(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n try {\n lifecycle.setWxAppAcceptInFlight(true);\n lifecycle.setWxAppAnswerPending(true);\n await acceptOnWebex(deps, options);\n lifecycle.resetWxAppMuted();\n await lifecycle.syncWxAppMuteFromCallDetails();\n } catch (error) {\n lifecycle.setWxAppAnswerPending(false);\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 try {\n await rejectOnWebex(deps, options);\n } catch (error) {\n lifecycle.mapWxAppVoiceError(error, METHODS.REJECT);\n }\n}\n\nexport async function runWxAppToggleMute(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: TaskToggleMuteOptions\n): Promise<void> {\n try {\n await toggleMuteOnWebex(deps, options);\n } catch (error) {\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 try {\n await transmitDtmfOnWebex(deps, options);\n } catch (error) {\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","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":[]}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.WXAPP_LOG_PREFIX = exports.WXAPP_LOG_FEATURE = void 0;
|
|
7
|
+
exports.callIdSuffix = callIdSuffix;
|
|
8
|
+
exports.deriveWxAppAcceptReason = deriveWxAppAcceptReason;
|
|
9
|
+
exports.logWxAppMercuryMuteSync = logWxAppMercuryMuteSync;
|
|
10
|
+
exports.logWxAppOfferDecision = logWxAppOfferDecision;
|
|
11
|
+
exports.logWxAppSessionReadiness = logWxAppSessionReadiness;
|
|
12
|
+
exports.logWxAppTelephonyAction = logWxAppTelephonyAction;
|
|
13
|
+
exports.logWxAppValidationFailure = logWxAppValidationFailure;
|
|
14
|
+
var _loggerProxy = _interopRequireDefault(require("../logger-proxy"));
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
const WXAPP_LOG_FEATURE = exports.WXAPP_LOG_FEATURE = 'wxApp';
|
|
17
|
+
const WXAPP_LOG_PREFIX = exports.WXAPP_LOG_PREFIX = '[CC wxApp]';
|
|
18
|
+
/** Last 8 chars of callId for correlation without logging full id. */
|
|
19
|
+
function callIdSuffix(callId) {
|
|
20
|
+
if (!callId) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
return callId.length <= 8 ? callId : callId.slice(-8);
|
|
24
|
+
}
|
|
25
|
+
function logWxApp(message, method, data) {
|
|
26
|
+
_loggerProxy.default.info(`${WXAPP_LOG_PREFIX} ${message}`, {
|
|
27
|
+
module: 'wxAppDiagnosticLogging',
|
|
28
|
+
method,
|
|
29
|
+
data: {
|
|
30
|
+
feature: WXAPP_LOG_FEATURE,
|
|
31
|
+
...data
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function logWxAppError(message, method, data) {
|
|
36
|
+
_loggerProxy.default.error(`${WXAPP_LOG_PREFIX} ${message}`, {
|
|
37
|
+
module: 'wxAppDiagnosticLogging',
|
|
38
|
+
method,
|
|
39
|
+
data: {
|
|
40
|
+
feature: WXAPP_LOG_FEATURE,
|
|
41
|
+
...data
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function logWxAppSessionReadiness(params) {
|
|
46
|
+
logWxApp('session readiness', 'logWxAppSessionReadiness', {
|
|
47
|
+
event: 'session_readiness',
|
|
48
|
+
enableWxBetterTogether: params.enableWxBetterTogether,
|
|
49
|
+
loginOption: params.loginOption,
|
|
50
|
+
wxAppHooksApplied: params.wxAppHooksApplied,
|
|
51
|
+
usersubPublished: params.usersubPublished,
|
|
52
|
+
mercurySubscribed: params.mercurySubscribed,
|
|
53
|
+
telephonyTaskType: params.telephonyTaskType,
|
|
54
|
+
skipReason: params.skipReason
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function deriveWxAppAcceptReason(params) {
|
|
58
|
+
if (params.isWxAppInboundOffer || params.isWxAppOutdialOffer) {
|
|
59
|
+
if (params.wxAppAcceptInFlight) {
|
|
60
|
+
return 'wxApp_accept_in_flight';
|
|
61
|
+
}
|
|
62
|
+
if (params.wxAppAnswerPending) {
|
|
63
|
+
return 'wxApp_answer_pending';
|
|
64
|
+
}
|
|
65
|
+
return 'wxApp_offer_ready';
|
|
66
|
+
}
|
|
67
|
+
if (params.isWebrtc && !params.isOutdial) {
|
|
68
|
+
return 'browser_webrtc_offer';
|
|
69
|
+
}
|
|
70
|
+
if (params.isOutdial) {
|
|
71
|
+
return 'outdial_auto_answer';
|
|
72
|
+
}
|
|
73
|
+
if (params.enableWxBetterTogether && !params.hasDeviceCallId) {
|
|
74
|
+
return 'extension_non_wxApp_offer';
|
|
75
|
+
}
|
|
76
|
+
return 'extension_non_wxApp_offer';
|
|
77
|
+
}
|
|
78
|
+
function logWxAppOfferDecision(params) {
|
|
79
|
+
logWxApp('offer decision', 'logWxAppOfferDecision', {
|
|
80
|
+
event: 'offer_decision',
|
|
81
|
+
interactionId: params.interactionId,
|
|
82
|
+
acceptVisible: params.acceptVisible,
|
|
83
|
+
acceptEnabled: params.acceptEnabled,
|
|
84
|
+
acceptReason: params.acceptReason,
|
|
85
|
+
wxAppParticipantDeviceType: params.wxAppParticipantDeviceType,
|
|
86
|
+
hasDeviceCallId: params.hasDeviceCallId
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function logWxAppTelephonyAction(params) {
|
|
90
|
+
const payload = {
|
|
91
|
+
event: 'telephony_action',
|
|
92
|
+
action: params.action,
|
|
93
|
+
phase: params.phase,
|
|
94
|
+
interactionId: params.interactionId,
|
|
95
|
+
trackingId: params.trackingId,
|
|
96
|
+
httpStatus: params.httpStatus,
|
|
97
|
+
failureReason: params.failureReason
|
|
98
|
+
};
|
|
99
|
+
if (params.phase === 'failed') {
|
|
100
|
+
logWxAppError(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);
|
|
101
|
+
} else {
|
|
102
|
+
logWxApp(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function logWxAppValidationFailure(reason, interactionId) {
|
|
106
|
+
logWxAppError('validation failed', 'logWxAppValidationFailure', {
|
|
107
|
+
event: 'validation_failed',
|
|
108
|
+
reason,
|
|
109
|
+
interactionId
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function logWxAppMercuryMuteSync(params) {
|
|
113
|
+
logWxApp(`mercury mute sync ${params.phase}`, 'logWxAppMercuryMuteSync', {
|
|
114
|
+
event: 'mercury_mute_sync',
|
|
115
|
+
phase: params.phase,
|
|
116
|
+
muted: params.muted,
|
|
117
|
+
callIdSuffix: params.callIdSuffix,
|
|
118
|
+
interactionId: params.interactionId,
|
|
119
|
+
dropReason: params.dropReason
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=wxAppDiagnosticLogging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","e","__esModule","default","WXAPP_LOG_FEATURE","exports","WXAPP_LOG_PREFIX","callIdSuffix","callId","undefined","length","slice","logWxApp","message","method","data","LoggerProxy","info","module","feature","logWxAppError","error","logWxAppSessionReadiness","params","event","enableWxBetterTogether","loginOption","wxAppHooksApplied","usersubPublished","mercurySubscribed","telephonyTaskType","skipReason","deriveWxAppAcceptReason","isWxAppInboundOffer","isWxAppOutdialOffer","wxAppAcceptInFlight","wxAppAnswerPending","isWebrtc","isOutdial","hasDeviceCallId","logWxAppOfferDecision","interactionId","acceptVisible","acceptEnabled","acceptReason","wxAppParticipantDeviceType","logWxAppTelephonyAction","payload","action","phase","trackingId","httpStatus","failureReason","logWxAppValidationFailure","reason","logWxAppMercuryMuteSync","muted","dropReason"],"sources":["wxAppDiagnosticLogging.ts"],"sourcesContent":["import LoggerProxy from '../logger-proxy';\n\nexport const WXAPP_LOG_FEATURE = 'wxApp';\nexport const WXAPP_LOG_PREFIX = '[CC wxApp]';\n\nexport type WxAppAcceptReason =\n | 'wxApp_offer_ready'\n | 'wxApp_answer_pending'\n | 'wxApp_accept_in_flight'\n | 'extension_non_wxApp_offer'\n | 'browser_webrtc_offer'\n | 'outdial_auto_answer';\n\nexport type WxAppSessionSkipReason =\n | 'unsupported_browser_login'\n | 'flag_disabled'\n | 'mercury_subscribe_failed'\n | 'publish_failed';\n\nexport type WxAppTelephonyAction = 'accept' | 'decline' | 'mute' | 'dtmf';\nexport type WxAppTelephonyPhase = 'started' | 'success' | 'failed';\n\ntype WxAppLogData = Record<string, string | boolean | number | undefined>;\n\n/** Last 8 chars of callId for correlation without logging full id. */\nexport function callIdSuffix(callId: string | null | undefined): string | undefined {\n if (!callId) {\n return undefined;\n }\n\n return callId.length <= 8 ? callId : callId.slice(-8);\n}\n\nfunction logWxApp(message: string, method: string, data: WxAppLogData): void {\n LoggerProxy.info(`${WXAPP_LOG_PREFIX} ${message}`, {\n module: 'wxAppDiagnosticLogging',\n method,\n data: {feature: WXAPP_LOG_FEATURE, ...data},\n });\n}\n\nfunction logWxAppError(message: string, method: string, data: WxAppLogData): void {\n LoggerProxy.error(`${WXAPP_LOG_PREFIX} ${message}`, {\n module: 'wxAppDiagnosticLogging',\n method,\n data: {feature: WXAPP_LOG_FEATURE, ...data},\n });\n}\n\nexport function logWxAppSessionReadiness(params: {\n enableWxBetterTogether: boolean;\n loginOption: string | undefined;\n wxAppHooksApplied: boolean;\n usersubPublished: boolean;\n mercurySubscribed: boolean;\n telephonyTaskType: 'Voice' | 'WebRTC' | 'unknown';\n skipReason?: WxAppSessionSkipReason;\n}): void {\n logWxApp('session readiness', 'logWxAppSessionReadiness', {\n event: 'session_readiness',\n enableWxBetterTogether: params.enableWxBetterTogether,\n loginOption: params.loginOption,\n wxAppHooksApplied: params.wxAppHooksApplied,\n usersubPublished: params.usersubPublished,\n mercurySubscribed: params.mercurySubscribed,\n telephonyTaskType: params.telephonyTaskType,\n skipReason: params.skipReason,\n });\n}\n\nexport function deriveWxAppAcceptReason(params: {\n isWxAppInboundOffer: boolean;\n isWxAppOutdialOffer: boolean;\n isWebrtc: boolean;\n isOutdial: boolean;\n wxAppAcceptInFlight: boolean;\n wxAppAnswerPending: boolean;\n enableWxBetterTogether: boolean;\n hasDeviceCallId: boolean;\n}): WxAppAcceptReason {\n if (params.isWxAppInboundOffer || params.isWxAppOutdialOffer) {\n if (params.wxAppAcceptInFlight) {\n return 'wxApp_accept_in_flight';\n }\n if (params.wxAppAnswerPending) {\n return 'wxApp_answer_pending';\n }\n\n return 'wxApp_offer_ready';\n }\n\n if (params.isWebrtc && !params.isOutdial) {\n return 'browser_webrtc_offer';\n }\n\n if (params.isOutdial) {\n return 'outdial_auto_answer';\n }\n\n if (params.enableWxBetterTogether && !params.hasDeviceCallId) {\n return 'extension_non_wxApp_offer';\n }\n\n return 'extension_non_wxApp_offer';\n}\n\nexport function logWxAppOfferDecision(params: {\n interactionId: string;\n acceptVisible: boolean;\n acceptEnabled: boolean;\n acceptReason: WxAppAcceptReason;\n wxAppParticipantDeviceType?: string;\n hasDeviceCallId: boolean;\n}): void {\n logWxApp('offer decision', 'logWxAppOfferDecision', {\n event: 'offer_decision',\n interactionId: params.interactionId,\n acceptVisible: params.acceptVisible,\n acceptEnabled: params.acceptEnabled,\n acceptReason: params.acceptReason,\n wxAppParticipantDeviceType: params.wxAppParticipantDeviceType,\n hasDeviceCallId: params.hasDeviceCallId,\n });\n}\n\nexport function logWxAppTelephonyAction(params: {\n action: WxAppTelephonyAction;\n phase: WxAppTelephonyPhase;\n interactionId?: string;\n trackingId?: string;\n httpStatus?: number | string;\n failureReason?: string;\n}): void {\n const payload: WxAppLogData = {\n event: 'telephony_action',\n action: params.action,\n phase: params.phase,\n interactionId: params.interactionId,\n trackingId: params.trackingId,\n httpStatus: params.httpStatus,\n failureReason: params.failureReason,\n };\n\n if (params.phase === 'failed') {\n logWxAppError(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);\n } else {\n logWxApp(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);\n }\n}\n\nexport function logWxAppValidationFailure(reason: string, interactionId?: string): void {\n logWxAppError('validation failed', 'logWxAppValidationFailure', {\n event: 'validation_failed',\n reason,\n interactionId,\n });\n}\n\nexport function logWxAppMercuryMuteSync(params: {\n phase: 'received' | 'applied' | 'dropped';\n muted?: boolean;\n callIdSuffix?: string;\n interactionId?: string;\n dropReason?: string;\n}): void {\n logWxApp(`mercury mute sync ${params.phase}`, 'logWxAppMercuryMuteSync', {\n event: 'mercury_mute_sync',\n phase: params.phase,\n muted: params.muted,\n callIdSuffix: params.callIdSuffix,\n interactionId: params.interactionId,\n dropReason: params.dropReason,\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/types/cc.d.ts
CHANGED
|
@@ -618,6 +618,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
618
618
|
* @private
|
|
619
619
|
*/
|
|
620
620
|
private resetEnableWxBetterTogetherConfig;
|
|
621
|
+
private getWxAppTelephonyTaskType;
|
|
621
622
|
private ensureWxAppPostStationLogin;
|
|
622
623
|
private clearWxAppFalsePublishRetryTimer;
|
|
623
624
|
private scheduleForcedFalsePublishRetry;
|
|
@@ -178,6 +178,12 @@ export default class MetricsManager {
|
|
|
178
178
|
* MetricsManager.getInstance().timeEvent(['AGENT_LOGIN', 'AGENT_LOGOUT']);
|
|
179
179
|
*/
|
|
180
180
|
timeEvent(keys: string | string[]): void;
|
|
181
|
+
/**
|
|
182
|
+
* Clears a running timed event without emitting a metric.
|
|
183
|
+
* @param keys - A string or array of strings representing event keys (same as timeEvent).
|
|
184
|
+
* @public
|
|
185
|
+
*/
|
|
186
|
+
cancelTimedEvent(keys: string | string[]): void;
|
|
181
187
|
/**
|
|
182
188
|
* Sets the Webex SDK instance and marks the manager as ready when the SDK is ready.
|
|
183
189
|
* @param webex - The Webex SDK instance.
|
|
@@ -130,6 +130,21 @@ export declare const METRIC_EVENT_NAMES: {
|
|
|
130
130
|
readonly TASK_SWITCH_CALL_FAILED: "Task Switch Call Failed";
|
|
131
131
|
readonly TASK_OUTDIAL_SUCCESS: "Task Outdial Success";
|
|
132
132
|
readonly TASK_OUTDIAL_FAILED: "Task Outdial Failed";
|
|
133
|
+
readonly WXAPP_TASK_MUTE_SUCCESS: "WxApp Task Mute Success";
|
|
134
|
+
readonly WXAPP_TASK_MUTE_FAILED: "WxApp Task Mute Failed";
|
|
135
|
+
readonly WXAPP_TASK_DTMF_SUCCESS: "WxApp Task Dtmf Success";
|
|
136
|
+
readonly WXAPP_TASK_DTMF_FAILED: "WxApp Task Dtmf Failed";
|
|
137
|
+
readonly WXAPP_TASK_ACCEPT_SUCCESS: "WxApp Task Accept Success";
|
|
138
|
+
readonly WXAPP_TASK_ACCEPT_FAILED: "WxApp Task Accept Failed";
|
|
139
|
+
readonly WXAPP_TASK_DECLINE_SUCCESS: "WxApp Task Decline Success";
|
|
140
|
+
readonly WXAPP_TASK_DECLINE_FAILED: "WxApp Task Decline Failed";
|
|
141
|
+
readonly WXAPP_SESSION_INIT_SUCCESS: "WxApp Session Init Success";
|
|
142
|
+
readonly WXAPP_SESSION_INIT_FAILED: "WxApp Session Init Failed";
|
|
143
|
+
readonly WXAPP_SESSION_SKIPPED: "WxApp Session Skipped";
|
|
144
|
+
readonly WXAPP_USERSUB_PUBLISH_SUCCESS: "WxApp Usersub Publish Success";
|
|
145
|
+
readonly WXAPP_USERSUB_PUBLISH_FAILED: "WxApp Usersub Publish Failed";
|
|
146
|
+
readonly WXAPP_MERCURY_SUBSCRIBE_SUCCESS: "WxApp Mercury Subscribe Success";
|
|
147
|
+
readonly WXAPP_MERCURY_SUBSCRIBE_FAILED: "WxApp Mercury Subscribe Failed";
|
|
133
148
|
readonly UPLOAD_LOGS_SUCCESS: "Upload Logs Success";
|
|
134
149
|
readonly UPLOAD_LOGS_FAILED: "Upload Logs Failed";
|
|
135
150
|
readonly WEBSOCKET_DEREGISTER_SUCCESS: "Websocket Deregister Success";
|
|
@@ -27,6 +27,7 @@ export default class AnswerCallOnWebexService {
|
|
|
27
27
|
private webex;
|
|
28
28
|
constructor(webex: WebexSDK);
|
|
29
29
|
private getTelephonyBaseUrl;
|
|
30
|
+
private extractTrackingId;
|
|
30
31
|
private telephonyRequest;
|
|
31
32
|
answerCall(params: AnswerCallParams): Promise<IHttpResponse>;
|
|
32
33
|
rejectCall(params: CallIdParams): Promise<IHttpResponse>;
|
|
@@ -10,6 +10,8 @@ export default class WebexCrossClientService {
|
|
|
10
10
|
private appName;
|
|
11
11
|
/** Incremented on teardown/disable to ignore stale refresh timer callbacks. */
|
|
12
12
|
private refreshGeneration;
|
|
13
|
+
/** Monotonic id for usersub publish metrics timers; stale publishes cancel only their own timer. */
|
|
14
|
+
private usersubPublishMetricsId;
|
|
13
15
|
constructor(webex: WebexSDK);
|
|
14
16
|
private extractDeviceIdFromUrl;
|
|
15
17
|
private getDeviceUrl;
|
|
@@ -21,7 +23,9 @@ export default class WebexCrossClientService {
|
|
|
21
23
|
userId?: string;
|
|
22
24
|
ttl?: number;
|
|
23
25
|
appName?: string;
|
|
26
|
+
trackPublishMetrics?: boolean;
|
|
24
27
|
}): Promise<void>;
|
|
28
|
+
private trackUsersubPreflightFailure;
|
|
25
29
|
teardown(): void;
|
|
26
30
|
/** Whether usersub `answer-calls-on-wxcc: true` was successfully published this session. */
|
|
27
31
|
isAnswerCallsStateActive(): boolean;
|