Ir al contenido

API

Estos son los métodos públicos de la clase DeepdotsPopups. Cubren todo lo que una aplicación host necesita para montar el SDK, reaccionar a los popups y lanzar eventos de negocio.

Inicializa el SDK y carga las definiciones de popup desde Deepdots.

popups.init({
apiKey: 'YOUR_PUBLIC_API_KEY',
userId: 'customer-123', // opcional
});
CampoObligatorioDescripción
apiKeyTu API key pública de Deepdots.
userIdnoIdentificador enviado con cada evento de popup.
languagenoEtiqueta de idioma BCP-47 (p. ej. es-ES). Determina tanto el contexto de analytics como la segmentación por idioma de los popups (segments.lang). Se detecta automáticamente desde el navegador (o Intl en React Native) si se omite. Ver Analytics → Detección de idioma.
contactAttributesnoAtributos internos del usuario a enviar al Contact (requiere userId). Ver setContactAttributes.
debugnoActiva la salida de debug del SDK. Desactivada por defecto.
loggernoDestino personalizado para esa salida de debug. Ver Logger personalizado.
renderChromenoSolo React Native (desde 1.4.0). Por defecto true. Ponlo en false cuando montas tu propio contenedor decorado, para que el WebView del survey se renderice sin la tarjeta ni el backdrop propios del SDK. Ver React Native → renderChrome.
showProgressBarnoDesde 1.5.0. Muestra una etiqueta Question X of Y y una barra de progreso en la cabecera del popup. Omítelo para respetar lo que la plataforma haya configurado para el survey. Ver Barra de progreso.
surveyCssnoDesde 1.5.0. Tu propio CSS, inyectado como última hoja de estilos para que gane en cascada. Es la vía para reestilar el área de preguntas por integración. Ver CSS personalizado.

La cabecera del popup puede indicar por dónde va el survey: una etiqueta Question 2 of 3 — el número en negrita y el resto atenuado — sobre una barra de progreso fina.

popups.init({
apiKey: 'YOUR_PUBLIC_API_KEY',
showProgressBar: true,
});

El flag tiene tres estados:

ValorComportamiento
trueSe muestra siempre.
falseNo se muestra nunca.
omitidoSigue el ajuste showProgressBar configurado para el survey en la plataforma.

La barra solo aparece cuando hay más de una página, una vez pasada la pantalla de inicio y antes de la pantalla final. También respeta el progressUnit del propio survey (fractionQuestion 2 of 3, percentage66%), showProgressUnit y loadingBarColor.

El texto de la etiqueta está de momento solo en inglés. Si lo necesitas localizado, desactiva la unidad con showProgressUnit en la plataforma y pinta tu propia cabecera.

El área de preguntas — enunciados, opciones, escalas de valoración — la renderiza el SDK de Surveys con una hoja de estilos compartida por todos los clientes de Deepdots. surveyCss te permite reestilarla solo para tu integración: la cadena se inyecta como última hoja de estilos del popup, así que gana en cascada sin que nadie tenga que cambiar los valores por defecto compartidos.

popups.init({
apiKey: 'YOUR_PUBLIC_API_KEY',
surveyCss: `
/* Enunciado: más pequeño y compacto que el valor por defecto */
.magicfeedback-label {
font-size: 15px; font-weight: 600; color: #1a1a1a;
display: block; margin-bottom: 12px; line-height: 1.4;
}
.magicfeedback-sublabel {
font-size: 13px; font-weight: 400; color: #6b7280;
display: block; margin-bottom: 12px;
}
/* Opciones como filas planas en lugar de tarjetas */
.magicfeedback-radio-container {
box-shadow: none !important; border: none !important;
background: transparent !important; border-radius: 0 !important;
padding: 6px 0 !important; margin: 0 !important;
}
.magicfeedback-radio-container label { font-size: 14px; font-weight: 400; color: #1a1a1a; }
`,
});

Se aplica tanto al popup DOM de web como al WebView del survey en React Native.

Los nombres de clase vienen de @magicfeedback/native y no siempre son los evidentes. Los que más te van a interesar:

ElementoSelector
Enunciado de la preguntalabel.magicfeedback-label
Línea secundaria bajo la preguntalabel.magicfeedback-sublabel
Fila de opción radio / checkbox.magicfeedback-radio-container, .magicfeedback-checkbox-container
Escala numérica de valoración.magicfeedback-rating-number-container, .magicfeedback-rating-number-option
Campo de texto libre.magicfeedback-input

