2025-10-17 12:59:31 +00:00
2025-10-09 13:19:56 +02:00
2025-10-17 12:59:31 +00:00
2025-10-09 13:19:56 +02:00
2025-10-09 13:19:56 +02:00
2025-10-17 12:59:31 +00:00
2025-10-09 13:19:56 +02:00
2025-10-17 12:59:31 +00:00

🚀 Reskyt Widget

Un widget de chat inteligente y completamente personalizable que se integra fácilmente en cualquier sitio web. Desarrollado con tecnología moderna y conectado a la API de Reskyt para proporcionar conversaciones automatizadas e inteligentes.

📋 Características Principales

  • Integración Simple - Solo 3 líneas de código para implementar
  • Totalmente Personalizable - Colores, marca, mensajes y comportamiento
  • API Real - Conectado a la API de Reskyt para conversaciones inteligentes
  • Responsive Design - Funciona perfectamente en desktop y móvil
  • Animaciones Fluidas - Experiencia de usuario moderna y atractiva
  • Burbujas de Atención - Sistema inteligente para captar la atención del usuario
  • Múltiples Temas - Configuraciones prediseñadas para diferentes industrias
  • Debug Mode - Herramientas para desarrolladores y debugging
  • Control Programático - API JavaScript completa para control avanzado

🎯 Demo en Vivo

Puedes ver el widget funcionando en: ejemplo.html

🛠️ Instalación Rápida

1. Incluir Archivos

<!-- CSS del Widget -->
<link rel="stylesheet" href="path/to/widget.css">

<!-- JavaScript del Widget -->
<script src="path/to/widget.js"></script>

2. Crear Contenedor

<!-- Contenedor del Widget -->
<div id="reskyt-widget" class="widget-container"></div>

3. Inicializar

ReskytWidget.init({
    api: {
        enabled: true,
        token: 'TU_TOKEN_AQUI', // Reemplaza con tu token de Reskyt
        autoCreateChat: true
    },
    branding: {
        name: 'Tu Empresa',
        status: 'En línea'
    }
});

🛠️ Tecnologías Utilizadas

Este widget ha sido desarrollado utilizando tecnologías web modernas y estándares actuales:

Frontend

  • HTML5 - Estructura semántica y accesible
  • CSS3 - Estilos modernos con variables CSS, flexbox y animaciones
  • JavaScript ES6+ - Lógica moderna con async/await, promises, modules
  • Fetch API - Comunicación con APIs REST
  • DOM Manipulation - Manipulación nativa del DOM sin dependencias

Características Técnicas

  • Vanilla JavaScript - Sin dependencias externas (jQuery, React, etc.)
  • Responsive Design - Compatible con todos los dispositivos
  • Progressive Enhancement - Funciona incluso si JavaScript está deshabilitado
  • Accessibility (A11y) - Cumple estándares de accesibilidad web
  • Cross-Browser Compatible - Chrome, Firefox, Safari, Edge
  • Mobile-First - Diseñado primero para dispositivos móviles

APIs y Servicios

  • Reskyt API - Integración con servicio de chat inteligente
  • FormData API - Envío de datos al servidor
  • LocalStorage API - Persistencia de estado del widget
  • Custom Events - Sistema de eventos personalizado

Arquitectura

  • Modular Design - Código organizado en módulos funcionales
  • Event-Driven - Arquitectura basada en eventos
  • Configuration-Based - Altamente configurable sin modificar código
  • Error Handling - Manejo robusto de errores y estados de fallback

⚙️ Configuración Completa

🔧 Configuración General

{
    widgetId: 'reskyt-widget',          // ID del contenedor del widget
    animationDuration: 400,             // Duración de animaciones en ms
    messageDelay: 1000                  // Retraso para respuestas automáticas en ms
}

🎨 Colores

colors: {
    primary: '#667eea',        // Color principal del widget
    secondary: '#764ba2',      // Color secundario (degradados)
    userBubble: '#007aff',     // Color de burbujas del usuario
    botBubble: '#e5e5ea',      // Color de burbujas del agente
    text: '#000000',           // Color del texto
    background: '#ffffff'      // Color de fondo
}

🏢 Marca y Branding

