Centro de preferencias: página pública de inclusión/exclusión
El centro de preferencias es una página pública donde un contacto gestiona sus propias inclusiones por canal, temas de suscripción, frecuencia de mensajes y (si lo habilita) presenta una solicitud de eliminación de datos — sin cuenta, sin inicio de sesión. Cada contacto llega a ella a través de un enlace firmado: la URL lleva un token HMAC-SHA256 (v1.<payload>.<signature>) que expira a los 30 días, por lo que la página sigue siendo de autoservicio pero se limita a un solo contacto en una sola organización.
La superficie resumida de puntos de acceso también vive en Barreras de envío; esta guía es el recorrido completo: cada campo de configuración, dónde colocar el enlace, qué devuelve la API de la página pública y qué superficies de cumplimiento escribe una exclusión o inclusión.
Todos los puntos de acceso siguientes tienen raíz en https://api.orbit.devotel.io/api/v1/compliance.
Original en inglés: Preference center: the public opt-in/opt-out page.
El centro de preferencias es un control perteneciente al inquilino: usted elige los canales, temas y la marca, y su organización guarda la evidencia del consentimiento. Orbit opera la plataforma; la decisión de consentimiento pertenece al contacto. Esta guía no es asesoramiento legal — confirme sus obligaciones con su asesor jurídico.
1. Configurar una vez: POST/GET /preference-center
Establezca la configuración conPOST /preference-center (clave API propietario/administrador). El punto de acceso hace upsert de la configuración en los ajustes de su organización y devuelve el objeto guardado — ejecútelo de nuevo para actualizar. GET /preference-center lee la configuración actual; antes de la configuración, devuelve enabled: false con un mensaje de sugerencia.
Campos de configuración
Cada campo se valida del lado del servidor — un POST rechazado devuelve un422 con problemas por campo (field, message) para que pueda identificar cuál falló.
Temas de suscripción
Un tema es un grupo con nombre — Boletín, Actualizaciones de producto, Alertas de facturación — que un contacto activa o desactiva sin tocar el canal completo. Losid de temas deben ser únicos y coincidir con el patrón de slug ([a-z0-9][a-z0-9_-]{0,63}); cada entrada tiene:
name(1–120 caracteres) — el nombre mostrado en la página.description(opcional, ≤500) — una línea de contexto mostrada junto al conmutador.defaultOptIn(por defectofalse) — cómo se trata un contacto sin preferencia registrada.archived(opcional) — los temas archivados permanecen en la pista de auditoría pero ya no se muestran en la página.
http(s) se rechazan de entrada, y los id de temas duplicados fallan con «Los id de temas deben ser únicos» en lugar de sobrescribirse silenciosamente.
2. Crear un enlace por contacto
Una vez configurado, genere un enlace para un contacto a la vez conPOST /preference-center/link:
link — una URL de la forma ${DEVOTEL_WEB_URL}/preferences?token=v1…. Puntos a tener en cuenta:
- El enlace apunta a la página alojada, no al punto de acceso JSON. Cómpielo tal cual en sus plantillas de pie de página/remitente; la página misma recupera el punto de acceso a datos en segundo plano.
- TTL de 30 días. Después, el token se verifica como expirado y el contacto debe solicitar un nuevo enlace (crear uno nuevo toma una llamada API).
- La página es agnóstica a la localización en el momento de creación. La aplicación web resuelve una redirección preservando la consulta
?token=, por lo que no necesita adivinar la configuración regional del contacto.
Dónde colocarlo
- Pie de página de correo electrónico (primario). Agregue el enlace generado (o la variante corta rastreada que usa su remitente) en la zona de cancelación de suscripción de las plantillas de marketing.
- Rescate SMS / WhatsApp. Cuando el mensaje no tiene bloque de pie de página, agregue el enlace en línea:
{optOutMessage}: {link}. El ayudante que construye cuerpos salientes acepta un enlace corto pre-generado, por lo que su clic de cancelación sigue recibiendo la atribución normal de clics. - Re-inclusión impulsada por supresión. Cuando un contacto se re-incluye a través de otro flujo, puede darle un enlace nuevo para que obtenga la misma página de autoservicio.
3. La página pública del token
La página alojada lee y escribe a través de dos puntos de acceso no autenticados protegidos por el token firmado:GET /preferences/:token— devuelve el payload de la página.PUT /preferences/:token— aplica actualizaciones.
400 INVALID_TOKEN; los tokens expirados o alterados devuelven 401 TOKEN_EXPIRED con «Solicite un nuevo enlace.»
Respuesta GET
El payload agrupa el estado actual del contacto y la configuración de la organización:consentHistory es la pista de auditoría opt-in/opt-out más reciente del contacto, limitada a 20 filas, extraída del mismo libro de consentimiento que sus operadores ven en el panel.
Cuerpo de solicitud PUT
channelPreferences— mapa parcial permitido (Zod registro parcial); se requiere al menos un canal.frequencyPreference— opcional, uno deall,important_only,weekly_digest,monthly_digest.topicPreferences— mapa{ topicId: opted_in | opted_out }opcional validado contra sus temas configurados; los id desconocidos se ignoran.requestDataDeletion— establece una solicitud de eliminación GDPR junto a la exclusión (ver sección 6).
4. Cómo fluyen las actualizaciones
Un opt-in/opt-out escrito aquí no es solo una bandera de interfaz de usuario — las mismas cuatro superficies de cumplimiento que una palabra clave STOP escribe se actualizan:- Libro de consentimiento. Una fila
consent_recordspor canal (o por tema) se añade consource: preference_center— su pista de auditoría de carga probatoria GDPR Artículo 7. - Lista de supresión. En cualquier canal excluido, el teléfono/correo electrónico canonizado del contacto se inserta con ámbito
all— un bloqueo entre canales que lee cada puerta de envío. - Valla STOP. Una valla de ruta rápida Redis se establece al opt-out (y se borra en una re-inclusión completa), de modo que los lotes de campañas en vuelo ven el cambio antes de que la propagación de supresión de base de datos más lenta llegue.
- Registro de auditoría.
compliance.preference_center_updatedse registra cuando cambia la configuración, y los eventos opt-in/out a nivel de contacto se capturan en el libro de consentimiento.
opted_in) revoca las filas de supresión activas del teléfono del contacto y borra la valla STOP, mientras que el libro de consentimiento gana la entrada inversa.
Tema vs. canal. Una exclusión a nivel de canal siempre gana — un conmutador de tema restringe el consentimiento dentro de los canales que el contacto aún acepta. Los id de temas desconocidos en un PUT se ignoran en lugar de persistir, por lo que un formulario obsoleto no puede escribir claves de atributo arbitrarias.
5. Semántica del conmutador de eliminación GDPR
CuandoshowGdprDelete está habilitado y el contacto marca requestDataDeletion: true en el PUT, la API registra una solicitud de eliminación GDPR heredada — una fila pending marcada para su proceso de eliminación de datos — junto a la exclusión. Esa marca es deliberada: el conmutador de eliminación del centro de preferencias marca al contacto, no inicia el pipeline DSAR rastreado.
6. Probarlo
Dos ejemplos curl elaborados que puede pegar en un script de humo: Guardar la configuración:201 con la configuración guardada reflejada.
Crear un enlace y ejercitar los puntos de acceso públicos:
updated: true más las preferencias aplicadas y, cuando se solicita, una entrada gdprRequest.
Fallos comunes a comprobar: 400 INVALID_TOKEN (token mal formado), 401 TOKEN_EXPIRED (TTL pasado o incompatibilidad de firma — cree un nuevo enlace), 422 VALIDATION_ERROR (problemas por campo en la configuración o el cuerpo de actualización) y 404 NOT_FOUND cuando el centro de preferencias está deshabilitado o el id del contacto no existe.
Relacionado
- Barreras de envío y protecciones pre-envío — dónde vive el resumen del centro de preferencias junto a las horas de silencio, parada de emergencia y limitaciones.
- Exclusión y Listas de supresión — cómo el ámbito
ally las importaciones CSV masivas se relacionan con esta superficie. - Gestión de consentimiento — la API del lado del operador que almacena el mismo libro de consentimiento.
- Referencia DSAR — el pipeline de borrado rastreado al que enrutar las solicitudes
requestDataDeletion.