Funcionalidades y modos
Funcionalidades y modos
El centro de privacidad te permite habilitar distintas funcionalidades de forma conjunta o de forma individual según tus necesidades. También opera en dos modos diferentes: público y autenticado; que te permiten definir el acceso a las funcionalidades según tus necesidades.
Estas son configuraciones que debes declarar al momento de inicializar el centro de privacidad en tu sitio o aplicación web.
Funcionalidades
El centro de privacidad te permite habilitar las siguientes funcionalidades de forma conjunta o de forma individual según tus necesidades.
Gestión de consentimientos
Habilita un portal para que tus usuarios gestionen sus consentimientos de manera sencilla y transparente. Este es un requerimiento legal para cumplir con la normativa de protección de datos personales, ya que los usuarios tienen el derecho de revocar su consentimiento en cualquier momento.
Habilita esta funcionalidad especificando la feature ConsentManagement en el parámetro enabledFeatures del componente.
Profundiza en la guía de gestión de consentimientos.
Recepción de solicitudes de ejercicio de derechos
Habilita un formulario para que tus usuarios ingresen solicitudes de ejercicio de derechos de acuerdo a la normativa de protección de datos personales.
Habilita esta funcionalidad especificando la feature DataSubjectRequests en el parámetro enabledFeatures del componente.
Profundiza en la guía de gestión de ejercicio de derechos.
Estado de las solicitudes de ejercicio de derechos
Habilita un portal para que tus usuarios revisen el estado de sus solicitudes de ejercicio de derechos. Esto no es un requerimiento legal, pero es una buena práctica para que tus usuarios puedan conocer el estado de sus solicitudes y diminuir las consultas a tu equipo de soporte.
Habilita esta funcionalidad especificando la feature RequestTracking en el parámetro enabledFeatures del componente.
Modos de operación
Modo público
Usa este modo para que cualquier usuario que visita tu sitio web pueda acceder al portal.
Este modo es recomendado para:
- Gestionar consentimientos asociados a la gestión de cookies o cuando no impactan de forma directa en procesos de negocio complejos. En este caso el componente utiliza el local storage para almacenar información suficiente para saber qué consentimientos otorgó el usuario durante la sesión y permitirle revocarlos en cualquier momento.
- Recibir solicitudes de ejercicio de derechos usando la verificación de identidad de Soyio incorporada en el componente.
Para integrar el centro de privacidad en modo público, especifica tu companyId en el componente.
- SDK Web
// Modo público
import { PrivacyCenter } from "@soyio/soyio-widget";
const privacyCenterOptions = {
companyId: "<company_id>"
enabledFeatures: ['ConsentManagement'], // Opcional, si no especificas features las habilitas todas
onEvent: (event) => console.log('Event:', event)
};
const privacyCenter = new PrivacyCenter(privacyCenterOptions);
privacyCenter.mount("#privacy-center-container");
<div id="privacy-center-container"></div>
Modo autenticado
Usa este modo para que solo usuarios identificados y correctamente autenticados puedan acceder al portal.
Este modo es recomendado para:
- Gestionar consentimientos asociados a procesos de negocio complejos o cuando se requiere autenticación del usuario para permitirles revocar sus consentimientos.
- Recibir solicitudes de ejercicio de derechos usando otro mecanismo propio de autenticación o de verificación de identidad.
Para integrar el centro de privacidad en modo autenticado, especifica el sessionToken en el componente.
Obtén el sessionToken usando el endpoint GET /api/v1/privacy_center/session_token de la API de Soyio.
Al crear ese token, envía opcionalmente cualquier combinación de los siguientes parámetros para prellenar y bloquear campos del formulario de Data Subject Request:
config[cl_carnet_rut]: prellena y bloquea el campo RUT. La API también valida quecontact_information.nincoincida con este valor al crear la solicitud.config[names]: prellena y bloquea el campo Nombres.config[last_names]: prellena y bloquea el campo Apellidos.config[email]: prellena y bloquea el campo Correo electrónico.config[phone]: prellena y bloquea el campo Teléfono.
Los espacios alrededor de names, last_names, email y phone se eliminan automáticamente.
- SDK Web
// Modo autenticado
import { PrivacyCenter } from "@soyio/soyio-widget";
const privacyCenterOptions = {
sessionToken: "<session_token>"
enabledFeatures: ['ConsentManagement'], // Opcional, si no especificas features las habilitas todas
onEvent: (event) => console.log('Event:', event)
};
const privacyCenter = new PrivacyCenter(privacyCenterOptions);
privacyCenter.mount("#privacy-center-container");
<div id="privacy-center-container"></div>
Eventos del Privacy Center
El Privacy Center expone eventos en tiempo real a través del callback onEvent. Úsalos para tracking de analítica, reaccionar a errores y disparar acciones en tu sitio cuando el usuario completa un flujo.
Cada evento trae un campo eventName que actúa como discriminador. Si usas TypeScript, importa PrivacyCenterEvent desde @soyio/soyio-widget para obtener autocompletado y type narrowing.
| Evento | Cuándo se dispara | Payload (además de eventName) |
|---|---|---|
REQUEST_SUBMITTED | El usuario envía con éxito una solicitud de ejercicio de derechos | dataSubjectRequestId, kind, entityId |
REQUEST_SUBMISSION_FAILED | El envío de la solicitud falla por error de red o backend | kind, errorCode?, errorMessage? |
VALIDATION_SUCCESSFUL | La validación de identidad asociada termina con éxito | dataSubjectRequestId |
VALIDATION_FAILED | La validación de identidad falla (rechazo gubernamental, error inesperado, etc.) | dataSubjectRequestId, errorReason? |
CONSENT_UPDATED | El usuario otorga o revoca un consentimiento con éxito (modo immediate) | consentTemplateId, action: 'grant' | 'revoke', actionToken? |
CONSENT_UPDATE_FAILED | Una operación de consentimiento falla (modo immediate) | consentTemplateId, action: 'grant' | 'revoke', errorCode? |
CONSENT_BATCH_UPDATED | El usuario guarda con éxito un conjunto de consentimientos pendientes (modo batch) | updates: { consentTemplateId, action, actionToken? }[] |
CONSENT_BATCH_UPDATE_FAILED | El guardado del conjunto pendiente falla (modo batch) | consentTemplateIds: string[], errorCode? |
UNEXPECTED_ERROR | Error no clasificado dentro del flujo | context, errorMessage? |
- En el modo por defecto (
consentMode: 'immediate'), cada cambio dispara unCONSENT_UPDATED(oCONSENT_UPDATE_FAILED) por consentimiento. - En el modo
consentMode: 'batch', el usuario acumula cambios y los guarda con un único click. Para evitar emitir N eventos al integrador, se emite un soloCONSENT_BATCH_UPDATEDcon la lista completa de cambios aplicados (oCONSENT_BATCH_UPDATE_FAILEDsi el guardado falla). El flag opcionalshowBatchConsentConfirmation: truesolo intercala un diálogo de confirmación antes de guardar; no cambia la forma de los eventos.
Los eventos viajan vía postMessage. El SDK valida el origen del iframe y filtra eventos de otras instancias antes de invocar tu callback.
Ejemplo de uso
import { PrivacyCenter } from "@soyio/soyio-widget";
const privacyCenter = new PrivacyCenter({
sessionToken: "<session_token>",
enabledFeatures: ['DataSubjectRequests', 'ConsentManagement'],
onEvent: (event) => {
switch (event.eventName) {
case 'REQUEST_SUBMITTED':
analytics.track('dsr_submitted', {
id: event.dataSubjectRequestId,
kind: event.kind,
});
break;
case 'REQUEST_SUBMISSION_FAILED':
analytics.track('dsr_submission_failed', {
kind: event.kind,
errorCode: event.errorCode,
});
break;
case 'VALIDATION_SUCCESSFUL':
analytics.track('dsr_validation_successful', { id: event.dataSubjectRequestId });
break;
case 'VALIDATION_FAILED':
analytics.track('dsr_validation_failed', {
id: event.dataSubjectRequestId,
reason: event.errorReason,
});
break;
case 'CONSENT_UPDATED':
analytics.track('consent_updated', {
templateId: event.consentTemplateId,
action: event.action,
});
break;
case 'CONSENT_UPDATE_FAILED':
analytics.track('consent_update_failed', {
templateId: event.consentTemplateId,
action: event.action,
});
break;
case 'CONSENT_BATCH_UPDATED':
analytics.track('consent_batch_updated', {
totalUpdates: event.updates.length,
updates: event.updates,
});
break;
case 'CONSENT_BATCH_UPDATE_FAILED':
analytics.track('consent_batch_update_failed', {
templateIds: event.consentTemplateIds,
errorCode: event.errorCode,
});
break;
case 'UNEXPECTED_ERROR':
console.error('Privacy Center unexpected error', event);
break;
}
},
});
El callback onReady (separado de onEvent) se sigue disparando una vez al montar el iframe. Es complementario a los eventos de arriba, no parte de la lista.