skailan-conversations
Version:
Servicio de conversaciones y mensajería para Skailan
94 lines • 3.37 kB
TypeScript
import { IConversationRepository } from "../repositories/IConversationRepository";
import { Conversation } from "../entities/Conversation";
export type ConversationStatus = "open" | "closed" | "pending" | "assigned" | "resolved";
export interface ConversationStateTransition {
from: ConversationStatus;
to: ConversationStatus;
allowed: boolean;
requiresAssignment?: boolean;
autoAssign?: boolean;
}
export interface ConversationStateConfig {
organizationId: string;
autoAssignEnabled: boolean;
autoAssignUserId?: string;
maxResponseTime: number;
autoCloseAfterHours: number;
}
export declare class ConversationStateService {
private conversationRepository;
private readonly stateTransitions;
constructor(conversationRepository: IConversationRepository);
/**
* Cambia el estado de una conversación
*/
changeConversationState(conversationId: string, organizationId: string, newStatus: ConversationStatus, assignedToUserId?: string): Promise<Conversation>;
/**
* Asigna una conversación a un usuario
*/
assignConversation(conversationId: string, organizationId: string, userId: string): Promise<Conversation>;
/**
* Desasigna una conversación
*/
unassignConversation(conversationId: string, organizationId: string): Promise<Conversation>;
/**
* Marca una conversación como resuelta
*/
resolveConversation(conversationId: string, organizationId: string): Promise<Conversation>;
/**
* Cierra una conversación
*/
closeConversation(conversationId: string, organizationId: string): Promise<Conversation>;
/**
* Reabre una conversación cerrada
*/
reopenConversation(conversationId: string, organizationId: string): Promise<Conversation>;
/**
* Pone una conversación en espera
*/
putConversationOnHold(conversationId: string, organizationId: string): Promise<Conversation>;
/**
* Obtiene conversaciones por estado
*/
getConversationsByStatus(organizationId: string, status: ConversationStatus): Promise<Conversation[]>;
/**
* Obtiene conversaciones asignadas a un usuario
*/
getConversationsByUser(organizationId: string, userId: string): Promise<Conversation[]>;
/**
* Obtiene estadísticas de conversaciones
*/
getConversationStats(organizationId: string): Promise<{
total: number;
open: number;
assigned: number;
pending: number;
resolved: number;
closed: number;
}>;
/**
* Verifica si una transición de estado es válida
*/
private isValidTransition;
/**
* Obtiene la configuración de transición entre dos estados
*/
private getTransition;
/**
* Obtiene todos los estados disponibles para una conversación
*/
getAvailableStates(currentStatus: ConversationStatus): ConversationStatus[];
/**
* Verifica si una conversación puede ser asignada
*/
canBeAssigned(status: ConversationStatus): boolean;
/**
* Verifica si una conversación puede ser cerrada
*/
canBeClosed(status: ConversationStatus): boolean;
/**
* Verifica si una conversación puede ser resuelta
*/
canBeResolved(status: ConversationStatus): boolean;
}
//# sourceMappingURL=ConversationStateService.d.ts.map