branding: {
    name: 'Tu Empresa',                           // Nombre de la empresa
    status: 'En línea',                          // Estado del chat
    logo: 'https://tuempresa.com/logo.png',     // URL del logo (opcional)
    agentAvatar: 'https://tuempresa.com/avatar.png' // Avatar del agente (opcional)
}

🌐 Configuración de API

api: {
    enabled: true,                                          // Habilitar API
    baseUrl: 'https://service.dialia.ai/Reskyt/endpoint.php', // URL de la API
    token: 'tu-token-de-autorizacion',                      // Tu token de Reskyt
    timeout: 30000,                                         // Timeout en ms
    retries: 3,                                            // Número de reintentos
    autoCreateChat: true,                                  // Crear chat automático
    debugMode: false                                       // Modo debug
}

🖼️ Fondo Personalizado

chatBackground: {
    type: 'url',                              // 'default', 'url', o 'none'
    url: 'https://tuempresa.com/fondo.jpg'    // URL de imagen de fondo
}

👋 Pantalla de Bienvenida

welcomeScreen: {
    enabled: true,                                              // Mostrar pantalla de bienvenida
    message: '¡Hola! 👋 Bienvenido a {brandName}...',         // Mensaje personalizado
    buttonText: 'Iniciar conversación'                        // Texto del botón
}

💬 Burbujas de Atención (Recomendado)

attentionBubbles: {
    enabled: true,                    // Activar sistema de burbujas
    messages: [                       // Array de burbujas a mostrar
        {
            text: "👋 ¿Necesitas ayuda?",     // Texto de la burbuja
            delay: 3000,                      // Retraso en ms antes de aparecer
            animation: "bounce"               // Animación: bounce, pulse, shake, glow
        },
        {
            text: "💬 ¡Estamos aquí!",
            delay: 10000,
            animation: "pulse"
        },
        {
            text: "✨ ¿Tienes preguntas?",
            delay: 20000,
            animation: "glow"
        }
    ],
    showOnce: false,                  // Si true, cada burbuja se muestra solo una vez
    pauseOnHover: true,               // Pausar timer al hacer hover sobre la burbuja
    pauseWhenOpen: true,              // Pausar burbujas cuando el widget está abierto
    clickToOpen: true                 // Abrir widget al hacer clic en la burbuja
}

🔔 Sistema de Notificaciones (Alternativo)

notifications: {
    enabled: false,                   // Activar sistema de notificaciones (usar O burbujas O notificaciones)
    messages: [                       // Array de notificaciones
        {
            text: '💬 ¿Necesitas ayuda? ¡Estamos aquí!',
            delay: 5000,              // Tiempo en ms antes de aparecer
            duration: 6000            // Duración visible en ms
        },
        {
            text: '🎯 ¿Tienes preguntas? ¡Escríbenos!',
            delay: 15000,
            duration: 6000
        },
        {
            text: '✨ Nuestro equipo está listo para ayudarte',
            delay: 30000,
            duration: 6000
        }
    ],
    position: 'above',                // Posición: 'above', 'below', 'left', 'right'
    animation: 'bounce',              // Animación: 'bounce', 'slide', 'fade', 'pulse'
    showOnce: false,                  // Mostrar cada notificación solo una vez
    pauseOnHover: true,               // Pausar timer cuando se hace hover
    pauseWhenOpen: true,              // Pausar cuando el widget está abierto
    autoHide: true,                   // Ocultar automáticamente después de 'duration'
    displayDuration: 6000,            // Duración por defecto si no se especifica
    interval: 1000                    // Intervalo entre notificaciones en ms
}

💬 Respuestas Automáticas

autoResponses: {
    'endChat': '👋 ¡Gracias por contactar con {brandName}! Esperamos haber podido ayudarte. ¡Que tengas un excelente día!',
    'default': '💬 Gracias por tu mensaje. Un miembro de nuestro equipo se pondrá en contacto contigo pronto.',
    // Puedes agregar más respuestas personalizadas:
    'greeting': 'Hola, ¿en qué puedo ayudarte?',
    'offline': 'En este momento no hay agentes disponibles. Te responderemos pronto.',
    'error': 'Ha ocurrido un error. Por favor, inténtalo de nuevo.'
}

🎛️ Configuración Avanzada del Widget

