@webex/contact-center 3.8.1 → 3.9.0-multipleLLM.2
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/dist/cc.js +106 -63
- package/dist/cc.js.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/logger-proxy.js +24 -1
- package/dist/logger-proxy.js.map +1 -1
- package/dist/metrics/MetricsManager.js +1 -1
- package/dist/metrics/MetricsManager.js.map +1 -1
- package/dist/metrics/behavioral-events.js +88 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +26 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/AddressBook.js +271 -0
- package/dist/services/AddressBook.js.map +1 -0
- package/dist/services/EntryPoint.js +227 -0
- package/dist/services/EntryPoint.js.map +1 -0
- package/dist/services/Queue.js +261 -0
- package/dist/services/Queue.js.map +1 -0
- package/dist/services/config/constants.js +24 -2
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +1 -43
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +22 -5
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/GlobalTypes.js.map +1 -1
- package/dist/services/core/Utils.js +162 -2
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +0 -4
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +0 -4
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/task/TaskManager.js +74 -2
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/constants.js +7 -1
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/contact.js +86 -0
- package/dist/services/task/contact.js.map +1 -1
- package/dist/services/task/index.js +384 -72
- package/dist/services/task/index.js.map +1 -1
- package/dist/services/task/types.js +14 -0
- package/dist/services/task/types.js.map +1 -1
- package/dist/types/cc.d.ts +77 -43
- package/dist/types/index.d.ts +8 -3
- package/dist/types/metrics/constants.d.ts +20 -0
- package/dist/types/services/AddressBook.d.ts +74 -0
- package/dist/types/services/EntryPoint.d.ts +67 -0
- package/dist/types/services/Queue.d.ts +76 -0
- package/dist/types/services/config/constants.d.ts +23 -1
- package/dist/types/services/config/index.d.ts +1 -14
- package/dist/types/services/config/types.d.ts +44 -64
- package/dist/types/services/core/GlobalTypes.d.ts +25 -0
- package/dist/types/services/core/Utils.d.ts +40 -1
- package/dist/types/services/task/constants.d.ts +6 -0
- package/dist/types/services/task/contact.d.ts +10 -0
- package/dist/types/services/task/index.d.ts +44 -2
- package/dist/types/services/task/types.d.ts +123 -1
- package/dist/types/types.d.ts +162 -0
- package/dist/types/utils/PageCache.d.ts +173 -0
- package/dist/types.js +17 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/PageCache.js +192 -0
- package/dist/utils/PageCache.js.map +1 -0
- package/dist/webex.js +1 -1
- package/package.json +10 -10
- package/src/cc.ts +122 -81
- package/src/index.ts +19 -3
- package/src/logger-proxy.ts +24 -1
- package/src/metrics/MetricsManager.ts +1 -1
- package/src/metrics/behavioral-events.ts +92 -0
- package/src/metrics/constants.ts +30 -0
- package/src/services/AddressBook.ts +291 -0
- package/src/services/EntryPoint.ts +241 -0
- package/src/services/Queue.ts +277 -0
- package/src/services/config/constants.ts +26 -2
- package/src/services/config/index.ts +1 -55
- package/src/services/config/types.ts +22 -65
- package/src/services/core/GlobalTypes.ts +27 -0
- package/src/services/core/Utils.ts +199 -1
- package/src/services/core/aqm-reqs.ts +0 -5
- package/src/services/core/websocket/WebSocketManager.ts +0 -4
- package/src/services/task/TaskManager.ts +79 -3
- package/src/services/task/constants.ts +6 -0
- package/src/services/task/contact.ts +80 -0
- package/src/services/task/index.ts +457 -57
- package/src/services/task/types.ts +133 -0
- package/src/types.ts +180 -0
- package/src/utils/PageCache.ts +252 -0
- package/test/unit/spec/cc.ts +31 -82
- package/test/unit/spec/metrics/MetricsManager.ts +0 -1
- package/test/unit/spec/metrics/behavioral-events.ts +56 -0
- package/test/unit/spec/services/AddressBook.ts +332 -0
- package/test/unit/spec/services/EntryPoint.ts +259 -0
- package/test/unit/spec/services/Queue.ts +323 -0
- package/test/unit/spec/services/config/index.ts +0 -71
- package/test/unit/spec/services/core/Utils.ts +50 -0
- package/test/unit/spec/services/core/aqm-reqs.ts +1 -3
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +0 -4
- package/test/unit/spec/services/task/TaskManager.ts +145 -1
- package/test/unit/spec/services/task/contact.ts +31 -1
- package/test/unit/spec/services/task/index.ts +410 -123
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","obj","__esModule","default","PAGINATION_DEFAULTS","exports","PAGE","PAGE_SIZE","DEFAULT_CACHE_TTL_MINUTES","PageCache","cache","Map","constructor","apiName","canUseCache","params","search","filter","attributes","sortBy","buildCacheKey","orgId","page","pageSize","getCachedPage","cacheKey","cachedEntry","get","now","Date","cacheAge","timestamp","LoggerProxy","log","module","method","delete","cachePage","data","meta","cacheEntry","totalMeta","totalPages","totalRecords","totalItems","undefined","set","length","clearCache","cacheSize","size","clear","getCacheSize","_default"],"sources":["PageCache.ts"],"sourcesContent":["import LoggerProxy from '../logger-proxy';\n\n/**\n * Common pagination metadata interface used across all APIs.\n * @public\n * @template T - Additional metadata properties specific to the API\n */\nexport interface PaginationMeta {\n /** Organization ID */\n orgid?: string;\n /** Current page number */\n page?: number;\n /** Page size for current data set */\n pageSize?: number;\n /** Number of pages */\n totalPages?: number;\n /** Total number of items */\n totalRecords?: number;\n /** Total number of items (alias for compatibility) */\n totalItems?: number;\n /** Current page number (alias for compatibility) */\n currentPage?: number;\n /** Map of pagination links */\n links?: Record<string, string>;\n}\n\n/**\n * Common paginated response interface used across all APIs.\n * @public\n * @template T - The type of data items in the response\n */\nexport interface PaginatedResponse<T> {\n /** Array of data items */\n data: T[];\n /** Pagination metadata */\n meta: PaginationMeta;\n}\n\n/**\n * Common search and pagination parameters interface.\n * @public\n */\nexport interface BaseSearchParams {\n /** Search keyword */\n search?: string;\n /** Filter criteria using RSQL syntax */\n filter?: string;\n /** Attributes to be returned */\n attributes?: string;\n /** Page number (starts from 0) */\n page?: number;\n /** Number of items per page */\n pageSize?: number;\n /** Sort field */\n sortBy?: string;\n /** Sort direction */\n sortOrder?: 'asc' | 'desc';\n}\n\n/**\n * Default pagination constants used across all APIs.\n * @public\n */\nexport const PAGINATION_DEFAULTS = {\n /** Default page number */\n PAGE: 0,\n /** Default page size */\n PAGE_SIZE: 100,\n} as const;\n\n/**\n * Interface for cached page entry with metadata\n * @public\n */\nexport interface PageCacheEntry<T> {\n /** Cached data items for this page */\n data: T[];\n /** Timestamp when this page was cached */\n timestamp: number;\n /** Total metadata if available */\n totalMeta?: {\n totalPages?: number;\n totalRecords?: number;\n };\n}\n\n/**\n * Interface for cache validation parameters\n * @public\n */\nexport interface CacheValidationParams {\n /** Search query parameter */\n search?: string;\n /** Filter parameter */\n filter?: string;\n /** Attributes parameter */\n attributes?: string;\n /** Sort by parameter */\n sortBy?: string;\n}\n\n/**\n * Default cache TTL in minutes\n */\nconst DEFAULT_CACHE_TTL_MINUTES = 5;\n\n/**\n * Page cache utility class for managing paginated API response caching.\n * Provides consistent caching behavior across all Contact Center APIs.\n *\n * @class PageCache\n * @public\n * @template T - The type of data items being cached\n * @example\n * ```typescript\n * // Create a cache instance for a specific data type\n * const cache = new PageCache<AddressBookEntry>('AddressBook');\n *\n * // Check if we can use cache (no search/filter parameters)\n * if (cache.canUseCache({ search, filter })) {\n * const cacheKey = cache.buildCacheKey(orgId, page, pageSize);\n * const cachedPage = cache.getCachedPage(cacheKey);\n *\n * if (cachedPage) {\n * return cachedPage.data;\n * }\n * }\n *\n * // Cache API response\n * cache.cachePage(cacheKey, responseData, responseMeta);\n * ```\n */\nexport class PageCache<T> {\n private cache: Map<string, PageCacheEntry<T>> = new Map();\n private apiName: string;\n\n /**\n * Creates an instance of PageCache\n * @param {string} apiName - Name of the API using this cache (for logging)\n * @public\n */\n constructor(apiName: string) {\n this.apiName = apiName;\n }\n\n /**\n * Checks if cache can be used for the given parameters.\n * Cache is only used for simple pagination without search/filter/attributes/sort.\n * @param {CacheValidationParams} params - Parameters to validate\n * @returns {boolean} True if cache can be used\n * @public\n */\n public canUseCache(params: CacheValidationParams): boolean {\n const {search, filter, attributes, sortBy} = params;\n\n return !search && !filter && !attributes && !sortBy;\n }\n\n /**\n * Builds a cache key for the given parameters\n * @param {string} orgId - Organization ID\n * @param {number} page - Page number\n * @param {number} pageSize - Page size\n * @returns {string} Cache key\n * @public\n */\n public buildCacheKey(orgId: string, page: number, pageSize: number): string {\n return `${orgId}:${page}:${pageSize}`;\n }\n\n /**\n * Gets a cached page if it exists and is valid\n * @param {string} cacheKey - Cache key to look up\n * @returns {PageCacheEntry<T> | null} Cached page entry or null if not found/expired\n * @public\n */\n public getCachedPage(cacheKey: string): PageCacheEntry<T> | null {\n const cachedEntry = this.cache.get(cacheKey);\n\n if (!cachedEntry) {\n return null;\n }\n\n // Check if cache entry is expired\n const now = Date.now();\n const cacheAge = (now - cachedEntry.timestamp) / (1000 * 60); // in minutes\n\n if (cacheAge >= DEFAULT_CACHE_TTL_MINUTES) {\n LoggerProxy.log(`Cache entry expired for key: ${cacheKey}`, {\n module: this.apiName,\n method: 'getCachedPage',\n });\n this.cache.delete(cacheKey);\n\n return null;\n }\n\n return cachedEntry;\n }\n\n /**\n * Caches a page of data with metadata\n * @param {string} cacheKey - Cache key\n * @param {T[]} data - Data items to cache\n * @param {any} meta - Metadata from API response\n * @public\n */\n public cachePage(cacheKey: string, data: T[], meta?: any): void {\n const cacheEntry: PageCacheEntry<T> = {\n data,\n timestamp: Date.now(),\n totalMeta: meta\n ? {\n totalPages: meta.totalPages,\n totalRecords: meta.totalRecords || meta.totalItems,\n }\n : undefined,\n };\n\n this.cache.set(cacheKey, cacheEntry);\n\n LoggerProxy.log(`Cached page with ${data.length} items for key: ${cacheKey}`, {\n module: this.apiName,\n method: 'cachePage',\n });\n }\n\n /**\n * Clears all cached entries\n * @public\n */\n public clearCache(): void {\n const cacheSize = this.cache.size;\n this.cache.clear();\n\n LoggerProxy.log(`Cleared ${cacheSize} cache entries`, {\n module: this.apiName,\n method: 'clearCache',\n });\n }\n\n /**\n * Gets the current number of cached entries\n * @returns {number} Number of cached entries\n * @public\n */\n public getCacheSize(): number {\n return this.cache.size;\n }\n}\n\nexport default PageCache;\n"],"mappings":"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"}
|
package/dist/webex.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/contact-center",
|
|
3
|
-
"version": "3.8.1",
|
|
4
3
|
"description": "This package provides a set of APIs to perform various operations for the Agent flow within Webex Contact Center",
|
|
5
4
|
"license": "Cisco's General Terms (https://www.cisco.com/site/us/en/about/legal/contract-experience/index.html)",
|
|
6
5
|
"contributors": [
|
|
@@ -46,13 +45,13 @@
|
|
|
46
45
|
},
|
|
47
46
|
"dependencies": {
|
|
48
47
|
"@types/platform": "1.3.4",
|
|
49
|
-
"@webex/calling": "
|
|
50
|
-
"@webex/internal-plugin-mercury": "
|
|
51
|
-
"@webex/internal-plugin-metrics": "
|
|
52
|
-
"@webex/internal-plugin-support": "
|
|
53
|
-
"@webex/plugin-authorization": "
|
|
54
|
-
"@webex/plugin-logger": "
|
|
55
|
-
"@webex/webex-core": "
|
|
48
|
+
"@webex/calling": "3.9.0-multipleLLM.2",
|
|
49
|
+
"@webex/internal-plugin-mercury": "3.9.0-multipleLLM.1",
|
|
50
|
+
"@webex/internal-plugin-metrics": "3.9.0-multipleLLM.1",
|
|
51
|
+
"@webex/internal-plugin-support": "3.9.0-multipleLLM.1",
|
|
52
|
+
"@webex/plugin-authorization": "3.9.0-multipleLLM.1",
|
|
53
|
+
"@webex/plugin-logger": "3.9.0-multipleLLM.1",
|
|
54
|
+
"@webex/webex-core": "3.9.0-multipleLLM.1",
|
|
56
55
|
"jest-html-reporters": "3.0.11",
|
|
57
56
|
"lodash": "^4.17.21"
|
|
58
57
|
},
|
|
@@ -65,7 +64,7 @@
|
|
|
65
64
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
66
65
|
"@webex/jest-config-legacy": "0.0.0",
|
|
67
66
|
"@webex/legacy-tools": "0.0.0",
|
|
68
|
-
"@webex/test-helper-mock-webex": "
|
|
67
|
+
"@webex/test-helper-mock-webex": "3.9.0-multipleLLM.0",
|
|
69
68
|
"eslint": "^8.24.0",
|
|
70
69
|
"eslint-config-airbnb-base": "15.0.0",
|
|
71
70
|
"eslint-config-prettier": "8.3.0",
|
|
@@ -79,5 +78,6 @@
|
|
|
79
78
|
"prettier": "2.5.1",
|
|
80
79
|
"typedoc": "^0.25.0",
|
|
81
80
|
"typescript": "4.9.5"
|
|
82
|
-
}
|
|
81
|
+
},
|
|
82
|
+
"version": "3.9.0-multipleLLM.2"
|
|
83
83
|
}
|
package/src/cc.ts
CHANGED
|
@@ -44,13 +44,8 @@ import WebexRequest from './services/core/WebexRequest';
|
|
|
44
44
|
import LoggerProxy from './logger-proxy';
|
|
45
45
|
import {StateChange, Logout, StateChangeSuccess, AGENT_EVENTS} from './services/agent/types';
|
|
46
46
|
import {getErrorDetails, isValidDialNumber} from './services/core/Utils';
|
|
47
|
-
import {Profile, WelcomeEvent, CC_EVENTS
|
|
48
|
-
import {
|
|
49
|
-
AGENT_STATE_AVAILABLE,
|
|
50
|
-
AGENT_STATE_AVAILABLE_ID,
|
|
51
|
-
DEFAULT_PAGE,
|
|
52
|
-
DEFAULT_PAGE_SIZE,
|
|
53
|
-
} from './services/config/constants';
|
|
47
|
+
import {Profile, WelcomeEvent, CC_EVENTS} from './services/config/types';
|
|
48
|
+
import {AGENT_STATE_AVAILABLE, AGENT_STATE_AVAILABLE_ID} from './services/config/constants';
|
|
54
49
|
import {ConnectionLostDetails} from './services/core/websocket/types';
|
|
55
50
|
import TaskManager from './services/task/TaskManager';
|
|
56
51
|
import WebCallingService from './services/WebCallingService';
|
|
@@ -58,6 +53,15 @@ import {ITask, TASK_EVENTS, TaskResponse, DialerPayload} from './services/task/t
|
|
|
58
53
|
import MetricsManager from './metrics/MetricsManager';
|
|
59
54
|
import {METRIC_EVENT_NAMES} from './metrics/constants';
|
|
60
55
|
import {Failure} from './services/core/GlobalTypes';
|
|
56
|
+
import EntryPoint from './services/EntryPoint';
|
|
57
|
+
import AddressBook from './services/AddressBook';
|
|
58
|
+
import Queue from './services/Queue';
|
|
59
|
+
import type {
|
|
60
|
+
EntryPointListResponse,
|
|
61
|
+
EntryPointSearchParams,
|
|
62
|
+
ContactServiceQueuesResponse,
|
|
63
|
+
ContactServiceQueueSearchParams,
|
|
64
|
+
} from './types';
|
|
61
65
|
|
|
62
66
|
/**
|
|
63
67
|
* The main Contact Center plugin class that enables integration with Webex Contact Center.
|
|
@@ -163,6 +167,7 @@ import {Failure} from './services/core/GlobalTypes';
|
|
|
163
167
|
*
|
|
164
168
|
* @public
|
|
165
169
|
*/
|
|
170
|
+
|
|
166
171
|
export default class ContactCenter extends WebexPlugin implements IContactCenter {
|
|
167
172
|
/**
|
|
168
173
|
* The plugin's unique namespace identifier in the Webex SDK.
|
|
@@ -243,6 +248,71 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
243
248
|
*/
|
|
244
249
|
private metricsManager: MetricsManager;
|
|
245
250
|
|
|
251
|
+
/**
|
|
252
|
+
* API instance for managing Webex Contact Center entry points
|
|
253
|
+
* Provides functionality to fetch entry points with caching support
|
|
254
|
+
* @type {EntryPoint}
|
|
255
|
+
* @public
|
|
256
|
+
* @example
|
|
257
|
+
* ```typescript
|
|
258
|
+
* const cc = webex.cc;
|
|
259
|
+
* await cc.register();
|
|
260
|
+
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
261
|
+
*
|
|
262
|
+
* // Access EntryPointRecord
|
|
263
|
+
* const response = await cc.entryPoint.getEntryPoints({
|
|
264
|
+
* page: 0,
|
|
265
|
+
* pageSize: 50
|
|
266
|
+
* });
|
|
267
|
+
* ```
|
|
268
|
+
*/
|
|
269
|
+
private entryPoint: EntryPoint;
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* API instance for managing Webex Contact Center address book contacts
|
|
273
|
+
* Provides functionality to fetch address book entries with caching support
|
|
274
|
+
* @type {AddressBook}
|
|
275
|
+
* @public
|
|
276
|
+
* @example
|
|
277
|
+
* ```typescript
|
|
278
|
+
* const cc = webex.cc;
|
|
279
|
+
* await cc.register();
|
|
280
|
+
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
281
|
+
*
|
|
282
|
+
* // Access AddressBook API
|
|
283
|
+
* const response = await cc.addressBook.getEntries({
|
|
284
|
+
* page: 0,
|
|
285
|
+
* pageSize: 25
|
|
286
|
+
* });
|
|
287
|
+
* ```
|
|
288
|
+
*/
|
|
289
|
+
public addressBook: AddressBook;
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* API instance for managing Webex Contact Center queues
|
|
293
|
+
* Provides functionality to fetch queues with caching support
|
|
294
|
+
* @type {Queue}
|
|
295
|
+
* @public
|
|
296
|
+
* @example
|
|
297
|
+
* ```typescript
|
|
298
|
+
* const cc = webex.cc;
|
|
299
|
+
* await cc.register();
|
|
300
|
+
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
301
|
+
*
|
|
302
|
+
* // Access Queue API
|
|
303
|
+
* const response = await cc.queue.getQueues({
|
|
304
|
+
* page: 0,
|
|
305
|
+
* pageSize: 50
|
|
306
|
+
* });
|
|
307
|
+
*
|
|
308
|
+
* // Filter queues by specific criteria
|
|
309
|
+
* const filteredQueues = await cc.queue.getQueues({
|
|
310
|
+
* filter: 'id=="queue-id-123"'
|
|
311
|
+
* });
|
|
312
|
+
* ```
|
|
313
|
+
*/
|
|
314
|
+
private queue: Queue;
|
|
315
|
+
|
|
246
316
|
/**
|
|
247
317
|
* Logger utility for Contact Center plugin
|
|
248
318
|
* Provides consistent logging across the plugin
|
|
@@ -289,6 +359,13 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
289
359
|
);
|
|
290
360
|
this.incomingTaskListener();
|
|
291
361
|
|
|
362
|
+
// Initialize API instances
|
|
363
|
+
// will have future function for indivdual fetch etc so better be in an object
|
|
364
|
+
this.entryPoint = new EntryPoint(this.$webex);
|
|
365
|
+
this.addressBook = new AddressBook(this.$webex, () => this.agentConfig?.addressBookId);
|
|
366
|
+
this.queue = new Queue(this.$webex);
|
|
367
|
+
|
|
368
|
+
// Initialize logger
|
|
292
369
|
LoggerProxy.initialize(this.$webex.logger);
|
|
293
370
|
});
|
|
294
371
|
}
|
|
@@ -614,6 +691,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
614
691
|
});
|
|
615
692
|
// TODO: Make profile a singleton to make it available throughout app/sdk so we dont need to inject info everywhere
|
|
616
693
|
this.taskManager.setWrapupData(this.agentConfig.wrapUpData);
|
|
694
|
+
this.taskManager.setAgentId(this.agentConfig.agentId);
|
|
617
695
|
|
|
618
696
|
if (
|
|
619
697
|
this.agentConfig.webRtcEnabled &&
|
|
@@ -979,11 +1057,25 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
979
1057
|
return;
|
|
980
1058
|
}
|
|
981
1059
|
|
|
982
|
-
LoggerProxy.log(`Received event: ${eventData.type}`, {
|
|
1060
|
+
LoggerProxy.log(`Received event: ${eventData?.data?.type ?? eventData.type}`, {
|
|
983
1061
|
module: CC_FILE,
|
|
984
1062
|
method: METHODS.HANDLE_WEBSOCKET_MESSAGE,
|
|
985
1063
|
});
|
|
986
1064
|
|
|
1065
|
+
// Emit metrics for all websocket events except keepalive and welcome
|
|
1066
|
+
const topLevelType = eventData.type;
|
|
1067
|
+
const nestedType = eventData?.data?.type;
|
|
1068
|
+
if (topLevelType !== CC_EVENTS.WELCOME && eventData.keepalive !== 'true') {
|
|
1069
|
+
const metricsPayload: Record<string, any> = {
|
|
1070
|
+
ws_event_type: nestedType || topLevelType,
|
|
1071
|
+
top_level_type: topLevelType,
|
|
1072
|
+
has_data: Boolean(eventData.data),
|
|
1073
|
+
};
|
|
1074
|
+
this.metricsManager.trackEvent(METRIC_EVENT_NAMES.WEBSOCKET_EVENT_RECEIVED, metricsPayload, [
|
|
1075
|
+
'operational',
|
|
1076
|
+
]);
|
|
1077
|
+
}
|
|
1078
|
+
|
|
987
1079
|
switch (eventData.type) {
|
|
988
1080
|
case CC_EVENTS.AGENT_MULTI_LOGIN:
|
|
989
1081
|
// @ts-ignore
|
|
@@ -1398,79 +1490,6 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1398
1490
|
}
|
|
1399
1491
|
}
|
|
1400
1492
|
|
|
1401
|
-
/**
|
|
1402
|
-
* This is used for getting the list of queues to which a task can be consulted or transferred.
|
|
1403
|
-
* @param {string} [search] - Optional search string to filter queues by name
|
|
1404
|
-
* @param {string} [filter] - Optional OData filter expression (e.g., 'teamId eq "team123"')
|
|
1405
|
-
* @param {number} [page=0] - Page number for paginated results, starting at 0
|
|
1406
|
-
* @param {number} [pageSize=100] - Number of queues to return per page
|
|
1407
|
-
* @returns Promise<ContactServiceQueue[]> Resolves with the list of queues
|
|
1408
|
-
* @throws Error If the operation fails
|
|
1409
|
-
* @public
|
|
1410
|
-
* @example
|
|
1411
|
-
* ```typescript
|
|
1412
|
-
* const cc = webex.cc;
|
|
1413
|
-
* await cc.register();
|
|
1414
|
-
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
1415
|
-
*
|
|
1416
|
-
* // Basic usage - get all queues
|
|
1417
|
-
* const allQueues = await cc.getQueues();
|
|
1418
|
-
*
|
|
1419
|
-
* // Search for specific queues
|
|
1420
|
-
* const salesQueues = await cc.getQueues('sales'); // Search for 'sales' in queue names
|
|
1421
|
-
*
|
|
1422
|
-
* // Use filtering and pagination
|
|
1423
|
-
* const filteredQueues = await cc.getQueues(
|
|
1424
|
-
* '', // No search term
|
|
1425
|
-
* 'teamId eq "team123"', // Filter by team
|
|
1426
|
-
* 0, // First page
|
|
1427
|
-
* 50 // 50 items per page
|
|
1428
|
-
* );
|
|
1429
|
-
*
|
|
1430
|
-
* // Process queue results
|
|
1431
|
-
* queues.forEach(queue => {
|
|
1432
|
-
* console.log('Queue:', {
|
|
1433
|
-
* id: queue.queueId,
|
|
1434
|
-
* name: queue.queueName,
|
|
1435
|
-
* channelType: queue.channelType,
|
|
1436
|
-
* isActive: queue.isActive,
|
|
1437
|
-
* description: queue.description
|
|
1438
|
-
* });
|
|
1439
|
-
* });
|
|
1440
|
-
* ```
|
|
1441
|
-
*/
|
|
1442
|
-
public async getQueues(
|
|
1443
|
-
search?: string,
|
|
1444
|
-
filter?: string,
|
|
1445
|
-
page = DEFAULT_PAGE,
|
|
1446
|
-
pageSize = DEFAULT_PAGE_SIZE
|
|
1447
|
-
): Promise<ContactServiceQueue[]> {
|
|
1448
|
-
LoggerProxy.info('Fetching queues', {
|
|
1449
|
-
module: CC_FILE,
|
|
1450
|
-
method: METHODS.GET_QUEUES,
|
|
1451
|
-
});
|
|
1452
|
-
|
|
1453
|
-
const orgId = this.$webex.credentials.getOrgId();
|
|
1454
|
-
|
|
1455
|
-
if (!orgId) {
|
|
1456
|
-
LoggerProxy.error('Org ID not found.', {
|
|
1457
|
-
module: CC_FILE,
|
|
1458
|
-
method: METHODS.GET_QUEUES,
|
|
1459
|
-
});
|
|
1460
|
-
|
|
1461
|
-
throw new Error('Org ID not found.');
|
|
1462
|
-
}
|
|
1463
|
-
|
|
1464
|
-
const result = await this.services.config.getQueues(orgId, page, pageSize, search, filter);
|
|
1465
|
-
|
|
1466
|
-
LoggerProxy.log(`Successfully retrieved ${result?.length} queues`, {
|
|
1467
|
-
module: CC_FILE,
|
|
1468
|
-
method: METHODS.GET_QUEUES,
|
|
1469
|
-
});
|
|
1470
|
-
|
|
1471
|
-
return result;
|
|
1472
|
-
}
|
|
1473
|
-
|
|
1474
1493
|
/**
|
|
1475
1494
|
* Uploads logs to help troubleshoot SDK issues.
|
|
1476
1495
|
*
|
|
@@ -1615,4 +1634,26 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1615
1634
|
throw error;
|
|
1616
1635
|
}
|
|
1617
1636
|
}
|
|
1637
|
+
|
|
1638
|
+
/**
|
|
1639
|
+
* Returns paginated entry points for the organization.
|
|
1640
|
+
* Thin wrapper around internal EntryPoint instance.
|
|
1641
|
+
* @public
|
|
1642
|
+
*/
|
|
1643
|
+
public async getEntryPoints(
|
|
1644
|
+
params: EntryPointSearchParams = {}
|
|
1645
|
+
): Promise<EntryPointListResponse> {
|
|
1646
|
+
return this.entryPoint.getEntryPoints(params);
|
|
1647
|
+
}
|
|
1648
|
+
|
|
1649
|
+
/**
|
|
1650
|
+
* Returns paginated contact service queues for the organization.
|
|
1651
|
+
* Thin wrapper around internal Queue instance.
|
|
1652
|
+
* @public
|
|
1653
|
+
*/
|
|
1654
|
+
public async getQueues(
|
|
1655
|
+
params: ContactServiceQueueSearchParams = {}
|
|
1656
|
+
): Promise<ContactServiceQueuesResponse> {
|
|
1657
|
+
return this.queue.getQueues(params);
|
|
1658
|
+
}
|
|
1618
1659
|
}
|
package/src/index.ts
CHANGED
|
@@ -2,7 +2,9 @@ import {registerPlugin} from '@webex/webex-core';
|
|
|
2
2
|
import config from './config';
|
|
3
3
|
import ContactCenter from './cc';
|
|
4
4
|
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* @module ContactCenterModule
|
|
7
|
+
* /
|
|
6
8
|
|
|
7
9
|
// Core exports
|
|
8
10
|
/**
|
|
@@ -24,6 +26,22 @@ export {default as Task} from './services/task';
|
|
|
24
26
|
*/
|
|
25
27
|
export {default as routingAgent} from './services/agent';
|
|
26
28
|
|
|
29
|
+
// API exports (AddressBook is public, EntryPoint and Queue are accessed via cc wrappers)
|
|
30
|
+
export {default as AddressBook} from './services/AddressBook';
|
|
31
|
+
|
|
32
|
+
/** EntryPoint API types */
|
|
33
|
+
export type {
|
|
34
|
+
EntryPointRecord,
|
|
35
|
+
EntryPointListResponse,
|
|
36
|
+
EntryPointSearchParams,
|
|
37
|
+
AddressBookEntry,
|
|
38
|
+
AddressBookEntriesResponse,
|
|
39
|
+
AddressBookEntrySearchParams,
|
|
40
|
+
ContactServiceQueuesResponse,
|
|
41
|
+
ContactServiceQueueSearchParams,
|
|
42
|
+
ContactServiceQueue,
|
|
43
|
+
} from './types';
|
|
44
|
+
|
|
27
45
|
// Enums
|
|
28
46
|
/**
|
|
29
47
|
* Task Events for Contact Center operations
|
|
@@ -155,8 +173,6 @@ export type {
|
|
|
155
173
|
export type {
|
|
156
174
|
/** Profile interface */
|
|
157
175
|
Profile,
|
|
158
|
-
/** Contact service queue interface */
|
|
159
|
-
ContactServiceQueue,
|
|
160
176
|
/** Response type from getUserUsingCI method */
|
|
161
177
|
AgentResponse,
|
|
162
178
|
/** Response from getDesktopProfileById */
|
package/src/logger-proxy.ts
CHANGED
|
@@ -105,6 +105,29 @@ export default class LoggerProxy {
|
|
|
105
105
|
const interactionId = context.interactionId ? ` - interactionId:${context.interactionId}` : '';
|
|
106
106
|
const trackingId = context.trackingId ? ` - trackingId:${context.trackingId}` : '';
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
// Format additional data if provided
|
|
109
|
+
let dataString = '';
|
|
110
|
+
if (context.data) {
|
|
111
|
+
try {
|
|
112
|
+
dataString = ` - data:${JSON.stringify(context.data)}`;
|
|
113
|
+
} catch (e) {
|
|
114
|
+
dataString = ` - data:[object]`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Format error if provided
|
|
119
|
+
let errorString = '';
|
|
120
|
+
if (context.error) {
|
|
121
|
+
if (context.error instanceof Error) {
|
|
122
|
+
errorString = ` - error:${context.error.name}:${context.error.message}`;
|
|
123
|
+
if (context.error.stack && level === LOGGING_LEVEL.error) {
|
|
124
|
+
errorString += ` - stack:${context.error.stack}`;
|
|
125
|
+
}
|
|
126
|
+
} else {
|
|
127
|
+
errorString = ` - error:${String(context.error)}`;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return `${timestamp} ${LOG_PREFIX} - [${level}]: module:${moduleName} - method:${methodName}${interactionId}${trackingId}${dataString}${errorString} - ${message}`;
|
|
109
132
|
}
|
|
110
133
|
}
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
} from '@webex/internal-plugin-metrics/src/metrics.types';
|
|
7
7
|
|
|
8
8
|
import {WebexSDK} from '../types';
|
|
9
|
-
import {BehavioralEventTaxonomy, getEventTaxonomy} from './behavioral-events';
|
|
10
9
|
import LoggerProxy from '../logger-proxy';
|
|
10
|
+
import {BehavioralEventTaxonomy, getEventTaxonomy} from './behavioral-events';
|
|
11
11
|
import {METRIC_EVENT_NAMES} from './constants';
|
|
12
12
|
import {Failure} from '../services/core/GlobalTypes';
|
|
13
13
|
import {PRODUCT_NAME} from '../constants';
|
|
@@ -129,6 +129,18 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
129
129
|
target: 'agent_rona',
|
|
130
130
|
verb: 'set',
|
|
131
131
|
},
|
|
132
|
+
[METRIC_EVENT_NAMES.AGENT_CONTACT_ASSIGN_FAILED]: {
|
|
133
|
+
product,
|
|
134
|
+
agent: 'service',
|
|
135
|
+
target: 'agent_contact_assign',
|
|
136
|
+
verb: 'fail',
|
|
137
|
+
},
|
|
138
|
+
[METRIC_EVENT_NAMES.AGENT_INVITE_FAILED]: {
|
|
139
|
+
product,
|
|
140
|
+
agent: 'service',
|
|
141
|
+
target: 'agent_invite',
|
|
142
|
+
verb: 'fail',
|
|
143
|
+
},
|
|
132
144
|
|
|
133
145
|
// Added Task events
|
|
134
146
|
[METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS]: {
|
|
@@ -290,6 +302,44 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
290
302
|
verb: 'fail',
|
|
291
303
|
},
|
|
292
304
|
|
|
305
|
+
// Conference Tasks
|
|
306
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_START_SUCCESS]: {
|
|
307
|
+
product,
|
|
308
|
+
agent: 'user',
|
|
309
|
+
target: 'task_conference_start',
|
|
310
|
+
verb: 'complete',
|
|
311
|
+
},
|
|
312
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_START_FAILED]: {
|
|
313
|
+
product,
|
|
314
|
+
agent: 'user',
|
|
315
|
+
target: 'task_conference_start',
|
|
316
|
+
verb: 'fail',
|
|
317
|
+
},
|
|
318
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_END_SUCCESS]: {
|
|
319
|
+
product,
|
|
320
|
+
agent: 'user',
|
|
321
|
+
target: 'task_conference_end',
|
|
322
|
+
verb: 'complete',
|
|
323
|
+
},
|
|
324
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_END_FAILED]: {
|
|
325
|
+
product,
|
|
326
|
+
agent: 'user',
|
|
327
|
+
target: 'task_conference_end',
|
|
328
|
+
verb: 'fail',
|
|
329
|
+
},
|
|
330
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_TRANSFER_SUCCESS]: {
|
|
331
|
+
product,
|
|
332
|
+
agent: 'user',
|
|
333
|
+
target: 'task_conference_transfer',
|
|
334
|
+
verb: 'complete',
|
|
335
|
+
},
|
|
336
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_TRANSFER_FAILED]: {
|
|
337
|
+
product,
|
|
338
|
+
agent: 'user',
|
|
339
|
+
target: 'task_conference_transfer',
|
|
340
|
+
verb: 'fail',
|
|
341
|
+
},
|
|
342
|
+
|
|
293
343
|
// upload logs
|
|
294
344
|
[METRIC_EVENT_NAMES.UPLOAD_LOGS_SUCCESS]: {
|
|
295
345
|
product,
|
|
@@ -317,6 +367,48 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
317
367
|
target: 'agent_device_type_update',
|
|
318
368
|
verb: 'fail',
|
|
319
369
|
},
|
|
370
|
+
|
|
371
|
+
// EntryPoint API Events
|
|
372
|
+
[METRIC_EVENT_NAMES.ENTRYPOINT_FETCH_SUCCESS]: {
|
|
373
|
+
product,
|
|
374
|
+
agent: 'user',
|
|
375
|
+
target: 'entrypoint_fetch',
|
|
376
|
+
verb: 'complete',
|
|
377
|
+
},
|
|
378
|
+
[METRIC_EVENT_NAMES.ENTRYPOINT_FETCH_FAILED]: {
|
|
379
|
+
product,
|
|
380
|
+
agent: 'user',
|
|
381
|
+
target: 'entrypoint_fetch',
|
|
382
|
+
verb: 'fail',
|
|
383
|
+
},
|
|
384
|
+
|
|
385
|
+
// AddressBook API Events
|
|
386
|
+
[METRIC_EVENT_NAMES.ADDRESSBOOK_FETCH_SUCCESS]: {
|
|
387
|
+
product,
|
|
388
|
+
agent: 'user',
|
|
389
|
+
target: 'addressbook_fetch',
|
|
390
|
+
verb: 'complete',
|
|
391
|
+
},
|
|
392
|
+
[METRIC_EVENT_NAMES.ADDRESSBOOK_FETCH_FAILED]: {
|
|
393
|
+
product,
|
|
394
|
+
agent: 'user',
|
|
395
|
+
target: 'addressbook_fetch',
|
|
396
|
+
verb: 'fail',
|
|
397
|
+
},
|
|
398
|
+
|
|
399
|
+
// Queue API Events
|
|
400
|
+
[METRIC_EVENT_NAMES.QUEUE_FETCH_SUCCESS]: {
|
|
401
|
+
product,
|
|
402
|
+
agent: 'user',
|
|
403
|
+
target: 'queue_fetch',
|
|
404
|
+
verb: 'complete',
|
|
405
|
+
},
|
|
406
|
+
[METRIC_EVENT_NAMES.QUEUE_FETCH_FAILED]: {
|
|
407
|
+
product,
|
|
408
|
+
agent: 'user',
|
|
409
|
+
target: 'queue_fetch',
|
|
410
|
+
verb: 'fail',
|
|
411
|
+
},
|
|
320
412
|
};
|
|
321
413
|
|
|
322
414
|
/**
|
package/src/metrics/constants.ts
CHANGED
|
@@ -51,6 +51,13 @@ type Enum<T extends Record<string, unknown>> = T[keyof T];
|
|
|
51
51
|
* @property {string} TASK_ACCEPT_CONSULT_SUCCESS - Event name for successful consult acceptance.
|
|
52
52
|
* @property {string} TASK_ACCEPT_CONSULT_FAILED - Event name for failed consult acceptance.
|
|
53
53
|
*
|
|
54
|
+
* @property {string} TASK_CONFERENCE_START_SUCCESS - Event name for successful conference start.
|
|
55
|
+
* @property {string} TASK_CONFERENCE_START_FAILED - Event name for failed conference start.
|
|
56
|
+
* @property {string} TASK_CONFERENCE_END_SUCCESS - Event name for successful conference end.
|
|
57
|
+
* @property {string} TASK_CONFERENCE_END_FAILED - Event name for failed conference end.
|
|
58
|
+
* @property {string} TASK_CONFERENCE_TRANSFER_SUCCESS - Event name for successful conference transfer.
|
|
59
|
+
* @property {string} TASK_CONFERENCE_TRANSFER_FAILED - Event name for failed conference transfer.
|
|
60
|
+
*
|
|
54
61
|
* @property {string} TASK_OUTDIAL_SUCCESS - Event name for successful outdial task.
|
|
55
62
|
* @property {string} TASK_OUTDIAL_FAILED - Event name for failed outdial task.
|
|
56
63
|
*
|
|
@@ -109,6 +116,14 @@ export const METRIC_EVENT_NAMES = {
|
|
|
109
116
|
TASK_ACCEPT_CONSULT_SUCCESS: 'Task Accept Consult Success',
|
|
110
117
|
TASK_ACCEPT_CONSULT_FAILED: 'Task Accept Consult Failed',
|
|
111
118
|
|
|
119
|
+
// Conference Tasks
|
|
120
|
+
TASK_CONFERENCE_START_SUCCESS: 'Task Conference Start Success',
|
|
121
|
+
TASK_CONFERENCE_START_FAILED: 'Task Conference Start Failed',
|
|
122
|
+
TASK_CONFERENCE_END_SUCCESS: 'Task Conference End Success',
|
|
123
|
+
TASK_CONFERENCE_END_FAILED: 'Task Conference End Failed',
|
|
124
|
+
TASK_CONFERENCE_TRANSFER_SUCCESS: 'Task Conference Transfer Success',
|
|
125
|
+
TASK_CONFERENCE_TRANSFER_FAILED: 'Task Conference Transfer Failed',
|
|
126
|
+
|
|
112
127
|
TASK_OUTDIAL_SUCCESS: 'Task Outdial Success',
|
|
113
128
|
TASK_OUTDIAL_FAILED: 'Task Outdial Failed',
|
|
114
129
|
|
|
@@ -117,8 +132,23 @@ export const METRIC_EVENT_NAMES = {
|
|
|
117
132
|
WEBSOCKET_DEREGISTER_SUCCESS: 'Websocket Deregister Success',
|
|
118
133
|
WEBSOCKET_DEREGISTER_FAIL: 'Websocket Deregister Failed',
|
|
119
134
|
|
|
135
|
+
// WebSocket message events
|
|
136
|
+
WEBSOCKET_EVENT_RECEIVED: 'Websocket Event Received',
|
|
137
|
+
|
|
120
138
|
AGENT_DEVICE_TYPE_UPDATE_SUCCESS: 'Agent Device Type Update Success',
|
|
121
139
|
AGENT_DEVICE_TYPE_UPDATE_FAILED: 'Agent Device Type Update Failed',
|
|
140
|
+
|
|
141
|
+
// EntryPoint API Events
|
|
142
|
+
ENTRYPOINT_FETCH_SUCCESS: 'Entrypoint Fetch Success',
|
|
143
|
+
ENTRYPOINT_FETCH_FAILED: 'Entrypoint Fetch Failed',
|
|
144
|
+
|
|
145
|
+
// AddressBook API Events
|
|
146
|
+
ADDRESSBOOK_FETCH_SUCCESS: 'AddressBook Fetch Success',
|
|
147
|
+
ADDRESSBOOK_FETCH_FAILED: 'AddressBook Fetch Failed',
|
|
148
|
+
|
|
149
|
+
// Queue API Events
|
|
150
|
+
QUEUE_FETCH_SUCCESS: 'Queue Fetch Success',
|
|
151
|
+
QUEUE_FETCH_FAILED: 'Queue Fetch Failed',
|
|
122
152
|
} as const;
|
|
123
153
|
|
|
124
154
|
/**
|