API en tiempo de ejecución del widget
Controla el widget desde JavaScript mediante el objeto window.syncanix.
Cuando el widget se carga, instala un objeto window.syncanix que puedes invocar desde tu propio código.
Lo que puedes hacer
- open() / close() / toggle() — abre, cierra o alterna el panel de chat desde tu propio código.
- isOpen — si el panel está abierto en este momento, para que tu propio botón muestre el estado correspondiente.
- setPosition(position) — mueve el lanzador a otra esquina.
- enable() / disable() — activa o desactiva el chat en tiempo de ejecución sin desmontarlo (para incidencias, el pago o el horario de soporte).
- unmount() — elimina el widget de la página.
- registerComponent() / unregisterComponent() / getComponentCatalog() — registra tus propios componentes de React para que el asistente los represente, validados con un esquema.
- exposeShadowRoot(host, root) — informa al widget de una parte de tu página construida con web components, para que el asistente pueda ver y operar los controles de dentro. Devuelve una función que lo deshace.
- registerDataSource() / unregisterDataSource() / getDataSourceCatalog() — entrega al asistente una vía con nombre para obtener datos de tu app, de modo que una respuesta compuesta muestre cifras en vivo en lugar de describirlas.
- registerAction() / unregisterAction() / getActionCatalog() — permite que el asistente llame a tus propias funciones, opcionalmente validadas por esquema y con confirmación.
- setContext() / clearContext() — alimenta el estado en vivo de la aplicación (usuario, página, carrito) en el siguiente turno. Solo JSON acotado, nunca secretos.
- setTokenProvider(fn) — proporciona el token del usuario final por turno (tiene prioridad sobre el atributo data).
- setStepUpProvider(fn) — proporciona el flujo de reautenticación reforzada.
- setHeadersProvider(fn) — añade encabezados de solicitud (como Authorization o un token CSRF) a cada llamada de herramienta; tiene prioridad sobre el atributo de datos.
- setTheme(key) — cambia el tema en vivo por nombre sin volver a montar el chat (para un interruptor claro/oscuro del sitio).
- setConsent(signal) — indica al widget a qué ha dado su consentimiento el visitante, para que respete la elección que tu propio banner ya recogió.
- mapSite() / stopSiteWalk() y teach() / stopTeach() — inicia y detén desde tu propia página las dos sesiones de mapeo que ejecuta un operador. Cada una necesita un token de un solo uso generado en el panel, y ninguna puede empezar sin él.
Ejemplo
// Open the chat programmatically
window.syncanix.open();
// Feed live host-app context into the next turn (bounded JSON, no secrets)
window.syncanix.setContext({ page: 'checkout', cartItems: 3 });
// Provide the signed-in user's token per turn (recommended for SSR apps)
window.syncanix.setTokenProvider(async () => await getAccessToken());Qué puede representar el asistente — y qué no puede ver
La superficie representable es explícita por diseño: las primitivas integradas, los componentes que registras con registerComponent y los embeds de orígenes que tu administrador ha incluido en la lista de permitidos. El asistente solo puede manejar lo que le has entregado deliberadamente.
Lo que el widget lee de tu página es una cuestión aparte. El descubrimiento está activado por defecto y lee la ESTRUCTURA de tus páginas —qué formularios existen, cómo se llaman sus campos, adónde van tus enlaces— y propone cada cosa como una capacidad para que la revises. Nunca lee lo que alguien escribió, y todo lo que encuentra llega desactivado.
Se carga una sola vez
Instalar el objeto global es idempotente: si el script se incluye dos veces, el duplicado se ignora con una advertencia, así que nunca acabas con dos widgets.