Ejemplos de Uso
Esta página muestra ejemplos prácticos de cómo utilizar los diferentes componentes del SDK. Cada ejemplo está diseñado para ser claro y fácil de implementar.
1. Feedback Widget
Configuración Básica
typescript
import { Feedback } from './path-to/feedback';
const feedback = new Feedback({
tracker: yourTrackerInstance,
position: 'bottom-right', // Posición del botón
themeColor: '#4f46e5', // Color principal
buttonText: 'Enviar Feedback',
autoOpen: false // No abrir automáticamente
});
// Mostrar el formulario manualmente
feedback.open();Captura de Pantalla
typescript
// Configuración con captura de pantalla
const feedbackWithScreenshot = new Feedback({
tracker: yourTrackerInstance,
screenshot: {
enabled: true,
allowEdit: true,
quality: 0.8
},
onSubmit: (data) => {
console.log('Feedback recibido:', data);
// Aquí puedes enviar los datos a tu backend
}
});2. Seguimiento de Sesiones
Inicialización Básica
typescript
import { SessionTracker } from '@your-sdk/core';
const session = new SessionTracker({
appId: 'tu-app-id',
sessionTimeout: 30, // minutos de inactividad
recordClicks: true,
recordScroll: true
});
// Iniciar seguimiento
session.start();
// Agregar etiquetas personalizadas
session.addTag('userRole', 'premium');Manejo de Errores
typescript
// Manejo de errores con contexto
try {
// Código que podría fallar
} catch (error) {
session.addErrorTag({
message: error.message,
stack: error.stack,
component: 'CheckoutForm',
action: 'processPayment',
orderId: currentOrderId
});
}3. Encuesta NPS (Net Promoter Score)
Configuración Básica
typescript
import { NPS } from './path-to/nps';
const nps = new NPS({
tracker: yourTrackerInstance,
question: '¿Qué tan probable es que recomiendes nuestro servicio?',
themeColor: '#2563eb',
position: 'bottom-center',
autoShow: true,
delay: 5000, // Mostrar después de 5 segundos
onRate: (score) => {
console.log(`Puntuación recibida: ${score}`);
// Lógica adicional basada en la puntuación
}
});Personalización Avanzada
typescript
const npsAdvanced = new NPS({
// ...configuración básica...
// Preguntas de seguimiento basadas en la puntuación
followUpQuestions: {
promoters: '¿Qué es lo que más te gusta de nuestro servicio?',
passives: '¿Cómo podríamos mejorar?',
detractors: '¿Qué podríamos hacer para mejorar tu experiencia?'
},
// Personalización de colores
colors: {
primary: '#4f46e5',
text: '#1f2937',
background: '#ffffff',
buttonText: '#ffffff'
}
});4. Anuncios y Notificaciones
Notificación Simple
typescript
import { Announcement } from './path-to/announcement';
const announcement = new Announcement({
tracker: yourTrackerInstance,
title: '¡Nueva función disponible!',
message: 'Prueba nuestra nueva función de búsqueda mejorada',
type: 'info',
duration: 10000, // Se ocultará después de 10 segundos
dismissible: true
});Notificación con Acción
typescript
const announcementAction = new Announcement({
title: '¡Oferta especial!',
message: '50% de descuento en tu próxima compra',
type: 'success',
linkUrl: '/ofertas',
linkText: 'Ver oferta',
onClose: () => {
console.log('El usuario cerró la notificación');
},
onClick: () => {
console.log('El usuario hizo clic en la notificación');
}
});5. Manejo de Errores
Configuración Global
typescript
// En tu archivo de configuración principal
window.onerror = function(message, source, lineno, colno, error) {
if (session) {
session.addErrorTag({
message: message.toString(),
stack: error?.stack || '',
source: source,
line: lineno,
column: colno,
url: window.location.href
});
}
return false; // Permite que otros manejadores de errores se ejecuten
};Error Personalizado
typescript
function logError(error, context = {}) {
if (session) {
session.addErrorTag({
message: error.message,
stack: error.stack,
...context,
timestamp: new Date().toISOString(),
userAgent: navigator.userAgent
});
}
// Opcional: Enviar a un servicio de monitoreo
if (window.Sentry) {
Sentry.captureException(error, { extra: context });
}
}6. Integración con Frameworks
React
jsx
import { useEffect, useRef } from 'react';
export function FeedbackButton() {
const feedbackRef = useRef(null);
useEffect(() => {
import('./path-to/feedback').then(module => {
feedbackRef.current = new module.Feedback({
tracker: yourTrackerInstance,
// configuración...
});
});
return () => {
if (feedbackRef.current) {
feedbackRef.current.destroy();
}
};
}, []);
return (
<button onClick={() => feedbackRef.current?.open()}>
Enviar Feedback
</button>
);
}Vue 3
vue
<template>
<button @click="openFeedback">Enviar Feedback</button>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
let feedback = ref(null);
onMounted(async () => {
const module = await import('./path-to/feedback');
feedback.value = new module.Feedback({
tracker: yourTrackerInstance,
// configuración...
});
});
onUnmounted(() => {
if (feedback.value) {
feedback.value.destroy();
}
});
const openFeedback = () => {
if (feedback.value) {
feedback.value.open();
}
};
</script>7. Ejemplo de Seguimiento de Eventos
typescript
// Inicialización del tracker
const tracker = new SystemTracker({
appId: 'tu-app-id',
environment: process.env.NODE_ENV,
version: '1.0.0'
});
// Ejemplo de evento personalizado
function trackButtonClick(buttonId) {
tracker.trackEvent({
category: 'UI Interaction',
action: 'button_click',
label: buttonId,
value: 1
});
}
// Ejemplo de seguimiento de página
function trackPageView(pageName) {
tracker.trackPageView({
url: window.location.pathname,
title: document.title,
pageName: pageName
});
}8. Manejo de Tiempo de Sesión
typescript
// Configurar tiempo de inactividad (30 minutos)
const session = new SessionTracker({
sessionTimeout: 30,
onSessionTimeout: () => {
console.log('La sesión ha expirado');
// Mostrar mensaje al usuario
new Announcement({
title: 'Sesión expirada',
message: 'Tu sesión ha expirado por inactividad',
type: 'warning',
duration: 0,
dismissible: false
});
},
onSessionRenew: () => {
console.log('Sesión renovada');
}
});Conclusión
Estos ejemplos cubren los casos de uso más comunes para cada componente del SDK. Puedes personalizar aún más cada instancia según las necesidades específicas de tu aplicación. Para más detalles, consulta la documentación de cada componente.