@webex/contact-center 3.12.0-next.130 → 3.12.0-next.131

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 (62) hide show
  1. package/.sdd/manifest.json +2 -1
  2. package/ai-docs/CONTRACTS.md +6 -0
  3. package/dist/cc.js +20 -5
  4. package/dist/cc.js.map +1 -1
  5. package/dist/metrics/behavioral-events.js +6 -0
  6. package/dist/metrics/behavioral-events.js.map +1 -1
  7. package/dist/metrics/constants.js +1 -0
  8. package/dist/metrics/constants.js.map +1 -1
  9. package/dist/services/AnswerCallOnWebexService.js +4 -4
  10. package/dist/services/AnswerCallOnWebexService.js.map +1 -1
  11. package/dist/services/WebexCrossClientService.js +5 -2
  12. package/dist/services/WebexCrossClientService.js.map +1 -1
  13. package/dist/services/WxAppTelephonyMercurySync.js +6 -3
  14. package/dist/services/WxAppTelephonyMercurySync.js.map +1 -1
  15. package/dist/services/task/TaskFactory.js +1 -0
  16. package/dist/services/task/TaskFactory.js.map +1 -1
  17. package/dist/services/task/TaskManager.js +11 -0
  18. package/dist/services/task/TaskManager.js.map +1 -1
  19. package/dist/services/task/types.js.map +1 -1
  20. package/dist/services/task/voice/Voice.js +63 -44
  21. package/dist/services/task/voice/Voice.js.map +1 -1
  22. package/dist/services/task/voice/wxAppOfferObservability.js +145 -0
  23. package/dist/services/task/voice/wxAppOfferObservability.js.map +1 -0
  24. package/dist/services/task/voice/wxAppVoiceMethods.js +52 -11
  25. package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -1
  26. package/dist/services/wxAppDiagnosticLogging.js +50 -13
  27. package/dist/services/wxAppDiagnosticLogging.js.map +1 -1
  28. package/dist/types/metrics/constants.d.ts +1 -0
  29. package/dist/types/services/task/types.d.ts +2 -0
  30. package/dist/types/services/task/voice/Voice.d.ts +15 -2
  31. package/dist/types/services/task/voice/wxAppOfferObservability.d.ts +39 -0
  32. package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +19 -6
  33. package/dist/types/services/wxAppDiagnosticLogging.d.ts +12 -0
  34. package/dist/types.js.map +1 -1
  35. package/dist/webex.js +1 -1
  36. package/package.json +1 -1
  37. package/src/cc.ts +23 -5
  38. package/src/metrics/ai-docs/metrics-spec.md +44 -2
  39. package/src/metrics/behavioral-events.ts +6 -0
  40. package/src/metrics/constants.ts +1 -0
  41. package/src/services/AnswerCallOnWebexService.ts +4 -4
  42. package/src/services/WebexCrossClientService.ts +7 -2
  43. package/src/services/WxAppTelephonyMercurySync.ts +3 -3
  44. package/src/services/task/TaskFactory.ts +1 -0
  45. package/src/services/task/TaskManager.ts +11 -0
  46. package/src/services/task/ai-docs/task-spec.md +2 -0
  47. package/src/services/task/types.ts +16 -0
  48. package/src/services/task/voice/Voice.ts +74 -52
  49. package/src/services/task/voice/wxAppOfferObservability.ts +204 -0
  50. package/src/services/task/voice/wxAppVoiceMethods.ts +83 -24
  51. package/src/services/wxAppDiagnosticLogging.ts +135 -23
  52. package/src/types.ts +2 -0
  53. package/test/unit/spec/cc.ts +127 -16
  54. package/test/unit/spec/services/WebexCrossClientService.ts +45 -3
  55. package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +1 -1
  56. package/test/unit/spec/services/task/TaskManager.ts +25 -0
  57. package/test/unit/spec/services/task/voice/Voice.ts +10 -51
  58. package/test/unit/spec/services/task/voice/wxAppOfferObservability.ts +361 -0
  59. package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +121 -5
  60. package/test/unit/spec/services/wxAppDiagnosticLogging.ts +44 -8
  61. package/umd/contact-center.min.js +2 -2
  62. package/umd/contact-center.min.js.map +1 -1
@@ -96,7 +96,8 @@
96
96
  "canonical_spec": "src/metrics/ai-docs/metrics-spec.md",
