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

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 (312) hide show
  1. package/.sdd/manifest.json +884 -0
  2. package/AGENTS.md +94 -0
  3. package/ai-docs/ARCHITECTURE.md +168 -0
  4. package/ai-docs/CONTRACTS.md +53 -0
  5. package/ai-docs/GETTING_STARTED.md +168 -0
  6. package/ai-docs/GLOSSARY.md +43 -0
  7. package/ai-docs/README.md +138 -0
  8. package/ai-docs/REVIEW_CHECKLIST.md +41 -0
  9. package/ai-docs/RULES.md +444 -0
  10. package/ai-docs/SECURITY.md +52 -0
  11. package/ai-docs/SERVICE_STATE.md +52 -0
  12. package/ai-docs/SPEC_INDEX.md +65 -0
  13. package/ai-docs/adr/0001-spec-source-policy.md +55 -0
  14. package/ai-docs/adr/README.md +8 -0
  15. package/ai-docs/adr/_adr-template.md +31 -0
  16. package/ai-docs/contact-center-spec.md +382 -0
  17. package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
  18. package/ai-docs/features/contact-owner-change-refactor.md +78 -0
  19. package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
  20. package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
  21. package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
  22. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  23. package/ai-docs/patterns/testing-patterns.md +480 -0
  24. package/ai-docs/patterns/typescript-patterns.md +365 -0
  25. package/ai-docs/templates/README.md +102 -0
  26. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  27. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  28. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  29. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  30. package/ai-docs/templates/new-method/00-master.md +80 -0
  31. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  32. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  33. package/ai-docs/templates/new-method/03-tests.md +201 -0
  34. package/ai-docs/templates/new-method/04-validation.md +141 -0
  35. package/ai-docs/templates/new-service/00-master.md +109 -0
  36. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  37. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  38. package/ai-docs/templates/new-service/03-integration.md +178 -0
  39. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  40. package/ai-docs/templates/new-service/05-validation.md +145 -0
  41. package/dist/cc.js +971 -42
  42. package/dist/cc.js.map +1 -1
  43. package/dist/config.js +13 -0
  44. package/dist/config.js.map +1 -1
  45. package/dist/constants.js +31 -3
  46. package/dist/constants.js.map +1 -1
  47. package/dist/index.js +45 -15
  48. package/dist/index.js.map +1 -1
  49. package/dist/metrics/MetricsManager.js +16 -0
  50. package/dist/metrics/MetricsManager.js.map +1 -1
  51. package/dist/metrics/behavioral-events.js +205 -0
  52. package/dist/metrics/behavioral-events.js.map +1 -1
  53. package/dist/metrics/constants.js +48 -4
  54. package/dist/metrics/constants.js.map +1 -1
  55. package/dist/services/AddressBook.js +18 -15
  56. package/dist/services/AddressBook.js.map +1 -1
  57. package/dist/services/AnswerCallOnWebexService.js +202 -0
  58. package/dist/services/AnswerCallOnWebexService.js.map +1 -0
  59. package/dist/services/ApiAiAssistant.js +269 -9
  60. package/dist/services/ApiAiAssistant.js.map +1 -1
  61. package/dist/services/EntryPoint.js +46 -68
  62. package/dist/services/EntryPoint.js.map +1 -1
  63. package/dist/services/Queue.js +27 -22
  64. package/dist/services/Queue.js.map +1 -1
  65. package/dist/services/UserPreference.js +427 -0
  66. package/dist/services/UserPreference.js.map +1 -0
  67. package/dist/services/WebexCrossClientService.js +222 -0
  68. package/dist/services/WebexCrossClientService.js.map +1 -0
  69. package/dist/services/WxAppTelephonyMercurySync.js +108 -0
  70. package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
  71. package/dist/services/config/Util.js +11 -4
  72. package/dist/services/config/Util.js.map +1 -1
  73. package/dist/services/config/constants.js +41 -7
  74. package/dist/services/config/constants.js.map +1 -1
  75. package/dist/services/config/index.js +51 -0
  76. package/dist/services/config/index.js.map +1 -1
  77. package/dist/services/config/types.js +57 -12
  78. package/dist/services/config/types.js.map +1 -1
  79. package/dist/services/core/Err.js.map +1 -1
  80. package/dist/services/core/Utils.js +111 -32
  81. package/dist/services/core/Utils.js.map +1 -1
  82. package/dist/services/core/WebexRequest.js +6 -2
  83. package/dist/services/core/WebexRequest.js.map +1 -1
  84. package/dist/services/core/aqm-reqs.js +28 -14
  85. package/dist/services/core/aqm-reqs.js.map +1 -1
  86. package/dist/services/core/types.js.map +1 -1
  87. package/dist/services/core/websocket/WebSocketManager.js +2 -1
  88. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  89. package/dist/services/core/websocket/types.js.map +1 -1
  90. package/dist/services/index.js +1 -1
  91. package/dist/services/index.js.map +1 -1
  92. package/dist/services/task/Task.js +754 -0
  93. package/dist/services/task/Task.js.map +1 -0
  94. package/dist/services/task/TaskFactory.js +49 -0
  95. package/dist/services/task/TaskFactory.js.map +1 -0
  96. package/dist/services/task/TaskManager.js +1172 -521
  97. package/dist/services/task/TaskManager.js.map +1 -1
  98. package/dist/services/task/TaskUtils.js +211 -27
  99. package/dist/services/task/TaskUtils.js.map +1 -1
  100. package/dist/services/task/WebexCallingUtils.js +70 -0
  101. package/dist/services/task/WebexCallingUtils.js.map +1 -0
  102. package/dist/services/task/constants.js +12 -2
  103. package/dist/services/task/constants.js.map +1 -1
  104. package/dist/services/task/contact.js +29 -0
  105. package/dist/services/task/contact.js.map +1 -1
  106. package/dist/services/task/dialer.js +78 -0
  107. package/dist/services/task/dialer.js.map +1 -1
  108. package/dist/services/task/digital/Digital.js +78 -0
  109. package/dist/services/task/digital/Digital.js.map +1 -0
  110. package/dist/services/task/state-machine/TaskStateMachine.js +982 -0
  111. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  112. package/dist/services/task/state-machine/actions.js +572 -0
  113. package/dist/services/task/state-machine/actions.js.map +1 -0
  114. package/dist/services/task/state-machine/constants.js +161 -0
  115. package/dist/services/task/state-machine/constants.js.map +1 -0
  116. package/dist/services/task/state-machine/guards.js +379 -0
  117. package/dist/services/task/state-machine/guards.js.map +1 -0
  118. package/dist/services/task/state-machine/index.js +53 -0
  119. package/dist/services/task/state-machine/index.js.map +1 -0
  120. package/dist/services/task/state-machine/types.js +54 -0
  121. package/dist/services/task/state-machine/types.js.map +1 -0
  122. package/dist/services/task/state-machine/uiControlsComputer.js +703 -0
  123. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  124. package/dist/services/task/taskDataNormalizer.js +99 -0
  125. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  126. package/dist/services/task/types.js +228 -5
  127. package/dist/services/task/types.js.map +1 -1
  128. package/dist/services/task/voice/Voice.js +1485 -0
  129. package/dist/services/task/voice/Voice.js.map +1 -0
  130. package/dist/services/task/voice/WebRTC.js +152 -0
  131. package/dist/services/task/voice/WebRTC.js.map +1 -0
  132. package/dist/services/task/voice/wxAppVoiceMethods.js +354 -0
  133. package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
  134. package/dist/services/wxAppDiagnosticLogging.js +122 -0
  135. package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
  136. package/dist/services/wxAppTelephonyUtils.js +19 -0
  137. package/dist/services/wxAppTelephonyUtils.js.map +1 -0
  138. package/dist/types/cc.d.ts +193 -6
  139. package/dist/types/config.d.ts +13 -0
  140. package/dist/types/constants.d.ts +29 -1
  141. package/dist/types/index.d.ts +35 -8
  142. package/dist/types/metrics/MetricsManager.d.ts +6 -0
  143. package/dist/types/metrics/constants.d.ts +43 -1
  144. package/dist/types/services/AddressBook.d.ts +2 -1
  145. package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
  146. package/dist/types/services/ApiAiAssistant.d.ts +56 -5
  147. package/dist/types/services/EntryPoint.d.ts +7 -5
  148. package/dist/types/services/Queue.d.ts +5 -3
  149. package/dist/types/services/UserPreference.d.ts +118 -0
  150. package/dist/types/services/WebexCrossClientService.d.ts +32 -0
  151. package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
  152. package/dist/types/services/config/constants.d.ts +34 -5
  153. package/dist/types/services/config/types.d.ts +197 -12
  154. package/dist/types/services/core/Err.d.ts +6 -0
  155. package/dist/types/services/core/Utils.d.ts +35 -13
  156. package/dist/types/services/core/WebexRequest.d.ts +1 -0
  157. package/dist/types/services/core/types.d.ts +2 -0
  158. package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
  159. package/dist/types/services/core/websocket/types.d.ts +1 -1
  160. package/dist/types/services/index.d.ts +1 -1
  161. package/dist/types/services/task/Task.d.ts +175 -0
  162. package/dist/types/services/task/TaskFactory.d.ts +13 -0
  163. package/dist/types/services/task/TaskUtils.d.ts +48 -2
  164. package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
  165. package/dist/types/services/task/constants.d.ts +10 -0
  166. package/dist/types/services/task/contact.d.ts +4 -0
  167. package/dist/types/services/task/dialer.d.ts +30 -0
  168. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  169. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1442 -0
  170. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  171. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  172. package/dist/types/services/task/state-machine/guards.d.ts +103 -0
  173. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  174. package/dist/types/services/task/state-machine/types.d.ts +277 -0
  175. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  176. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  177. package/dist/types/services/task/types.d.ts +680 -66
  178. package/dist/types/services/task/voice/Voice.d.ts +227 -0
  179. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  180. package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +55 -0
  181. package/dist/types/services/wxAppDiagnosticLogging.d.ts +51 -0
  182. package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
  183. package/dist/types/types.d.ts +205 -9
  184. package/dist/types/utils/PageCache.d.ts +20 -3
  185. package/dist/types/webex.d.ts +1 -0
  186. package/dist/types.js +162 -4
  187. package/dist/types.js.map +1 -1
  188. package/dist/utils/PageCache.js +19 -5
  189. package/dist/utils/PageCache.js.map +1 -1
  190. package/dist/webex.js +22 -2
  191. package/dist/webex.js.map +1 -1
  192. package/package.json +16 -12
  193. package/src/cc.ts +1289 -112
  194. package/src/config.ts +13 -0
  195. package/src/constants.ts +29 -1
  196. package/src/index.ts +36 -5
  197. package/src/metrics/MetricsManager.ts +16 -0
  198. package/src/metrics/ai-docs/AGENTS.md +350 -0
  199. package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
  200. package/src/metrics/ai-docs/metrics-spec.md +921 -0
  201. package/src/metrics/behavioral-events.ts +212 -0
  202. package/src/metrics/constants.ts +52 -4
  203. package/src/services/AddressBook.ts +17 -6
  204. package/src/services/AnswerCallOnWebexService.ts +239 -0
  205. package/src/services/ApiAiAssistant.ts +356 -9
  206. package/src/services/EntryPoint.ts +59 -60
  207. package/src/services/Queue.ts +29 -12
  208. package/src/services/UserPreference.ts +509 -0
  209. package/src/services/WebexCrossClientService.ts +293 -0
  210. package/src/services/WxAppTelephonyMercurySync.ts +142 -0
  211. package/src/services/agent/ai-docs/AGENTS.md +240 -0
  212. package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
  213. package/src/services/agent/ai-docs/agent-spec.md +505 -0
  214. package/src/services/ai-docs/AGENTS.md +386 -0
  215. package/src/services/ai-docs/services-spec.md +505 -0
  216. package/src/services/config/Util.ts +12 -3
  217. package/src/services/config/ai-docs/AGENTS.md +255 -0
  218. package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
  219. package/src/services/config/ai-docs/config-spec.md +686 -0
  220. package/src/services/config/constants.ts +46 -6
  221. package/src/services/config/index.ts +65 -0
  222. package/src/services/config/types.ts +197 -13
  223. package/src/services/core/Err.ts +3 -0
  224. package/src/services/core/Utils.ts +127 -37
  225. package/src/services/core/WebexRequest.ts +3 -1
  226. package/src/services/core/ai-docs/AGENTS.md +381 -0
  227. package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
  228. package/src/services/core/ai-docs/core-spec.md +787 -0
  229. package/src/services/core/aqm-reqs.ts +30 -15
  230. package/src/services/core/types.ts +2 -0
  231. package/src/services/core/websocket/WebSocketManager.ts +2 -0
  232. package/src/services/core/websocket/types.ts +1 -1
  233. package/src/services/index.ts +1 -1
  234. package/src/services/task/Task.ts +908 -0
  235. package/src/services/task/TaskFactory.ts +60 -0
  236. package/src/services/task/TaskManager.ts +1419 -608
  237. package/src/services/task/TaskUtils.ts +303 -25
  238. package/src/services/task/WebexCallingUtils.ts +136 -0
  239. package/src/services/task/ai-docs/AGENTS.md +457 -0
  240. package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
  241. package/src/services/task/ai-docs/task-spec.md +1474 -0
  242. package/src/services/task/constants.ts +10 -0
  243. package/src/services/task/contact.ts +30 -0
  244. package/src/services/task/dialer.ts +80 -0
  245. package/src/services/task/digital/Digital.ts +97 -0
  246. package/src/services/task/state-machine/TaskStateMachine.ts +1320 -0
  247. package/src/services/task/state-machine/actions.ts +741 -0
  248. package/src/services/task/state-machine/ai-docs/AGENTS.md +460 -0
  249. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1156 -0
  250. package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2247 -0
  251. package/src/services/task/state-machine/constants.ts +172 -0
  252. package/src/services/task/state-machine/guards.ts +442 -0
  253. package/src/services/task/state-machine/index.ts +28 -0
  254. package/src/services/task/state-machine/types.ts +258 -0
  255. package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
  256. package/src/services/task/taskDataNormalizer.ts +137 -0
  257. package/src/services/task/types.ts +819 -70
  258. package/src/services/task/voice/Voice.ts +1851 -0
  259. package/src/services/task/voice/WebRTC.ts +191 -0
  260. package/src/services/task/voice/wxAppVoiceMethods.ts +516 -0
  261. package/src/services/wxAppDiagnosticLogging.ts +174 -0
  262. package/src/services/wxAppTelephonyUtils.ts +14 -0
  263. package/src/types.ts +262 -11
  264. package/src/utils/AGENTS.md +289 -0
  265. package/src/utils/PageCache.ts +38 -5
  266. package/src/utils/ai-docs/utils-spec.md +391 -0
  267. package/src/webex.js +10 -0
  268. package/test/unit/spec/cc.ts +2210 -119
  269. package/test/unit/spec/logger-proxy.ts +70 -0
  270. package/test/unit/spec/metrics/MetricsManager.ts +25 -0
  271. package/test/unit/spec/metrics/behavioral-events.ts +60 -0
  272. package/test/unit/spec/services/AddressBook.ts +37 -6
  273. package/test/unit/spec/services/AnswerCallOnWebexService.ts +264 -0
  274. package/test/unit/spec/services/ApiAiAssistant.ts +311 -21
  275. package/test/unit/spec/services/EntryPoint.ts +87 -40
  276. package/test/unit/spec/services/Queue.ts +123 -12
  277. package/test/unit/spec/services/UserPreference.ts +401 -0
  278. package/test/unit/spec/services/WebCallingService.ts +7 -1
  279. package/test/unit/spec/services/WebexCrossClientService.ts +467 -0
  280. package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
  281. package/test/unit/spec/services/config/Util.ts +129 -0
  282. package/test/unit/spec/services/config/index.ts +97 -29
  283. package/test/unit/spec/services/core/Utils.ts +425 -8
  284. package/test/unit/spec/services/core/WebexRequest.ts +3 -1
  285. package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
  286. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
  287. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  288. package/test/unit/spec/services/task/Task.ts +745 -0
  289. package/test/unit/spec/services/task/TaskFactory.ts +99 -0
  290. package/test/unit/spec/services/task/TaskManager.ts +2518 -1494
  291. package/test/unit/spec/services/task/TaskUtils.ts +235 -0
  292. package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
  293. package/test/unit/spec/services/task/contact.ts +33 -0
  294. package/test/unit/spec/services/task/dialer.ts +190 -0
  295. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  296. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +4060 -0
  297. package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
  298. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  299. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
  300. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  301. package/test/unit/spec/services/task/voice/Voice.ts +2061 -0
  302. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  303. package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +603 -0
  304. package/test/unit/spec/services/wxAppDiagnosticLogging.ts +143 -0
  305. package/test/unit/spec/wellnessSampleUtils.ts +288 -0
  306. package/umd/contact-center.min.js +2 -2
  307. package/umd/contact-center.min.js.map +1 -1
  308. package/dist/services/task/index.js +0 -1525
  309. package/dist/services/task/index.js.map +0 -1
  310. package/dist/types/services/task/index.d.ts +0 -650
  311. package/src/services/task/index.ts +0 -1801
  312. package/test/unit/spec/services/task/index.ts +0 -2184
