Ofertas de retención
Un widget que puedes incrustar donde tu alumno va a cancelar, con ofertas que Stripe ejecuta de verdad. Funciona en cualquier web, sin depender de ningún plugin nuestro.
Cuando un alumno va a darse de baja, lo normal es perderlo en silencio. Este widget se pone en esa pantalla y le ofrece alternativas que Stripe ejecuta de verdad: pausar, cambiar de nivel, cambiar de plan o un descuento.
Funciona en cualquier web —WordPress con o sin nuestro plugin, o un HTML plano—, porque el navegador nunca ve tu secreto de servidor.
Cómo se monta
1. Tu backend acuña un token para ese alumno
Esta llamada es de servidor a servidor, con tu secreto. Nunca desde el navegador:
curl -X POST https://track.alloop.ch/membership/campus/widget-token \
-H "Authorization: Bearer TU_SECRETO_DE_SERVIDOR" \
-H "Content-Type: application/json" \
-d '{"subscription_id": "sub_1ABC..."}'{ "ok": true, "token": "eyJ…", "expires_in": 1800 }El token dura 30 minutos y va firmado con esa suscripción dentro. Por eso puede vivir en el navegador sin riesgo: nadie puede cambiar un campo para tocar la suscripción de otro.
2. Pones el widget en tu página
<div id="alloop-campus" data-token="EL_TOKEN_DEL_PASO_1"></div>
<script src="https://track.alloop.ch/static/alloop-campus.js" defer></script>Opcionales en el <div>: data-title, data-accent, data-cancel-text y data-api.
3. Escuchas lo que decide el alumno
El widget no cancela ni redirige por su cuenta —no sabe dónde está incrustado—. Avisa y tú decides:
const w = document.getElementById('alloop-campus');
w.addEventListener('alloop-campus:applied', (e) => {
// Aceptó una oferta: se queda. e.detail.type es 'pause', 'next_level', 'discount'…
location.href = '/mi-cuenta?retenido=1';
});
w.addEventListener('alloop-campus:declined', () => {
// Dijo que no a todo: aquí sigues TÚ con tu flujo de cancelación.
document.getElementById('mi-formulario-de-baja').hidden = false;
});Los cinco eventos: ready, applied, declined, cooldown y error.
Las ofertas
Se configuran por cliente. Cinco tipos, y todos se ejecutan de verdad en Stripe:
| Tipo | Qué hace |
|---|---|
next_level | Lo matricula en el siguiente nivel |
pause | Aplaza el cobro N meses, conservando lo pagado |
downgrade | Cambia a un plan más barato |
free_days | Añade N días gratis después de lo ya pagado |
discount | Aplica un cupón |
Por qué next_level existe
Es la oferta que ningún flujo de cancelación tiene, y responde al motivo más común en una academia: "ya terminé mi nivel". A esa persona un descuento no le sirve —no se va por precio, se va porque acabó— y encima le regalas margen. Lo que la retiene es matricularla en A2.
Cambia el precio de su suscripción sin cargo inmediato: conserva lo que ya pagó y el nuevo precio entra en el siguiente ciclo. No pierde el acceso en ningún momento, que es lo último que quieres cuando estaba a punto de irse.
La pausa funciona en trimestral y anual
Muchas herramientas solo saben pausar suscripciones mensuales, y las academias venden trimestral y anual. Aquí la pausa aplaza el siguiente cobro los meses que sean, sin anular ninguna factura: pausar un plan anual no regala el año.
Tres reglas que el widget respeta
- Las ofertas salen por olas. Primero lo que resuelve el motivo (cambiar de nivel, pausar); el descuento aparece el último, y solo si el alumno ha dicho que no a lo anterior. Enseñar la rebaja de entrada se la regala a quien se iba a quedar de todas formas.
- Una vez cada 30 días por alumno (configurable). Si las ve cada vez que entra a su cuenta, aprende que hay rebajas permanentes y deja de pagar precio completo. Dentro de esa ventana el widget no pinta nada.
- Una oferta por suscripción. Lo impone el servidor: no se pueden encadenar pausas ni apilar descuentos.
Lo que este widget NO hace, a propósito
No abre un modal a pantalla completa, no intercepta el botón de cancelar y no manda ningún email al alumno. Es justo lo que hace que la gente odie los flujos de cancelación: acaban yéndose igual, pero enfadados. Aquí el alumno llega porque quiere irse, y se le enseña una alternativa una sola vez.
Cómo sabes que funciona
Con un alumno de prueba (test-alloop), acuña un token y abre la página. Debe verse la primera ola
de ofertas. Pulsa una y comprueba en Stripe que la suscripción cambió: la confirmación del
widget no es la prueba, el cambio en Stripe sí.
Si no aparece nada, revisa en este orden:
| Síntoma | Causa probable |
|---|---|
| El widget no pinta nada | Ese alumno está en el periodo de espera de 30 días, o no hay ofertas configuradas |
401 en las llamadas | El token caducó (dura 30 min) o se acuñó para otro cliente |
| "Ya has aplicado una oferta" | Correcto: es de un solo uso por suscripción |
| Sale la oferta pero falla al aplicar | Falta el price_id o el cupón en la configuración |
Siguiente paso
Vuelve a Campus para medir la actividad que alimenta todo esto.
¿Te atascas? Pregúntale a tu IA
Pregúntale a tu IA
Esta documentación está pensada para leerse con una IA al lado. Abre tu asistente con el contexto de alloop ya cargado y pregúntale lo que necesites, en tu idioma.
Para qué NO sirve: una IA no ve tu panel, tus pagos ni tus datos, y puede equivocarse. Si un ingreso no aparece, algo toca tu producción o necesitas una respuesta oficial, escríbenos: esto no sustituye al soporte.
Conectar tu campus
Cómo llega la actividad de tus alumnos a alloop, sea cual sea tu plataforma: Fluent Community, LearnDash, Google Classroom o un campus hecho a medida.
Referencia de API
El mapa completo de la API de alloop-tracking: los 56 endpoints que tú o tu equipo técnico podéis usar. Todo lo interno (administración, panel) queda fuera a propósito.