UNPKG

@bash-dev/ai-chat-widget

Version:

Готовый к использованию AI чат-виджет для интеграции на любые сайты с поддержкой русского языка

300 lines (212 loc) 8.04 kB
/** * TypeScript определения для AI Chat Widget */ export interface ChatWidgetConfig { /** URL API для чата */ apiUrl?: string; /** ID сайта в системе */ siteId?: string; /** Заголовок виджета */ title?: string; /** Подзаголовок виджета */ subtitle?: string; /** Основной цвет виджета */ primaryColor?: string; /** Позиция виджета на странице */ position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'; /** Приветственное сообщение */ greeting?: string; /** Placeholder для поля ввода */ placeholder?: string; /** Показывать ли toast уведомления */ showToast?: boolean; /** Текст toast уведомления */ toastMessage?: string; /** Задержка перед показом toast (мс) */ toastDelay?: number; /** Длительность показа toast (мс) */ toastDuration?: number; } export interface UserInfo { /** Имя пользователя */ user_name?: string; /** Email пользователя */ user_email?: string; /** Телефон пользователя */ user_phone?: string; /** User agent браузера */ userAgent?: string; /** Язык браузера */ language?: string; /** Текущий URL */ url?: string; /** Реферер */ referrer?: string; /** Timestamp */ timestamp?: string; } export interface ChatMessage { /** Текст сообщения */ text: string; /** Отправитель сообщения */ sender: 'user' | 'ai' | 'admin'; /** Время отправки */ timestamp: Date; /** Информация об администраторе (если sender === 'admin') */ adminInfo?: { adminName?: string; adminId?: string; }; } export interface APIResponse { /** Ответное сообщение */ message?: string; /** ID сессии */ sessionId?: string; /** Включен ли AI */ aiEnabled?: boolean; /** Код ошибки */ code?: string; } export declare class AIChatWidget { /** Конфигурация виджета */ config: ChatWidgetConfig; /** Массив сообщений */ messages: ChatMessage[]; /** ID текущей сессии */ sessionId: string; /** Открыт ли чат */ isOpen: boolean; /** Загружается ли ответ */ isLoading: boolean; /** Показан ли toast */ toastShown: boolean; /** Timestamp последнего сообщения */ lastMessageTimestamp: string | null; /** Интервал polling */ pollingInterval: NodeJS.Timeout | null; /** Отправлял ли пользователь сообщения */ hasUserSentMessage: boolean; /** Нужно ли загружать историю */ shouldLoadHistory: boolean; /** Количество непрочитанных сообщений */ unreadCount: number; /** Timestamp последнего прочтения */ lastReadTimestamp: string | null; /** Информация о пользователе */ userInfo: UserInfo; /** Собраны ли данные пользователя */ isUserInfoCollected: boolean; /** DOM элементы виджета */ elements: { toggle: HTMLButtonElement; window: HTMLDivElement; close: HTMLButtonElement; messages: HTMLDivElement; input: HTMLTextAreaElement; send: HTMLButtonElement; toast: HTMLDivElement; toastClose: HTMLButtonElement; toastAction: HTMLButtonElement; toastMessage: HTMLDivElement; unreadBadge: HTMLSpanElement; }; /** * Создает новый экземпляр виджета * @param config Конфигурация виджета */ constructor(config?: ChatWidgetConfig); /** Инициализация виджета */ init(): void; /** Валидация сайта и инициализация */ validateSiteAndInit(): Promise<void>; /** Скрытие виджета */ hideWidget(): void; /** Генерация ID сессии */ generateSessionId(): string; /** Инициализация сессии */ initializeSession(): string; /** Сохранение сессии в localStorage */ saveSessionToStorage(): void; /** Загрузка информации о пользователе */ loadUserInfo(): UserInfo; /** Сохранение информации о пользователе */ saveUserInfo(userInfo: UserInfo): void; /** Показ формы сбора данных пользователя */ showUserInfoForm(): boolean; /** Автосохранение данных пользователя */ autoSaveUserInfo(): void; /** Обработка отправки формы пользователя */ handleUserInfoSubmit(form: HTMLFormElement): void; /** Показ ошибки в форме */ showFormError(message: string): void; /** Скрытие формы пользователя */ hideUserInfoForm(): void; /** Валидация email */ isValidEmail(email: string): boolean; /** Валидация телефона */ isValidPhone(phone: string): boolean; /** Создание стилей */ createStyles(): void; /** Получение CSS стилей */ getStyles(): string; /** Создание DOM структуры виджета */ createWidget(): void; /** Привязка событий */ bindEvents(): void; /** Переключение состояния чата */ toggleChat(): void; /** Открытие чата */ openChat(): void; /** Закрытие чата */ closeChat(): void; /** Загрузка истории чата */ loadChatHistory(): Promise<void>; /** Добавление приветственного сообщения */ addGreeting(): void; /** Добавление сообщения в чат */ addMessage(text: string, sender?: 'user' | 'ai' | 'admin', adminInfo?: { adminName?: string; adminId?: string }): HTMLDivElement; /** Показ индикатора печати */ showTypingIndicator(): HTMLDivElement; /** Скрытие индикатора печати */ hideTypingIndicator(): void; /** Отправка сообщения */ sendMessage(): Promise<void>; /** Вызов API */ callAPI(message: string): Promise<APIResponse>; /** Получение информации о пользователе */ getUserInfo(): UserInfo; /** Прокрутка к низу */ scrollToBottom(): void; /** Инициализация toast */ initToast(): void; /** Показ toast */ showToast(): void; /** Скрытие toast */ hideToast(): void; /** Принудительный показ toast */ forceShowToast(): void; /** Запуск polling */ startPolling(): void; /** Остановка polling */ stopPolling(): void; /** Проверка новых сообщений */ checkForNewMessages(): Promise<void>; /** Обновление индикатора непрочитанных сообщений */ updateUnreadBadge(): void; /** Показ toast уведомления о новом сообщении */ showNewMessageToast(messageContent: string): void; /** Сброс счетчика непрочитанных сообщений */ markAllAsRead(): void; /** Статический метод инициализации */ static init(config?: ChatWidgetConfig): AIChatWidget; } /** * Глобальная переменная виджета в window */ declare global { interface Window { AIChatWidget: typeof AIChatWidget; } } export default AIChatWidget;