@@ -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]: {
@@ -352,6 +444,48 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
352
444
  verb: 'fail',
353
445
  },
354
446
 
447
+ // Conference Exit
448
+ [METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_SUCCESS]: {
449
+ product,
450
+ agent: 'user',
451
+ target: 'task_conference_exit',
452
+ verb: 'complete',
453
+ },
454
+ [METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_FAILED]: {
455
+ product,
456
+ agent: 'user',
457
+ target: 'task_conference_exit',
458
+ verb: 'fail',
459
+ },
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
+
475
+ // Switch Call
476
+ [METRIC_EVENT_NAMES.TASK_SWITCH_CALL_SUCCESS]: {
477
+ product,
478
+ agent: 'user',
479
+ target: 'task_switch_call',
480
+ verb: 'complete',
481
+ },
482
+ [METRIC_EVENT_NAMES.TASK_SWITCH_CALL_FAILED]: {
483
+ product,
484
+ agent: 'user',
485
+ target: 'task_switch_call',
486
+ verb: 'fail',
487
+ },
488
+
355
489
  // upload logs
356
490
  [METRIC_EVENT_NAMES.UPLOAD_LOGS_SUCCESS]: {
357
491
  product,
@@ -449,6 +583,84 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
449
583
  target: 'campaign_preview_accept',
450
584
  verb: 'fail',
451
585
  },
