import { ChannelType } from '../Common/Channels/ChannelType'; import { ITicketAuditedEntity, TicketPriority, TicketPropertyValue } from './Common'; import { TicketConditionOperator } from './Workflow'; export declare enum TicketRoutingStrategy { ROUND_ROBIN = "ROUND_ROBIN", LEAST_BUSY = "LEAST_BUSY", MOST_SKILLED = "MOST_SKILLED", LONGEST_IDLE = "LONGEST_IDLE", MANUAL_PULL = "MANUAL_PULL", RANDOM = "RANDOM", WEIGHTED = "WEIGHTED" } export declare enum TicketRoutingStatus { NOT_ROUTED = "NOT_ROUTED", QUEUED = "QUEUED", ROUTING = "ROUTING", OFFERED = "OFFERED", ASSIGNED = "ASSIGNED", ACCEPTED = "ACCEPTED", DECLINED = "DECLINED", RETURNED = "RETURNED", ESCALATED = "ESCALATED", FAILED = "FAILED" } export declare enum AgentAvailabilityStatus { AVAILABLE = "AVAILABLE", BUSY = "BUSY", AWAY = "AWAY", OFFLINE = "OFFLINE" } export declare enum TicketRoutingConditionGroupOperator { AND = "AND", OR = "OR" } export declare enum TicketQueueOrderCriterion { SLA_BREACH_AT = "SLA_BREACH_AT", PRIORITY = "PRIORITY", CREATED_AT = "CREATED_AT", DUE_AT = "DUE_AT", CUSTOM_FIELD = "CUSTOM_FIELD", CALCULATED_SCORE = "CALCULATED_SCORE" } export declare enum TicketQueueOrderDirection { ASC = "ASC", DESC = "DESC" } export declare enum TicketSkillRelaxationMode { NEVER = "NEVER", AFTER_TIMEOUT = "AFTER_TIMEOUT" } export declare enum TicketEscalationTrigger { QUEUE_WAIT = "QUEUE_WAIT", OFFER_TIMEOUT = "OFFER_TIMEOUT", SLA_WARNING = "SLA_WARNING", SLA_BREACH = "SLA_BREACH", NO_ELIGIBLE_AGENT = "NO_ELIGIBLE_AGENT", DECLINED = "DECLINED" } export declare enum TicketEscalationActionType { ADD_GROUP = "ADD_GROUP", CHANGE_QUEUE = "CHANGE_QUEUE", INCREASE_PRIORITY = "INCREASE_PRIORITY", NOTIFY_USERS = "NOTIFY_USERS", NOTIFY_ROLES = "NOTIFY_ROLES", RELAX_OPTIONAL_SKILLS = "RELAX_OPTIONAL_SKILLS", ASSIGN_USER = "ASSIGN_USER", ASSIGN_GROUP = "ASSIGN_GROUP", WEBHOOK = "WEBHOOK" } export declare enum TicketAssignmentEndReason { COMPLETED = "COMPLETED", REASSIGNED = "REASSIGNED", RETURNED = "RETURNED", DECLINED = "DECLINED", EXPIRED = "EXPIRED", MANUAL = "MANUAL" } export interface ITicketRoutingCondition { fieldNameKey: string; operator: TicketConditionOperator; expectedValue?: TicketPropertyValue; } export interface ITicketRoutingConditionGroup { operator: TicketRoutingConditionGroupOperator; conditions?: ITicketRoutingCondition[]; groups?: ITicketRoutingConditionGroup[]; } export interface ITicketQueueOrder { criterion: TicketQueueOrderCriterion; direction: TicketQueueOrderDirection; fieldNameKey?: string; weight?: number; } export interface ITicketSkill extends ITicketAuditedEntity { name: string; description?: string; enabled: boolean; } export interface ITicketSkillRequirement { skillId: string; required: boolean; priority: number; minimumProficiency?: number; relaxationMode?: TicketSkillRelaxationMode; timeoutMinutes?: number; } export interface IAgentTicketSkill { userId: string; skillId: string; proficiency?: number; priority?: number; enabled: boolean; validFrom?: Date; validUntil?: Date; } export interface IAgentChannelCapacity { channelType?: ChannelType; maximumConcurrent: number; currentAssignments: number; reservedCapacity?: number; } export interface IAgentRoutingState { spaceId: string; userId: string; status: AgentAvailabilityStatus; capacities: IAgentChannelCapacity[]; activeAssignmentCount: number; lastAssignedAt?: Date; availableSince?: Date; updatedAt: Date; } export interface ITicketQueue extends ITicketAuditedEntity { name: string; description?: string; enabled: boolean; priority: number; conditions?: ITicketRoutingConditionGroup; primaryGroupIds: string[]; fallbackGroupIds?: string[]; strategy: TicketRoutingStrategy; ordering: ITicketQueueOrder[]; skillRequirements?: ITicketSkillRequirement[]; offerTimeoutSeconds?: number; maximumWaitMinutes?: number; escalationPolicyId?: string; } export interface ITicketRoutingPolicy extends ITicketAuditedEntity { name: string; description?: string; enabled: boolean; priority: number; conditions?: ITicketRoutingConditionGroup; queueId: string; strategyOverride?: TicketRoutingStrategy; skillRequirements?: ITicketSkillRequirement[]; validFrom?: Date; validUntil?: Date; } export interface ITicketEscalationAction { type: TicketEscalationActionType; groupIds?: string[]; userIds?: string[]; roleIds?: string[]; queueId?: string; priority?: TicketPriority; webhookId?: string; } export interface ITicketEscalationStep { id: string; order: number; trigger: TicketEscalationTrigger; thresholdMinutes?: number; repeatEveryMinutes?: number; maximumExecutions?: number; actions: ITicketEscalationAction[]; } export interface ITicketEscalationPolicy extends ITicketAuditedEntity { name: string; description?: string; enabled: boolean; steps: ITicketEscalationStep[]; } export interface ITicketAssignment { id: string; spaceId: string; ticketId: string; queueId?: string; groupId?: string; agentId?: string; status: TicketRoutingStatus; offeredAt?: Date; offerExpiresAt?: Date; assignedAt?: Date; acceptedAt?: Date; endedAt?: Date; endedReason?: TicketAssignmentEndReason; assignedBy?: string; routingDecisionId?: string; } export interface ITicketRoutingCandidate { agentId: string; eligible: boolean; score?: number; matchedSkillIds: string[]; missingSkillIds?: string[]; availableCapacity?: number; exclusionReasons?: string[]; } export interface ITicketRoutingDecision { id: string; spaceId: string; ticketId: string; attemptId: string; policyId?: string; queueId: string; strategy: TicketRoutingStrategy; selectedAgentId?: string; selectedGroupId?: string; candidates?: ITicketRoutingCandidate[]; matchedSkillIds: string[]; relaxedSkillIds?: string[]; reasonCode: string; explanation?: string; decidedAt: Date; } export interface ITicketRoutingAttempt { id: string; spaceId: string; ticketId: string; queueId?: string; status: TicketRoutingStatus; startedAt: Date; completedAt?: Date; trigger: string; decisionId?: string; errorCode?: string; errorMessage?: string; } export interface ITicketEscalationExecution { id: string; spaceId: string; ticketId: string; policyId: string; stepId: string; executedAt: Date; actionsExecuted: TicketEscalationActionType[]; error?: string; } export interface ITicketRoutingState { status: TicketRoutingStatus; queueId?: string; policyId?: string; currentAssignmentId?: string; enqueuedAt?: Date; offeredAt?: Date; offerExpiresAt?: Date; assignedAt?: Date; acceptedAt?: Date; priorityScore?: number; nextEscalationAt?: Date; requiredSkills?: ITicketSkillRequirement[]; lastDecisionId?: string; } export interface IEnqueueTicketDto { expectedVersion: number; queueId?: string; reason?: string; } export interface IAcceptTicketAssignmentDto { expectedVersion: number; assignmentId: string; } export interface IDeclineTicketAssignmentDto { expectedVersion: number; assignmentId: string; reason: string; } export interface IReturnTicketToQueueDto { expectedVersion: number; assignmentId: string; reason?: string; queueId?: string; } export interface IManualRouteTicketDto { expectedVersion: number; queueId?: string; groupId?: string; agentId?: string; reason?: string; }