{
    // Control de animaciones
    animationDuration: 400,           // Duración base de animaciones en ms
    messageDelay: 1000,               // Retraso para respuestas automáticas
    
    // Control de scroll
    autoScrollToBottom: true,         // Auto-scroll al agregar mensajes
    smoothScroll: true,               // Scroll suave vs inmediato
    
    // Persistencia
    saveState: true,                  // Guardar estado del widget en localStorage
    restoreOnLoad: true,              // Restaurar estado al cargar página
    sessionTimeout: 300000,           // Timeout de sesión en ms (5 minutos)
    
    // Accesibilidad
    enableKeyboardNavigation: true,   // Navegación por teclado
    announceMessages: true,           // Anunciar mensajes para lectores de pantalla
    highContrast: false,              // Modo alto contraste
    
    // Comportamiento del chat
    showTypingIndicator: true,        // Mostrar indicador de "escribiendo"
    showTimestamps: true,             // Mostrar timestamps en mensajes
    showReadReceipts: false,          // Mostrar confirmaciones de lectura
    
    // Límites
    maxMessages: 100,                 // Máximo número de mensajes en memoria
    maxMessageLength: 1000,           // Longitud máxima de mensajes
    
    // Sonidos (si están disponibles)
    sounds: {
        enabled: false,               // Activar sonidos
        newMessage: null,             // URL del sonido para nuevos mensajes
        notification: null            // URL del sonido para notificaciones
    }
}

📋 Referencia Completa de Configuración

Estructura Completa del Objeto de Configuración