586
+
587
+ // Campaign Preview Skip API Events
588
+ [METRIC_EVENT_NAMES.CAMPAIGN_PREVIEW_SKIP_SUCCESS]: {
589
+ product,
590
+ agent: 'user',
591
+ target: 'campaign_preview_skip',
592
+ verb: 'complete',
593
+ },
594
+ [METRIC_EVENT_NAMES.CAMPAIGN_PREVIEW_SKIP_FAILED]: {
595
+ product,
596
+ agent: 'user',
597
+ target: 'campaign_preview_skip',
598
+ verb: 'fail',
599
+ },
600
+
601
+ // Campaign Preview Remove API Events
602
+ [METRIC_EVENT_NAMES.CAMPAIGN_PREVIEW_REMOVE_SUCCESS]: {
603
+ product,
604
+ agent: 'user',
605
+ target: 'campaign_preview_remove',
606
+ verb: 'complete',
607
+ },
608
+ [METRIC_EVENT_NAMES.CAMPAIGN_PREVIEW_REMOVE_FAILED]: {
609
+ product,
610
+ agent: 'user',
611
+ target: 'campaign_preview_remove',
612
+ verb: 'fail',
613
+ },
614
+
615
+ // User Preference API Events
616
+ [METRIC_EVENT_NAMES.USER_PREFERENCE_GET_SUCCESS]: {
617
+ product,
618
+ agent: 'user',
619
+ target: 'user_preference_get',
620
+ verb: 'complete',
621
+ },
622
+ [METRIC_EVENT_NAMES.USER_PREFERENCE_GET_FAILED]: {
623
+ product,
624
+ agent: 'user',
625
+ target: 'user_preference_get',
626
+ verb: 'fail',
627
+ },
628
+ [METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_SUCCESS]: {
629
+ product,
630
+ agent: 'user',
631
+ target: 'user_preference_create',
632
+ verb: 'complete',
633
+ },
634
+ [METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_FAILED]: {
635
+ product,
636
+ agent: 'user',
637
+ target: 'user_preference_create',
638
+ verb: 'fail',
639
+ },
640
+ [METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_SUCCESS]: {
641
+ product,
642
+ agent: 'user',
643
+ target: 'user_preference_update',
644
+ verb: 'complete',
645
+ },
646
+ [METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_FAILED]: {
647
+ product,
648
+ agent: 'user',
649
+ target: 'user_preference_update',
650
+ verb: 'fail',
651
+ },
652
+ [METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_SUCCESS]: {
653
+ product,
654
+ agent: 'user',
655
+ target: 'user_preference_delete',
656
+ verb: 'complete',
657
+ },
658
+ [METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_FAILED]: {
659
+ product,
660
+ agent: 'user',
661
+ target: 'user_preference_delete',
662
+ verb: 'fail',
663
+ },
452
664
  };
