Integrar FeedbackSuite
Escucha a cada usuario, arregla lo que falla y cuéntaselo. Tres niveles; cada uno funciona solo.
Nivel 1. Una línea (5 minutos)
Pestaña de opinión, asistente (si lo tienes activado) y analítica solo con consentimiento. La clave pública solo funciona desde los orígenes que nos des.
<script src="https://feedback.codelabs.studio/embed/v1.js" data-key="fs_pk_…" data-transparency="#feedbacksuite-signup-note" async></script>
window.FeedbackSuite.identify({ id: '42', email: 'ana@ejemplo.com', name: 'Ana' }); // tras el login
window.FeedbackSuite.consent({ analytics: true }); // cuando tu aviso de cookies lo acepte
window.FeedbackSuite.open(); // abrir la pestaña desde tu propio botón
Transparencia de serie (opcional). Pon <p id="feedbacksuite-signup-note"></p> debajo del botón de crear cuenta y el script escribe: «Estamos construyendo {producto} contigo: analizamos cómo se usa para encontrar fallos y arreglarlos. Más información», con el enlace a tu apartado de privacidad.
Nivel 2. Vigilantes de servidor (una tarde)
Desde tu servidor, con la clave secreta, envía los hechos que importan: signup, activated, login_day, usage_rollup, error_seen, question_asked, paid, payment_failed, cancelled, cancel_reason, feedback_given. Cada hecho lleva un ref único (reenviarlo no lo duplica) y la persona por id, email o los dos. Lo mismo sirve como webhook desde cualquier herramienta que permita una cabecera.
curl -X POST https://feedback.codelabs.studio/v1/events \
-H "Authorization: Bearer fs_sk_…" -H "content-type: application/json" \
-d '{"product":"app","events":[{"kind":"signup","ref":"signup:42","user":{"id":"42","email":"ana@ejemplo.com","name":"Ana"}}]}'
import { createLifecycleClient } from '@codelabs/lifecycle-client';
const fs = createLifecycleClient({ key: process.env.FEEDBACKSUITE_KEY, product: 'app' });
await fs.track('signup', { ref: 'signup:42', user: { id: '42', email: 'ana@ejemplo.com' } });
await fs.track('error_seen', { ref: 'err:42:2026-11-01', user: { id: '42' }, payload: { area: 'pago' } });
Respuesta: {"accepted":n,"rejected":[{"index":i,"error":"…"}]}. Un hecho rechazado se dice, nunca se pierde en silencio.
Stripe sin código: botón «Conectar Stripe» en tu ficha (OAuth, solo lectura): pagos, impagos, bajas y pruebas llegan solos. App Store y Google Play: pega en la consola de cada tienda la URL de notificaciones que aparece en tu ficha; la firma de la tienda se comprueba siempre.
Nivel 3. Integración profunda
- Errores: desde tu gestor de errores (Sentry u otro), un
error_seenpor persona afectada con el área; así el correo «lo que te falló ya está arreglado» sabe a quién escribir. - Buzón de respuestas: las respuestas a los correos del fundador entran en la ficha de cada persona.
- Base de conocimiento del asistente: el asistente se entrena con tu web y tus documentos.
- MCP del producto: el agente puede consultar el estado real de cada usuario (con OAuth estándar).
Texto para tus términos y tu política de privacidad
Cópialo en tu web sustituyendo lo que va entre llaves. Decirlo de entrada es lo que hace que «lo que te falló ya está arreglado» se lea como cuidado y no como vigilancia.
Mejora continua del servicio y contacto del equipo fundador
{producto} está en fase de construcción y aprendizaje, y queremos construirlo con quienes lo usan. Para mejorarlo analizamos cómo se utiliza el servicio: qué funciones se usan, dónde se producen errores técnicos, qué preguntas se hacen al asistente, por escrito o por voz, y las opiniones que nos envías. Lo hacemos con un único fin: descubrir qué falla o qué no explicamos bien, y arreglarlo.
Cuando detectemos que un error te ha afectado, podremos escribirte para preguntarte qué intentabas hacer y para avisarte cuando esté resuelto. Esos mensajes los lee y responde directamente el equipo que construye el producto.
Lo que no hacemos: no vendemos ni cedemos estos datos, no los usamos para publicidad de terceros y no tomamos a partir de este análisis decisiones automáticas que te afecten, como suspender tu cuenta o cambiar tu precio.
La grabación de sesiones y los mapas de calor solo se activan si los aceptas en el aviso de cookies, y siempre con los campos de texto ocultos. Antes de cualquier conversación de voz con el asistente te avisamos de que se graba.
Base legal: nuestro interés legítimo en mantener y mejorar un servicio que funcione (artículo 6.1.f del RGPD) y tu consentimiento para la analítica con cookies. Puedes oponerte cuando quieras desde Ajustes, Privacidad, o escribiendo a privacidad@{dominio}, y seguirás usando el servicio con normalidad. Conservamos los datos de uso un máximo de 12 meses.
Responsable: {razón social y domicilio del responsable}.