@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.
- package/.sdd/manifest.json +884 -0
- package/AGENTS.md +94 -0
- package/ai-docs/ARCHITECTURE.md +168 -0
- package/ai-docs/CONTRACTS.md +53 -0
- package/ai-docs/GETTING_STARTED.md +168 -0
- package/ai-docs/GLOSSARY.md +43 -0
- package/ai-docs/README.md +138 -0
- package/ai-docs/REVIEW_CHECKLIST.md +41 -0
- package/ai-docs/RULES.md +444 -0
- package/ai-docs/SECURITY.md +52 -0
- package/ai-docs/SERVICE_STATE.md +52 -0
- package/ai-docs/SPEC_INDEX.md +65 -0
- package/ai-docs/adr/0001-spec-source-policy.md +55 -0
- package/ai-docs/adr/README.md +8 -0
- package/ai-docs/adr/_adr-template.md +31 -0
- package/ai-docs/contact-center-spec.md +382 -0
- package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
- package/ai-docs/features/contact-owner-change-refactor.md +78 -0
- package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
- package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
- package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
- package/ai-docs/patterns/event-driven-patterns.md +485 -0
- package/ai-docs/patterns/testing-patterns.md +480 -0
- package/ai-docs/patterns/typescript-patterns.md +365 -0
- package/ai-docs/templates/README.md +102 -0
- package/ai-docs/templates/documentation/create-agents-md.md +240 -0
- package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
- package/ai-docs/templates/existing-service/bug-fix.md +254 -0
- package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
- package/ai-docs/templates/new-method/00-master.md +80 -0
- package/ai-docs/templates/new-method/01-requirements.md +232 -0
- package/ai-docs/templates/new-method/02-implementation.md +295 -0
- package/ai-docs/templates/new-method/03-tests.md +201 -0
- package/ai-docs/templates/new-method/04-validation.md +141 -0
- package/ai-docs/templates/new-service/00-master.md +109 -0
- package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
- package/ai-docs/templates/new-service/02-code-generation.md +346 -0
- package/ai-docs/templates/new-service/03-integration.md +178 -0
- package/ai-docs/templates/new-service/04-test-generation.md +205 -0
- package/ai-docs/templates/new-service/05-validation.md +145 -0
- package/dist/cc.js +971 -42
- package/dist/cc.js.map +1 -1
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +31 -3
- package/dist/constants.js.map +1 -1
- package/dist/index.js +45 -15
- 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 +205 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +48 -4
- 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/ApiAiAssistant.js +269 -9
- package/dist/services/ApiAiAssistant.js.map +1 -1
- 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/UserPreference.js +427 -0
- package/dist/services/UserPreference.js.map +1 -0
- 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 +11 -4
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +41 -7
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +51 -0
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +57 -12
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +111 -32
- package/dist/services/core/Utils.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/core/websocket/WebSocketManager.js +2 -1
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/core/websocket/types.js.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +754 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +49 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +1172 -521
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +211 -27
- package/dist/services/task/TaskUtils.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 +12 -2
- 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/dialer.js +78 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/digital/Digital.js +78 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +982 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +572 -0
- package/dist/services/task/state-machine/actions.js.map +1 -0
- package/dist/services/task/state-machine/constants.js +161 -0
- package/dist/services/task/state-machine/constants.js.map +1 -0
- package/dist/services/task/state-machine/guards.js +379 -0
- package/dist/services/task/state-machine/guards.js.map +1 -0
- package/dist/services/task/state-machine/index.js +53 -0
- package/dist/services/task/state-machine/index.js.map +1 -0
- package/dist/services/task/state-machine/types.js +54 -0
- package/dist/services/task/state-machine/types.js.map +1 -0
- package/dist/services/task/state-machine/uiControlsComputer.js +703 -0
- package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
- package/dist/services/task/taskDataNormalizer.js +99 -0
- package/dist/services/task/taskDataNormalizer.js.map +1 -0
- package/dist/services/task/types.js +228 -5
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1485 -0
- package/dist/services/task/voice/Voice.js.map +1 -0
- package/dist/services/task/voice/WebRTC.js +152 -0
- package/dist/services/task/voice/WebRTC.js.map +1 -0
- 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 +193 -6
- package/dist/types/config.d.ts +13 -0
- package/dist/types/constants.d.ts +29 -1
- package/dist/types/index.d.ts +35 -8
- package/dist/types/metrics/MetricsManager.d.ts +6 -0
- package/dist/types/metrics/constants.d.ts +43 -1
- package/dist/types/services/AddressBook.d.ts +2 -1
- package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
- package/dist/types/services/ApiAiAssistant.d.ts +56 -5
- package/dist/types/services/EntryPoint.d.ts +7 -5
- package/dist/types/services/Queue.d.ts +5 -3
- package/dist/types/services/UserPreference.d.ts +118 -0
- 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 +34 -5
- package/dist/types/services/config/types.d.ts +197 -12
- package/dist/types/services/core/Err.d.ts +6 -0
- package/dist/types/services/core/Utils.d.ts +35 -13
- package/dist/types/services/core/WebexRequest.d.ts +1 -0
- package/dist/types/services/core/types.d.ts +2 -0
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
- package/dist/types/services/core/websocket/types.d.ts +1 -1
- package/dist/types/services/index.d.ts +1 -1
- package/dist/types/services/task/Task.d.ts +175 -0
- package/dist/types/services/task/TaskFactory.d.ts +13 -0
- package/dist/types/services/task/TaskUtils.d.ts +48 -2
- package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
- package/dist/types/services/task/constants.d.ts +10 -0
- package/dist/types/services/task/contact.d.ts +4 -0
- package/dist/types/services/task/dialer.d.ts +30 -0
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1442 -0
- package/dist/types/services/task/state-machine/actions.d.ts +10 -0
- package/dist/types/services/task/state-machine/constants.d.ts +107 -0
- package/dist/types/services/task/state-machine/guards.d.ts +103 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +277 -0
- package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
- package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
- package/dist/types/services/task/types.d.ts +680 -66
- package/dist/types/services/task/voice/Voice.d.ts +227 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- 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 +205 -9
- package/dist/types/utils/PageCache.d.ts +20 -3
- package/dist/types/webex.d.ts +1 -0
- package/dist/types.js +162 -4
- 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 +22 -2
- package/dist/webex.js.map +1 -1
- package/package.json +16 -12
- package/src/cc.ts +1289 -112
- package/src/config.ts +13 -0
- package/src/constants.ts +29 -1
- package/src/index.ts +36 -5
- package/src/metrics/MetricsManager.ts +16 -0
- package/src/metrics/ai-docs/AGENTS.md +350 -0
- package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
- package/src/metrics/ai-docs/metrics-spec.md +921 -0
- package/src/metrics/behavioral-events.ts +212 -0
- package/src/metrics/constants.ts +52 -4
- package/src/services/AddressBook.ts +17 -6
- package/src/services/AnswerCallOnWebexService.ts +239 -0
- package/src/services/ApiAiAssistant.ts +356 -9
- package/src/services/EntryPoint.ts +59 -60
- package/src/services/Queue.ts +29 -12
- package/src/services/UserPreference.ts +509 -0
- package/src/services/WebexCrossClientService.ts +293 -0
- package/src/services/WxAppTelephonyMercurySync.ts +142 -0
- package/src/services/agent/ai-docs/AGENTS.md +240 -0
- package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
- package/src/services/agent/ai-docs/agent-spec.md +505 -0
- package/src/services/ai-docs/AGENTS.md +386 -0
- package/src/services/ai-docs/services-spec.md +505 -0
- package/src/services/config/Util.ts +12 -3
- package/src/services/config/ai-docs/AGENTS.md +255 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
- package/src/services/config/ai-docs/config-spec.md +686 -0
- package/src/services/config/constants.ts +46 -6
- package/src/services/config/index.ts +65 -0
- package/src/services/config/types.ts +197 -13
- package/src/services/core/Err.ts +3 -0
- package/src/services/core/Utils.ts +127 -37
- package/src/services/core/WebexRequest.ts +3 -1
- package/src/services/core/ai-docs/AGENTS.md +381 -0
- package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
- package/src/services/core/ai-docs/core-spec.md +787 -0
- package/src/services/core/aqm-reqs.ts +30 -15
- package/src/services/core/types.ts +2 -0
- package/src/services/core/websocket/WebSocketManager.ts +2 -0
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +1 -1
- package/src/services/task/Task.ts +908 -0
- package/src/services/task/TaskFactory.ts +60 -0
- package/src/services/task/TaskManager.ts +1419 -608
- package/src/services/task/TaskUtils.ts +303 -25
- package/src/services/task/WebexCallingUtils.ts +136 -0
- package/src/services/task/ai-docs/AGENTS.md +457 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
- package/src/services/task/ai-docs/task-spec.md +1474 -0
- package/src/services/task/constants.ts +10 -0
- package/src/services/task/contact.ts +30 -0
- package/src/services/task/dialer.ts +80 -0
- package/src/services/task/digital/Digital.ts +97 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1320 -0
- package/src/services/task/state-machine/actions.ts +741 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +460 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1156 -0
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2247 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +442 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +258 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +819 -70
- package/src/services/task/voice/Voice.ts +1851 -0
- package/src/services/task/voice/WebRTC.ts +191 -0
- 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 +262 -11
- package/src/utils/AGENTS.md +289 -0
- package/src/utils/PageCache.ts +38 -5
- package/src/utils/ai-docs/utils-spec.md +391 -0
- package/src/webex.js +10 -0
- package/test/unit/spec/cc.ts +2210 -119
- package/test/unit/spec/logger-proxy.ts +70 -0
- 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/ApiAiAssistant.ts +311 -21
- package/test/unit/spec/services/EntryPoint.ts +87 -40
- package/test/unit/spec/services/Queue.ts +123 -12
- package/test/unit/spec/services/UserPreference.ts +401 -0
- package/test/unit/spec/services/WebCallingService.ts +7 -1
- 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 +129 -0
- package/test/unit/spec/services/config/index.ts +97 -29
- package/test/unit/spec/services/core/Utils.ts +425 -8
- 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/core/websocket/WebSocketManager.ts +66 -40
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +745 -0
- package/test/unit/spec/services/task/TaskFactory.ts +99 -0
- package/test/unit/spec/services/task/TaskManager.ts +2518 -1494
- package/test/unit/spec/services/task/TaskUtils.ts +235 -0
- 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/dialer.ts +190 -0
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +4060 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +2061 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +603 -0
- package/test/unit/spec/services/wxAppDiagnosticLogging.ts +143 -0
- package/test/unit/spec/wellnessSampleUtils.ts +288 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
- package/dist/services/task/index.js +0 -1525
- package/dist/services/task/index.js.map +0 -1
- package/dist/types/services/task/index.d.ts +0 -650
- package/src/services/task/index.ts +0 -1801
- package/test/unit/spec/services/task/index.ts +0 -2184
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# Agent Service - Architecture
|
|
2
|
+
|
|
3
|
+
> **Legacy/reference-only.** Canonical SDD: [`agent-spec.md`](agent-spec.md). Use the package [manifest](../../../../.sdd/manifest.json) and [`SPEC_INDEX.md`](../../../../ai-docs/SPEC_INDEX.md) for routing; code and tests remain the behavioral referee.
|
|
4
|
+
|
|
5
|
+
> **Purpose**: Technical documentation for agent lifecycle operations.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Component Overview
|
|
10
|
+
|
|
11
|
+
| Component | File | Responsibility |
|
|
12
|
+
| --------------- | --------------------------- | --------------------------------------------------------------- |
|
|
13
|
+
| `ContactCenter` | `src/cc.ts` | Plugin class exposing agent methods |
|
|
14
|
+
| `routingAgent` | `services/agent/index.ts` | AQM request definitions |
|
|
15
|
+
| `Services` | `services/index.ts` | Service singleton with agent service |
|
|
16
|
+
| `AqmReqs` | `services/core/aqm-reqs.ts` | HTTP requests to backend; responses via WebSocket notifications |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## File Structure
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
services/agent/
|
|
24
|
+
├── index.ts # Agent service factory
|
|
25
|
+
├── types.ts # Agent types and events
|
|
26
|
+
└── ai-docs/
|
|
27
|
+
├── AGENTS.md # Usage documentation
|
|
28
|
+
└── ARCHITECTURE.md # This file
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Service Factory Pattern
|
|
34
|
+
|
|
35
|
+
The agent service uses a factory pattern:
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
// services/agent/index.ts
|
|
39
|
+
export default function routingAgent(routing: AqmReqs) {
|
|
40
|
+
return {
|
|
41
|
+
stationLogin: routing.req((p: {data: UserStationLogin}) => ({
|
|
42
|
+
url: '/v1/agents/login',
|
|
43
|
+
host: WCC_API_GATEWAY,
|
|
44
|
+
data: p.data,
|
|
45
|
+
notifSuccess: {
|
|
46
|
+
bind: {type: CC_EVENTS.AGENT_STATION_LOGIN, ...},
|
|
47
|
+
msg: {} as StationLoginSuccess,
|
|
48
|
+
},
|
|
49
|
+
notifFail: {...},
|
|
50
|
+
})),
|
|
51
|
+
logout: routing.req((p: {data: Logout}) => ({...})),
|
|
52
|
+
stateChange: routing.req((p: {data: StateChange}) => ({...})),
|
|
53
|
+
buddyAgents: routing.req((p: {data: BuddyAgents}) => ({...})),
|
|
54
|
+
reload: routing.reqEmpty(() => ({...})),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Data Flow
|
|
62
|
+
|
|
63
|
+
### Station Login Flow
|
|
64
|
+
|
|
65
|
+
```mermaid
|
|
66
|
+
flowchart TD
|
|
67
|
+
A[cc.stationLogin] --> B[Validate input]
|
|
68
|
+
B --> C[services.agent.stationLogin]
|
|
69
|
+
C --> D[AqmReqs.req]
|
|
70
|
+
D --> E[HTTP REST request to backend]
|
|
71
|
+
E --> F[Backend processes]
|
|
72
|
+
F --> G{Success?}
|
|
73
|
+
G -->|Yes| H[StationLoginSuccess event]
|
|
74
|
+
G -->|No| I[StationLoginFailed event]
|
|
75
|
+
H --> J[Register WebCalling if BROWSER]
|
|
76
|
+
J --> K[Track metrics]
|
|
77
|
+
K --> L[Return response]
|
|
78
|
+
I --> M[getErrorDetails]
|
|
79
|
+
M --> N[Throw error]
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Sequence Diagrams
|
|
85
|
+
|
|
86
|
+
### Station Login
|
|
87
|
+
|
|
88
|
+
```mermaid
|
|
89
|
+
sequenceDiagram
|
|
90
|
+
participant App
|
|
91
|
+
participant CC as ContactCenter
|
|
92
|
+
participant Svc as Services.agent
|
|
93
|
+
participant AQM as AqmReqs
|
|
94
|
+
participant WS as WebSocket
|
|
95
|
+
participant BE as Backend
|
|
96
|
+
App->>CC: stationLogin(params)
|
|
97
|
+
CC->>CC: Validate dial number
|
|
98
|
+
CC->>CC: timeEvent(LOGIN_SUCCESS, LOGIN_FAILED)
|
|
99
|
+
CC->>Svc: stationLogin({data})
|
|
100
|
+
Svc->>AQM: req(config)
|
|
101
|
+
AQM->>BE: HTTP POST /v1/agents/login
|
|
102
|
+
BE-->>WS: AgentStationLoginSuccess
|
|
103
|
+
WS-->>AQM: Resolve with response
|
|
104
|
+
AQM-->>Svc: Return response
|
|
105
|
+
Svc-->>CC: Login response
|
|
106
|
+
CC->>CC: Register WebCalling (if BROWSER)
|
|
107
|
+
CC->>CC: trackEvent(LOGIN_SUCCESS)
|
|
108
|
+
CC-->>App: StationLoginResponse
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### State Change
|
|
112
|
+
|
|
113
|
+
```mermaid
|
|
114
|
+
sequenceDiagram
|
|
115
|
+
participant App
|
|
116
|
+
participant CC as ContactCenter
|
|
117
|
+
participant Svc as Services.agent
|
|
118
|
+
participant WS as WebSocket
|
|
119
|
+
participant BE as Backend
|
|
120
|
+
|
|
121
|
+
App->>CC: setAgentState(params)
|
|
122
|
+
CC->>CC: timeEvent(STATE_SUCCESS, STATE_FAILED)
|
|
123
|
+
CC->>Svc: stateChange({data})
|
|
124
|
+
Svc->>BE: HTTP PUT /v1/agents/session/state
|
|
125
|
+
BE-->>WS: AgentStateChangeSuccess
|
|
126
|
+
WS-->>CC: Emit via handleWebsocketMessage
|
|
127
|
+
CC->>CC: emit(agent:stateChange)
|
|
128
|
+
CC->>CC: trackEvent(STATE_SUCCESS)
|
|
129
|
+
CC-->>App: SetStateResponse
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Request Configuration
|
|
135
|
+
|
|
136
|
+
Each agent method defines:
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
{
|
|
140
|
+
url: '/v1/agents/...', // API endpoint
|
|
141
|
+
host: WCC_API_GATEWAY, // Base URL
|
|
142
|
+
data: p.data, // Request payload
|
|
143
|
+
method: HTTP_METHODS.POST, // HTTP method (POST if data present, GET otherwise)
|
|
144
|
+
err: errorHandler, // Error transformer
|
|
145
|
+
notifSuccess: {
|
|
146
|
+
bind: {
|
|
147
|
+
type: CC_EVENTS.SUCCESS_TYPE,
|
|
148
|
+
data: {type: CC_EVENTS.SUCCESS_TYPE},
|
|
149
|
+
},
|
|
150
|
+
msg: {} as SuccessType, // Response type hint
|
|
151
|
+
},
|
|
152
|
+
notifFail: {
|
|
153
|
+
bind: {
|
|
154
|
+
type: CC_EVENTS.FAIL_TYPE,
|
|
155
|
+
data: {type: CC_EVENTS.FAIL_TYPE},
|
|
156
|
+
},
|
|
157
|
+
errId: 'Service.aqm.agent.method',
|
|
158
|
+
},
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Event Flow
|
|
165
|
+
|
|
166
|
+
### WebSocket to Application
|
|
167
|
+
|
|
168
|
+
```mermaid
|
|
169
|
+
flowchart LR
|
|
170
|
+
A[WebSocket Message] --> B[WebSocketManager]
|
|
171
|
+
B --> C[cc.handleWebsocketMessage]
|
|
172
|
+
C --> D{Event Type?}
|
|
173
|
+
D -->|AGENT_STATE_CHANGE| E[emit agent:stateChange]
|
|
174
|
+
D -->|data.type check| F{Nested Type?}
|
|
175
|
+
F -->|STATION_LOGIN_SUCCESS| G[Transform channelsMap]
|
|
176
|
+
G --> H[emit agent:stationLoginSuccess]
|
|
177
|
+
F -->|LOGOUT_SUCCESS| I[emit agent:logoutSuccess]
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### ChannelsMap Transformation
|
|
181
|
+
|
|
182
|
+
The login success event transforms `channelsMap` to `mmProfile`:
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
// Incoming
|
|
186
|
+
channelsMap: {
|
|
187
|
+
chat: ['channel-1', 'channel-2'],
|
|
188
|
+
email: ['channel-3'],
|
|
189
|
+
telephony: ['channel-4'],
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Transformed
|
|
193
|
+
mmProfile: {
|
|
194
|
+
chat: 2, // Length of arrays
|
|
195
|
+
email: 1,
|
|
196
|
+
social: 0,
|
|
197
|
+
telephony: 1,
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Silent Relogin
|
|
204
|
+
|
|
205
|
+
Automatic relogin on WebSocket reconnection:
|
|
206
|
+
|
|
207
|
+
```mermaid
|
|
208
|
+
flowchart TD
|
|
209
|
+
A[WebSocket Reconnected] --> B[handleConnectionLost]
|
|
210
|
+
B --> C{allowAutomatedRelogin?}
|
|
211
|
+
C -->|Yes| D[silentRelogin]
|
|
212
|
+
D --> E[services.agent.reload]
|
|
213
|
+
E --> F{Success?}
|
|
214
|
+
F -->|Yes| G[Update agentConfig]
|
|
215
|
+
G --> H{lastStateChangeReason?}
|
|
216
|
+
H -->|agent-wss-disconnect| I[setAgentState Available]
|
|
217
|
+
H -->|Other| J[Keep current state]
|
|
218
|
+
F -->|No, AGENT_NOT_FOUND| K[Handle silently]
|
|
219
|
+
F -->|No, Other| L[Throw error]
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Error Handling
|
|
225
|
+
|
|
226
|
+
### Login Error Details
|
|
227
|
+
|
|
228
|
+
For `stationLogin`, special error handling extracts field-specific messages:
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
// Utils.ts - getStationLoginErrorData
|
|
232
|
+
const errorCodeMessageMap = {
|
|
233
|
+
DUPLICATE_LOCATION: {
|
|
234
|
+
message: 'This extension is already in use',
|
|
235
|
+
fieldName: loginOption,
|
|
236
|
+
},
|
|
237
|
+
INVALID_DIAL_NUMBER: {
|
|
238
|
+
message: 'Enter a valid US dial number...',
|
|
239
|
+
fieldName: loginOption,
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Metrics Tracking
|
|
247
|
+
|
|
248
|
+
| Metric | Type | When Tracked |
|
|
249
|
+
| ---------------------------- | --------------------------------- | ------------------------ |
|
|
250
|
+
| `STATION_LOGIN_SUCCESS` | behavioral, business, operational | Login succeeds |
|
|
251
|
+
| `STATION_LOGIN_FAILED` | behavioral, business, operational | Login fails |
|
|
252
|
+
| `STATION_LOGOUT_SUCCESS` | behavioral, business, operational | Logout succeeds |
|
|
253
|
+
| `STATION_LOGOUT_FAILED` | behavioral, business, operational | Logout fails |
|
|
254
|
+
| `AGENT_STATE_CHANGE_SUCCESS` | behavioral, business, operational | State change succeeds |
|
|
255
|
+
| `AGENT_STATE_CHANGE_FAILED` | behavioral, business, operational | State change fails |
|
|
256
|
+
| `FETCH_BUDDY_AGENTS_SUCCESS` | operational | Buddy agents fetched |
|
|
257
|
+
| `FETCH_BUDDY_AGENTS_FAILED` | operational | Buddy agents fetch fails |
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Troubleshooting
|
|
262
|
+
|
|
263
|
+
### Issue: Login fails with DUPLICATE_LOCATION
|
|
264
|
+
|
|
265
|
+
**Cause**: Extension/DN already in use by another session
|
|
266
|
+
|
|
267
|
+
**Solution**:
|
|
268
|
+
|
|
269
|
+
1. Logout from other session
|
|
270
|
+
2. Use different extension
|
|
271
|
+
3. Contact admin if stuck
|
|
272
|
+
|
|
273
|
+
### Issue: State change fails
|
|
274
|
+
|
|
275
|
+
**Cause**: Agent may be in a call or transitioning state
|
|
276
|
+
|
|
277
|
+
**Solution**:
|
|
278
|
+
1. Complete current interaction
|
|
279
|
+
2. Wait for state to stabilize
|
|
280
|
+
3. Retry state change
|
|
281
|
+
|
|
282
|
+
### Issue: Silent relogin not working
|
|
283
|
+
|
|
284
|
+
**Cause**: `allowAutomatedRelogin` config not set
|
|
285
|
+
|
|
286
|
+
**Solution**:
|
|
287
|
+
```typescript
|
|
288
|
+
const webex = Webex.init({
|
|
289
|
+
config: {
|
|
290
|
+
cc: {
|
|
291
|
+
allowAutomatedRelogin: true,
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
});
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Related Files
|
|
300
|
+
|
|
301
|
+
- [cc.ts](../../../cc.ts) - Main plugin
|
|
302
|
+
- [agent/index.ts](../index.ts) - Service implementation
|
|
303
|
+
- [agent/types.ts](../types.ts) - Type definitions
|
|
304
|
+
- [cc.ts test](../../../../test/unit/spec/cc.ts) - Test file
|