453
665
 
454
666
  /**
@@ -129,20 +129,43 @@ export const METRIC_EVENT_NAMES = {
129
129
  TASK_CONFERENCE_END_FAILED: 'Task Conference End Failed',
130
130
  TASK_CONFERENCE_TRANSFER_SUCCESS: 'Task Conference Transfer Success',
131
131
  TASK_CONFERENCE_TRANSFER_FAILED: 'Task Conference Transfer Failed',
132
+ TASK_CONFERENCE_EXIT_SUCCESS: 'Task Conference Exit Success',
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',
136
+ TASK_SWITCH_CALL_SUCCESS: 'Task Switch Call Success',
137
+ TASK_SWITCH_CALL_FAILED: 'Task Switch Call Failed',
132
138
 
133
139
  TASK_OUTDIAL_SUCCESS: 'Task Outdial Success',
134
140
  TASK_OUTDIAL_FAILED: 'Task Outdial Failed',
135
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
+
136
160
  UPLOAD_LOGS_SUCCESS: 'Upload Logs Success',
137
161
  UPLOAD_LOGS_FAILED: 'Upload Logs Failed',
138
162
  WEBSOCKET_DEREGISTER_SUCCESS: 'Websocket Deregister Success',
139
163
  WEBSOCKET_DEREGISTER_FAIL: 'Websocket Deregister Failed',
140
164
 
141
- // WebSocket message events
142
- WEBSOCKET_EVENT_RECEIVED: 'Websocket Event Received',
143
-
144
165
  AGENT_DEVICE_TYPE_UPDATE_SUCCESS: 'Agent Device Type Update Success',
145
166
  AGENT_DEVICE_TYPE_UPDATE_FAILED: 'Agent Device Type Update Failed',
167
+ // WebSocket message events
168
+ WEBSOCKET_EVENT_RECEIVED: 'Websocket Event Received',
146
169
 
147
170
  // EntryPoint API Events
148
171
  ENTRYPOINT_FETCH_SUCCESS: 'Entrypoint Fetch Success',
@@ -163,13 +186,38 @@ export const METRIC_EVENT_NAMES = {
163
186
  // Campaign Preview API Events
164
187
  CAMPAIGN_PREVIEW_ACCEPT_SUCCESS: 'Campaign Preview Accept Success',
165
188
  CAMPAIGN_PREVIEW_ACCEPT_FAILED: 'Campaign Preview Accept Failed',
189
+ CAMPAIGN_PREVIEW_SKIP_SUCCESS: 'Campaign Preview Skip Success',
190
+ CAMPAIGN_PREVIEW_SKIP_FAILED: 'Campaign Preview Skip Failed',
191
+ CAMPAIGN_PREVIEW_REMOVE_SUCCESS: 'Campaign Preview Remove Success',
192
+ CAMPAIGN_PREVIEW_REMOVE_FAILED: 'Campaign Preview Remove Failed',
166
193
 
167
- // AI Assistant transcript events
194
+ // AI Assistant Transcript events
168
195
  AI_ASSISTANT_SEND_EVENT_SUCCESS: 'AI Assistant Send Event Success',
169
196
  AI_ASSISTANT_SEND_EVENT_FAILED: 'AI Assistant Send Event Failed',
197
+ AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS: 'AI Assistant Get Real Time Assistance Success',
198
+ AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED: 'AI Assistant Get Real Time Assistance Failed',
199
+ AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS:
200
+ 'AI Assistant Send Real Time Assistance User Action Success',
201
+ AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED:
202
+ 'AI Assistant Send Real Time Assistance User Action Failed',
170
203
  AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS:
171
204
  'AI Assistant Fetch Historic Transcripts Success',
172
205
  AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED: 'AI Assistant Fetch Historic Transcripts Failed',
206
+ AI_ASSISTANT_WELLNESS_ACTION_ACCEPTED: 'AI Assistant Wellness Action Accepted',
207
+ AI_ASSISTANT_WELLNESS_ACTION_FAILED: 'AI Assistant Wellness Action Failed',
208
+ AI_ASSISTANT_WELLNESS_EVENT_INVALID: 'AI Assistant Wellness Event Invalid',
209
+ WELLBEING_BREAK_IDLE_CODE_FETCH_SUCCESS: 'Wellbeing Break Idle Code Fetch Success',
210
+ WELLBEING_BREAK_IDLE_CODE_FETCH_FAILED: 'Wellbeing Break Idle Code Fetch Failed',
211
+
212
+ // User Preference API Events
213
+ USER_PREFERENCE_GET_SUCCESS: 'User Preference Get Success',
214
+ USER_PREFERENCE_GET_FAILED: 'User Preference Get Failed',
215
+ USER_PREFERENCE_CREATE_SUCCESS: 'User Preference Create Success',
216
+ USER_PREFERENCE_CREATE_FAILED: 'User Preference Create Failed',
217
+ USER_PREFERENCE_UPDATE_SUCCESS: 'User Preference Update Success',
218
+ USER_PREFERENCE_UPDATE_FAILED: 'User Preference Update Failed',
219
+ USER_PREFERENCE_DELETE_SUCCESS: 'User Preference Delete Success',
220
+ USER_PREFERENCE_DELETE_FAILED: 'User Preference Delete Failed',
173
221
  } as const;
174
222
 
175
223
  /**
@@ -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 pagination parameters including addressBookId
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 isSearchRequest = !!(search || filter || attributes);
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
- // Check if we can use cache for simple pagination (no search/filter/attributes)
125
- if (this.pageCache.canUseCache({search, filter, attributes})) {
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 page data for simple pagination (no search/filter/attributes)
248
- if (this.pageCache.canUseCache({search, filter, attributes}) && response.body?.data) {
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
 
@@ -0,0 +1,239 @@
1
+ import LoggerProxy from '../logger-proxy';
2
+ import {CC_FILE, METHODS} from '../constants';
3
+ import {HTTP_METHODS, IHttpResponse, WebexSDK} from '../types';
4
+ import {getErrorDetails} from './core/Utils';
5
+ import {isWxAppCallNotFoundError} from './wxAppTelephonyUtils';
6
+
7
+ const ANSWER_CALL_ON_WEBEX_FILE = 'AnswerCallOnWebexService';
8
+
9
+ export type WxAppTelephonyError = Error & {
10
+ isWxAppTelephonyError: true;
11
+ trackingId?: string;
12
+ status?: number | string;
13
+ };
14
+
15
+ const extractWxAppTrackingId = (source: unknown): string | undefined => {
16
+ const sourceObj = source as {details?: {trackingId?: string}; trackingId?: string};
17
+
18
+ return sourceObj?.details?.trackingId || sourceObj?.trackingId;
19
+ };
20
+
21
+ const extractWxAppHttpStatus = (source: unknown): number | string | undefined => {
22
+ const obj = source as {
23
+ statusCode?: number;
24
+ status?: number | string;
25
+ details?: {status?: number | string};
26
+ };
27
+
28
+ return obj?.statusCode ?? obj?.status ?? obj?.details?.status;
29
+ };
30
+
31
+ const markWxAppTelephonyError = (error: Error, source: unknown): WxAppTelephonyError => {
32
+ const marked = error as WxAppTelephonyError;
33
+ marked.isWxAppTelephonyError = true;
34
+ const trackingId = extractWxAppTrackingId(source);
35
+ if (trackingId) {
36
+ marked.trackingId = trackingId;
37
+ }
38
+ const status = extractWxAppHttpStatus(source);
39
+ if (status !== undefined) {
40
+ marked.status = status;
41
+ }
42
+
43
+ return marked;
44
+ };
45
+
46
+ export type AnswerCallParams = {
47
+ callId: string;
48
+ endpointId: string;
49
+ lineOwnerId?: string;
50
+ };
51
+
52
+ export type CallIdParams = {
53
+ callId: string;
54
+ lineOwnerId?: string;
55
+ };
56
+
57
+ export type TransmitDtmfParams = CallIdParams & {
58
+ dtmf: string;
59
+ };
60
+
61
+ export type CallDetailsResponse = {
62
+ muted?: boolean;
63
+ };
64
+
65
+ /**
66
+ * REST telephony client for wxApp thick-client answer (WXCC-6026).
67
+ * Separate from WebCallingService (WebRTC/Mobius).
68
+ */
69
+ export default class AnswerCallOnWebexService {
70
+ private webex: WebexSDK;
71
+
72
+ constructor(webex: WebexSDK) {
73
+ this.webex = webex;
74
+ }
75
+
76
+ private getTelephonyBaseUrl(): string {
77
+ const services = this.webex.internal.services;
78
+ const hydraUrl = services._serviceUrls?.hydra || services.get('hydra');
79
+
80
+ if (!hydraUrl) {
81
+ throw new Error('Telephony base URL is unavailable');
82
+ }
83
+
84
+ return `${hydraUrl.replace(/\/$/, '')}/telephony/calls`;
85
+ }
86
+
87
+ private extractTrackingId(source: unknown): string | undefined {
88
+ return extractWxAppTrackingId(source);
89
+ }
90
+
91
+ private async telephonyRequest(
92
+ resource: string,
93
+ method: HTTP_METHODS,
94
+ body: Record<string, unknown>,
95
+ logMethod: string
96
+ ): Promise<IHttpResponse> {
97
+ try {
98
+ const uri = `${this.getTelephonyBaseUrl()}${resource}`;
99
+
100
+ LoggerProxy.info(`AnswerCallOnWebexService.${logMethod} request`, {
101
+ module: ANSWER_CALL_ON_WEBEX_FILE,
102
+ method: logMethod,
103
+ data: {uri, bodyKeys: Object.keys(body)},
104
+ });
105
+
106
+ const response = (await this.webex.request({
107
+ uri,
108
+ method,
109
+ body,
110
+ addAuthHeader: true,
111
+ })) as IHttpResponse;
112
+
113
+ LoggerProxy.info(`AnswerCallOnWebexService.${logMethod} success`, {
114
+ module: ANSWER_CALL_ON_WEBEX_FILE,
115
+ method: logMethod,
116
+ data: {statusCode: response.statusCode},
117
+ });
118
+
119
+ return response;
120
+ } catch (error) {
121
+ const trackingId = this.extractTrackingId(error);
122
+ LoggerProxy.error(`AnswerCallOnWebexService.${logMethod} failed: ${error}`, {
123
+ module: ANSWER_CALL_ON_WEBEX_FILE,
124
+ method: logMethod,
125
+ data: {
126
+ trackingId,
127
+ status: extractWxAppHttpStatus(error),
128
+ },
129
+ });
130
+ const {error: detailedError} = getErrorDetails(error, logMethod, CC_FILE);
131
+ throw markWxAppTelephonyError(detailedError, error);
132
+ }
133
+ }
134
+
135
+ public answerCall(params: AnswerCallParams): Promise<IHttpResponse> {
136
+ const {callId, endpointId, lineOwnerId} = params;
137
+
138
+ return this.telephonyRequest(
139
+ '/answer',
140
+ HTTP_METHODS.POST,
141
+ {
142
+ callId,
143
+ endpointId,
144
+ ...(lineOwnerId ? {lineOwnerId} : {}),
145
+ },
146
+ METHODS.ACCEPT
147
+ );
148
+ }
149
+
150
+ public rejectCall(params: CallIdParams): Promise<IHttpResponse> {
151
+ const {callId, lineOwnerId} = params;
152
+
153
+ return this.telephonyRequest(
154
+ '/reject',
155
+ HTTP_METHODS.POST,
156
+ {callId, ...(lineOwnerId ? {lineOwnerId} : {})},
157
+ METHODS.REJECT
158
+ );
159
+ }
160
+
161
+ public muteCall(params: CallIdParams): Promise<IHttpResponse> {
162
+ const {callId, lineOwnerId} = params;
163
+
164
+ return this.telephonyRequest(
165
+ '/mute',
166
+ HTTP_METHODS.POST,
167
+ {callId, ...(lineOwnerId ? {lineOwnerId} : {})},
168
+ METHODS.TOGGLE_MUTE
169
+ );
170
+ }
171
+
172
+ public unmuteCall(params: CallIdParams): Promise<IHttpResponse> {
173
+ const {callId, lineOwnerId} = params;
174
+
175
+ return this.telephonyRequest(
176
+ '/unmute',
177
+ HTTP_METHODS.POST,
178
+ {callId, ...(lineOwnerId ? {lineOwnerId} : {})},
179
+ METHODS.TOGGLE_MUTE
180
+ );
181
+ }
182
+
183
+ public transmitDtmf(params: TransmitDtmfParams): Promise<IHttpResponse> {
184
+ const {callId, dtmf, lineOwnerId} = params;
185
+
186
+ return this.telephonyRequest(
187
+ '/transmitDtmf',
188
+ HTTP_METHODS.POST,
189
+ {callId, dtmf, ...(lineOwnerId ? {lineOwnerId} : {})},
190
+ METHODS.TRANSMIT_DTMF
191
+ );
192
+ }
193
+
194
+ public async getCallDetails(params: CallIdParams): Promise<CallDetailsResponse> {
195
+ const {callId, lineOwnerId} = params;
196
+ const lineOwnerIdQuery = lineOwnerId ? `?lineOwnerId=${encodeURIComponent(lineOwnerId)}` : '';
197
+ const uri = `${this.getTelephonyBaseUrl()}/${callId}${lineOwnerIdQuery}`;
198
+
199
+ try {
200
+ LoggerProxy.info('AnswerCallOnWebexService.getCallDetails request', {
201
+ module: ANSWER_CALL_ON_WEBEX_FILE,
202
+ method: METHODS.GET_CALL_DETAILS_ON_WEBEX,
203
+ data: {callId},
204
+ });
205
+
206
+ const response = (await this.webex.request({
207
+ uri,
208
+ method: HTTP_METHODS.GET,
209
+ addAuthHeader: true,
210
+ })) as IHttpResponse;
211
+
212
+ return (response.body ?? {}) as CallDetailsResponse;
213
+ } catch (error) {
214
+ if (isWxAppCallNotFoundError(error)) {
215
+ const err =
216
+ error instanceof Error
217
+ ? error
218
+ : new Error(String((error as {message?: string})?.message ?? error));
219
+ throw markWxAppTelephonyError(err, error);
220
+ }
221
+
222
+ const trackingId = this.extractTrackingId(error);
223
+ LoggerProxy.error(`AnswerCallOnWebexService.getCallDetails failed: ${error}`, {
224
+ module: ANSWER_CALL_ON_WEBEX_FILE,
225
+ method: METHODS.GET_CALL_DETAILS_ON_WEBEX,
226
+ data: {
227
+ trackingId,
228
+ status: extractWxAppHttpStatus(error),
229
+ },
230
+ });
231
+ const {error: detailedError} = getErrorDetails(
232
+ error,
233
+ METHODS.GET_CALL_DETAILS_ON_WEBEX,
234
+ CC_FILE
235
+ );
236
+ throw markWxAppTelephonyError(detailedError, error);
237
+ }
238
+ }
239
+ }