Contenido
- Introducción
- Suscripción a eventos
- Métodos generales de interacción
- Interacción con el widget
- Interacción con el tracker
- Depuración en producción
JS API (Consultant & Tracker JS API) proporciona una interfaz para que el código del sitio interactúe con el widget del Consultor y con el tracker.
Nota
No debe confundirse con la JS API para módulos JS.
En este artículo se utiliza la forma abreviada JS API para referirse a Consultant & Tracker JS API.
Introducción
JS API permite realizar las siguientes acciones:
- Suscribirse a eventos.
- Abrir y cerrar el widget.
- Cambiar el mensaje de bienvenida del widget.
- Rellenar los formularios de contacto y offline del widget.
- Desactivar el widget.
- Ocultar y mostrar el botón del widget.
- Comprobar la actividad del widget y del tracker.
- Iniciar el tracker si se había detenido.
- Enviar eventos del tracker.
- Establecer el ID del cliente en el sistema.
- Establecer el ID externo del cliente, es decir, su ID en el sitio.
- Usar una función de retorno (callback) para ejecutar acciones después de cargar la API, pero antes de renderizar el botón o enviar eventos.
Eventos disponibles:
load— se activa cuando el widget termina de cargarse. No recibe parámetros.open— se activa al abrir el widget, tanto de forma programática como manual.close— se activa al cerrar el widget, tanto de forma programática como manual.before_contact_form— se activa antes de enviar el formulario de contacto, pero después de validarlo. Permite modificar el resultado del envío.before_offline_form— se activa antes de enviar el formulario offline, pero después de validarlo. Permite modificar el resultado del envío.contact_form— se activa después de enviar el formulario de contacto y permite conocer el estado del envío.offline_form— se activa después de enviar el formulario offline y permite conocer el estado del envío.first_user_message— se activa con el primer mensaje del usuario en el sitio.first_message— se activa con el primer mensaje del usuario en la pestaña actual.
Primeros pasos con JS API: onOcapiReady
La API define la propiedad ocapi en el objeto window. Antes de comenzar, es necesario asegurarse de que la API se haya inicializado completamente. Para trabajar de forma fiable con la API, especialmente cuando deben ejecutarse acciones antes de que aparezca el botón del widget, debe utilizarse la función onOcapiReady definida en window.
Esta función se ejecuta inmediatamente después de inicializar la API y antes de que se emita el evento load.
function onOcapiReady() {
const api = window.ocapi;
// Trabajar con la API.
}
Suscripción a eventos
La suscripción a eventos permite reaccionar a las distintas etapas del ciclo de vida del Consultor.
function onOcapiReady() {
window.ocapi.on('load', () => {
console.log('Consultant has been loaded!');
});
}
Si un evento transmite parámetros, la función de retorno puede trabajar con ellos. Por ejemplo, es posible bloquear el envío de un formulario si la dirección de correo electrónico no cumple determinados criterios.
// Bloquea el formulario de contacto para direcciones de Proton Mail.
function onOcapiReady() {
const protonExpr = /protonmail\.com$|proton\.me$|pm\.me$/i;
window.ocapi.on('before_contact_form', (event) => {
const data = event.data;
if (data.email && protonExpr.test(data.email)) {
event.error('Lo sentimos, Proton Mail no está disponible en este momento.');
}
});
}
Eventos con y sin parámetros
Entre los eventos que reciben información se distinguen las siguientes categorías:
- Eventos que transmiten contexto y permiten modificar el resultado:
before_contact_formbefore_offline_form
- Eventos que transmiten información sobre lo ocurrido, pero no permiten modificarlo:
contact_formoffline_formfirst_user_messagefirst_message
Eventos de formularios
Todos los eventos relacionados con formularios reciben un objeto con las siguientes propiedades y métodos:
done— contienetruesi el formulario ya se ha enviado; de lo contrario, contienefalse.err— contiene una instancia deErrorsi el envío ha fallado debido a un error, onullsi no se han producido errores.prevent()— impide enviar el formulario. Solo está disponible para los eventos con el prefijobefore_.error(String)— impide enviar el formulario y muestra el texto de error indicado. Si se proporciona un valorfalsy, se utiliza el texto estándar. Solo está disponible para los eventos con el prefijobefore_.data— contiene los datos del formulario que se está enviando.
El campo data tiene el siguiente formato:
interface IFormUser {
name?: string,
email?: string,
phone?: string
}
Ejemplo de validación de los datos del campo data:
function onOcapiReady() {
window.ocapi.on('before_offline_form', (event) => {
const data = event.data;
if (data.name && data.name === 'Stalin') {
alert('¡Lenin!');
event.prevent();
}
});
}
Eventos de mensajes
Esta categoría incluye los eventos first_user_message y first_message.
first_user_message se activa una sola vez para el primer mensaje de un usuario con un ID específico, incluidas sus sesiones anteriores. first_message se activa cuando se escribe el primer mensaje después de abrir el widget en una pestaña nueva o de volver a cargar la página.
Ejemplo de suscripción a first_user_message para enviar datos a Google Analytics 4:
function onOcapiReady() {
const api = window.ocapi;
api.on('first_user_message', (event) => {
const eventParams = {
event_category: 'User Messages',
event_label: event.content,
message_id: event.id,
from_me: event.fromMe,
message_status: event.status,
message_type: event.type,
message_time: event.time,
data_id: event.data.id,
data_time: event.data.time,
data_updated_at: event.data.updatedAt,
data_status: event.data.status
};
// Evento de Google Analytics 4.
gtag('event', 'first_user_message', eventParams);
});
}
Formato del parámetro event:
interface Message {
id: string;
content: string;
fromMe: boolean;
status: string;
type: string;
time: string; // Fecha en formato ISO 8601.
data: {
id: string;
time: string; // Fecha en formato ISO 8601.
updatedAt: string; // Fecha en formato ISO 8601.
status: string;
};
}
Ejemplo del contenido de event:
{
"id": "uid1761070046528",
"content": "Hello!",
"fromMe": true,
"status": "sent",
"type": "text",
"time": "2025-10-21T18:07:26.540608958Z",
"data": {
"id": "146",
"time": "2025-10-21T18:07:26.540608958Z",
"updatedAt": "2025-10-21T18:07:26.540608958Z",
"status": "sent"
}
}
Métodos generales de interacción
Estos métodos afectan tanto al widget como al tracker.
Comprobación de la actividad del widget y del tracker
function onOcapiReady() {
const api = window.ocapi;
api.hasWidget(); // Devuelve true si el widget está disponible; de lo contrario, false.
api.hasTracker(); // Devuelve true si el tracker está disponible; de lo contrario, false.
}
Importante
Después de llamar al método
disableWidget()para desactivar completamente el widget,hasWidget()siempre devuelvefalse, independientemente de que el widget estuviera disponible al cargar la página.
Establecer el ID del cliente en el sistema y el ID externo
function onOcapiReady() {
const api = window.ocapi;
// Establece customer.id en el sistema.
api.setCustomerSystemId(1);
// Establece customer.externalId en el sistema.
api.setCustomerSiteId('external_1');
}
Características de estos métodos:
setCustomerSystemIdysetCustomerSiteIdpueden recibir un número, una cadena o una función.- La función proporcionada a
setCustomerSystemIddebe devolver un número. - La función proporcionada a
setCustomerSiteIddebe devolver una cadena. - Cuando se proporciona una función a
setCustomerSiteId, el widget y el tracker la procesan de forma diferente:- En el widget, la función se ejecuta una vez y se guarda el resultado.
- El tracker ejecuta la función cada vez que necesita obtener
customer.externalId.
setCustomerSiteIdafecta tanto al widget como al tracker.setCustomerSystemIdafecta únicamente al tracker.
Importante
Se recomienda utilizar
setCustomerSiteIdo proporcionarcustomer.externalIdmediante_rcco.
Interacción con el widget
Estos métodos gestionan únicamente el widget.
Apertura y cierre del widget
function onOcapiReady() {
const api = window.ocapi;
if (!api.hasWidget()) {
return;
}
// Abre el widget.
api.openWidget();
// Cierra el widget.
api.closeWidget();
}
Nota
No es obligatorio comprobar la disponibilidad del widget mediante
hasWidget(). Si no está disponible, estos métodos no realizan ninguna acción.
Cambiar el mensaje de bienvenida
El método setWelcomeMessage permite establecer o quitar el mensaje de bienvenida del widget. Solo admite texto.
function onOcapiReady() {
const api = window.ocapi;
// Establece el mensaje de bienvenida.
api.setWelcomeMessage('¡Hola!');
// Quita el mensaje de bienvenida.
api.setWelcomeMessage(null);
}
Rellenar el formulario de contacto y el formulario offline
El método setWelcomeFormUser permite rellenar previamente los campos del formulario de contacto y del formulario offline. No envía el formulario automáticamente, por lo que el cliente puede revisar y modificar los datos antes de enviarlos.
function onOcapiReady() {
window.ocapi.setWelcomeFormUser({
name: 'Arturo',
email: 'arthur@example.com',
phone: '78000000000'
});
}
Características del método:
- Los datos se rellenan tanto en el formulario de contacto como en el formulario offline.
- El método solo completa los datos existentes y no permite borrar campos que ya se hayan rellenado.
Desactivar completamente el widget
El método disableWidget desactiva completamente el widget en la página. Como resultado, el script pasa al modo «solo tracker» o deja de funcionar por completo si el tracker tampoco está disponible.
function onOcapiReady() {
const currentPage = window.location.pathname;
const isOrderPage = currentPage.includes('/order') || currentPage.includes('/cart');
const isCheckoutPage = currentPage.includes('/checkout');
if (isOrderPage || isCheckoutPage) {
window.ocapi.disableWidget();
}
}
Ocultar y mostrar el botón del widget
function onOcapiReady() {
const api = window.ocapi;
if (!api.hasWidget()) {
return;
}
// Oculta el botón del widget.
api.hideWidgetButton();
// Muestra el botón del widget.
api.showWidgetButton();
}
Interacción con el tracker
Estos métodos gestionan únicamente el tracker.
Iniciar el tracker
La función startTracking resulta útil cuando se utilizan formularios para obtener el consentimiento, por ejemplo, banners de cookies para cumplir el Reglamento General de Protección de Datos (RGPD). Si la compatibilidad con estos formularios está habilitada en la configuración, el tracker no enviará eventos hasta que el usuario otorgue su consentimiento.
Ejemplo de uso con un cuadro de diálogo confirm:
function onOcapiReady() {
const api = window.ocapi;
api.on('load', () => {
if (confirm('¿Acepta la recopilación de telemetría anonimizada?')) {
api.startTracking();
}
});
}
Enviar un evento del tracker
Para enviar eventos personalizados al tracker se utiliza el método event.
function onOcapiReady() {
const api = window.ocapi;
api.on('load', () => {
api.event('page_view');
});
}
Hay más ejemplos de envío y una lista de tipos de eventos con sus parámetros en la sección correspondiente de la guía de JS API para rastrear eventos en el sitio.
Depuración en producción
Para depurar los eventos del tracker y supervisar las llamadas a los métodos de la API puede utilizarse un script de usuario especial. Este añade a la consola del navegador un registro de todas las llamadas a la API, de forma similar al depurador de Google Tag Manager (GTM).
Importante
El script de usuario debe desactivarse después de utilizarlo para evitar que se ejecute en todos los sitios visitados.
Instalación del script
- Instale un gestor de scripts de usuario para el navegador:
- Chrome: Tampermonkey
- Firefox: Violentmonkey o Greasemonkey
- Microsoft Edge: Tampermonkey
- Opera: Tampermonkey
- Safari: Userscripts
- Instale el script de usuario para depuración o copie su contenido e instálelo manualmente.
- Si es necesario, siga las instrucciones del gestor. Por ejemplo, Tampermonkey puede solicitar que se active el modo de desarrollador.
En navegadores basados en Chromium, como Chrome, Microsoft Edge o Brave, Tampermonkey puede requerir un permiso adicional para ejecutar scripts de usuario:
- Abra la lista de extensiones instaladas, normalmente en Configuración → Extensiones.
- Active «Modo de desarrollador» en la esquina superior derecha.
- Busque Tampermonkey y seleccione «Detalles» en su tarjeta.
- Active «Permitir scripts de usuario».
- Reinicie el navegador.
Después de completar estos pasos, los scripts de usuario comenzarán a ejecutarse correctamente. En todos los sitios que utilicen JS API, su actividad se registrará en la consola del navegador.
Descifrado de mensajes
Todos los mensajes del depurador tienen el prefijo [OCAPI], que permite filtrarlos en la pestaña Console.
-
window.ocapi detected, verbose logging has been enabled.Se ha detectado la API y se ha activado el script.
-
window.ocapi not found after 30000msNo se ha detectado la API en el sitio.
-
_rcct was not defined as window property but rather as a global scope variable...La variable indicada,
_rccto_rcco, no se ha declarado como propiedad dewindow, sino en el ámbito global, por ejemplo, medianteconstolet. Esto puede afectar al funcionamiento del Consultor. Se recomienda cambiar la declaración avar. -
Found site token in window._rcct: 0Muestra el valor del token del sitio que utilizarán el widget o el tracker.
-
Found widget settings in window._rcco: {}Muestra el contenido de
window._rcco. -
_rcco has non-falsy customer.customer_id but it was NOT set in the tracker.Se ha indicado
customer_idenwindow._rcco, pero no se ha establecido en el script del tracker. Como resultado, los eventos no se vincularán con los clientes. -
Incorrect onOcapiReady definition, should be available on window:La función
onOcapiReadyse ha definido de forma incorrecta. -
dispatched event 'load'Se ha emitido un evento al que es posible suscribirse mediante
ocapi.on. El evento puede contener contexto. -
tracker event 'page_view'Se ha enviado un evento del tracker, incluidos los eventos estándar. El mensaje puede expandirse para consultar los datos del evento.
-
flushing tracker eventsSe están enviando los eventos acumulados. El mensaje puede expandirse para consultar los datos enviados.
Los demás mensajes corresponden al registro de llamadas a los métodos de ocapi. Entre los más útiles se encuentran:
on()— suscripción a un evento.event()— envío programático de un evento del tracker.
La mayoría de los mensajes aparecen contraídos. Para expandirlos, selecciónelos en la consola del navegador.