@webex/contact-center 3.12.0-next.117 → 3.12.0-next.119

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.
Files changed (53) hide show
  1. package/dist/cc.js +104 -4
  2. package/dist/cc.js.map +1 -1
  3. package/dist/metrics/MetricsManager.js +16 -0
  4. package/dist/metrics/MetricsManager.js.map +1 -1
  5. package/dist/metrics/behavioral-events.js +91 -0
  6. package/dist/metrics/behavioral-events.js.map +1 -1
  7. package/dist/metrics/constants.js +16 -0
  8. package/dist/metrics/constants.js.map +1 -1
  9. package/dist/services/AnswerCallOnWebexService.js +34 -6
  10. package/dist/services/AnswerCallOnWebexService.js.map +1 -1
  11. package/dist/services/WebexCrossClientService.js +54 -3
  12. package/dist/services/WebexCrossClientService.js.map +1 -1
  13. package/dist/services/WxAppTelephonyMercurySync.js +21 -6
  14. package/dist/services/WxAppTelephonyMercurySync.js.map +1 -1
  15. package/dist/services/task/voice/Voice.js +81 -14
  16. package/dist/services/task/voice/Voice.js.map +1 -1
  17. package/dist/services/task/voice/wxAppVoiceMethods.js +154 -1
  18. package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -1
  19. package/dist/services/wxAppDiagnosticLogging.js +122 -0
  20. package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
  21. package/dist/types/cc.d.ts +1 -0
  22. package/dist/types/metrics/MetricsManager.d.ts +6 -0
  23. package/dist/types/metrics/constants.d.ts +15 -0
  24. package/dist/types/services/AnswerCallOnWebexService.d.ts +1 -0
  25. package/dist/types/services/WebexCrossClientService.d.ts +4 -0
  26. package/dist/types/services/task/voice/Voice.d.ts +5 -1
  27. package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +3 -0
  28. package/dist/types/services/wxAppDiagnosticLogging.d.ts +51 -0
  29. package/dist/webex.js +1 -1
  30. package/package.json +2 -2
  31. package/src/cc.ts +151 -4
  32. package/src/metrics/MetricsManager.ts +16 -0
  33. package/src/metrics/ai-docs/metrics-spec.md +71 -9
  34. package/src/metrics/behavioral-events.ts +92 -0
  35. package/src/metrics/constants.ts +18 -0
  36. package/src/services/AnswerCallOnWebexService.ts +41 -8
  37. package/src/services/WebexCrossClientService.ts +85 -4
  38. package/src/services/WxAppTelephonyMercurySync.ts +31 -4
  39. package/src/services/task/ai-docs/task-spec.md +2 -0
  40. package/src/services/task/voice/Voice.ts +115 -26
  41. package/src/services/task/voice/wxAppVoiceMethods.ts +211 -2
  42. package/src/services/wxAppDiagnosticLogging.ts +174 -0
  43. package/test/unit/spec/cc.ts +249 -20
  44. package/test/unit/spec/metrics/MetricsManager.ts +25 -0
  45. package/test/unit/spec/metrics/behavioral-events.ts +42 -0
  46. package/test/unit/spec/services/AnswerCallOnWebexService.ts +41 -0
  47. package/test/unit/spec/services/WebexCrossClientService.ts +207 -1
  48. package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +23 -0
  49. package/test/unit/spec/services/task/voice/Voice.ts +380 -0
  50. package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +145 -1
  51. package/test/unit/spec/services/wxAppDiagnosticLogging.ts +143 -0
  52. package/umd/contact-center.min.js +2 -2
  53. package/umd/contact-center.min.js.map +1 -1
