Lógica del canal: cómo integrar un canal de venta por API
El middleware informa estado y registra decisiones; la regla de cuándo pedir el consentimiento es del canal. Esta es la lógica recomendada, la misma que aplica este simulador. Los números coinciden con los pasos de la página; a la derecha, la función clave tal como la ejecuta.
0. Canal y encabezados
- Token: el backend del canal lo pide a Gravitee (
client_credentials) con el cliente de su empresa y canal. Nunca llega al navegador ni a la app. - Encabezados:
X-Company-IdyX-Channel-Idiguales a los que autoriza el token, unX-Request-Id(UUID) por acto yX-Program-Idcuando aplique.
1. Sincronizar formularios
GET /collection-pointsconIf-None-Match, al iniciar y cada 1 a 2 horas; con304nada cambió.- Cada formulario trae sus propósitos con id, nombre, texto y versión: con eso se arma el formulario, sin otra llamada.
2. Consultar a la persona
- RUT:
12345678-5, sin puntos, con guion, DV en mayúscula, sin ceros a la izquierda; módulo 11 validado en el front. Solo en el cuerpo; nunca en la URL, en el almacenamiento del navegador ni en logs. POST /subjects:checkcon lospurposeIdsdel formulario elegido.CACHEDpor defecto;STRICTsi la decisión no admite caché.
3. Decidir si se muestra el formulario
Mostrarlo si hay al menos un propósito del formulario no aceptado; si todos están aceptados, no mostrarlo. Siempre con la respuesta de la consulta, nunca antes.
- Un opcional aceptado sin el T&C puede existir; si vale para el negocio lo define el holding.
- Sin recaptura por versión por ahora.
4. Formulario de captura y registro
Las casillas salen del formulario (una por propósito) y su estado, del mapa de estados de la consulta:
| Estado del propósito | Casilla |
|---|---|
GRANTED | Marcada y bloqueada; no se reenvía |
NOT_COLLECTED, UNKNOWN o ausente | Editable, sin marcar |
WITHDRAWN | Editable, sin marcar |
| Obligatorio no aceptado | Editable; no se guarda sin aceptarlo |
POST /consentsconcollectionPointIdy solo lo editable, cada unoGRANTEDoWITHDRAWN.interactionDate= el momento en que la persona confirmó; unX-Request-Idnuevo por acto, y en un reintento se reenvían los dos sin cambios.- Con
201, aplicar el nuevo estado en pantalla: el proveedor puede tardar segundos en reflejarlo. Cambiar un consentimiento ya dado es del centro de preferencias.
5. Recibo
GET /receipts/{receiptId}muestra la evidencia en el proveedor; uno recién emitido puede responder404unos segundos.
6. Centro de preferencias
POST /subjects:preference-center-linky abrir la URL en otra pestaña. Es de un solo uso: no guardarla ni loguearla.
Transversal · Respuestas y errores
| Respuesta | Qué hace el canal |
|---|---|
201 / 202 | Registrado / en camino (consultar el pendiente) |
400 | Corregir según code e invalidParams |
401 / 403 | Renovar el token o revisar encabezados |
429 | Esperar Retry-After |
retryable: true | Reintentar luego, mismo X-Request-Id |
502 PLATFORM | No reintentar; mostrar el traceId |
- Decidir por
statusyretryable; uncodedesconocido nunca rompe el canal. - Si
meta.staleestrue, el dato no es en tiempo real.
Petición al middleware
Respuesta del middleware
OneTrust · lo llama el middleware
El canal no ve estas llamadas: el middleware no expone sus peticiones al proveedor (credenciales, tokens, cuerpos crudos). Se listan las que hace para este paso.
0. Canal y encabezados
Encabezados que el canal envía en cada llamada. El token no se ingresa: lo agrega el backend del canal y nunca llega a la página.
1. Sincronizar formularios
Una sola llamada: cada formulario trae sus propósitos (id, nombre y versión), que es todo lo que el canal necesita para consultar a una persona. Se refresca con ETag: si nada cambió, el middleware responde 304 sin consultar al proveedor.
| Llamada al middleware | Respuesta | Contenido | ETag | Hora |
|---|
Formularios de captura y sus propósitos
2. Consultar a la persona
| Propósito | Tipo | Estado de la persona | Versión consentida | Última interacción |
|---|
3. Decidir si se muestra el formulario
Regla del simulador: se muestra si hay al menos un propósito del formulario no aceptado; si todos están aceptados, no se muestra. Al mostrarse, lo ya aceptado (obligatorio u opcional) queda marcado y bloqueado, y solo se edita lo que falta. Cambiar un consentimiento ya dado es del centro de preferencias. Por ahora no se recaptura por versión (Q72).
4. Formulario de captura y registro
Armado solo con lo que trae el formulario de captura en GET /collection-points: nombre, texto y versión de cada propósito, marcados según la consulta por RUT.
5. Recibo
El recibo es la evidencia del consentimiento en el proveedor. El simulador lo traduce a datos reales con los formularios sincronizados. Un recibo recién emitido puede tardar unos segundos en estar disponible.
| Propósito | Decisión registrada |
|---|
6. Centro de preferencias
Pide un enlace de un solo uso y lo abre en una pestaña nueva. El simulador no lo guarda.
Respuestas del middleware
Tal cual llegan: status, headers relevantes y cuerpo. Numeradas en orden de ejecución, la más reciente arriba; cada una indica el paso que la originó.