ReskytWidget.init({
    // ===== CONFIGURACIÓN GENERAL =====
    widgetId: 'reskyt-widget',              // ID del contenedor HTML
    animationDuration: 400,                 // Duración de animaciones (ms)
    messageDelay: 1000,                     // Retraso para respuestas automáticas (ms)
    
    // ===== COLORES Y APARIENCIA =====
    colors: {
        primary: '#667eea',                 // Color principal (botones, header)
        secondary: '#764ba2',               // Color secundario (degradados)
        userBubble: '#007aff',              // Color burbujas del usuario
        botBubble: '#e5e5ea',               // Color burbujas del agente
        text: '#000000',                    // Color del texto principal
        background: '#ffffff'               // Color de fondo del widget
    },
    
    // ===== FONDO DEL CHAT =====
    chatBackground: {
        type: 'default',                    // 'default', 'url', 'none'
        url: null                           // URL de imagen personalizada
    },
    
    // ===== BRANDING Y MARCA =====
    branding: {
        name: 'Reskyt',                     // Nombre de la empresa
        status: 'En línea',                 // Estado del chat
        logo: null,                         // URL del logo corporativo
        agentAvatar: null                   // URL del avatar del agente
    },
    
    // ===== PANTALLA DE BIENVENIDA =====
    welcomeScreen: {
        enabled: true,                      // Mostrar pantalla de bienvenida
        message: '¡Hola! 👋 Bienvenido a {brandName}. Estamos aquí para ayudarte.',
        buttonText: 'Iniciar conversación' // Texto del botón
    },
    
    // ===== RESPUESTAS AUTOMÁTICAS =====
    autoResponses: {
        'endChat': '👋 ¡Gracias por contactar con {brandName}!',
        'default': '💬 Gracias por tu mensaje.',
        'greeting': '¡Hola! ¿En qué puedo ayudarte?',
        'offline': 'En este momento no hay agentes disponibles.',
        'error': 'Ha ocurrido un error. Por favor, inténtalo de nuevo.'
    },
    
    // ===== CONFIGURACIÓN DE API =====
    api: {
        enabled: true,                      // Habilitar conexión a API
        baseUrl: 'https://service.dialia.ai/Reskyt/endpoint.php',
        token: '',                          // Tu token de autorización
        timeout: 30000,                     // Timeout para peticiones (ms)
        retries: 3,                         // Número de reintentos
        autoCreateChat: true,               // Crear chat automáticamente
        debugMode: false                    // Mostrar logs en consola
    },
    
    // ===== BURBUJAS DE ATENCIÓN =====
    attentionBubbles: {
        enabled: true,                      // Activar burbujas
        messages: [
            {
                text: "¡Hola! 👋 ¿Necesitas ayuda?",
                delay: 3000,                // Tiempo antes de aparecer (ms)
                animation: "bounce"         // bounce, pulse, shake, glow
            },
            {
                text: "💬 ¡Estamos aquí para ayudarte!",
                delay: 10000,
                animation: "pulse"
            },
            {
                text: "✨ ¿Tienes alguna pregunta?",
                delay: 20000,
                animation: "glow"
            }
        ],
        showOnce: false,                    // Mostrar cada burbuja solo una vez
        pauseOnHover: true,                 // Pausar al hacer hover
        pauseWhenOpen: true,                // Pausar cuando widget abierto
        clickToOpen: true                   // Abrir widget al hacer clic
    },
    
    // ===== SISTEMA DE NOTIFICACIONES (ALTERNATIVO) =====
    notifications: {
        enabled: false,                     // Activar notificaciones (no usar con burbujas)
        messages: [
            {
                text: '💬 ¿Necesitas ayuda?',
                delay: 5000,                // Tiempo antes de aparecer
                duration: 6000              // Duración visible
            }
        ],
        position: 'above',                  // above, below, left, right
        animation: 'bounce',                // bounce, slide, fade, pulse
        showOnce: false,                    // Mostrar solo una vez
        pauseOnHover: true,                 // Pausar al hacer hover
        pauseWhenOpen: true                 // Pausar cuando widget abierto
    },
    
    // ===== CONFIGURACIÓN AVANZADA =====
    advanced: {
        // Control de animaciones
        smoothAnimations: true,             // Animaciones suaves
        reducedMotion: false,               // Respetar preferencia de movimiento reducido
        
        // Persistencia
        saveState: true,                    // Guardar estado en localStorage
        restoreOnLoad: true,                // Restaurar estado al cargar
        sessionTimeout: 300000,             // Timeout de sesión (5 min)
        
        // Accesibilidad
        enableKeyboardNav: true,            // Navegación por teclado
        announceMessages: true,             // Anunciar para lectores de pantalla
        highContrast: false,                // Modo alto contraste
        
        // Comportamiento
        showTypingIndicator: true,          // Indicador "escribiendo..."
        showTimestamps: true,               // Mostrar timestamps
        showReadReceipts: false,            // Confirmaciones de lectura
        
        // Límites
        maxMessages: 100,                   // Máximo mensajes en memoria
        maxMessageLength: 1000,             // Longitud máxima de mensaje
        
        // Sonidos
        sounds: {
            enabled: false,                 // Activar sonidos
            newMessage: null,               // URL sonido nuevo mensaje
            notification: null              // URL sonido notificación
        },
        
        // Personalización de UI
        customCSS: null,                    // CSS personalizado adicional
        customClasses: {                    // Clases CSS personalizadas
            widget: '',                     // Clase para el widget principal
            button: '',                     // Clase para el botón flotante
            panel: '',                      // Clase para el panel del chat
            message: ''                     // Clase para los mensajes
        }
    }
});

🎛️ Opciones por Categoría

Colores Disponibles

colors: {
    primary: '#667eea',        // Botón principal, header, elementos activos
    secondary: '#764ba2',      // Degradados, elementos secundarios
    userBubble: '#007aff',     // Fondo de mensajes del usuario
    botBubble: '#e5e5ea',      // Fondo de mensajes del bot
    text: '#000000',           // Texto principal
    background: '#ffffff',     // Fondo del widget
    border: '#e1e5e9',         // Bordes y divisores
    shadow: 'rgba(0,0,0,0.1)', // Sombras
    accent: '#28a745',         // Color de acento para elementos especiales
    warning: '#ffc107',        // Color para advertencias
    error: '#dc3545',          // Color para errores
    success: '#28a745'         // Color para éxito
}

Tipos de Fondo

chatBackground: {
    type: 'default',           // Patrón por defecto tipo WhatsApp
    // type: 'url',            // Imagen personalizada
    // type: 'none',           // Sin fondo, transparente
    // type: 'gradient',       // Degradado personalizado
    url: 'https://ejemplo.com/fondo.jpg',  // Para type: 'url'
    gradient: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)', // Para type: 'gradient'
    opacity: 0.1,             // Opacidad del fondo (0-1)
    repeat: 'repeat',         // repeat, no-repeat, repeat-x, repeat-y
    size: 'cover'             // cover, contain, auto
}

