183 lines
3.7 KiB
TypeScript
183 lines
3.7 KiB
TypeScript
|
|
export enum TicketStatus {
|
|
OPEN = 'APERTO',
|
|
IN_PROGRESS = 'IN LAVORAZIONE',
|
|
RESOLVED = 'RISOLTO',
|
|
CLOSED = 'CHIUSO'
|
|
}
|
|
|
|
export enum TicketPriority {
|
|
LOW = 'Bassa',
|
|
MEDIUM = 'Media',
|
|
HIGH = 'Alta',
|
|
CRITICAL = 'Critica'
|
|
}
|
|
|
|
export interface Attachment {
|
|
id: string;
|
|
name: string;
|
|
url: string; // Mock URL
|
|
type: string;
|
|
}
|
|
|
|
export interface TicketQueue {
|
|
id: string;
|
|
name: string;
|
|
description?: string;
|
|
}
|
|
|
|
export interface AgentAvatarConfig {
|
|
x: number; // Percentage offset X
|
|
y: number; // Percentage offset Y
|
|
scale: number; // Zoom level (1 = 100%)
|
|
}
|
|
|
|
export type AgentRole = 'superadmin' | 'supervisor' | 'agent';
|
|
|
|
export interface Agent {
|
|
id: string;
|
|
name: string;
|
|
email: string;
|
|
password?: string;
|
|
role: AgentRole; // Added Role
|
|
avatar: string;
|
|
avatarConfig?: AgentAvatarConfig; // Added positioning config
|
|
skills: string[];
|
|
queues: string[];
|
|
}
|
|
|
|
export interface ClientUser {
|
|
id: string;
|
|
name: string;
|
|
email: string;
|
|
password?: string; // Mock password
|
|
company?: string;
|
|
status: 'active' | 'inactive';
|
|
}
|
|
|
|
export interface Ticket {
|
|
id: string;
|
|
subject: string;
|
|
description: string;
|
|
status: TicketStatus;
|
|
priority: TicketPriority;
|
|
assignedAgentId?: string;
|
|
queue: string; // e.g., 'Technical', 'Billing'
|
|
createdAt: string;
|
|
customerName: string;
|
|
messages: ChatMessage[];
|
|
attachments: Attachment[]; // Added attachments
|
|
}
|
|
|
|
export interface KBArticle {
|
|
id: string;
|
|
title: string;
|
|
content: string; // HTML or Markdown
|
|
category: string;
|
|
type: 'article' | 'url';
|
|
url?: string;
|
|
source?: 'manual' | 'ai'; // Track if created by AI for quotas
|
|
lastUpdated: string;
|
|
}
|
|
|
|
export interface ChatMessage {
|
|
id: string;
|
|
role: 'user' | 'assistant' | 'system';
|
|
content: string;
|
|
timestamp: string;
|
|
}
|
|
|
|
export interface SurveyResult {
|
|
id: string;
|
|
rating: number; // 1-5
|
|
comment?: string;
|
|
source: 'chat' | 'ticket';
|
|
referenceId?: string; // ticketId
|
|
timestamp: string;
|
|
}
|
|
|
|
export interface BrandingConfig {
|
|
appName: string;
|
|
primaryColor: string;
|
|
logoUrl: string;
|
|
}
|
|
|
|
export interface SmtpConfig {
|
|
host: string;
|
|
port: number;
|
|
user: string;
|
|
pass: string;
|
|
secure: boolean;
|
|
fromEmail: string;
|
|
}
|
|
|
|
export enum EmailTrigger {
|
|
TICKET_CREATED = 'ticket_created',
|
|
STATUS_CHANGED = 'status_changed',
|
|
AGENT_ASSIGNED = 'agent_assigned',
|
|
NEW_REPLY = 'new_reply',
|
|
SURVEY_REQUEST = 'survey_request'
|
|
}
|
|
|
|
export enum EmailAudience {
|
|
CLIENT = 'client',
|
|
STAFF = 'staff'
|
|
}
|
|
|
|
export interface EmailTemplate {
|
|
id: string;
|
|
name: string;
|
|
trigger: EmailTrigger;
|
|
audience: EmailAudience;
|
|
subject: string;
|
|
body: string;
|
|
isActive: boolean;
|
|
}
|
|
|
|
export interface FeatureConfig {
|
|
kbEnabled: boolean;
|
|
maxKbArticles: number;
|
|
maxSupervisors: number;
|
|
aiKnowledgeAgentEnabled: boolean;
|
|
maxAiGeneratedArticles: number;
|
|
maxAgents: number;
|
|
}
|
|
|
|
export enum AiProvider {
|
|
GEMINI = 'gemini',
|
|
OPENROUTER = 'openrouter',
|
|
OPENAI = 'openai',
|
|
ANTHROPIC = 'anthropic',
|
|
DEEPSEEK = 'deepseek',
|
|
OLLAMA = 'ollama', // Self-hosted
|
|
HUGGINGFACE = 'huggingface' // Free tier available
|
|
}
|
|
|
|
export interface AiConfig {
|
|
provider: AiProvider;
|
|
apiKey: string;
|
|
model: string;
|
|
baseUrl?: string; // For self-hosted/custom endpoints
|
|
isActive: boolean;
|
|
}
|
|
|
|
export interface AppSettings {
|
|
branding: BrandingConfig;
|
|
smtp: SmtpConfig;
|
|
emailTemplates: EmailTemplate[];
|
|
features: FeatureConfig;
|
|
aiConfig: AiConfig; // New AI Configuration
|
|
}
|
|
|
|
export interface AppState {
|
|
tickets: Ticket[];
|
|
articles: KBArticle[];
|
|
agents: Agent[];
|
|
queues: TicketQueue[]; // Added Queues
|
|
surveys: SurveyResult[];
|
|
clientUsers: ClientUser[];
|
|
settings: AppSettings;
|
|
currentUser: ClientUser | Agent | null; // Changed to object or null
|
|
userRole: 'client' | AgentRole | 'guest'; // Updated to include specific agent roles
|
|
}
|