Developers

Multiconsentimiento

Procesa 1..N consentimientos con decisiones explícitas y commit atómico.

Una misma Embed Session puede resolver uno o varios consentimientos, según la versión publicada de la configuración. Cada tarjeta conserva la regla 1 ConsentBox = 1 ConsentTemplateVersion.

Antes de materializar el runtime, Consensa evalúa cumplimiento por ConsentTemplate estable. El multiconsentimiento presenta únicamente consentimientos pendientes o con nuevos requisitos; los ya satisfechos no se incluyen. Si todos están satisfechos, POST /v1/embed/sessions responde presentation.required: false.

Semántica de decisión

Todo consentimiento incluido en la interacción recibe una decisión explícita: grant o deny.

  • optional no significa omitido ni denegación implícita.
  • required no significa aceptación forzada.
  • El usuario siempre puede denegar.
  • El backend confirma el conjunto de decisiones mediante un commit atómico.

Evento público

Cuando la interacción contiene dos o más consentimientos, el componente emite consensa:completed con resultados sanitizados por templateKey. Con un solo consentimiento se emite consensa:granted o consensa:denied, nunca consensa:completed.

consent.addEventListener('consensa:completed', ({ detail }) => {
  // {
  //   interactionReference: "interaction-public",
  //   outcome: "completed",
  //   consents: [
  //     { templateKey: "privacy", decision: "granted" },
  //     { templateKey: "marketing", decision: "denied" }
  //   ]
  // }
  renderNextStep(detail.consents);
});

El payload público no incluye tickets ni credenciales de sesión, sessionId, identificadores personales ni IDs internos.

Confirmación canónica

Consulta GET /v1/consent-interactions/{interactionId} desde el backend para confirmar el resultado. La lista consents trae una entrada por consentimiento, con su decision, su status y su consentActionId.

{
  "interactionId": "int_9a3f",
  "status": "completed",
  "committedAt": 1787702455200,
  "consents": [
    { "templateKey": "privacy",   "kind": "general", "decision": "grant", "status": "granted", "consentActionId": "consent-action-8e0" },
    { "templateKey": "marketing", "kind": "general", "decision": "deny",  "status": "denied",  "consentActionId": "consent-action-8e1" }
  ]
}

El commit es atómico: o se registran todas las decisiones de la interacción, o ninguna. No existe un estado intermedio en el que parte del conjunto quedó guardado.

Si la interacción incluye un consentimiento REDEC, su entrada trae además redecConsentId y artifactStatus. Ver flujo REDEC.

En esta página