Posiciones de Notificaciones

notifications: {
    position: 'above',        // Encima del botón del widget
    // position: 'below',     // Debajo del botón del widget
    // position: 'left',      // A la izquierda del botón
    // position: 'right',     // A la derecha del botón
    // position: 'center',    // Centro de la pantalla
    offset: {                 // Ajuste fino de posición
        x: 0,                 // Desplazamiento horizontal
        y: -10                // Desplazamiento vertical
    }
}

🎭 Animaciones Disponibles

Animación Descripción Uso Recomendado
bounce Rebote suave Llamadas de atención generales
pulse Pulsación rítmica Notificaciones importantes
shake Movimiento lateral Mensajes urgentes
glow Efecto de brillo Promociones y ofertas
slide Deslizamiento Solo para notificaciones
fade Aparición gradual Solo para notificaciones

📱 Control Programático

Métodos Principales

// Abrir widget
ReskytWidget.open();

// Cerrar widget
ReskytWidget.close();

// Alternar visibilidad
ReskytWidget.toggle();

// Verificar estado
if (ReskytWidget.isOpen()) {
    console.log('Widget está abierto');
}

// Enviar mensaje programáticamente
ReskytWidget.sendMessage('Hola desde código');

// Agregar mensaje directo
ReskytWidget.addMessage('Mensaje personalizado', 'bot');

// Finalizar chat
ReskytWidget.endChat();

Control de API

// Crear chat manualmente
ReskytWidget.api.createChat().then(result => {
    console.log('Chat creado:', result.chatId);
});

// Obtener estado de API
const status = ReskytWidget.api.getStatus();
console.log('Estado API:', status);

// Verificar conexión
if (ReskytWidget.api.isConnected()) {
    console.log('API conectada');
}

Eventos Personalizados

// Chat creado
document.addEventListener('reskyt-chat-created', function(event) {
    console.log('Nuevo chat:', event.detail.chatId);
});

// Mensaje enviado
document.addEventListener('reskyt-message-sent', function(event) {
    console.log('Mensaje:', event.detail.message);
});

// Respuesta recibida
document.addEventListener('reskyt-response-received', function(event) {
    console.log('Respuesta:', event.detail.response);
});

🎯 Ejemplos de Configuración

E-commerce

ReskytWidget.init({
    api: {
        enabled: true,
        token: 'TU_TOKEN_ECOMMERCE'
    },
    branding: {
        name: 'TiendaOnline',
        status: '🛒 Soporte de ventas'
    },
    colors: {
        primary: '#28a745',
        userBubble: '#28a745'
    },
    attentionBubbles: {
        enabled: true,
        messages: [
            { text: "🛒 ¿Necesitas ayuda para comprar?", delay: 5000, animation: "bounce" },
            { text: "💳 ¡Tenemos ofertas especiales!", delay: 15000, animation: "glow" }
        ]
    }
});

Sitio Médico

ReskytWidget.init({
    branding: {
        name: 'Clínica Médica',
        status: '🩺 Disponible para consultas'
    },
    colors: {
        primary: '#17a2b8',
        userBubble: '#17a2b8'
    },
    welcomeScreen: {
        message: '🏥 ¿En qué podemos ayudarte con tu salud?'
    }
});

Configuración Minimalista

ReskytWidget.init({
    api: {
        enabled: true,
        token: 'TU_TOKEN'
    },
    branding: {
        name: 'Soporte'
    },
    colors: {
        primary: '#6c757d'
    },
    welcomeScreen: {
        enabled: false
    },
    attentionBubbles: {
        enabled: false
    }
});

🔧 Resolución de Problemas

Widget No Aparece

  • Verifica que el div #reskyt-widget esté presente
  • Comprueba que los archivos CSS y JS se carguen correctamente
  • Revisa la consola del navegador (F12) para errores

"Respuesta Recibida" en Lugar del Mensaje

  • Verifica tu token de API
  • Comprueba la URL base de la API
  • Activa debugMode: true para logs detallados

Error de CORS

  • Asegúrate de que tu dominio esté autorizado en Reskyt
  • Contacta con soporte si persiste

Debugging Avanzado

