Encuesta headless con Salesforce Feedback Management — frontend externo consumiendo la unAuth Response API
El Reto
Servir una encuesta de Salesforce Feedback Management dentro de un frontend propio, sin bajar SObjects a mano y sin renunciar a branching, display logic ni persistencia estándar.
En resumen
- La encuesta vive en Survey Builder (Feedback Management) — pages, questions, branching, display logic, todo configurado por admin, sin código.
- Un BFF en Next.js (Route Handlers) intermedia entre el navegador y el dominio salesforce-scrt.com. Emite el accessToken unAuth, guarda la sesión en cookie firmada httpOnly y traduce a la Business API oficial.
- El frontend React tiene un componente único (SurveyRunner) que dispatcha por questionType. Cero código de branching o display logic en el cliente.
- Al PATCH con navigationAction: Next, Salesforce evalúa la ramificación y devuelve la página correcta (o la Thank You Page). El cliente solo renderiza lo que llega.
- Persistencia intacta: SurveyResponse + SurveyQuestionResponse quedan en el sistema de registro estándar. Dashboards y Data Mapper heredados funcionan sin cambios.
Síntoma
Un equipo necesita servir encuestas dentro de su propia experiencia web o móvil — con su look & feel, sus animaciones, su i18n, su accesibilidad — pero la encuesta ya está definida en Salesforce Feedback Management y no quiere renunciar a la administración de páginas, ramificación y persistencia que Salesforce ya ofrece.
Causa raíz
El camino más obvio para un desarrollador — bajar SurveyQuestion, SurveyQuestionChoice y SurveyPage vía SOQL y reconstruir el motor en TypeScript — es un antipatrón: se pierde el branching server-side, el display logic, el versionamiento por SurveyVersion, los merge fields y la persistencia oficial. Cada cambio en Survey Builder requiere sincronizar código.
Impacto
El equipo termina construyendo un motor paralelo que hay que mantener, sincronizar y auditar en cada release. La licencia de Feedback Management deja de generar el valor por el que se compró.