97
97
  "contracts": {
98
98
  "provides": [
99
- "MetricsManager timing, behavioral/operational/business event submission, taxonomy, queues, tracking-field helpers, and operational Agent Wellness Break action/notification/system-code event names"
99
+ "MetricsManager timing, behavioral/operational/business event submission, taxonomy, queues, tracking-field helpers, and operational Agent Wellness Break action/notification/system-code event names",
100
+ "WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING operational/behavioral telemetry event (contract metrics.wxapp-offer-participant-fields-missing; emit site voice/wxAppOfferObservability.ts)"
100
101
  ],
101
102
  "requires": [
102
103
  "Webex internal metrics service; Webex ready lifecycle; LoggerProxy; browser document visibility"
@@ -30,6 +30,12 @@
30
30
  | `rtd.events` | Task | realtime transcription/suggestion | consume then publish per task | task spec | websocket best-effort according to remote service | additive payloads | `src/services/task/TaskManager.ts` |
31
31
  | `wellness.notification.events` | Contact Center | `CC_AGENT_EVENTS.WELLNESS_BREAK` | consume validated wellness payloads from the primary data-notification socket, then publish normalized application events | Contact Center spec/types | exact current agent/org; notification session is diagnostic and is not compared with the active session; canonical optional `actionText` is normalized to public `actionText`; malformed/stale payloads are ignored | additive | `src/cc.ts`, `src/types.ts`, `src/services/config/types.ts` |
32
32
 
33
+ ### Telemetry / Metrics Events
34
+
35
+ | Contract ID | Owner module | Event constant | Wire name | Payload schema link | Tags | Defined at |
36
+ |---|---|---|---|---|---|---|
37
+ | `metrics.wxapp-offer-participant-fields-missing` | Task / Metrics | `WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING` | `WxApp Offer Participant Fields Missing` | `src/metrics/ai-docs/metrics-spec.md` | operational, behavioral | `src/metrics/constants.ts`, `src/services/task/voice/wxAppOfferObservability.ts` |
38
+
33
39
  ## Requires — what this repo depends on
34
40
 
35
41
  | Dependency | What is consumed | Schema / detail link | Availability assumption | Fallback on failure | Version floor |
package/dist/cc.js CHANGED
@@ -827,7 +827,8 @@ class ContactCenter extends _webexCore.WebexPlugin {
827
827
  accessEntryPoint: this.agentConfig.accessEntryPoint,
828
828
  accessBuddyTeam: this.agentConfig.accessBuddyTeam
829
829
  },
830
- enableWxBetterTogether: this.isWxBetterTogetherEnabled()
830
+ enableWxBetterTogether: this.isWxBetterTogetherEnabled(),
831
+ getWxAppUsersubPublished: () => this.webexCrossClientService.isAnswerCallsStateActive()
831
832
  };
832
833
  this.taskManager.setConfigFlags(configFlags);
833
834
  // TODO: Make profile a singleton to make it available throughout app/sdk so we dont need to inject info everywhere
@@ -1481,6 +1482,7 @@ class ContactCenter extends _webexCore.WebexPlugin {
1481
1482
  await this.publishAnswerOnWebexCrossClientState(true);
1482
1483
  publishedEnable = true;
1483
1484
  this.taskManager.syncWxAppMuteFromCallDetailsForAllTasks();
1485
+ this.taskManager.refreshWxAppOfferObservabilityForAllTasks();
1484
1486
  } else {
1485
1487
  await this.publishAnswerOnWebexCrossClientState(false);
1486
1488
  this.wxAppTelephonyMercurySync.unsubscribe();
@@ -1543,6 +1545,7 @@ class ContactCenter extends _webexCore.WebexPlugin {
1543
1545
  await this.publishAnswerOnWebexCrossClientState(true);
1544
1546
  publishedEnable = true;
1545
1547
  this.taskManager.syncWxAppMuteFromCallDetailsForAllTasks();
1548
+ this.taskManager.refreshWxAppOfferObservabilityForAllTasks();
1546
1549
  const mercurySubscribed = this.wxAppTelephonyMercurySync.isSubscribed();
1547
1550
  const usersubPublished = this.webexCrossClientService.isAnswerCallsStateActive();
1548
1551
  (0, _wxAppDiagnosticLogging.logWxAppSessionReadiness)({
@@ -1557,12 +1560,18 @@ class ContactCenter extends _webexCore.WebexPlugin {
1557
1560
  if (sessionInitReady) {
1558
1561
  this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_SUCCESS, {
1559
1562
  loginOption,
1560
- enableWxBetterTogether: true
1563
+ enableWxBetterTogether: true,
1564
+ usersubPublished,
1565
+ mercurySubscribed,
1566
+ telephonyTaskType
1561
1567
  }, ['operational', 'behavioral']);
1562
1568
  } else {
1563
1569
  this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_FAILED, {
1564
1570
  loginOption,
1565
1571
  enableWxBetterTogether: true,
1572
+ usersubPublished,
1573
+ mercurySubscribed,
1574
+ telephonyTaskType,
1566
1575
  skipReason: !usersubPublished ? 'usersub_not_published' : 'mercury_not_subscribed'
1567
1576
  }, ['operational', 'behavioral']);
1568
1577
  }
@@ -1599,6 +1608,9 @@ class ContactCenter extends _webexCore.WebexPlugin {
1599
1608
  this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_FAILED, {
1600
1609
  loginOption,
1601
1610
  enableWxBetterTogether: true,
1611
+ usersubPublished: this.webexCrossClientService.isAnswerCallsStateActive(),
1612
+ mercurySubscribed: this.wxAppTelephonyMercurySync.isSubscribed(),
1613
+ telephonyTaskType,
1602
1614
  skipReason: sessionInitFailureReason,
1603
1615
  error: error instanceof Error ? error.toString() : String(error)
1604
1616
  }, ['operational', 'behavioral']);
@@ -1606,7 +1618,7 @@ class ContactCenter extends _webexCore.WebexPlugin {
1606
1618
  enableWxBetterTogether: true,
1607
1619
  loginOption,
1608
1620
  wxAppHooksApplied: false,
1609
- usersubPublished: publishedEnable && this.webexCrossClientService.isAnswerCallsStateActive(),
1621
+ usersubPublished: this.webexCrossClientService.isAnswerCallsStateActive(),
1610
1622
  mercurySubscribed: this.wxAppTelephonyMercurySync.isSubscribed(),
1611
1623
  telephonyTaskType,
1612
1624
  skipReason: sessionInitFailureReason
@@ -1812,7 +1824,8 @@ class ContactCenter extends _webexCore.WebexPlugin {
1812
1824
  method: _constants.METHODS.SYNC_WXAPP_MUTE_FROM_MERCURY
1813
1825
  });
1814
1826
  this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_MERCURY_SUBSCRIBE_FAILED, {
1815
- error: 'agentId unavailable'
1827
+ error: 'agentId unavailable',
1828
+ mercurySubscribed: false
1816
1829
  }, ['operational', 'behavioral']);
1817
1830
  return;
1818
1831
  }
@@ -1827,7 +1840,8 @@ class ContactCenter extends _webexCore.WebexPlugin {
1827
1840
  method: _constants.METHODS.SYNC_WXAPP_MUTE_FROM_MERCURY
1828
1841
  });
1829
1842
  this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_MERCURY_SUBSCRIBE_FAILED, {
1830
- error: error instanceof Error ? error.toString() : String(error)
1843
+ error: error instanceof Error ? error.toString() : String(error),
1844
+ mercurySubscribed: false
1831
1845
  }, ['operational', 'behavioral']);
1832
1846
  this.wxAppTelephonyMercurySync.unsubscribe();
1833
1847
  await this.releaseWxAppMercuryResources();
@@ -1846,6 +1860,7 @@ class ContactCenter extends _webexCore.WebexPlugin {
1846
1860
  if (enable && this.isWxBetterTogetherEnabled()) {
1847
1861
  this.metricsManager.trackEvent(_constants4.METRIC_EVENT_NAMES.WXAPP_USERSUB_PUBLISH_FAILED, {
1848
1862
  enableWxBetterTogether: true,
1863
+ usersubPublished: this.webexCrossClientService.isAnswerCallsStateActive(),
1849
1864
  skipReason: 'user_id_unavailable',
1850
1865
  error: 'User ID is unavailable for cross-client publish'
1851
1866
  }, ['operational', 'behavioral']);