ReskytWidget.init({
    api: {
        debugMode: true  // Activar debugging
    }
});

// Los logs aparecerán en la consola del navegador
// Abre herramientas de desarrollador (F12) > Console

🌐 Compatibilidad y Requisitos

Navegadores Soportados

Navegador Versión Mínima Estado
Chrome 60+ Totalmente compatible
Firefox 55+ Totalmente compatible
Safari 12+ Totalmente compatible
Edge 79+ Totalmente compatible
Opera 47+ Totalmente compatible
Samsung Internet 8.0+ Compatible
iOS Safari 12+ Compatible
Android Chrome 60+ Compatible

Requisitos Técnicos

  • JavaScript: ES6+ (async/await, promises, arrow functions)
  • CSS: CSS3 (variables CSS, flexbox, grid)
  • HTML: HTML5 semántico
  • APIs: Fetch API, DOM API, LocalStorage API
  • HTTPS: Requerido para funciones avanzadas en producción

Características del Navegador

// Detección automática de capacidades
const features = {
    fetchAPI: typeof fetch !== 'undefined',
    localStorage: typeof localStorage !== 'undefined',
    cssVariables: window.CSS && CSS.supports('color', 'var(--test)'),
    flexbox: CSS.supports('display', 'flex'),
    grid: CSS.supports('display', 'grid'),
    customElements: 'customElements' in window,
    intersectionObserver: 'IntersectionObserver' in window
};

Fallbacks y Polyfills

El widget incluye fallbacks automáticos para:

  • Fetch API → XMLHttpRequest
  • CSS Variables → Colores hardcoded
  • LocalStorage → Memoria temporal
  • Flexbox → Display: table fallback

📁 Estructura de Archivos

reskyt-widget/
├── 📄 widget.html          # Archivo principal del widget (demo standalone)
├── 🎨 widget.css           # Estilos completos del widget
├── ⚙️ widget.js            # Lógica principal y API integration
├── 📖 ejemplo.html         # Guía completa de implementación
├── 📚 README.md           # Documentación completa (este archivo)
├── 📦 package.json        # Dependencias y scripts (si aplica)
└── 🔧 config/
    ├── default-config.js   # Configuración por defecto
    ├── themes.js          # Temas predefinidos
    └── animations.css     # Definiciones de animaciones

Archivos Principales

widget.js (Core)

  • Gestión de API - Comunicación con Reskyt API
  • Control de Estado - Manejo del estado del widget
  • Sistema de Eventos - Eventos personalizados
  • Animaciones - Control de animaciones y transiciones
  • Persistencia - LocalStorage y gestión de sesiones
  • Accesibilidad - Soporte para lectores de pantalla

widget.css (Estilos)

  • Variables CSS - Sistema de colores personalizable
  • Responsive Design - Adaptable a todos los dispositivos
  • Animaciones CSS - Transiciones fluidas
  • Temas - Soporte para múltiples temas
  • Dark Mode - Soporte para modo oscuro
  • High Contrast - Modo de alto contraste

ejemplo.html (Documentación)

  • 📖 Guía paso a paso - Implementación completa
  • 🎯 Ejemplos en vivo - Widget funcionando
  • ⚙️ Configuraciones - Todos los casos de uso
  • 🔧 Troubleshooting - Solución de problemas

Rendimiento y Optimización

Métricas de Rendimiento

  • 📦 Tamaño Total: ~85KB (CSS + JS + Assets)
    • widget.js: ~45KB (comprimido: ~15KB con gzip)
    • widget.css: ~35KB (comprimido: ~8KB con gzip)
    • Assets/Icons: ~5KB
  • 🚀 Tiempo de Carga: <200ms en conexiones 3G
  • 💾 Uso de Memoria: ~2-5MB durante operación normal
  • 🔄 Lazy Loading: Carga diferida de componentes no críticos

Optimizaciones Incluidas

// Optimizaciones automáticas
const optimizations = {
    // Debouncing para eventos frecuentes
    scrollDebounce: 100,           // ms
    resizeDebounce: 250,           // ms
    
    // Throttling para animaciones
    animationThrottle: 16,         // ~60fps
    
    // Gestión de memoria
    maxCachedMessages: 100,        // Límite de mensajes en caché
    cleanupInterval: 300000,       // Limpieza cada 5 minutos
    
    // Lazy loading
    lazyLoadDelay: 1000,          // Retraso para componentes no críticos
    
    // Network optimizations
    requestTimeout: 10000,         // Timeout para peticiones
    retryDelay: 2000,             // Retraso entre reintentos
    batchRequests: true           // Agrupar peticiones cuando sea posible
};

