@webex/contact-center 3.12.0-next.122 → 3.12.0-next.124
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 +1 -1
- package/ai-docs/CONTRACTS.md +1 -1
- package/dist/services/task/TaskManager.js +137 -0
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/state-machine/TaskStateMachine.js +51 -23
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -1
- package/dist/services/task/voice/Voice.js +39 -1
- package/dist/services/task/voice/Voice.js.map +1 -1
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +86 -0
- package/dist/webex.js +1 -1
- package/package.json +2 -2
- package/src/services/task/TaskManager.ts +194 -1
- package/src/services/task/ai-docs/task-spec.md +3 -1
- package/src/services/task/state-machine/TaskStateMachine.ts +47 -20
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +18 -7
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +49 -9
- package/src/services/task/voice/Voice.ts +44 -2
- package/test/unit/spec/services/task/Task.ts +74 -6
- package/test/unit/spec/services/task/TaskManager.ts +416 -1
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +568 -0
- package/test/unit/spec/services/task/voice/Voice.ts +158 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
|
@@ -12,11 +12,27 @@ var _loggerProxy = _interopRequireDefault(require("../../../logger-proxy"));
|
|
|
12
12
|
var _MetricsManager = _interopRequireDefault(require("../../../metrics/MetricsManager"));
|
|
13
13
|
var _constants2 = require("../../../metrics/constants");
|
|
14
14
|
var _stateMachine = require("../state-machine");
|
|
15
|
+
var _guards = require("../state-machine/guards");
|
|
15
16
|
var _TaskUtils = require("../TaskUtils");
|
|
16
17
|
var _wxAppTelephonyUtils = require("../../wxAppTelephonyUtils");
|
|
17
18
|
var _wxAppVoiceMethods = require("./wxAppVoiceMethods");
|
|
18
19
|
var _wxAppDiagnosticLogging = require("../../wxAppDiagnosticLogging");
|
|
19
20
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
|
+
const hasNonemptyPendingWrapUp = taskData => Array.isArray(taskData?.agentsPendingWrapUp) && taskData.agentsPendingWrapUp.length > 0;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Same consulted-non-owner rule as TaskManager leave stamp. Used only for the
|
|
25
|
+
* HTTP exitConference self-exit fallback (shouldWrapUpForThisAgent stays unchanged).
|
|
26
|
+
*/
|
|
27
|
+
const isConsultedNonOwner = (taskData, fallback) => {
|
|
28
|
+
const isConsulted = taskData.isConsulted ?? fallback?.isConsulted;
|
|
29
|
+
if (isConsulted !== true) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
const owner = taskData.interaction?.owner ?? fallback?.interaction?.owner;
|
|
33
|
+
const selfAgentId = taskData.agentId ?? fallback?.agentId;
|
|
34
|
+
return Boolean(selfAgentId && owner && owner !== selfAgentId);
|
|
35
|
+
};
|
|
20
36
|
class Voice extends _Task.default {
|
|
21
37
|
static WXAPP_MUTE_SYNC_RETRY_DELAY_MS = 50;
|
|
22
38
|
static WXAPP_MUTE_SYNC_MAX_RETRIES = 3;
|
|
@@ -1120,9 +1136,31 @@ class Voice extends _Task.default {
|
|
|
1120
1136
|
|
|
1121
1137
|
// Send success event to transition state
|
|
1122
1138
|
if (this.stateMachineService) {
|
|
1139
|
+
const responseTaskData = response?.data ?? {};
|
|
1140
|
+
const snapshot = this.stateMachineService.getSnapshot();
|
|
1141
|
+
const wrapUpContext = snapshot?.context ?? {
|
|
1142
|
+
uiControlConfig: this.uiControlConfig,
|
|
1143
|
+
taskData: this.data
|
|
1144
|
+
};
|
|
1145
|
+
const mergedTaskData = {
|
|
1146
|
+
...this.data,
|
|
1147
|
+
...responseTaskData
|
|
1148
|
+
};
|
|
1149
|
+
// Pending-list precedence is response-only; do not keep a cached snapshot list.
|
|
1150
|
+
if (!Object.prototype.hasOwnProperty.call(responseTaskData, 'agentsPendingWrapUp')) {
|
|
1151
|
+
delete mergedTaskData.agentsPendingWrapUp;
|
|
1152
|
+
}
|
|
1153
|
+
let wrapUpRequired = (0, _guards.shouldWrapUpForThisAgent)(wrapUpContext, mergedTaskData);
|
|
1154
|
+
// Confirmed self-exit: empty/absent response pending matches TaskManager leave stamp.
|
|
1155
|
+
if (!wrapUpRequired && !hasNonemptyPendingWrapUp(responseTaskData)) {
|
|
1156
|
+
wrapUpRequired = !isConsultedNonOwner(mergedTaskData, this.data);
|
|
1157
|
+
}
|
|
1123
1158
|
this.stateMachineService.send({
|
|
1124
1159
|
type: _stateMachine.TaskEvent.EXIT_CONFERENCE_SUCCESS,
|
|
1125
|
-
taskData:
|
|
1160
|
+
taskData: {
|
|
1161
|
+
...responseTaskData,
|
|
1162
|
+
wrapUpRequired
|
|
1163
|
+
}
|
|
1126
1164
|
});
|
|
1127
1165
|
}
|
|
1128
1166
|
this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_SUCCESS, {
|