@webex/contact-center 3.12.0-llmrefactor.1 → 3.12.0-llmrefactor.10
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 +7 -5
- package/ai-docs/ARCHITECTURE.md +1 -1
- package/ai-docs/CONTRACTS.md +8 -3
- package/ai-docs/SECURITY.md +1 -1
- package/ai-docs/contact-center-spec.md +22 -4
- package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
- package/dist/cc.js +544 -12
- package/dist/cc.js.map +1 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +10 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.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 +104 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +18 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/AddressBook.js +18 -15
- package/dist/services/AddressBook.js.map +1 -1
- package/dist/services/AnswerCallOnWebexService.js +202 -0
- package/dist/services/AnswerCallOnWebexService.js.map +1 -0
- package/dist/services/EntryPoint.js +46 -68
- package/dist/services/EntryPoint.js.map +1 -1
- package/dist/services/Queue.js +27 -22
- package/dist/services/Queue.js.map +1 -1
- package/dist/services/WebexCrossClientService.js +222 -0
- package/dist/services/WebexCrossClientService.js.map +1 -0
- package/dist/services/WxAppTelephonyMercurySync.js +108 -0
- package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
- package/dist/services/config/Util.js +3 -0
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +10 -6
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/types.js +4 -0
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/WebexRequest.js +6 -2
- package/dist/services/core/WebexRequest.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +28 -14
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/types.js.map +1 -1
- package/dist/services/task/Task.js +73 -7
- package/dist/services/task/Task.js.map +1 -1
- package/dist/services/task/TaskFactory.js +8 -4
- package/dist/services/task/TaskFactory.js.map +1 -1
- package/dist/services/task/TaskManager.js +490 -21
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/WebexCallingUtils.js +70 -0
- package/dist/services/task/WebexCallingUtils.js.map +1 -0
- package/dist/services/task/constants.js +4 -1
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/contact.js +29 -0
- package/dist/services/task/contact.js.map +1 -1
- package/dist/services/task/digital/Digital.js +3 -2
- package/dist/services/task/digital/Digital.js.map +1 -1
- package/dist/services/task/state-machine/TaskStateMachine.js +162 -53
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -1
- package/dist/services/task/state-machine/actions.js +6 -1
- package/dist/services/task/state-machine/actions.js.map +1 -1
- package/dist/services/task/state-machine/guards.js +7 -10
- package/dist/services/task/state-machine/guards.js.map +1 -1
- package/dist/services/task/state-machine/types.js.map +1 -1
- package/dist/services/task/state-machine/uiControlsComputer.js +118 -18
- package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -1
- package/dist/services/task/types.js +16 -1
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +456 -15
- package/dist/services/task/voice/Voice.js.map +1 -1
- package/dist/services/task/voice/WebRTC.js +4 -1
- package/dist/services/task/voice/WebRTC.js.map +1 -1
- package/dist/services/task/voice/wxAppVoiceMethods.js +354 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
- package/dist/services/wxAppDiagnosticLogging.js +122 -0
- package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
- package/dist/services/wxAppTelephonyUtils.js +19 -0
- package/dist/services/wxAppTelephonyUtils.js.map +1 -0
- package/dist/types/cc.d.ts +78 -4
- package/dist/types/config.d.ts +7 -0
- package/dist/types/constants.d.ts +8 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/metrics/MetricsManager.d.ts +6 -0
- package/dist/types/metrics/constants.d.ts +17 -0
- package/dist/types/services/AddressBook.d.ts +2 -1
- package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
- package/dist/types/services/EntryPoint.d.ts +7 -5
- package/dist/types/services/Queue.d.ts +5 -3
- package/dist/types/services/WebexCrossClientService.d.ts +32 -0
- package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
- package/dist/types/services/config/constants.d.ts +8 -5
- package/dist/types/services/config/types.d.ts +17 -4
- package/dist/types/services/core/Err.d.ts +2 -0
- package/dist/types/services/core/WebexRequest.d.ts +1 -0
- package/dist/types/services/core/types.d.ts +2 -0
- package/dist/types/services/task/Task.d.ts +20 -2
- package/dist/types/services/task/TaskFactory.d.ts +2 -1
- package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
- package/dist/types/services/task/constants.d.ts +3 -0
- package/dist/types/services/task/contact.d.ts +4 -0
- package/dist/types/services/task/digital/Digital.d.ts +2 -2
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +304 -56
- package/dist/types/services/task/state-machine/guards.d.ts +6 -5
- package/dist/types/services/task/state-machine/types.d.ts +9 -1
- package/dist/types/services/task/types.d.ts +81 -4
- package/dist/types/services/task/voice/Voice.d.ts +52 -9
- package/dist/types/services/task/voice/WebRTC.d.ts +2 -2
- package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +55 -0
- package/dist/types/services/wxAppDiagnosticLogging.d.ts +51 -0
- package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
- package/dist/types/types.d.ts +14 -8
- package/dist/types/utils/PageCache.d.ts +20 -3
- package/dist/types.js +7 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/PageCache.js +19 -5
- package/dist/utils/PageCache.js.map +1 -1
- package/dist/webex.js +1 -1
- package/package.json +8 -8
- package/src/cc.ts +657 -12
- package/src/config.ts +7 -0
- package/src/constants.ts +8 -0
- package/src/index.ts +2 -0
- package/src/metrics/MetricsManager.ts +16 -0
- package/src/metrics/ai-docs/metrics-spec.md +78 -10
- package/src/metrics/behavioral-events.ts +106 -0
- package/src/metrics/constants.ts +20 -0
- package/src/services/AddressBook.ts +17 -6
- package/src/services/AnswerCallOnWebexService.ts +239 -0
- package/src/services/EntryPoint.ts +59 -60
- package/src/services/Queue.ts +29 -12
- package/src/services/WebexCrossClientService.ts +293 -0
- package/src/services/WxAppTelephonyMercurySync.ts +142 -0
- package/src/services/agent/ai-docs/agent-spec.md +1 -0
- package/src/services/ai-docs/AGENTS.md +10 -10
- package/src/services/ai-docs/services-spec.md +6 -1
- package/src/services/config/Util.ts +3 -0
- package/src/services/config/ai-docs/AGENTS.md +1 -1
- package/src/services/config/ai-docs/ARCHITECTURE.md +2 -2
- package/src/services/config/ai-docs/config-spec.md +6 -0
- package/src/services/config/constants.ts +10 -6
- package/src/services/config/types.ts +16 -4
- package/src/services/core/Err.ts +1 -0
- package/src/services/core/WebexRequest.ts +3 -1
- package/src/services/core/ai-docs/core-spec.md +5 -1
- package/src/services/core/aqm-reqs.ts +30 -15
- package/src/services/core/types.ts +2 -0
- package/src/services/task/Task.ts +79 -8
- package/src/services/task/TaskFactory.ts +8 -3
- package/src/services/task/TaskManager.ts +716 -17
- package/src/services/task/WebexCallingUtils.ts +136 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +1 -0
- package/src/services/task/ai-docs/task-spec.md +156 -3
- package/src/services/task/constants.ts +3 -0
- package/src/services/task/contact.ts +30 -0
- package/src/services/task/digital/Digital.ts +4 -2
- package/src/services/task/state-machine/TaskStateMachine.ts +235 -81
- package/src/services/task/state-machine/actions.ts +5 -2
- package/src/services/task/state-machine/ai-docs/AGENTS.md +6 -4
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +35 -16
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +103 -33
- package/src/services/task/state-machine/guards.ts +7 -10
- package/src/services/task/state-machine/types.ts +16 -1
- package/src/services/task/state-machine/uiControlsComputer.ts +206 -32
- package/src/services/task/types.ts +114 -4
- package/src/services/task/voice/Voice.ts +595 -14
- package/src/services/task/voice/WebRTC.ts +5 -1
- package/src/services/task/voice/wxAppVoiceMethods.ts +516 -0
- package/src/services/wxAppDiagnosticLogging.ts +174 -0
- package/src/services/wxAppTelephonyUtils.ts +14 -0
- package/src/types.ts +33 -9
- package/src/utils/AGENTS.md +21 -10
- package/src/utils/PageCache.ts +38 -5
- package/src/utils/ai-docs/utils-spec.md +21 -11
- package/test/unit/spec/cc.ts +1522 -19
- package/test/unit/spec/metrics/MetricsManager.ts +25 -0
- package/test/unit/spec/metrics/behavioral-events.ts +60 -0
- package/test/unit/spec/services/AddressBook.ts +37 -6
- package/test/unit/spec/services/AnswerCallOnWebexService.ts +264 -0
- package/test/unit/spec/services/EntryPoint.ts +87 -40
- package/test/unit/spec/services/Queue.ts +123 -12
- package/test/unit/spec/services/WebexCrossClientService.ts +467 -0
- package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
- package/test/unit/spec/services/config/Util.ts +85 -0
- package/test/unit/spec/services/core/WebexRequest.ts +3 -1
- package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
- package/test/unit/spec/services/task/Task.ts +274 -6
- package/test/unit/spec/services/task/TaskFactory.ts +39 -2
- package/test/unit/spec/services/task/TaskManager.ts +1717 -9
- package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
- package/test/unit/spec/services/task/contact.ts +33 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +1485 -109
- package/test/unit/spec/services/task/state-machine/guards.ts +210 -8
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +445 -7
- package/test/unit/spec/services/task/voice/Voice.ts +1412 -0
- package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +603 -0
- 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
package/src/config.ts
CHANGED
|
@@ -31,6 +31,13 @@ export default {
|
|
|
31
31
|
* @default false
|
|
32
32
|
*/
|
|
33
33
|
disableWebRTCRegistration: false,
|
|
34
|
+
/**
|
|
35
|
+
* Whether wxApp Better Together is enabled at SDK init.
|
|
36
|
+
* Must be set before SDK init. Default false (WXCC-6026).
|
|
37
|
+
* @type {boolean}
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
enableWxBetterTogether: false,
|
|
34
41
|
/**
|
|
35
42
|
* The type of client making the connection.
|
|
36
43
|
* @type {string}
|
package/src/constants.ts
CHANGED
|
@@ -15,6 +15,7 @@ export const WEBEX_REQUEST_FILE = 'WebexRequest';
|
|
|
15
15
|
export const TASK_MANAGER_FILE = 'TaskManager';
|
|
16
16
|
export const TASK_FILE = 'Task';
|
|
17
17
|
// AGENT OUTDIAL CONSTANTS
|
|
18
|
+
export const INBOUND_DIRECTION = 'INBOUND';
|
|
18
19
|
export const OUTDIAL_DIRECTION = 'OUTBOUND';
|
|
19
20
|
export const ATTRIBUTES = {};
|
|
20
21
|
export const OUTDIAL_MEDIA_TYPE = 'telephony';
|
|
@@ -56,9 +57,11 @@ export const METHODS = {
|
|
|
56
57
|
TRANSFER_CALL: 'transfer',
|
|
57
58
|
CONSULT_TRANSFER: 'consultTransfer',
|
|
58
59
|
CONSULT_CONFERENCE: 'consultConference',
|
|
60
|
+
DROP_CONFERENCE_PARTICIPANT: 'dropConferenceParticipant',
|
|
59
61
|
EXIT_CONFERENCE: 'exitConference',
|
|
60
62
|
TRANSFER_CONFERENCE: 'transferConference',
|
|
61
63
|
TOGGLE_MUTE: 'toggleMute',
|
|
64
|
+
TRANSMIT_DTMF: 'transmitDtmf',
|
|
62
65
|
COMPLETE_TRANSFER: 'completeTransfer',
|
|
63
66
|
GET_OUTDIAL_ANI_ENTRIES: 'getOutdialAniEntries',
|
|
64
67
|
ACCEPT_PREVIEW_CONTACT: 'acceptPreviewContact',
|
|
@@ -69,4 +72,9 @@ export const METHODS = {
|
|
|
69
72
|
GET_REAL_TIME_ASSISTANCE: 'getRealTimeAssistance',
|
|
70
73
|
SEND_REAL_TIME_ASSISTANCE_USER_ACTION: 'sendRealTimeAssistanceUserAction',
|
|
71
74
|
FETCH_HISTORIC_TRANSCRIPTS: 'fetchHistoricTranscripts',
|
|
75
|
+
SET_MANAGE_WEBEX_CALLING_IN_WXCC: 'setManageWebexCallingInWxcc',
|
|
76
|
+
IS_WX_BETTER_TOGETHER_ENABLED: 'isWxBetterTogetherEnabled',
|
|
77
|
+
SYNC_WXAPP_MUTE_FROM_MERCURY: 'syncWxAppMuteFromMercury',
|
|
78
|
+
GET_CALL_DETAILS_ON_WEBEX: 'getCallDetailsOnWebex',
|
|
79
|
+
ENSURE_WXAPP_MERCURY_CONNECTED: 'ensureWxAppMercuryConnected',
|
|
72
80
|
};
|
package/src/index.ts
CHANGED
|
@@ -412,6 +412,22 @@ export default class MetricsManager {
|
|
|
412
412
|
this.runningEvents[genericKey] = {startTime: Date.now(), keys: new Set(keyArray)};
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
+
/**
|
|
416
|
+
* Clears a running timed event without emitting a metric.
|
|
417
|
+
* @param keys - A string or array of strings representing event keys (same as timeEvent).
|
|
418
|
+
* @public
|
|
419
|
+
*/
|
|
420
|
+
public cancelTimedEvent(keys: string | string[]): void {
|
|
421
|
+
if (this.isMetricsDisabled()) {
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
const keyArray = Array.isArray(keys) ? keys : [keys];
|
|
425
|
+
if (keyArray.length === 0) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
delete this.runningEvents[keyArray[0]];
|
|
429
|
+
}
|
|
430
|
+
|
|
415
431
|
/**
|
|
416
432
|
* Sets the Webex SDK instance and marks the manager as ready when the SDK is ready.
|
|
417
433
|
* @param webex - The Webex SDK instance.
|
|
@@ -35,6 +35,8 @@ Metrics is one of nine confirmed Contact Center SDK modules. Own timing, taxonom
|
|
|
35
35
|
|
|
36
36
|
- **Behavioral Taxonomy**: Structured `product.agent.target.verb` naming convention for behavioral events
|
|
37
37
|
|
|
38
|
+
- **Webex Together behavioral naming**: Webex Together (wxApp) events use `*_webex_together` compound targets (e.g. `wxcc_sdk.user.task_accept_webex_together.complete`). Operational/business wire names remain `WXCC_SDK_WXAPP_*` unchanged.
|
|
39
|
+
|
|
38
40
|
- **Payload Preparation**: Automatic cleanup of empty fields, space-to-underscore conversion, and `tabHidden` metadata
|
|
39
41
|
|
|
40
42
|
- **AQM Response Helpers**: Static methods to extract common tracking fields from AQM responses
|
|
@@ -236,10 +238,19 @@ All event names are defined in `METRIC_EVENT_NAMES` (`constants.ts`). Events fol
|
|
|
236
238
|
| `TASK_ACCEPT_CONSULT_SUCCESS` / `FAILED` | `'Task Accept Consult ...'` | Accept consult result |
|
|
237
239
|
| `TASK_AUTO_ANSWER_SUCCESS` / `FAILED` | `'Task Auto Answer ...'` | Auto-answer result |
|
|
238
240
|
| `TASK_OUTDIAL_SUCCESS` / `FAILED` | `'Task Outdial ...'` | Outdial result |
|
|
241
|
+
| `WXAPP_TASK_MUTE_SUCCESS` / `FAILED` | `'WxApp Task Mute ...'` | Webex Together task mute/unmute toggle (`wxcc_sdk.user.task_mute_webex_together.complete\|fail`). Mute telephony is queued per task via tail promise chain (`Voice.wxAppMuteToggleTail`) so concurrent toggles do not overwrite the shared `timeEvent` timer or reorder requests. |
|
|
242
|
+
| `WXAPP_TASK_DTMF_SUCCESS` / `FAILED` | `'WxApp Task Dtmf ...'` | Webex Together DTMF/keypad (`wxcc_sdk.user.task_dtmf_webex_together.complete\|fail`). DTMF telephony is queued per task via tail promise chain (`Voice.wxAppDtmfTail`) so concurrent keypad input does not overwrite the shared `timeEvent` timer or reorder digits. |
|
|
243
|
+
| `WXAPP_TASK_ACCEPT_SUCCESS` / `FAILED` | `'WxApp Task Accept ...'` | Webex Together accept/answer (`wxcc_sdk.user.task_accept_webex_together.complete\|fail`) |
|
|
244
|
+
| `WXAPP_TASK_DECLINE_SUCCESS` / `FAILED` | `'WxApp Task Decline ...'` | Webex Together reject/decline (`wxcc_sdk.user.task_reject_webex_together.complete\|fail`). Inbound offers: telephony `rejectCall` via `runWxAppReject`. wxApp outdial cancellations: CC `cancelTask` via `runWxAppOutdialDecline` (additive with `TASK_DECLINE_*`). Outdial failure payloads merge AQM `error.details` via `getCommonTrackingFieldForAQMResponseFailed` so wxApp metrics and diagnostic logs preserve `trackingId` / structured failure reason. |
|
|
245
|
+
| `WXAPP_SESSION_INIT_SUCCESS` / `FAILED` | `'WxApp Session Init ...'` | Webex Together session orchestration (`wxcc_sdk.user.webex_together_session_init.complete\|fail`) |
|
|
246
|
+
| `WXAPP_SESSION_SKIPPED` | `'WxApp Session Skipped'` | Webex Together session skipped (`wxcc_sdk.user.webex_together_session_init.ignore`) |
|
|
247
|
+
| `WXAPP_USERSUB_PUBLISH_SUCCESS` / `FAILED` | `'WxApp Usersub Publish ...'` | Cross-client usersub publish (`wxcc_sdk.user.webex_together_usersub_publish.complete\|fail`). Preflight failures (missing `userId` or device URL before HTTP publish) emit `WXAPP_USERSUB_PUBLISH_FAILED` with `skipReason` (`user_id_unavailable` / `device_url_unavailable`) and no `timeEvent` timer. Stale-generation discards (teardown or concurrent disable while HTTP publish is in flight) call `cancelTimedEvent` without emitting success/fail only when the completing publish still owns the active timer (`usersubPublishMetricsId` guard — a newer overlapping publish must not have its timer cleared). |
|
|
248
|
+
| `WXAPP_MERCURY_SUBSCRIBE_SUCCESS` / `FAILED` | `'WxApp Mercury Subscribe ...'` | Telephony Mercury mute-sync subscribe (`wxcc_sdk.user.webex_together_mercury_subscribe.complete\|fail`) |
|
|
239
249
|
| `TASK_CONFERENCE_START_SUCCESS` / `FAILED` | `'Task Conference Start ...'` | Conference start result |
|
|
240
250
|
| `TASK_CONFERENCE_END_SUCCESS` / `FAILED` | `'Task Conference End ...'` | Conference end result |
|
|
241
251
|
| `TASK_CONFERENCE_TRANSFER_SUCCESS` / `FAILED` | `'Task Conference Transfer ...'` | Conference transfer result |
|
|
242
252
|
| `TASK_CONFERENCE_EXIT_SUCCESS` / `FAILED` | `'Task Conference Exit ...'` | Conference exit result |
|
|
253
|
+
| `TASK_CONFERENCE_PARTICIPANT_DROP_SUCCESS` / `FAILED` | `'Task Conference Participant Drop ...'` | Participant Drop result |
|
|
243
254
|
| `TASK_SWITCH_CALL_SUCCESS` / `FAILED` | `'Task Switch Call ...'` | Switch call result |
|
|
244
255
|
| `WEBSOCKET_REGISTER_SUCCESS` / `FAILED` | `'Websocket Register ...'` | WebSocket registration result |
|
|
245
256
|
| `WEBSOCKET_DEREGISTER_SUCCESS` / `FAIL` | `'Websocket Deregister ...'` | WebSocket deregistration result |
|
|
@@ -277,8 +288,16 @@ All event names are defined in `constants.ts` as `METRIC_EVENT_NAMES`. Events fo
|
|
|
277
288
|
| Conference End | `TASK_CONFERENCE_END_SUCCESS` | `TASK_CONFERENCE_END_FAILED` |
|
|
278
289
|
| Conference Transfer | `TASK_CONFERENCE_TRANSFER_SUCCESS` | `TASK_CONFERENCE_TRANSFER_FAILED` |
|
|
279
290
|
| Conference Exit | `TASK_CONFERENCE_EXIT_SUCCESS` | `TASK_CONFERENCE_EXIT_FAILED` |
|
|
291
|
+
| Conference Participant Drop | `TASK_CONFERENCE_PARTICIPANT_DROP_SUCCESS` | `TASK_CONFERENCE_PARTICIPANT_DROP_FAILED` |
|
|
280
292
|
| Switch Call | `TASK_SWITCH_CALL_SUCCESS` | `TASK_SWITCH_CALL_FAILED` |
|
|
281
293
|
| Outdial | `TASK_OUTDIAL_SUCCESS` | `TASK_OUTDIAL_FAILED` |
|
|
294
|
+
| WxApp Task Mute | `WXAPP_TASK_MUTE_SUCCESS` | `WXAPP_TASK_MUTE_FAILED` |
|
|
295
|
+
| WxApp Task DTMF | `WXAPP_TASK_DTMF_SUCCESS` | `WXAPP_TASK_DTMF_FAILED` |
|
|
296
|
+
| WxApp Task Accept | `WXAPP_TASK_ACCEPT_SUCCESS` | `WXAPP_TASK_ACCEPT_FAILED` |
|
|
297
|
+
| WxApp Task Decline | `WXAPP_TASK_DECLINE_SUCCESS` | `WXAPP_TASK_DECLINE_FAILED` |
|
|
298
|
+
| WxApp Session Init | `WXAPP_SESSION_INIT_SUCCESS` | `WXAPP_SESSION_INIT_FAILED` |
|
|
299
|
+
| WxApp Usersub Publish | `WXAPP_USERSUB_PUBLISH_SUCCESS` | `WXAPP_USERSUB_PUBLISH_FAILED` |
|
|
300
|
+
| WxApp Mercury Subscribe | `WXAPP_MERCURY_SUBSCRIBE_SUCCESS` | `WXAPP_MERCURY_SUBSCRIBE_FAILED` |
|
|
282
301
|
| Upload Logs | `UPLOAD_LOGS_SUCCESS` | `UPLOAD_LOGS_FAILED` |
|
|
283
302
|
| WebSocket Deregister | `WEBSOCKET_DEREGISTER_SUCCESS` | `WEBSOCKET_DEREGISTER_FAIL` |
|
|
284
303
|
| Device Type Update | `AGENT_DEVICE_TYPE_UPDATE_SUCCESS` | `AGENT_DEVICE_TYPE_UPDATE_FAILED` |
|
|
@@ -287,6 +306,22 @@ All event names are defined in `constants.ts` as `METRIC_EVENT_NAMES`. Events fo
|
|
|
287
306
|
| Queue | `QUEUE_FETCH_SUCCESS` | `QUEUE_FETCH_FAILED` |
|
|
288
307
|
| Outdial ANI Entries | `OUTDIAL_ANI_EP_FETCH_SUCCESS` | `OUTDIAL_ANI_EP_FETCH_FAILED` |
|
|
289
308
|
|
|
309
|
+
### Webex Together behavioral taxonomy
|
|
310
|
+
|
|
311
|
+
Webex Together events (`WXAPP_*` constants) use `*_webex_together` compound targets. Assembled Amplitude names follow `wxcc_sdk.user.{target}.{verb}`:
|
|
312
|
+
|
|
313
|
+
| Feature | Behavioral target | Success name | Failure name | Skip name |
|
|
314
|
+
|---|---|---|---|---|
|
|
315
|
+
| Task accept / answer | `task_accept_webex_together` | `wxcc_sdk.user.task_accept_webex_together.complete` | `wxcc_sdk.user.task_accept_webex_together.fail` | — |
|
|
316
|
+
| Task reject / decline | `task_reject_webex_together` | `wxcc_sdk.user.task_reject_webex_together.complete` | `wxcc_sdk.user.task_reject_webex_together.fail` | — |
|
|
317
|
+
| Task mute / unmute toggle | `task_mute_webex_together` | `wxcc_sdk.user.task_mute_webex_together.complete` | `wxcc_sdk.user.task_mute_webex_together.fail` | — |
|
|
318
|
+
| Task DTMF / keypad | `task_dtmf_webex_together` | `wxcc_sdk.user.task_dtmf_webex_together.complete` | `wxcc_sdk.user.task_dtmf_webex_together.fail` | — |
|
|
319
|
+
| Usersub publish | `webex_together_usersub_publish` | `wxcc_sdk.user.webex_together_usersub_publish.complete` | `wxcc_sdk.user.webex_together_usersub_publish.fail` | — |
|
|
320
|
+
| Mercury subscribe | `webex_together_mercury_subscribe` | `wxcc_sdk.user.webex_together_mercury_subscribe.complete` | `wxcc_sdk.user.webex_together_mercury_subscribe.fail` | — |
|
|
321
|
+
| Session init | `webex_together_session_init` | `wxcc_sdk.user.webex_together_session_init.complete` | `wxcc_sdk.user.webex_together_session_init.fail` | `wxcc_sdk.user.webex_together_session_init.ignore` |
|
|
322
|
+
|
|
323
|
+
Operational and business wire names are unchanged (`WXCC_SDK_WXAPP_*`).
|
|
324
|
+
|
|
290
325
|
Special events (no success/failure pair):
|
|
291
326
|
|
|
292
327
|
- `AGENT_RONA` — has behavioral taxonomy (`service.agent_rona.set`)
|
|
@@ -297,11 +332,13 @@ Special events (no success/failure pair):
|
|
|
297
332
|
|
|
298
333
|
- `WEBSOCKET_EVENT_RECEIVED` — **no** behavioral taxonomy (not in `eventTaxonomyMap`)
|
|
299
334
|
|
|
300
|
-
|
|
335
|
+
- `WXAPP_SESSION_SKIPPED` — has behavioral taxonomy (`wxcc_sdk.user.webex_together_session_init.ignore`)
|
|
336
|
+
|
|
337
|
+
Of the 107 defined metric names, 96 have behavioral taxonomy and 11 do not. Events **without** an `eventTaxonomyMap` entry are the eight `AI_ASSISTANT_*` names plus `WEBSOCKET_DEREGISTER_SUCCESS`, `WEBSOCKET_DEREGISTER_FAIL`, and `WEBSOCKET_EVENT_RECEIVED`.
|
|
301
338
|
|
|
302
339
|
### Complete METRIC_EVENT_NAMES catalog
|
|
303
340
|
|
|
304
|
-
This table contains all
|
|
341
|
+
This table contains all 107 names from `src/metrics/constants.ts`; taxonomy presence is checked against `src/metrics/behavioral-events.ts`: 96 mapped and 11 unmapped.
|
|
305
342
|
|
|
306
343
|
| Constant | Emitted name | Behavioral taxonomy? |
|
|
307
344
|
|---|---|---|
|
|
@@ -354,10 +391,27 @@ This table contains all 80 names from `src/metrics/constants.ts`; taxonomy prese
|
|
|
354
391
|
| `TASK_CONFERENCE_TRANSFER_FAILED` | `Task Conference Transfer Failed` | yes |
|
|
355
392
|
| `TASK_CONFERENCE_EXIT_SUCCESS` | `Task Conference Exit Success` | yes |
|
|
356
393
|
| `TASK_CONFERENCE_EXIT_FAILED` | `Task Conference Exit Failed` | yes |
|
|
394
|
+
| `TASK_CONFERENCE_PARTICIPANT_DROP_SUCCESS` | `Task Conference Participant Drop Success` | yes |
|
|
395
|
+
| `TASK_CONFERENCE_PARTICIPANT_DROP_FAILED` | `Task Conference Participant Drop Failed` | yes |
|
|
357
396
|
| `TASK_SWITCH_CALL_SUCCESS` | `Task Switch Call Success` | yes |
|
|
358
397
|
| `TASK_SWITCH_CALL_FAILED` | `Task Switch Call Failed` | yes |
|
|
359
398
|
| `TASK_OUTDIAL_SUCCESS` | `Task Outdial Success` | yes |
|
|
360
399
|
| `TASK_OUTDIAL_FAILED` | `Task Outdial Failed` | yes |
|
|
400
|
+
| `WXAPP_TASK_MUTE_SUCCESS` | `WxApp Task Mute Success` | yes |
|
|
401
|
+
| `WXAPP_TASK_MUTE_FAILED` | `WxApp Task Mute Failed` | yes |
|
|
402
|
+
| `WXAPP_TASK_DTMF_SUCCESS` | `WxApp Task Dtmf Success` | yes |
|
|
403
|
+
| `WXAPP_TASK_DTMF_FAILED` | `WxApp Task Dtmf Failed` | yes |
|
|
404
|
+
| `WXAPP_TASK_ACCEPT_SUCCESS` | `WxApp Task Accept Success` | yes |
|
|
405
|
+
| `WXAPP_TASK_ACCEPT_FAILED` | `WxApp Task Accept Failed` | yes |
|
|
406
|
+
| `WXAPP_TASK_DECLINE_SUCCESS` | `WxApp Task Decline Success` | yes |
|
|
407
|
+
| `WXAPP_TASK_DECLINE_FAILED` | `WxApp Task Decline Failed` | yes |
|
|
408
|
+
| `WXAPP_SESSION_INIT_SUCCESS` | `WxApp Session Init Success` | yes |
|
|
409
|
+
| `WXAPP_SESSION_INIT_FAILED` | `WxApp Session Init Failed` | yes |
|
|
410
|
+
| `WXAPP_SESSION_SKIPPED` | `WxApp Session Skipped` | yes |
|
|
411
|
+
| `WXAPP_USERSUB_PUBLISH_SUCCESS` | `WxApp Usersub Publish Success` | yes |
|
|
412
|
+
| `WXAPP_USERSUB_PUBLISH_FAILED` | `WxApp Usersub Publish Failed` | yes |
|
|
413
|
+
| `WXAPP_MERCURY_SUBSCRIBE_SUCCESS` | `WxApp Mercury Subscribe Success` | yes |
|
|
414
|
+
| `WXAPP_MERCURY_SUBSCRIBE_FAILED` | `WxApp Mercury Subscribe Failed` | yes |
|
|
361
415
|
| `UPLOAD_LOGS_SUCCESS` | `Upload Logs Success` | yes |
|
|
362
416
|
| `UPLOAD_LOGS_FAILED` | `Upload Logs Failed` | yes |
|
|
363
417
|
| `WEBSOCKET_DEREGISTER_SUCCESS` | `Websocket Deregister Success` | no |
|
|
@@ -381,12 +435,22 @@ This table contains all 80 names from `src/metrics/constants.ts`; taxonomy prese
|
|
|
381
435
|
| `CAMPAIGN_PREVIEW_REMOVE_FAILED` | `Campaign Preview Remove Failed` | yes |
|
|
382
436
|
| `AI_ASSISTANT_SEND_EVENT_SUCCESS` | `AI Assistant Send Event Success` | no |
|
|
383
437
|
| `AI_ASSISTANT_SEND_EVENT_FAILED` | `AI Assistant Send Event Failed` | no |
|
|
384
|
-
| `
|
|
385
|
-
| `
|
|
438
|
+
| `AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS` | `AI Assistant Get Real Time Assistance Success` | no |
|
|
439
|
+
| `AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED` | `AI Assistant Get Real Time Assistance Failed` | no |
|
|
440
|
+
| `AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS` | `AI Assistant Send Real Time Assistance User Action Success` | no |
|
|
441
|
+
| `AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED` | `AI Assistant Send Real Time Assistance User Action Failed` | no |
|
|
386
442
|
| `AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS` | `AI Assistant Fetch Historic Transcripts Success` | no |
|
|
387
443
|
| `AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED` | `AI Assistant Fetch Historic Transcripts Failed` | no |
|
|
444
|
+
| `USER_PREFERENCE_GET_SUCCESS` | `User Preference Get Success` | yes |
|
|
445
|
+
| `USER_PREFERENCE_GET_FAILED` | `User Preference Get Failed` | yes |
|
|
446
|
+
| `USER_PREFERENCE_CREATE_SUCCESS` | `User Preference Create Success` | yes |
|
|
447
|
+
| `USER_PREFERENCE_CREATE_FAILED` | `User Preference Create Failed` | yes |
|
|
448
|
+
| `USER_PREFERENCE_UPDATE_SUCCESS` | `User Preference Update Success` | yes |
|
|
449
|
+
| `USER_PREFERENCE_UPDATE_FAILED` | `User Preference Update Failed` | yes |
|
|
450
|
+
| `USER_PREFERENCE_DELETE_SUCCESS` | `User Preference Delete Success` | yes |
|
|
451
|
+
| `USER_PREFERENCE_DELETE_FAILED` | `User Preference Delete Failed` | yes |
|
|
388
452
|
|
|
389
|
-
Defined names without an `eventTaxonomyMap` entry: `AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED`, `AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS`, `
|
|
453
|
+
Defined names without an `eventTaxonomyMap` entry: `AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED`, `AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS`, `AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED`, `AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS`, `AI_ASSISTANT_SEND_EVENT_FAILED`, `AI_ASSISTANT_SEND_EVENT_SUCCESS`, `AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED`, `AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS`, `WEBSOCKET_DEREGISTER_FAIL`, `WEBSOCKET_DEREGISTER_SUCCESS`, `WEBSOCKET_EVENT_RECEIVED`.
|
|
390
454
|
|
|
391
455
|
## Requires (dependencies)
|
|
392
456
|
- `webex.internal.newMetrics` submission APIs
|
|
@@ -434,8 +498,10 @@ Each behavioral event maps to a structured taxonomy in `behavioral-events.ts`:
|
|
|
434
498
|
> **Note**: The following events do **not** have behavioral taxonomy mappings in `behavioral-events.ts`:
|
|
435
499
|
> - `AI_ASSISTANT_SEND_EVENT_SUCCESS`
|
|
436
500
|
> - `AI_ASSISTANT_SEND_EVENT_FAILED`
|
|
437
|
-
> - `
|
|
438
|
-
> - `
|
|
501
|
+
> - `AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS`
|
|
502
|
+
> - `AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED`
|
|
503
|
+
> - `AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS`
|
|
504
|
+
> - `AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED`
|
|
439
505
|
> - `AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS`
|
|
440
506
|
> - `AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED`
|
|
441
507
|
> - `WEBSOCKET_DEREGISTER_SUCCESS`
|
|
@@ -463,6 +529,8 @@ Example: `wxcc_sdk.user.station_login.complete`
|
|
|
463
529
|
|
|
464
530
|
The mapping is defined in `behavioral-events.ts` via `eventTaxonomyMap` and accessed through `getEventTaxonomy(name)`.
|
|
465
531
|
|
|
532
|
+
Participant Drop uses target `task_conference_participant_drop` with `complete` for success and `fail` for failure. Its metric payload is limited to task/request correlation and standard AQM tracking fields; participant IDs, numbers, names, URLs, headers, and raw routing payloads are excluded.
|
|
533
|
+
|
|
466
534
|
```mermaid
|
|
467
535
|
flowchart LR
|
|
468
536
|
A[timeEvent keys] --> B[runningEvents stores startTime + key Set]
|
|
@@ -728,7 +796,7 @@ MetricsManager holds three pending queues, running timing entries, a readiness f
|
|
|
728
796
|
|
|
729
797
|
## Business Rules & Invariants
|
|
730
798
|
- `timeEvent` and every tracking method return immediately while metrics are disabled.
|
|
731
|
-
- Only names present in `eventTaxonomyMap` receive behavioral taxonomy;
|
|
799
|
+
- Only names present in `eventTaxonomyMap` receive behavioral taxonomy; 73 of 82 names are mapped and the six AI Assistant plus three WebSocket names are intentionally catalogued as unmapped.
|
|
732
800
|
- `submittingEvents` prevents overlapping queue-drain executions.
|
|
733
801
|
- Authentication is inherited from the host Webex SDK's metrics client; MetricsManager owns no credentials, tokens, or authorization policy.
|
|
734
802
|
|
|
@@ -763,7 +831,7 @@ stateDiagram-v2
|
|
|
763
831
|
- **metricsDisabled**: When `true`, `timeEvent` and all `track*` methods return early, and `clearPendingEvents()` empties all queues.
|
|
764
832
|
|
|
765
833
|
## Pitfalls
|
|
766
|
-
- `METRIC_EVENT_NAMES` and `eventTaxonomyMap` are different inventories:
|
|
834
|
+
- `METRIC_EVENT_NAMES` and `eventTaxonomyMap` are different inventories: eleven defined names intentionally have no behavioral taxonomy.
|
|
767
835
|
- `setMetricsDisabled(true)` clears pending queues but does not create a delivery receipt; callers must not infer that previously submitted events were accepted.
|
|
768
836
|
- Submission helpers hand events to `webex.internal.newMetrics` without a module-level retry/requeue policy, so telemetry must remain non-blocking and non-authoritative.
|
|
769
837
|
|
|
@@ -824,7 +892,7 @@ Use `test/unit/spec/metrics/MetricsManager.ts` for readiness queues, timing/trac
|
|
|
824
892
|
| Behavior / Requirement | Existing test evidence | Gap |
|
|
825
893
|
|---|---|---|
|
|
826
894
|
| `METRICS-R-001` | `test/unit/spec/metrics/MetricsManager.ts` | Add a catalog parity assertion if constants change. |
|
|
827
|
-
| `METRICS-R-002` | `test/unit/spec/metrics/behavioral-events.ts` | Keep explicit coverage for all
|
|
895
|
+
| `METRICS-R-002` | `test/unit/spec/metrics/behavioral-events.ts` | Keep explicit coverage for all eleven unmapped names. |
|
|
828
896
|
| `METRICS-R-003` | `test/unit/spec/metrics/MetricsManager.ts` | None. |
|
|
829
897
|
| `METRICS-R-004` | `test/unit/spec/metrics/MetricsManager.ts` | None. |
|
|
830
898
|
| `METRICS-R-005` | `test/unit/spec/metrics/MetricsManager.ts` | Authentication ownership is verified indirectly through the host metrics client. |
|
|
@@ -313,6 +313,98 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
313
313
|
target: 'task_outdial',
|
|
314
314
|
verb: 'fail',
|
|
315
315
|
},
|
|
316
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS]: {
|
|
317
|
+
product,
|
|
318
|
+
agent: 'user',
|
|
319
|
+
target: 'task_mute_webex_together',
|
|
320
|
+
verb: 'complete',
|
|
321
|
+
},
|
|
322
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED]: {
|
|
323
|
+
product,
|
|
324
|
+
agent: 'user',
|
|
325
|
+
target: 'task_mute_webex_together',
|
|
326
|
+
verb: 'fail',
|
|
327
|
+
},
|
|
328
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS]: {
|
|
329
|
+
product,
|
|
330
|
+
agent: 'user',
|
|
331
|
+
target: 'task_dtmf_webex_together',
|
|
332
|
+
verb: 'complete',
|
|
333
|
+
},
|
|
334
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED]: {
|
|
335
|
+
product,
|
|
336
|
+
agent: 'user',
|
|
337
|
+
target: 'task_dtmf_webex_together',
|
|
338
|
+
verb: 'fail',
|
|
339
|
+
},
|
|
340
|
+
|
|
341
|
+
// Webex Together (wxApp)
|
|
342
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS]: {
|
|
343
|
+
product,
|
|
344
|
+
agent: 'user',
|
|
345
|
+
target: 'task_accept_webex_together',
|
|
346
|
+
verb: 'complete',
|
|
347
|
+
},
|
|
348
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED]: {
|
|
349
|
+
product,
|
|
350
|
+
agent: 'user',
|
|
351
|
+
target: 'task_accept_webex_together',
|
|
352
|
+
verb: 'fail',
|
|
353
|
+
},
|
|
354
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS]: {
|
|
355
|
+
product,
|
|
356
|
+
agent: 'user',
|
|
357
|
+
target: 'task_reject_webex_together',
|
|
358
|
+
verb: 'complete',
|
|
359
|
+
},
|
|
360
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED]: {
|
|
361
|
+
product,
|
|
362
|
+
agent: 'user',
|
|
363
|
+
target: 'task_reject_webex_together',
|
|
364
|
+
verb: 'fail',
|
|
365
|
+
},
|
|
366
|
+
[METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_SUCCESS]: {
|
|
367
|
+
product,
|
|
368
|
+
agent: 'user',
|
|
369
|
+
target: 'webex_together_session_init',
|
|
370
|
+
verb: 'complete',
|
|
371
|
+
},
|
|
372
|
+
[METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_FAILED]: {
|
|
373
|
+
product,
|
|
374
|
+
agent: 'user',
|
|
375
|
+
target: 'webex_together_session_init',
|
|
376
|
+
verb: 'fail',
|
|
377
|
+
},
|
|
378
|
+
[METRIC_EVENT_NAMES.WXAPP_SESSION_SKIPPED]: {
|
|
379
|
+
product,
|
|
380
|
+
agent: 'user',
|
|
381
|
+
target: 'webex_together_session_init',
|
|
382
|
+
verb: 'ignore',
|
|
383
|
+
},
|
|
384
|
+
[METRIC_EVENT_NAMES.WXAPP_USERSUB_PUBLISH_SUCCESS]: {
|
|
385
|
+
product,
|
|
386
|
+
agent: 'user',
|
|
387
|
+
target: 'webex_together_usersub_publish',
|
|
388
|
+
verb: 'complete',
|
|
389
|
+
},
|
|
390
|
+
[METRIC_EVENT_NAMES.WXAPP_USERSUB_PUBLISH_FAILED]: {
|
|
391
|
+
product,
|
|
392
|
+
agent: 'user',
|
|
393
|
+
target: 'webex_together_usersub_publish',
|
|
394
|
+
verb: 'fail',
|
|
395
|
+
},
|
|
396
|
+
[METRIC_EVENT_NAMES.WXAPP_MERCURY_SUBSCRIBE_SUCCESS]: {
|
|
397
|
+
product,
|
|
398
|
+
agent: 'user',
|
|
399
|
+
target: 'webex_together_mercury_subscribe',
|
|
400
|
+
verb: 'complete',
|
|
401
|
+
},
|
|
402
|
+
[METRIC_EVENT_NAMES.WXAPP_MERCURY_SUBSCRIBE_FAILED]: {
|
|
403
|
+
product,
|
|
404
|
+
agent: 'user',
|
|
405
|
+
target: 'webex_together_mercury_subscribe',
|
|
406
|
+
verb: 'fail',
|
|
407
|
+
},
|
|
316
408
|
|
|
317
409
|
// Conference Tasks
|
|
318
410
|
[METRIC_EVENT_NAMES.TASK_CONFERENCE_START_SUCCESS]: {
|
|
@@ -366,6 +458,20 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
366
458
|
verb: 'fail',
|
|
367
459
|
},
|
|
368
460
|
|
|
461
|
+
// Conference Participant Drop
|
|
462
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_PARTICIPANT_DROP_SUCCESS]: {
|
|
463
|
+
product,
|
|
464
|
+
agent: 'user',
|
|
465
|
+
target: 'task_conference_participant_drop',
|
|
466
|
+
verb: 'complete',
|
|
467
|
+
},
|
|
468
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_PARTICIPANT_DROP_FAILED]: {
|
|
469
|
+
product,
|
|
470
|
+
agent: 'user',
|
|
471
|
+
target: 'task_conference_participant_drop',
|
|
472
|
+
verb: 'fail',
|
|
473
|
+
},
|
|
474
|
+
|
|
369
475
|
// Switch Call
|
|
370
476
|
[METRIC_EVENT_NAMES.TASK_SWITCH_CALL_SUCCESS]: {
|
|
371
477
|
product,
|
package/src/metrics/constants.ts
CHANGED
|
@@ -131,12 +131,32 @@ export const METRIC_EVENT_NAMES = {
|
|
|
131
131
|
TASK_CONFERENCE_TRANSFER_FAILED: 'Task Conference Transfer Failed',
|
|
132
132
|
TASK_CONFERENCE_EXIT_SUCCESS: 'Task Conference Exit Success',
|
|
133
133
|
TASK_CONFERENCE_EXIT_FAILED: 'Task Conference Exit Failed',
|
|
134
|
+
TASK_CONFERENCE_PARTICIPANT_DROP_SUCCESS: 'Task Conference Participant Drop Success',
|
|
135
|
+
TASK_CONFERENCE_PARTICIPANT_DROP_FAILED: 'Task Conference Participant Drop Failed',
|
|
134
136
|
TASK_SWITCH_CALL_SUCCESS: 'Task Switch Call Success',
|
|
135
137
|
TASK_SWITCH_CALL_FAILED: 'Task Switch Call Failed',
|
|
136
138
|
|
|
137
139
|
TASK_OUTDIAL_SUCCESS: 'Task Outdial Success',
|
|
138
140
|
TASK_OUTDIAL_FAILED: 'Task Outdial Failed',
|
|
139
141
|
|
|
142
|
+
WXAPP_TASK_MUTE_SUCCESS: 'WxApp Task Mute Success',
|
|
143
|
+
WXAPP_TASK_MUTE_FAILED: 'WxApp Task Mute Failed',
|
|
144
|
+
WXAPP_TASK_DTMF_SUCCESS: 'WxApp Task Dtmf Success',
|
|
145
|
+
WXAPP_TASK_DTMF_FAILED: 'WxApp Task Dtmf Failed',
|
|
146
|
+
|
|
147
|
+
// WxApp Better Together
|
|
148
|
+
WXAPP_TASK_ACCEPT_SUCCESS: 'WxApp Task Accept Success',
|
|
149
|
+
WXAPP_TASK_ACCEPT_FAILED: 'WxApp Task Accept Failed',
|
|
150
|
+
WXAPP_TASK_DECLINE_SUCCESS: 'WxApp Task Decline Success',
|
|
151
|
+
WXAPP_TASK_DECLINE_FAILED: 'WxApp Task Decline Failed',
|
|
152
|
+
WXAPP_SESSION_INIT_SUCCESS: 'WxApp Session Init Success',
|
|
153
|
+
WXAPP_SESSION_INIT_FAILED: 'WxApp Session Init Failed',
|
|
154
|
+
WXAPP_SESSION_SKIPPED: 'WxApp Session Skipped',
|
|
155
|
+
WXAPP_USERSUB_PUBLISH_SUCCESS: 'WxApp Usersub Publish Success',
|
|
156
|
+
WXAPP_USERSUB_PUBLISH_FAILED: 'WxApp Usersub Publish Failed',
|
|
157
|
+
WXAPP_MERCURY_SUBSCRIBE_SUCCESS: 'WxApp Mercury Subscribe Success',
|
|
158
|
+
WXAPP_MERCURY_SUBSCRIBE_FAILED: 'WxApp Mercury Subscribe Failed',
|
|
159
|
+
|
|
140
160
|
UPLOAD_LOGS_SUCCESS: 'Upload Logs Success',
|
|
141
161
|
UPLOAD_LOGS_FAILED: 'Upload Logs Failed',
|
|
142
162
|
WEBSOCKET_DEREGISTER_SUCCESS: 'Websocket Deregister Success',
|
|
@@ -74,7 +74,8 @@ export class AddressBook {
|
|
|
74
74
|
|
|
75
75
|
/**
|
|
76
76
|
* Fetches address book entries for a specific address book using the entry API
|
|
77
|
-
* @param {AddressBookEntrySearchParams} [params] - Search and
|
|
77
|
+
* @param {AddressBookEntrySearchParams} [params] - Search, pagination, and optional sort parameters
|
|
78
|
+
* including addressBookId. Sorting defaults to name ascending.
|
|
78
79
|
* @returns {Promise<AddressBookEntriesResponse>} Promise resolving to address book entries
|
|
79
80
|
* @throws {Error} If the API call fails
|
|
80
81
|
* @public
|
|
@@ -102,12 +103,21 @@ export class AddressBook {
|
|
|
102
103
|
search,
|
|
103
104
|
filter,
|
|
104
105
|
attributes,
|
|
106
|
+
sortBy = 'name',
|
|
107
|
+
sortOrder = 'asc',
|
|
105
108
|
} = params;
|
|
106
109
|
|
|
107
110
|
// Use provided addressBookId or fall back to agent's address book
|
|
108
111
|
const bookId = addressBookId || this.getAddressBookId();
|
|
109
112
|
const orgId = this.webex.credentials.getOrgId();
|
|
110
|
-
const
|
|
113
|
+
const hasCustomSort = sortBy !== 'name' || sortOrder !== 'asc';
|
|
114
|
+
const isSearchRequest = !!(search || filter || attributes || hasCustomSort);
|
|
115
|
+
const canUseCache = this.pageCache.canUseCache({
|
|
116
|
+
search,
|
|
117
|
+
filter,
|
|
118
|
+
attributes,
|
|
119
|
+
sortBy: hasCustomSort ? sortBy : undefined,
|
|
120
|
+
});
|
|
111
121
|
|
|
112
122
|
LoggerProxy.info('Fetching address book entries', {
|
|
113
123
|
module: 'AddressBook',
|
|
@@ -121,8 +131,8 @@ export class AddressBook {
|
|
|
121
131
|
},
|
|
122
132
|
});
|
|
123
133
|
|
|
124
|
-
//
|
|
125
|
-
if (
|
|
134
|
+
// Default name-ascending pagination is cache-compatible; result-changing overrides are not.
|
|
135
|
+
if (canUseCache) {
|
|
126
136
|
const cacheKey = this.pageCache.buildCacheKey(bookId, page, pageSize);
|
|
127
137
|
const cachedPage = this.pageCache.getCachedPage(cacheKey);
|
|
128
138
|
|
|
@@ -190,6 +200,7 @@ export class AddressBook {
|
|
|
190
200
|
if (filter) queryParams.append('filter', filter);
|
|
191
201
|
if (attributes) queryParams.append('attributes', attributes);
|
|
192
202
|
if (search) queryParams.append('search', search);
|
|
203
|
+
if (sortBy) queryParams.append('sort', `${sortBy},${sortOrder.toUpperCase()}`);
|
|
193
204
|
|
|
194
205
|
const resource = endPointMap.addressBookEntries(orgId, bookId, queryParams.toString());
|
|
195
206
|
|
|
@@ -244,8 +255,8 @@ export class AddressBook {
|
|
|
244
255
|
);
|
|
245
256
|
}
|
|
246
257
|
|
|
247
|
-
// Cache the
|
|
248
|
-
if (
|
|
258
|
+
// Cache only the invariant default-order pagination shape.
|
|
259
|
+
if (canUseCache && response.body?.data) {
|
|
249
260
|
const cacheKey = this.pageCache.buildCacheKey(bookId, page, pageSize);
|
|
250
261
|
this.pageCache.cachePage(cacheKey, response.body.data, response.body.meta);
|
|
251
262
|
|