Best Practices de Implementación

<!-- Carga asíncrona recomendada -->
<link rel="preload" href="widget.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<script src="widget.js" async></script>

<!-- Fallback para CSS crítico -->
<noscript><link rel="stylesheet" href="widget.css"></noscript>

<!-- Prefetch para mejorar UX -->
<link rel="dns-prefetch" href="//service.dialia.ai">

Configuración para Alto Rendimiento

ReskytWidget.init({
    // Optimizaciones de rendimiento
    performance: {
        enableVirtualScrolling: true,     // Para muchos mensajes
        lazyLoadImages: true,             // Carga diferida de imágenes
        compressMessages: true,           // Comprimir mensajes en localStorage
        reducedAnimations: false,         // Respetar prefers-reduced-motion
        batchUpdates: true,              // Agrupar actualizaciones del DOM
        useRequestIdleCallback: true      // Usar tiempo idle del navegador
    },
    
    // Configuración de red optimizada
    api: {
        timeout: 8000,                   // Timeout más agresivo
        retries: 2,                      // Menos reintentos para mejor UX
        keepAlive: true,                 // Mantener conexión activa
        compression: true                // Comprimir peticiones si es posible
    }
});

Monitoreo de Rendimiento

// Métricas automáticas disponibles
ReskytWidget.performance.getMetrics().then(metrics => {
    console.log('Widget Performance:', {
        loadTime: metrics.loadTime,          // Tiempo de carga inicial
        memoryUsage: metrics.memoryUsage,    // Uso de memoria actual  
        apiLatency: metrics.apiLatency,      // Latencia promedio de API
        renderTime: metrics.renderTime,      // Tiempo promedio de render
        errorRate: metrics.errorRate         // Tasa de errores
    });
});

🚀 Implementación en Producción

1. Subir Archivos

Sube los archivos widget.css y widget.js a tu servidor web.

2. Configurar CDN (Recomendado)

Para mejor rendimiento, considera usar un CDN:

<link rel="stylesheet" href="https://tu-cdn.com/reskyt/widget.css">
<script src="https://tu-cdn.com/reskyt/widget.js"></script>

3. Configuración de Producción

ReskytWidget.init({
    api: {
        enabled: true,
        token: process.env.RESKYT_TOKEN,  // Usar variables de entorno
        debugMode: false                  // Desactivar debug en producción
    },
    // ... resto de configuración
});

🧪 Testing y Debugging

Modo Debug Avanzado

ReskytWidget.init({
    api: {
        debugMode: true,              // Activar logging detallado
        verboseLogging: true,         // Logs extra verbosos
        logLevel: 'debug'            // trace, debug, info, warn, error
    },
    
    debug: {
        enablePerformanceMonitoring: true,  // Monitorear rendimiento
        showStateChanges: true,             // Mostrar cambios de estado
        logApiCalls: true,                  // Log de todas las llamadas API
        showEventFlow: true,                // Mostrar flujo de eventos
        highlightElements: false,           // Resaltar elementos para debug
        mockApiResponses: false             // Usar respuestas mock para testing
    }
});

Herramientas de Debug Incluidas

// Acceso a herramientas de debug
const debug = ReskytWidget.debug;

// Inspeccionar estado actual
debug.getState();                    // Estado completo del widget
debug.getApiStatus();               // Estado de la conexión API
debug.getEventHistory();            // Historial de eventos
debug.getPerformanceMetrics();      // Métricas de rendimiento

// Simular eventos para testing
debug.simulateUserMessage('Hola');  // Simular mensaje de usuario
debug.simulateBotResponse('Hi!');    // Simular respuesta del bot
debug.simulateNetworkError();       // Simular error de red

// Testing de configuración
debug.validateConfig(config);       // Validar objeto de configuración
debug.testAnimations();             // Probar todas las animaciones
debug.testResponsiveness();         // Probar diseño responsive

