🚀 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-widgetesté 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: truepara 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.htmlpara 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!
- Descarga los archivos del widget
- Obtén tu token de Reskyt
- Sigue la guía de implementación en
ejemplo.html - ¡Disfruta de conversaciones inteligentes en tu web!
Para una guía visual completa paso a paso, abre ejemplo.html en tu navegador. 🚀