package/dist/cc.js CHANGED
@@ -22,6 +22,7 @@ var _WebCallingService = _interopRequireDefault(require("./services/WebCallingSe
22
22
  var _AnswerCallOnWebexService = _interopRequireDefault(require("./services/AnswerCallOnWebexService"));
23
23
  var _WebexCrossClientService = _interopRequireDefault(require("./services/WebexCrossClientService"));
24
24
  var _WxAppTelephonyMercurySync = _interopRequireDefault(require("./services/WxAppTelephonyMercurySync"));
25
+ var _wxAppDiagnosticLogging = require("./services/wxAppDiagnosticLogging");
25
26
  var _types4 = require("./services/task/types");
26
27
  var _MetricsManager = _interopRequireDefault(require("./metrics/MetricsManager"));
27
28
  var _constants4 = require("./metrics/constants");
@@ -1337,17 +1338,72 @@ class ContactCenter extends _webexCore.WebexPlugin {
1337
1338
  throw error;
1338
1339
  }
1339
1340
  }
1341
+ getWxAppTelephonyTaskType() {
1342
+ const loginOption = this.getCurrentStationLoginOption();
1343
+ if (loginOption === _types.LoginOption.BROWSER) {
1344
+ return 'WebRTC';
1345
+ }
1346
+ if (loginOption === _types.LoginOption.EXTENSION || loginOption === _types.LoginOption.AGENT_DN) {
1347
+ return 'Voice';
1348
+ }
1349
+ return 'unknown';
1350
+ }
1340
1351
  async ensureWxAppPostStationLogin() {
1341
- if (this.getCurrentStationLoginOption() === _types.LoginOption.BROWSER) {
1352
+ const loginOption = this.getCurrentStationLoginOption();
1353
+ const flagEnabled = this.isWxBetterTogetherEnabled();
1354
+ const telephonyTaskType = this.getWxAppTelephonyTaskType();
1355
+ if (loginOption === _types.LoginOption.BROWSER) {
1356
+ if (flagEnabled) {
1357
+ (0, _wxAppDiagnosticLogging.logWxAppSessionReadiness)({
1358
+ enableWxBetterTogether: true,
1359
+ loginOption,
1360
+ wxAppHooksApplied: false,
1361
+ usersubPublished: false,
1362
+ mercurySubscribed: false,
1363
+ telephonyTaskType,
1364
+ skipReason: 'unsupported_browser_login'
1365
+ });
1366
+ this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_SESSION_SKIPPED, {
1367
+ loginOption,
1368
+ enableWxBetterTogether: true,
1369
+ skipReason: 'unsupported_browser_login'
1370
+ }, ['operational', 'behavioral']);
1371
+ }
1342
1372
  return;
1343
1373
  }
1344
1374
  let publishedEnable = false;
1375
+ let wxAppInitStage = 'mercury';
1345
1376
  try {
1346
- if (this.isWxBetterTogetherEnabled()) {
1377
+ if (flagEnabled) {
1378
+ this.metricsManager.timeEvent([_constants4.METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_SUCCESS, _constants4.METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_FAILED]);
1347
1379
  await this.ensureWxAppMercuryAndSubscribe();
1380
+ wxAppInitStage = 'publish';
1348
1381
  await this.publishAnswerOnWebexCrossClientState(true);
1349
1382
  publishedEnable = true;
1350
1383
  this.taskManager.syncWxAppMuteFromCallDetailsForAllTasks();
1384
+ const mercurySubscribed = this.wxAppTelephonyMercurySync.isSubscribed();
1385
+ const usersubPublished = this.webexCrossClientService.isAnswerCallsStateActive();
1386
+ (0, _wxAppDiagnosticLogging.logWxAppSessionReadiness)({
1387
+ enableWxBetterTogether: true,
1388
+ loginOption,
1389
+ wxAppHooksApplied: true,
1390
+ usersubPublished,
1391
+ mercurySubscribed,
1392
+ telephonyTaskType
1393
+ });
1394
+ const sessionInitReady = mercurySubscribed && usersubPublished;
1395
+ if (sessionInitReady) {
1396
+ this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_SUCCESS, {
1397
+ loginOption,
1398
+ enableWxBetterTogether: true
1399
+ }, ['operational', 'behavioral']);
1400
+ } else {
1401
+ this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_FAILED, {
1402
+ loginOption,
1403
+ enableWxBetterTogether: true,
1404
+ skipReason: !usersubPublished ? 'usersub_not_published' : 'mercury_not_subscribed'
1405
+ }, ['operational', 'behavioral']);
1406
+ }
1351
1407
  } else {
1352
1408
  await this.ensureWxAppDeviceRegistered();
1353
1409
  await this.publishAnswerOnWebexCrossClientState(false, {
@@ -1356,13 +1412,43 @@ class ContactCenter extends _webexCore.WebexPlugin {
1356
1412
  this.webexCrossClientService.teardown();
1357
1413
  this.wxAppTelephonyMercurySync.unsubscribe();
1358
1414
  await this.releaseWxAppMercuryResources();
1415
+ (0, _wxAppDiagnosticLogging.logWxAppSessionReadiness)({
1416
+ enableWxBetterTogether: false,
1417
+ loginOption,
1418
+ wxAppHooksApplied: true,
1419
+ usersubPublished: false,
1420
+ mercurySubscribed: false,
1421
+ telephonyTaskType,
1422
+ skipReason: 'flag_disabled'
1423
+ });
1424
+ this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_SESSION_SKIPPED, {
1425
+ loginOption,
1426
+ enableWxBetterTogether: false,
1427
+ skipReason: 'flag_disabled'
1428
+ }, ['operational', 'behavioral']);
1359
1429
  }
1360
1430
  } catch (error) {
1361
1431
  _loggerProxy.default.error(`Failed to initialize wxApp post-station-login: ${error}`, {
1362
1432
  module: _constants.CC_FILE,
1363
1433
  method: _constants.METHODS.STATION_LOGIN
1364
1434
  });
1365
- if (this.isWxBetterTogetherEnabled()) {
1435
+ if (flagEnabled) {
1436
+ const sessionInitFailureReason = wxAppInitStage === 'mercury' ? 'mercury_subscribe_failed' : 'publish_failed';
1437
+ this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_FAILED, {
1438
+ loginOption,
1439
+ enableWxBetterTogether: true,
1440
+ skipReason: sessionInitFailureReason,
1441
+ error: error instanceof Error ? error.toString() : String(error)
1442
+ }, ['operational', 'behavioral']);
1443
+ (0, _wxAppDiagnosticLogging.logWxAppSessionReadiness)({
1444
+ enableWxBetterTogether: true,
1445
+ loginOption,
1446
+ wxAppHooksApplied: false,
1447
+ usersubPublished: publishedEnable && this.webexCrossClientService.isAnswerCallsStateActive(),
1448
+ mercurySubscribed: this.wxAppTelephonyMercurySync.isSubscribed(),
1449
+ telephonyTaskType,
1450
+ skipReason: sessionInitFailureReason
1451
+ });
1366
1452
  if (publishedEnable) {
1367
1453
  await this.revertWxAppCrossClientPublish();
1368
1454
  } else {
@@ -1563,6 +1649,9 @@ class ContactCenter extends _webexCore.WebexPlugin {
1563
1649
  module: _constants.CC_FILE,
1564
1650
  method: _constants.METHODS.SYNC_WXAPP_MUTE_FROM_MERCURY
1565
1651
  });
1652
+ this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_MERCURY_SUBSCRIBE_FAILED, {
1653
+ error: 'agentId unavailable'
1654
+ }, ['operational', 'behavioral']);
1566
1655
  return;
1567
1656
  }
1568
1657
  try {
@@ -1575,6 +1664,9 @@ class ContactCenter extends _webexCore.WebexPlugin {
1575
1664
  module: _constants.CC_FILE,
1576
1665
  method: _constants.METHODS.SYNC_WXAPP_MUTE_FROM_MERCURY
1577
1666
  });
1667
+ this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_MERCURY_SUBSCRIBE_FAILED, {
1668
+ error: error instanceof Error ? error.toString() : String(error)
1669
+ }, ['operational', 'behavioral']);
1578
1670
  this.wxAppTelephonyMercurySync.unsubscribe();
1579
1671
  await this.releaseWxAppMercuryResources();
1580
1672
  throw error;
@@ -1589,10 +1681,18 @@ class ContactCenter extends _webexCore.WebexPlugin {
1589
1681
  }
1590
1682
  const userId = this.$webex.internal.device?.userId;
1591
1683
  if (!userId) {
1684
+ if (enable && this.isWxBetterTogetherEnabled()) {
1685
+ this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_USERSUB_PUBLISH_FAILED, {
1686
+ enableWxBetterTogether: true,
1687
+ skipReason: 'user_id_unavailable',
1688
+ error: 'User ID is unavailable for cross-client publish'
1689
+ }, ['operational', 'behavioral']);
1690
+ }
1592
1691
  return;
1593
1692
  }
1594
1693
  await this.webexCrossClientService.setManageWebexCallingInWxcc(enable, {
1595
- userId
1694
+ userId,
1695
+ trackPublishMetrics: true
1596
1696
  });
1597
1697
  if (enable) {
1598
1698
  this.clearWxAppFalsePublishRetryTimer();