Testing Automatizado

// Suite básica de tests incluida
ReskytWidget.test.run().then(results => {
    console.log('Test Results:', {
        passed: results.passed,         // Tests que pasaron
        failed: results.failed,         // Tests que fallaron
        coverage: results.coverage,     // Cobertura de código
        performance: results.perf       // Métricas de rendimiento
    });
});

// Tests específicos disponibles
ReskytWidget.test.api();            // Tests de integración API
ReskytWidget.test.ui();             // Tests de interfaz de usuario
ReskytWidget.test.accessibility();  // Tests de accesibilidad
ReskytWidget.test.performance();    // Tests de rendimiento
ReskytWidget.test.responsive();     // Tests de diseño responsive

Logging y Monitoreo

// Configuración de logging
ReskytWidget.configure({
    logging: {
        enabled: true,
        level: 'info',                  // trace, debug, info, warn, error
        console: true,                  // Log a consola del navegador
        remote: false,                  // Enviar logs a servidor remoto
        remoteUrl: null,                // URL para logs remotos
        maxLogSize: 1000,               // Máximo número de logs en memoria
        categories: {                   // Activar/desactivar categorías
            api: true,                  // Logs de API
            ui: true,                   // Logs de UI
            events: true,               // Logs de eventos
            performance: false,         // Logs de rendimiento (verbose)
            security: true              // Logs de seguridad
        }
    }
});

// Logs personalizados
ReskytWidget.log.info('Widget initialized');
ReskytWidget.log.warn('API response delayed');
ReskytWidget.log.error('Connection failed', error);
ReskytWidget.log.debug('State changed', newState);

Herramientas de Desarrollo

// Extensión para navegador (conceptual)
const devTools = {
    // Inspector visual del widget
    inspect: () => {
        // Resalta elementos del widget
        // Muestra estructura de estado
        // Panel de configuración en vivo
    },
    
    // Editor de configuración en tiempo real
    liveEdit: (config) => {
        // Permite editar configuración sin recargar
        // Preview instantáneo de cambios
        // Export de configuración final
    },
    
    // Simulador de escenarios
    simulator: {
        slowNetwork: () => {}, // Simular red lenta
        mobileDevice: () => {}, // Simular dispositivo móvil
        highLatency: () => {},  // Simular alta latencia
        offlineMode: () => {}   // Simular modo offline
    }
};

🔒 Seguridad

  • 🔐 Token Seguro: Nunca expongas tu token de API en el código frontend
  • 🌐 HTTPS: Usa siempre HTTPS en producción
  • 🛡️ Validación: El widget valida automáticamente las respuestas de la API
  • 🚫 CORS: Configura correctamente los dominios autorizados

🆘 Soporte

Documentación

  • 📖 Guía Completa: Consulta ejemplo.html para documentación detallada
  • 🎯 Ejemplos: Múltiples casos de uso incluidos

Contacto

  • 💬 API Issues: Contacta con el equipo de Reskyt para problemas de API
  • 🐛 Bugs: Reporta bugs del widget al desarrollador

📝 Changelog

v2.0.0 (Actual)

  • Integración completa con API de Reskyt
  • Sistema de burbujas de atención
  • Múltiples animaciones
  • Control programático avanzado
  • Configuración de fondos personalizados
  • Eventos personalizados
  • Modo debug mejorado

v1.0.0

  • Versión inicial del widget
  • Funcionalidad básica de chat
  • Personalización de colores

🛡️ Licencia

Este widget ha sido desarrollado específicamente para integración con la plataforma Reskyt.

👨‍💻 Desarrollador

Desarrollado por: Carlos Presa

Un widget de chat moderno y completamente personalizable, diseñado para proporcionar la mejor experiencia de usuario posible mientras mantiene la simplicidad en la implementación.


🎉 ¡Comienza Ahora!

  1. Descarga los archivos del widget
  2. Obtén tu token de Reskyt
  3. Sigue la guía de implementación en ejemplo.html
  4. ¡Disfruta de conversaciones inteligentes en tu web!

Para una guía visual completa paso a paso, abre ejemplo.html en tu navegador. 🚀

S
Description
No description provided
Readme
76 KiB
Languages
JavaScript 41%
HTML 31.9%
CSS 27.1%