@webex/contact-center 3.9.0-next.2 → 3.9.0-next.21
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 +195 -46
- package/dist/cc.js.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.js +9 -0
- 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 +89 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +32 -2
- 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 +36 -2
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +29 -21
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +33 -1
- 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 +115 -35
- package/dist/types/constants.d.ts +1 -0
- package/dist/types/index.d.ts +3 -2
- package/dist/types/metrics/constants.d.ts +25 -1
- 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 +35 -1
- package/dist/types/services/config/index.d.ts +6 -9
- package/dist/types/services/config/types.d.ts +79 -58
- 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 +125 -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 +9 -8
- package/src/cc.ts +220 -51
- package/src/constants.ts +1 -0
- package/src/index.ts +16 -2
- package/src/logger-proxy.ts +24 -1
- package/src/metrics/MetricsManager.ts +1 -1
- package/src/metrics/behavioral-events.ts +94 -0
- package/src/metrics/constants.ts +37 -1
- 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 +42 -2
- package/src/services/config/index.ts +30 -30
- package/src/services/config/types.ts +59 -58
- 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 +135 -0
- package/src/types.ts +180 -0
- package/src/utils/PageCache.ts +252 -0
- package/test/unit/spec/cc.ts +282 -85
- package/test/unit/spec/metrics/MetricsManager.ts +0 -1
- package/test/unit/spec/metrics/behavioral-events.ts +42 -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 +279 -65
- 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
|
@@ -45,17 +45,18 @@
|
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@types/platform": "1.3.4",
|
|
48
|
-
"@webex/calling": "3.9.0-next.
|
|
49
|
-
"@webex/internal-plugin-mercury": "3.9.0-next.
|
|
50
|
-
"@webex/internal-plugin-metrics": "3.9.0-next.
|
|
51
|
-
"@webex/internal-plugin-support": "3.9.0-next.
|
|
52
|
-
"@webex/plugin-authorization": "3.9.0-next.
|
|
53
|
-
"@webex/plugin-logger": "3.9.0-next.
|
|
54
|
-
"@webex/webex-core": "3.9.0-next.
|
|
48
|
+
"@webex/calling": "3.9.0-next.12",
|
|
49
|
+
"@webex/internal-plugin-mercury": "3.9.0-next.4",
|
|
50
|
+
"@webex/internal-plugin-metrics": "3.9.0-next.4",
|
|
51
|
+
"@webex/internal-plugin-support": "3.9.0-next.6",
|
|
52
|
+
"@webex/plugin-authorization": "3.9.0-next.4",
|
|
53
|
+
"@webex/plugin-logger": "3.9.0-next.4",
|
|
54
|
+
"@webex/webex-core": "3.9.0-next.4",
|
|
55
55
|
"jest-html-reporters": "3.0.11",
|
|
56
56
|
"lodash": "^4.17.21"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
+
"@babel/core": "^7.22.11",
|
|
59
60
|
"@babel/preset-typescript": "7.22.11",
|
|
60
61
|
"@types/jest": "27.4.1",
|
|
61
62
|
"@typescript-eslint/eslint-plugin": "5.38.1",
|
|
@@ -79,5 +80,5 @@
|
|
|
79
80
|
"typedoc": "^0.25.0",
|
|
80
81
|
"typescript": "4.9.5"
|
|
81
82
|
},
|
|
82
|
-
"version": "3.9.0-next.
|
|
83
|
+
"version": "3.9.0-next.21"
|
|
83
84
|
}
|
package/src/cc.ts
CHANGED
|
@@ -38,19 +38,20 @@ import {
|
|
|
38
38
|
MERCURY_DISCONNECTED_SUCCESS,
|
|
39
39
|
METHODS,
|
|
40
40
|
} from './constants';
|
|
41
|
+
import {AGENT_STATE_AVAILABLE, AGENT_STATE_AVAILABLE_ID} from './services/config/constants';
|
|
41
42
|
import {AGENT, WEB_RTC_PREFIX} from './services/constants';
|
|
42
43
|
import Services from './services';
|
|
43
44
|
import WebexRequest from './services/core/WebexRequest';
|
|
44
45
|
import LoggerProxy from './logger-proxy';
|
|
45
46
|
import {StateChange, Logout, StateChangeSuccess, AGENT_EVENTS} from './services/agent/types';
|
|
46
47
|
import {getErrorDetails, isValidDialNumber} from './services/core/Utils';
|
|
47
|
-
import {Profile, WelcomeEvent, CC_EVENTS, ContactServiceQueue} from './services/config/types';
|
|
48
48
|
import {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
Profile,
|
|
50
|
+
WelcomeEvent,
|
|
51
|
+
CC_EVENTS,
|
|
52
|
+
OutdialAniEntriesResponse,
|
|
53
|
+
OutdialAniParams,
|
|
54
|
+
} from './services/config/types';
|
|
54
55
|
import {ConnectionLostDetails} from './services/core/websocket/types';
|
|
55
56
|
import TaskManager from './services/task/TaskManager';
|
|
56
57
|
import WebCallingService from './services/WebCallingService';
|
|
@@ -58,6 +59,15 @@ import {ITask, TASK_EVENTS, TaskResponse, DialerPayload} from './services/task/t
|
|
|
58
59
|
import MetricsManager from './metrics/MetricsManager';
|
|
59
60
|
import {METRIC_EVENT_NAMES} from './metrics/constants';
|
|
60
61
|
import {Failure} from './services/core/GlobalTypes';
|
|
62
|
+
import EntryPoint from './services/EntryPoint';
|
|
63
|
+
import AddressBook from './services/AddressBook';
|
|
64
|
+
import Queue from './services/Queue';
|
|
65
|
+
import type {
|
|
66
|
+
EntryPointListResponse,
|
|
67
|
+
EntryPointSearchParams,
|
|
68
|
+
ContactServiceQueuesResponse,
|
|
69
|
+
ContactServiceQueueSearchParams,
|
|
70
|
+
} from './types';
|
|
61
71
|
|
|
62
72
|
/**
|
|
63
73
|
* The main Contact Center plugin class that enables integration with Webex Contact Center.
|
|
@@ -163,6 +173,7 @@ import {Failure} from './services/core/GlobalTypes';
|
|
|
163
173
|
*
|
|
164
174
|
* @public
|
|
165
175
|
*/
|
|
176
|
+
|
|
166
177
|
export default class ContactCenter extends WebexPlugin implements IContactCenter {
|
|
167
178
|
/**
|
|
168
179
|
* The plugin's unique namespace identifier in the Webex SDK.
|
|
@@ -243,6 +254,71 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
243
254
|
*/
|
|
244
255
|
private metricsManager: MetricsManager;
|
|
245
256
|
|
|
257
|
+
/**
|
|
258
|
+
* API instance for managing Webex Contact Center entry points
|
|
259
|
+
* Provides functionality to fetch entry points with caching support
|
|
260
|
+
* @type {EntryPoint}
|
|
261
|
+
* @public
|
|
262
|
+
* @example
|
|
263
|
+
* ```typescript
|
|
264
|
+
* const cc = webex.cc;
|
|
265
|
+
* await cc.register();
|
|
266
|
+
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
267
|
+
*
|
|
268
|
+
* // Access EntryPointRecord
|
|
269
|
+
* const response = await cc.entryPoint.getEntryPoints({
|
|
270
|
+
* page: 0,
|
|
271
|
+
* pageSize: 50
|
|
272
|
+
* });
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
private entryPoint: EntryPoint;
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* API instance for managing Webex Contact Center address book contacts
|
|
279
|
+
* Provides functionality to fetch address book entries with caching support
|
|
280
|
+
* @type {AddressBook}
|
|
281
|
+
* @public
|
|
282
|
+
* @example
|
|
283
|
+
* ```typescript
|
|
284
|
+
* const cc = webex.cc;
|
|
285
|
+
* await cc.register();
|
|
286
|
+
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
287
|
+
*
|
|
288
|
+
* // Access AddressBook API
|
|
289
|
+
* const response = await cc.addressBook.getEntries({
|
|
290
|
+
* page: 0,
|
|
291
|
+
* pageSize: 25
|
|
292
|
+
* });
|
|
293
|
+
* ```
|
|
294
|
+
*/
|
|
295
|
+
public addressBook: AddressBook;
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* API instance for managing Webex Contact Center queues
|
|
299
|
+
* Provides functionality to fetch queues with caching support
|
|
300
|
+
* @type {Queue}
|
|
301
|
+
* @public
|
|
302
|
+
* @example
|
|
303
|
+
* ```typescript
|
|
304
|
+
* const cc = webex.cc;
|
|
305
|
+
* await cc.register();
|
|
306
|
+
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
307
|
+
*
|
|
308
|
+
* // Access Queue API
|
|
309
|
+
* const response = await cc.queue.getQueues({
|
|
310
|
+
* page: 0,
|
|
311
|
+
* pageSize: 50
|
|
312
|
+
* });
|
|
313
|
+
*
|
|
314
|
+
* // Filter queues by specific criteria
|
|
315
|
+
* const filteredQueues = await cc.queue.getQueues({
|
|
316
|
+
* filter: 'id=="queue-id-123"'
|
|
317
|
+
* });
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
private queue: Queue;
|
|
321
|
+
|
|
246
322
|
/**
|
|
247
323
|
* Logger utility for Contact Center plugin
|
|
248
324
|
* Provides consistent logging across the plugin
|
|
@@ -289,6 +365,13 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
289
365
|
);
|
|
290
366
|
this.incomingTaskListener();
|
|
291
367
|
|
|
368
|
+
// Initialize API instances
|
|
369
|
+
// will have future function for indivdual fetch etc so better be in an object
|
|
370
|
+
this.entryPoint = new EntryPoint(this.$webex);
|
|
371
|
+
this.addressBook = new AddressBook(this.$webex, () => this.agentConfig?.addressBookId);
|
|
372
|
+
this.queue = new Queue(this.$webex);
|
|
373
|
+
|
|
374
|
+
// Initialize logger
|
|
292
375
|
LoggerProxy.initialize(this.$webex.logger);
|
|
293
376
|
});
|
|
294
377
|
}
|
|
@@ -614,6 +697,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
614
697
|
});
|
|
615
698
|
// TODO: Make profile a singleton to make it available throughout app/sdk so we dont need to inject info everywhere
|
|
616
699
|
this.taskManager.setWrapupData(this.agentConfig.wrapUpData);
|
|
700
|
+
this.taskManager.setAgentId(this.agentConfig.agentId);
|
|
617
701
|
|
|
618
702
|
if (
|
|
619
703
|
this.agentConfig.webRtcEnabled &&
|
|
@@ -984,6 +1068,20 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
984
1068
|
method: METHODS.HANDLE_WEBSOCKET_MESSAGE,
|
|
985
1069
|
});
|
|
986
1070
|
|
|
1071
|
+
// Emit metrics for all websocket events except keepalive and welcome
|
|
1072
|
+
const topLevelType = eventData.type;
|
|
1073
|
+
const nestedType = eventData?.data?.type;
|
|
1074
|
+
if (topLevelType !== CC_EVENTS.WELCOME && eventData.keepalive !== 'true') {
|
|
1075
|
+
const metricsPayload: Record<string, any> = {
|
|
1076
|
+
ws_event_type: nestedType || topLevelType,
|
|
1077
|
+
top_level_type: topLevelType,
|
|
1078
|
+
has_data: Boolean(eventData.data),
|
|
1079
|
+
};
|
|
1080
|
+
this.metricsManager.trackEvent(METRIC_EVENT_NAMES.WEBSOCKET_EVENT_RECEIVED, metricsPayload, [
|
|
1081
|
+
'operational',
|
|
1082
|
+
]);
|
|
1083
|
+
}
|
|
1084
|
+
|
|
987
1085
|
switch (eventData.type) {
|
|
988
1086
|
case CC_EVENTS.AGENT_MULTI_LOGIN:
|
|
989
1087
|
// @ts-ignore
|
|
@@ -1238,6 +1336,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1238
1336
|
* Makes an outbound call to a specified phone number.
|
|
1239
1337
|
*
|
|
1240
1338
|
* @param {string} destination - The phone number to dial (e.g., '+1234567890').
|
|
1339
|
+
* @param {string} origin - The contact center number that will be used while making a call to the customer.
|
|
1241
1340
|
* Should include country code and be in E.164 format.
|
|
1242
1341
|
* @returns {Promise<TaskResponse>} Resolves with the task response containing:
|
|
1243
1342
|
* - interactionId: Unique identifier for the outbound call
|
|
@@ -1273,7 +1372,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1273
1372
|
*
|
|
1274
1373
|
* // Start the outbound call
|
|
1275
1374
|
* const destination = '+1234567890';
|
|
1276
|
-
* const task = await cc.startOutdial(destination);
|
|
1375
|
+
* const task = await cc.startOutdial(destination, origin);
|
|
1277
1376
|
*
|
|
1278
1377
|
* // Listen for all relevant task events
|
|
1279
1378
|
* task.on('task:ringing', () => {
|
|
@@ -1341,7 +1440,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1341
1440
|
* }
|
|
1342
1441
|
* ```
|
|
1343
1442
|
*/
|
|
1344
|
-
public async startOutdial(destination: string): Promise<TaskResponse> {
|
|
1443
|
+
public async startOutdial(destination: string, origin: string): Promise<TaskResponse> {
|
|
1345
1444
|
LoggerProxy.info('Starting outbound dial', {
|
|
1346
1445
|
module: CC_FILE,
|
|
1347
1446
|
method: METHODS.START_OUTDIAL,
|
|
@@ -1355,6 +1454,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1355
1454
|
// Construct the outdial payload.
|
|
1356
1455
|
const outDialPayload: DialerPayload = {
|
|
1357
1456
|
destination,
|
|
1457
|
+
origin,
|
|
1358
1458
|
entryPointId: this.agentConfig.outDialEp,
|
|
1359
1459
|
direction: OUTDIAL_DIRECTION,
|
|
1360
1460
|
attributes: ATTRIBUTES,
|
|
@@ -1369,6 +1469,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1369
1469
|
{
|
|
1370
1470
|
...MetricsManager.getCommonTrackingFieldForAQMResponse(result),
|
|
1371
1471
|
destination,
|
|
1472
|
+
origin,
|
|
1372
1473
|
mediaType: OUTDIAL_MEDIA_TYPE,
|
|
1373
1474
|
},
|
|
1374
1475
|
['behavioral', 'business', 'operational']
|
|
@@ -1389,6 +1490,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1389
1490
|
{
|
|
1390
1491
|
...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),
|
|
1391
1492
|
destination,
|
|
1493
|
+
origin,
|
|
1392
1494
|
mediaType: OUTDIAL_MEDIA_TYPE,
|
|
1393
1495
|
},
|
|
1394
1496
|
['behavioral', 'business', 'operational']
|
|
@@ -1399,55 +1501,55 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1399
1501
|
}
|
|
1400
1502
|
|
|
1401
1503
|
/**
|
|
1402
|
-
*
|
|
1403
|
-
*
|
|
1404
|
-
*
|
|
1405
|
-
*
|
|
1406
|
-
*
|
|
1407
|
-
*
|
|
1408
|
-
* @
|
|
1504
|
+
* Fetches outdial ANI (Automatic Number Identification) entries for an outdial ANI ID.
|
|
1505
|
+
*
|
|
1506
|
+
* This method retrieves the list of phone numbers that can be used as caller ID when making
|
|
1507
|
+
* outbound calls. The ANI data is associated with an outdial ANI ID and can be filtered
|
|
1508
|
+
* and paginated as needed.
|
|
1509
|
+
*
|
|
1510
|
+
* @param {string} outdialANI - The outdial ANI ID to fetch ANI data for
|
|
1511
|
+
* @param {number} [page] - Optional page number for pagination (0-based)
|
|
1512
|
+
* @param {number} [pageSize] - Optional number of items per page
|
|
1513
|
+
* @param {string} [search] - Optional search term to filter results by name or number
|
|
1514
|
+
* @param {string} [filter] - Optional filter string
|
|
1515
|
+
* @param {string} [attributes] - Optional attributes to include in response
|
|
1516
|
+
* @returns {Promise<OutdialAniEntriesResponse>} Promise resolving to outdial ANI response containing:
|
|
1517
|
+
* - data: Array of ANI entries with number and name
|
|
1518
|
+
* - meta: Pagination metadata
|
|
1519
|
+
* @throws {Error} If the operation fails or agent is not registered
|
|
1409
1520
|
* @public
|
|
1410
1521
|
* @example
|
|
1411
1522
|
* ```typescript
|
|
1412
1523
|
* const cc = webex.cc;
|
|
1413
1524
|
* await cc.register();
|
|
1414
|
-
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
1415
1525
|
*
|
|
1416
|
-
* //
|
|
1417
|
-
* const
|
|
1526
|
+
* // Get agent profile to obtain outdial ANI ID
|
|
1527
|
+
* const agentProfile = cc.agentConfig;
|
|
1528
|
+
* const outdialANI = agentProfile.outdialANIId;
|
|
1418
1529
|
*
|
|
1419
|
-
* //
|
|
1420
|
-
* const
|
|
1530
|
+
* // Basic usage - get all ANI data for an outdial ANI ID
|
|
1531
|
+
* const aniData = await cc.getOutdialAniEntries({ outdialANI });
|
|
1421
1532
|
*
|
|
1422
|
-
* //
|
|
1423
|
-
* const
|
|
1424
|
-
*
|
|
1425
|
-
*
|
|
1426
|
-
*
|
|
1427
|
-
*
|
|
1428
|
-
* );
|
|
1533
|
+
* // With pagination and search
|
|
1534
|
+
* const paginatedAni = await cc.getOutdialAniEntries({
|
|
1535
|
+
* outdialANI,
|
|
1536
|
+
* page: 0,
|
|
1537
|
+
* pageSize: 50,
|
|
1538
|
+
* search: '555' // search for numbers containing '555'
|
|
1539
|
+
* });
|
|
1429
1540
|
*
|
|
1430
|
-
* // Process
|
|
1431
|
-
*
|
|
1432
|
-
* console.log(
|
|
1433
|
-
* id: queue.queueId,
|
|
1434
|
-
* name: queue.queueName,
|
|
1435
|
-
* channelType: queue.channelType,
|
|
1436
|
-
* isActive: queue.isActive,
|
|
1437
|
-
* description: queue.description
|
|
1438
|
-
* });
|
|
1541
|
+
* // Process the results
|
|
1542
|
+
* paginatedAni.forEach(ani => {
|
|
1543
|
+
* console.log(`ANI: ${ani.number} - ${ani.name}`);
|
|
1439
1544
|
* });
|
|
1440
1545
|
* ```
|
|
1441
1546
|
*/
|
|
1442
|
-
public async
|
|
1443
|
-
search
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
pageSize = DEFAULT_PAGE_SIZE
|
|
1447
|
-
): Promise<ContactServiceQueue[]> {
|
|
1448
|
-
LoggerProxy.info('Fetching queues', {
|
|
1547
|
+
public async getOutdialAniEntries(params: OutdialAniParams): Promise<OutdialAniEntriesResponse> {
|
|
1548
|
+
const {outdialANI, page, pageSize, search, filter, attributes} = params;
|
|
1549
|
+
|
|
1550
|
+
LoggerProxy.info('Fetching outdial ANI entries', {
|
|
1449
1551
|
module: CC_FILE,
|
|
1450
|
-
method: METHODS.
|
|
1552
|
+
method: METHODS.GET_OUTDIAL_ANI_ENTRIES,
|
|
1451
1553
|
});
|
|
1452
1554
|
|
|
1453
1555
|
const orgId = this.$webex.credentials.getOrgId();
|
|
@@ -1455,20 +1557,65 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1455
1557
|
if (!orgId) {
|
|
1456
1558
|
LoggerProxy.error('Org ID not found.', {
|
|
1457
1559
|
module: CC_FILE,
|
|
1458
|
-
method: METHODS.
|
|
1560
|
+
method: METHODS.GET_OUTDIAL_ANI_ENTRIES,
|
|
1459
1561
|
});
|
|
1460
1562
|
|
|
1461
1563
|
throw new Error('Org ID not found.');
|
|
1462
1564
|
}
|
|
1463
1565
|
|
|
1464
|
-
|
|
1566
|
+
try {
|
|
1567
|
+
const result = await this.services.config.getOutdialAniEntries(orgId, {
|
|
1568
|
+
outdialANI,
|
|
1569
|
+
page,
|
|
1570
|
+
pageSize,
|
|
1571
|
+
search,
|
|
1572
|
+
filter,
|
|
1573
|
+
attributes,
|
|
1574
|
+
});
|
|
1465
1575
|
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1576
|
+
this.metricsManager.trackEvent(
|
|
1577
|
+
METRIC_EVENT_NAMES.OUTDIAL_ANI_EP_FETCH_SUCCESS,
|
|
1578
|
+
{
|
|
1579
|
+
outdialANI,
|
|
1580
|
+
resultCount: result?.length || 0,
|
|
1581
|
+
},
|
|
1582
|
+
['behavioral', 'business', 'operational']
|
|
1583
|
+
);
|
|
1584
|
+
|
|
1585
|
+
LoggerProxy.log(`Successfully retrieved outdial ANI entries for ANI ID ${outdialANI}`, {
|
|
1586
|
+
module: CC_FILE,
|
|
1587
|
+
method: METHODS.GET_OUTDIAL_ANI_ENTRIES,
|
|
1588
|
+
});
|
|
1589
|
+
|
|
1590
|
+
return result;
|
|
1591
|
+
} catch (error) {
|
|
1592
|
+
const failure = error.details as Failure;
|
|
1593
|
+
this.metricsManager.trackEvent(
|
|
1594
|
+
METRIC_EVENT_NAMES.OUTDIAL_ANI_EP_FETCH_FAILED,
|
|
1595
|
+
{
|
|
1596
|
+
...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),
|
|
1597
|
+
outdialANI,
|
|
1598
|
+
error,
|
|
1599
|
+
},
|
|
1600
|
+
['behavioral', 'business', 'operational']
|
|
1601
|
+
);
|
|
1602
|
+
|
|
1603
|
+
LoggerProxy.error(
|
|
1604
|
+
`Failed to fetch outdial ANI entries for ANI ID ${outdialANI} due to: ${error}`,
|
|
1605
|
+
{
|
|
1606
|
+
module: CC_FILE,
|
|
1607
|
+
method: METHODS.GET_OUTDIAL_ANI_ENTRIES,
|
|
1608
|
+
trackingId: failure.trackingId,
|
|
1609
|
+
}
|
|
1610
|
+
);
|
|
1470
1611
|
|
|
1471
|
-
|
|
1612
|
+
const {error: detailedError} = getErrorDetails(
|
|
1613
|
+
error,
|
|
1614
|
+
METHODS.GET_OUTDIAL_ANI_ENTRIES,
|
|
1615
|
+
CC_FILE
|
|
1616
|
+
);
|
|
1617
|
+
throw detailedError;
|
|
1618
|
+
}
|
|
1472
1619
|
}
|
|
1473
1620
|
|
|
1474
1621
|
/**
|
|
@@ -1615,4 +1762,26 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
1615
1762
|
throw error;
|
|
1616
1763
|
}
|
|
1617
1764
|
}
|
|
1765
|
+
|
|
1766
|
+
/**
|
|
1767
|
+
* Returns paginated entry points for the organization.
|
|
1768
|
+
* Thin wrapper around internal EntryPoint instance.
|
|
1769
|
+
* @public
|
|
1770
|
+
*/
|
|
1771
|
+
public async getEntryPoints(
|
|
1772
|
+
params: EntryPointSearchParams = {}
|
|
1773
|
+
): Promise<EntryPointListResponse> {
|
|
1774
|
+
return this.entryPoint.getEntryPoints(params);
|
|
1775
|
+
}
|
|
1776
|
+
|
|
1777
|
+
/**
|
|
1778
|
+
* Returns paginated contact service queues for the organization.
|
|
1779
|
+
* Thin wrapper around internal Queue instance.
|
|
1780
|
+
* @public
|
|
1781
|
+
*/
|
|
1782
|
+
public async getQueues(
|
|
1783
|
+
params: ContactServiceQueueSearchParams = {}
|
|
1784
|
+
): Promise<ContactServiceQueuesResponse> {
|
|
1785
|
+
return this.queue.getQueues(params);
|
|
1786
|
+
}
|
|
1618
1787
|
}
|
package/src/constants.ts
CHANGED
|
@@ -42,6 +42,7 @@ export const METHODS = {
|
|
|
42
42
|
HANDLE_DEVICE_TYPE: 'handleDeviceType',
|
|
43
43
|
START_OUTDIAL: 'startOutdial',
|
|
44
44
|
GET_QUEUES: 'getQueues',
|
|
45
|
+
GET_OUTDIAL_ANI_ENTRIES: 'getOutdialAniEntries',
|
|
45
46
|
UPLOAD_LOGS: 'uploadLogs',
|
|
46
47
|
UPDATE_AGENT_PROFILE: 'updateAgentProfile',
|
|
47
48
|
GET_DEVICE_ID: 'getDeviceId',
|
package/src/index.ts
CHANGED
|
@@ -26,6 +26,22 @@ export {default as Task} from './services/task';
|
|
|
26
26
|
*/
|
|
27
27
|
export {default as routingAgent} from './services/agent';
|
|
28
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
|
+
|
|
29
45
|
// Enums
|
|
30
46
|
/**
|
|
31
47
|
* Task Events for Contact Center operations
|
|
@@ -157,8 +173,6 @@ export type {
|
|
|
157
173
|
export type {
|
|
158
174
|
/** Profile interface */
|
|
159
175
|
Profile,
|
|
160
|
-
/** Contact service queue interface */
|
|
161
|
-
ContactServiceQueue,
|
|
162
176
|
/** Response type from getUserUsingCI method */
|
|
163
177
|
AgentResponse,
|
|
164
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';
|
|
@@ -302,6 +302,44 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
302
302
|
verb: 'fail',
|
|
303
303
|
},
|
|
304
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
|
+
|
|
305
343
|
// upload logs
|
|
306
344
|
[METRIC_EVENT_NAMES.UPLOAD_LOGS_SUCCESS]: {
|
|
307
345
|
product,
|
|
@@ -329,6 +367,62 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
329
367
|
target: 'agent_device_type_update',
|
|
330
368
|
verb: 'fail',
|
|
331
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
|
+
},
|
|
412
|
+
|
|
413
|
+
// Outdial ANI API Events
|
|
414
|
+
[METRIC_EVENT_NAMES.OUTDIAL_ANI_EP_FETCH_SUCCESS]: {
|
|
415
|
+
product,
|
|
416
|
+
agent: 'user',
|
|
417
|
+
target: 'outdial_ani_ep_fetch',
|
|
418
|
+
verb: 'complete',
|
|
419
|
+
},
|
|
420
|
+
[METRIC_EVENT_NAMES.OUTDIAL_ANI_EP_FETCH_FAILED]: {
|
|
421
|
+
product,
|
|
422
|
+
agent: 'user',
|
|
423
|
+
target: 'outdial_ani_ep_fetch',
|
|
424
|
+
verb: 'fail',
|
|
425
|
+
},
|
|
332
426
|
};
|
|
333
427
|
|
|
334
428
|
/**
|