import { NotificationMessage } from "../../components/Notifications/NotificationPanel/Notifications.definitions"; import { AlertLevel, ChannelStatsAlert, HighlightedMetricDetail, HighlightedMetrics, InsightsMetrics } from "../../core/FlexDataClient"; export interface QueuesState { queuesList: RealtimeQueueList; hasFetchedList: boolean; metricsFilterPanel: QueueMetricsPanel; workspaceStats?: WorkspaceStats; filter?: QueuesFilterFunction; error?: Error; queuesConfig: QueuesConfig; highlightedMetricData: HighlightedQueueList; notificationPanel: NotificationPanelState; metadata: { readonly queuesBySid: { [sid: string]: { sid: string; friendly_name: string; }; }; readonly queueSids: string[]; readonly channelsBySid: { [sid: string]: { sid: string; friendly_name: string; unique_name: string; }; }; readonly channelSids: string[]; readonly hasFetched: boolean; readonly error: null | Error; }; } export type NotificationPanelState = { viewCount: number; isOpen: boolean; isLoading: boolean; isError: boolean; isFetched: boolean; messages: Array | null; }; export interface HighlightedQueueList { [key: string]: ConditionalHighlightingAggregatedQueueData; } export interface ConditionalHighlightingAggregatedQueueData { [key: string]: { highlightedMetrics: InsightsMetrics; channelStatsAlerts: HighlightedChannelList; healthStatus?: AlertLevel; }; } export type InsightsMetricsKeys = keyof Omit; export interface HighlightedMetricsList { [key: string]: HighlightedMetricDetail; } export interface HighlightedChannelList { [key: string]: ChannelStatsAlert; } export interface RealtimeQueueList { [key: string]: WorkerQueue; } export interface QueuesConfig { default: { service_level_threshold: number; short_abandoned_threshold: number; reset_timezone: string; reset_time: string; }; queue_configurations: null | QueueConfiguration[]; queue_channel_configurations: null | QueueChannelConfiguration[]; } export interface QueueMetricsPanelPreferenceDbData { id: string; data: T; } export interface CardsPanelPreferenceDbData { id: string; data: T; } export interface QueueConfiguration { queue_sid: string; reset_timezone: string; reset_time: string; } export interface QueueItemPreference { friendly_name: string; selected: boolean; sid: string; } export interface QueuesPreferenceData { [sid: string]: QueueItemPreference; } export interface QueueMetricsPanel { metrics?: Array; queuesPreferenceData: QueuesPreferenceData; cards: Array; isFilterPanelOpen: boolean; queuesCountOnScreen?: string; isFirstTimeCardsExperience?: boolean; } export interface QueueMetricsData { name?: string; description?: string; id: string; selected?: boolean; visible?: boolean; } export interface QueueCardsData { name: string; id: string; subCards?: Array; } export interface QueueSubCardsData { name?: string; id: string; aggregationId: string; selected?: boolean; } export interface CardsPreferenceData { selectedSubCardIds: Array; } export interface QueueChannelConfiguration { queue_sid: string; channel_sid: string; service_level_threshold: number; short_abandoned_threshold: number; } export interface TRQueue { sid: string; friendly_name: string; date_created: string; date_updated: string; } /** * @typedef ActivityStatistic * @memberof Queue * @property {string} sid Activity sid * @property {number} workers Total number of workers * @property {string} friendly_name Friendly name * @property {number} available_workers Number of available workers */ export interface ActivityStatistic { sid: string; workers: number; friendly_name: string; available_workers: number; } export interface Queue { key: string; activity_statistics: ActivityStatistic[]; tasks_by_priority: { [key: string]: number; }; tasks_by_status: { reserved: number; pending: number; assigned: number; wrapping: number; }; total_tasks: number; longest_task_waiting_sid: string | null; longest_task_waiting_from: string | null; } /** * @typedef WorkerQueue * @memberof QueuesStats * @property {string} friendly_name friendly name * @property {string} key unique key * @property {number} total_available_workers total available workers * @property {number} total_eligible_workers total eligible workers * @property {Array} activity_statistics activity statistics * @property {Record} tasks_by_priority tasks by priority * @property {{ reserved: number, pending: number, assigned: number, wrapping: number }} tasks_by_status tasks by status * @property {number} total_tasks total tasks * @property {string|null} longest_task_waiting_sid longest task waiting sid * @property {string|null} longest_task_waiting_from longest task waiting from */ export interface WorkerQueue extends Queue { friendly_name: string; total_available_workers: number; total_eligible_workers: number; sla_30_min?: WorkerQueueSLA; sla_today?: WorkerQueueSLA; agent_metrics?: QueueAgentMetrics; channels?: WorkerQueueChannel[]; } export interface QueueAgentMetrics { total_available_workers: number; total_offline_workers: number; total_unavailable_workers: number; longest_available_agent?: string; } export interface WorkspaceStats extends Queue { total_workers: number; } export interface WorkerQueueTasksNow { reserved_tasks: number; total_tasks: number; pending_tasks: number; wrapping_tasks: number; timestamp_updated: number; assigned_tasks: number; longest_task_waiting_sid: string | null; longest_task_waiting_from: string | null; longest_task_waiting_age: number; tasks_by_priority: any; } export interface WorkerQueueWorkerStatistics { total_available_workers: number; total_eligible_workers: number; timestamp_updated: number; activity_statistics: ActivityStatistic[]; longest_available_timestamp?: number; } export interface WorkerQueueSLA { total_tasks_count: number; handled_tasks_count: number; total_handled_tasks: number; average_abandon_time: number; average_handle_time: number; average_ring_time: number; average_talk_time: number; average_wrapup_time: number; total_missed_invitations: number; total_rejected_invitations: number; average_waiting_time: number; handled_tasks_within_sl_threshold_count: number; handled_tasks_within_sl_threshold_percentage: number; short_abandoned_tasks_count: number; short_abandoned_tasks_percentage: number; abandoned_tasks_count: number; abandoned_tasks_percentage: number; flow_out_tasks_count: number; flow_out_tasks_percentage: number; sla_percentage: number; timestamp_updated: number; } export interface WorkerQueueChannelMetadata { unique_name?: string; friendly_name?: string; sid?: string; } export interface WorkerQueueChannel extends WorkerQueueChannelMetadata { agent_metrics?: QueueAgentMetrics; sla_30_min?: WorkerQueueSLA; sla_today?: WorkerQueueSLA; tasks_now?: WorkerQueueTasksNow; } /** * An alias for a function used as a parameter for {@link QueuesStats.setFilter}. *
(queue: [WorkerQueue]{@link QueuesStats.WorkerQueue}) => boolean
* @typedef QueuesFilterFunction * @memberof QueuesStats */ export type QueuesFilterFunction = (queue: WorkerQueue) => boolean; export type QueuesSubscriptionFilterFunction = (queue: TRQueue) => boolean; export declare const SET_QUEUES = "FLEX_SET_QUEUES"; export declare const UPDATE_QUEUE = "FLEX_UPDATE_QUEUE"; export declare const SET_WORKSPACE_STATS = "FLEX_SET_WORKSPACE_STATS"; export declare const UPDATE_FILTER = "FLEX_UPDATE_QUEUES_FILTER"; export declare const QUEUES_ERROR = "FLEX_QUEUES_ERROR"; export declare const UPDATE_QUEUES_CONFIG = "FLEX_UPDATE_QUEUES_CONFIG"; export declare const UPDATE_METADATA = "FLEX_UPDATE_QUEUES_METADATA"; export declare const UPDATE_METRICS_FILTER_PANEL = "FLEX_METRICS_FILTER_PANEL"; export declare const UPDATE_REALTIME_QUEUES = "FLEX_UPDATE_REALTIME_QUEUES"; export declare const UPDATE_HIGHLIGHTED_METRICS = "FLEX_UPDATE_CONDITIONAL_HIGHLIGHTING"; export declare const UPDATE_NOTIFICATION_PANEL = "FLEX_UPDATE_NOTIFICATION_PANEL"; export declare const ADD_NOTIFICATION = "FLEX_ADD_NOTIFICATION"; export declare const CLEAR_NOTIFICATION_MESSAGES = "FLEX_CLEAR_NOTIFICATION_MESSAGES"; export declare const UPDATE_ALL_QUEUES = "FLEX_UPDATE_ALL_QUEUE"; export type QueuesStateActionTypes = { type: typeof SET_QUEUES; payload: RealtimeQueueList; } | { type: typeof UPDATE_ALL_QUEUES; payload: { queues: RealtimeQueueList; highlightedMetricsList: HighlightedQueueList; }; } | { type: typeof UPDATE_QUEUE; payload: WorkerQueue; } | { type: typeof SET_WORKSPACE_STATS; payload: WorkspaceStats; } | { type: typeof UPDATE_FILTER; payload: QueuesFilterFunction; } | { type: typeof QUEUES_ERROR; payload: Error; } | { type: typeof UPDATE_QUEUES_CONFIG; payload: QueuesConfig; } | { type: typeof UPDATE_METADATA; payload: QueuesState["metadata"]; } | { type: typeof UPDATE_METRICS_FILTER_PANEL; payload: Partial; } | { type: typeof UPDATE_REALTIME_QUEUES; payload: { unselectedQueueSids: string[]; newQueues: RealtimeQueueList; }; } | { type: typeof UPDATE_HIGHLIGHTED_METRICS; payload: HighlightedMetrics; } | { type: typeof UPDATE_NOTIFICATION_PANEL; payload: Partial; } | { type: typeof ADD_NOTIFICATION; payload: NotificationMessage; } | { type: typeof CLEAR_NOTIFICATION_MESSAGES; payload: null; }; export type CardDataMap = { [key: string]: QueueCardsData; };