surveyCss se inyecta el último, así que también alcanza el chrome del propio SDK: cabecera, barra de progreso, footer y pantalla final. Desde la 1.5.0 todos los puntos de enganche de abajo existen en ambos, el popup web y el survey de React Native, así que una sola hoja de estilos cubre los dos.

ParteSelector
Contenedor del popup#dd-popup · .deepdots-popup
Fila de cabecera.deepdots-popup-header
Título de la cabecera#dd-title · .deepdots-popup-title
Icono de cerrar#dd-close
Bloque de progreso#dd-progress · .deepdots-progress
Etiqueta de progreso#dd-progress-label (#dd-progress-current, #dd-progress-total)
Barra de progreso.deepdots-progress-track · #dd-progress-bar
Área de preguntas con scroll#dd-main · .deepdots-popup-main
Footer#dd-footer · .deepdots-popup-footer
Todos los botones de navegación.dd-nav-btn
Botones individuales#dd-submit · #dd-back · #dd-start · #dd-complete
Pantalla final.deepdots-success
Aviso de validación#dd-error · .deepdots-error-hint

Para los colores, mejor los ajustes de la plataforma que el CSS: el theme, la position y la font del popup, y el buttonPrimaryColor, buttonSecondaryColor y loadingBarColor del propio survey. Esos aplican en ambas plataformas y cambian sin publicar la app. En React Native también puedes ceder el marco entero a tu app con renderChrome: false.

Por defecto el SDK escribe su salida de debug en console. Pasa un logger para enrutarla a otro sitio — un archivo de log, un servicio de logging remoto, Firebase, tu propio buffer — lo que resulta útil en React Native, donde la consola de Metro no está disponible en builds de producción.

popups.init({
apiKey: 'YOUR_PUBLIC_API_KEY',
debug: true,
logger: {
log: (...args) => myLogger.info(...args),
warn: (...args) => myLogger.warn(...args),
error: (...args) => myLogger.error(...args),
},
});

Solo log es obligatorio — warn, error e info caen a log si se omiten. console cumple la forma, así que logger: console es válido y es el valor por defecto.

interface DeepdotsLogger {
log: (...args: unknown[]) => void;
warn?: (...args: unknown[]) => void;
error?: (...args: unknown[]) => void;
info?: (...args: unknown[]) => void;
}

Arranca los triggers derivados de las definiciones cargadas durante init(). Llámalo una vez después de init().

popups.autoLaunch();

Lanza un evento de negocio personalizado. Cualquier popup en Deepdots configurado con un trigger de tipo event cuyo nombre coincida con eventName se mostrará (respetando cooldowns y segmentación).

popups.triggerEvent('checkout_completed');

Consulta Triggers → event para más detalles.

Suscríbete a los eventos del SDK: popup_shown, popup_clicked, survey_completed.

const onShown = (event) => analytics.track('popup_shown', event);
popups.on('popup_shown', onShown);
popups.off('popup_shown', onShown);

Mira Events para el payload completo.

Envía atributos internos del usuario que solo conoce tu aplicación — idioma, edad, plan, segmento, etc. — al Contact del usuario en Deepdots, para usarlos en la segmentación y el targeting de popups.

Requiere un userId en init(): los atributos se asocian a esa identidad (el mismo id de tu propio sistema). Los valores de los atributos deben ser string, number o boolean.

const enviado = await popups.setContactAttributes({
language: 'es',
age: 34,
plan: 'premium',
});

El SDK solo envía cuando los atributos cambian respecto al último envío — guarda un diff en el almacenamiento persistente —, así que puedes llamarlo en cada identificación de usuario sin generar peticiones de más. La promesa devuelta resuelve a:

  • true — los atributos se enviaron al backend.
  • false — no hubo cambios desde el último envío (o el tracking está desactivado, o no hay userId).

Por debajo hace POST /sdk/popups/contact con el body { publicKey, userId, userAttributes }. El Contact se crea automáticamente en la primera carga de popups, así que no hace falta ningún orden concreto.

También puedes aportar los atributos iniciales directamente en init() con contactAttributes (equivale a llamar setContactAttributes justo después de init):

popups.init({
apiKey: 'YOUR_PUBLIC_API_KEY',
userId: 'customer-123',
contactAttributes: { language: 'es', plan: 'premium' },
});