# Email Marketing

Mentorize se integra con **Kit (ConvertKit)** y **ActiveCampaign** para sincronizar a tus alumnos y leads como contactos y etiquetarlos automáticamente según sus acciones (compra, registro a un evento, ver vídeo, etc.).

> **Respuesta rápida:** Mentorize sincroniza contactos y etiquetas con Kit o ActiveCampaign; no envía las campañas. Las secuencias y automatizaciones se crean en tu plataforma de email marketing y se activan a partir de las etiquetas que recibe cada contacto.

---

## Conectar tu plataforma

`Ajustes → Integraciones → Email Marketing`:

1. Selecciona el **proveedor**: Kit (ConvertKit) o ActiveCampaign.
2. Pega tu **API Key**:
   - **Kit:** en Kit → Account → API Keys.
   - **ActiveCampaign:** en ActiveCampaign → Settings → Developer.
3. **Solo ActiveCampaign:** pega también la **URL de tu cuenta** (`https://tucuenta.api-us1.com`, la encuentras en Settings → Developer). Sin ella la conexión no funciona.
4. (Opcional) Selecciona el destino de **double opt-in** para los registros a webinars y vídeos con captura:
   - **Kit:** un **formulario** de double opt-in.
   - **ActiveCampaign:** una **lista**.
5. Guarda.

> Si no tienes proveedor configurado, las funciones de email marketing quedan apagadas sin errores. Si la API Key (o la URL de cuenta, en ActiveCampaign) es inválida o tu plataforma no responde, la compra o el registro siguen funcionando. La sincronización se intenta hasta 3 veces (a los 10, 60 y 180 segundos); si se agotan los intentos, ese touchpoint puede perderse. Los tags derivados del estado actual suelen recuperarse en una sincronización posterior, pero un tag conductual de una sola acción puede no hacerlo.

---

## Cómo se crean los contactos

Cuando se aplica una etiqueta, el sistema crea o actualiza el contacto en tu plataforma con:

- **Email** y **Nombre** del usuario.
- **Atribución de campaña**, solo con **Kit**. En eventos en vivo y vídeos con captura se sincroniza `source` (`paid` para `/promo` y `organic` para la URL normal), junto con `medium`, `campaign` y `content` cuando llegan en la URL. **ActiveCampaign no recibe estos campos mediante la integración actual**: sí recibe el contacto y sus etiquetas. En las compras no se sincronizan UTMs al contacto; la atribución de venta se guarda dentro de Mentorize.

Las etiquetas se crean automáticamente en tu plataforma si no existían ya.

> **Estado del contacto con double opt-in:** en Kit, si hay double opt-in pendiente, el suscriptor se crea **inactivo** hasta que confirma. En ActiveCampaign no existe ese estado: el contacto se crea y se le pone la etiqueta `mz:double-optin-pending`, y es **tu automatización** la que lo activa al confirmar (ver **Double opt-in** más abajo).

---

## Etiquetas que se aplican automáticamente

### Cuando un alumno compra una oferta

| Etiqueta | Cuándo |
|---|---|
| `mz:purchased` | Al completar cualquier compra |
| `mz:offer:{slug}` | Por cada oferta comprada |
| `mz:course:{slug}` | Por cada curso incluido en la oferta |
| `mz:program:{slug}` | Por cada programa incluido en la oferta |
| `mz:mentorship:{slug}` | Por cada mentoría incluida en la oferta |
| `mz:cohort:c:{slug}:{clave}` | Si la oferta lo asigna a una cohorte de curso |
| `mz:cohort:p:{slug}:{clave}` | Si la oferta lo asigna a una cohorte de programa |
| `mz:active:course:{slug}` | Mientras tenga acceso al curso |
| `mz:active:program:{slug}` | Mientras tenga acceso al programa |
| `mz:active:mentorship:{slug}` | Mientras tenga acceso a la mentoría |

#### Etiquetas del periodo de prueba

Una suscripción con trial usa `mz:trial:{oferta}:*` para que puedas automatizar cada fase:

| Etiqueta | Cuándo |
|---|---|
| `mz:trial:{oferta}:started` | El trial empezó. Permanece como histórico. |
| `mz:trial:{oferta}:active` | El trial sigue activo. |
| `mz:trial:{oferta}:converted` | Se completó el primer cobro real. |
| `mz:trial:{oferta}:payment-failed` | Terminó la prueba y el primer cobro está fallando. |
| `mz:trial:{oferta}:ended-without-conversion` | El trial terminó o se canceló sin un cobro real. |

`active`, `converted`, `payment-failed` y `ended-without-conversion` reflejan el estado vigente y se sustituyen entre sí. Al iniciar el trial **no** se aplica `mz:purchased`: esa etiqueta llega con la conversión y el primer cobro real. Los tags de contenido `mz:active:*` sí pueden estar presentes durante la prueba porque el alumno tiene acceso.

#### Las etiquetas de cohorte

Llevan formato `mz:cohort:{c o p}:{slug del contenido}:{clave de la cohorte}`:

- `c` para cursos, `p` para programas.
- La **clave de la cohorte** la defines tú al crear la cohorte (es como la "etiqueta" que quieres que reciba en tu plataforma). Si no pones una clave, el sistema genera una usando la fecha de inicio en formato `AAAA-MM` (por ejemplo `2026-01`).

Ejemplo: `mz:cohort:c:excel-avanzado:2026-01`.

> **Etiquetas permanentes vs `mz:active:*`:** las etiquetas de compra (`mz:purchased`, `mz:offer:*`, `mz:course:*`, `mz:cohort:*`) **no se quitan nunca** — quedan como histórico de qué compró cada uno. Las `mz:active:*` se ponen y se quitan automáticamente: se ponen cuando el alumno tiene acceso vigente al contenido, se quitan cuando el acceso expira o se le revoca.

### Cuando alguien se registra a un evento o vídeo con captura

| Etiqueta | Cuándo |
|---|---|
| `mz:event:{slug}:registered` | Al registrarse a un [evento en vivo](https://mentorize.io/es/docs/live-events.md) |
| `mz:event:{slug}:promo` | Si llegó por la URL de campaña |
| `mz:video:{slug}:registered` | Al registrarse a un [vídeo con captura](https://mentorize.io/es/docs/gated-videos.md) |
| `mz:video:{slug}:watching` | Al ver 5 minutos del vídeo (umbral configurable) |
| `mz:video:{slug}:interested` | Al ver 40 minutos del vídeo (umbral configurable) |
| `mz:video:{slug}:promo` | Si llegó por la URL de campaña |

## El ciclo de las etiquetas `mz:active:*`

Estas etiquetas representan el **acceso vigente** del alumno. Se actualizan en dos sitios:

1. **En el momento.** Cada vez que pasa algo (compra nueva, renovación, reembolso, cancelación), el sistema recalcula qué accesos tiene activos el alumno y sincroniza sus etiquetas en tu plataforma.
2. **Una limpieza cada hora** repasa los alumnos cuyo acceso acaba de terminar **por tiempo** (cuando vence el plazo de acceso configurado en la oferta). Estas expiraciones no tienen un evento explícito de Stripe ni de checkout, así que esta pasada es la que las detecta y quita la etiqueta `mz:active:*` correspondiente. De rebote, también recoge cualquier sincronización en tiempo real que hubiera fallado.

Esto te deja montar automatizaciones del tipo:

- "Cuando se quita `mz:active:course:mi-curso` → enviar email de renovación".
- "Contacto con `mz:purchased` pero **sin ninguna** `mz:active:*` → re-engagement (compraron pero ya no usan)".

---

## Double opt-in

Con double opt-in, el contacto solo queda activo (y recibe tus comunicaciones) después de confirmar su email haciendo clic en un enlace. **El mecanismo cambia según el proveedor.**

### Con Kit

El suscriptor se crea en Kit como **inactivo** y recibe un email de confirmación. Solo cuando hace clic queda activo.

Para que el flujo redirija al alumno de vuelta a tu plataforma después de confirmar:

1. En Kit → editar el formulario de double opt-in → pestaña **Incentive**.
2. Activa **Send incentive email** y marca **Auto-confirm new subscribers**.
3. En **"After confirming redirect to:"** selecciona **URL** y pega la URL que te muestra Mentorize en `Ajustes → Integraciones → Email Marketing`.
4. La pestaña **General** ("When a visitor subscribes to the form") **no afecta** — el alta se hace vía API; el visitante nunca llega al formulario directo de Kit.

### Con ActiveCampaign

ActiveCampaign **no puede enviar el email de confirmación desde la API** — eso solo lo hacen sus formularios. Así que Mentorize hace su parte y tú montas una **automatización** que envía la confirmación:

1. En el registro, Mentorize crea el contacto y le pone la etiqueta **`mz:double-optin-pending`**.
2. En ActiveCampaign, crea una **automatización** disparada por esa etiqueta que:
   - Envía tu email de confirmación, con el botón de confirmar enlazando a la **URL que te muestra Mentorize** en `Ajustes → Integraciones → Email Marketing`.
   - Cuando el contacto confirma (hace clic), lo **suscribe a la lista** que seleccionaste en los ajustes.
   - Lleva una condición para que los contactos **ya suscritos salgan** de la automatización (así quien ya confirmó antes no recibe otra vez la confirmación).
   - **Como último paso, elimina la etiqueta `mz:double-optin-pending`** y configura la automatización para que pueda **ejecutarse varias veces**. Añadir una etiqueta que el contacto ya tiene no dispara nada en ActiveCampaign, así que sin estos dos ajustes el botón de reenviar la confirmación no genera ningún correo.
3. Crea la etiqueta `mz:double-optin-pending` una vez en ActiveCampaign para poder elegirla como disparador (o haz un registro de prueba y Mentorize la crea).

> Sin esa automatización, los registros con double opt-in **quedan pendientes**: el contacto existe y queda etiquetado, pero no se activa ni se desbloquea el contenido protegido. Si no quieres double opt-in, déjalo sin marcar y el contacto entra directo (single opt-in).

### El flujo del visitante

1. Se registra a un evento o vídeo en tu plataforma.
2. Recibe el email de confirmación (de Kit, o de tu automatización en ActiveCampaign).
3. **En eventos** ve una pantalla "Revisa tu email". **En vídeos** sigue en la página del vídeo, con recordatorios para que confirme.
4. Hace clic en el enlace del email.
5. **En eventos** vuelve a la página de agradecimiento (si confirma en el mismo navegador; desde otro dispositivo aterriza en el inicio, pero queda confirmado igual). **En vídeos** el enlace no le devuelve al vídeo: este se desbloquea cuando el visitante vuelve a abrirlo.

> **Reenvío con ActiveCampaign:** la automatización solo se dispara al **añadir** la etiqueta — re-añadir una que el contacto ya tiene no hace nada. Por eso los dos ajustes del paso 2 (eliminar la etiqueta al final + permitir varias ejecuciones) son los que hacen funcionar el botón de reenviar la confirmación; sin ellos, el reenvío no genera segundo correo.

---

## Casos de uso típicos

| Escenario | Etiqueta clave |
|---|---|
| Bienvenida tras la primera compra | `mz:purchased` |
| Email de "tu acceso a este curso ha terminado" | Eliminación de `mz:active:course:{slug}` |
| Comunicaciones específicas para una cohorte | `mz:cohort:c:{slug}:{clave}` |
| Re-engagement de gente que compró y ya no tiene nada activo | `mz:purchased` AND no tiene ninguna `mz:active:*` |
| Separar leads de campaña de pago vs orgánicos | `mz:event:{slug}:promo` o `mz:video:{slug}:promo` |

---

## Cosas a tener en cuenta

- Si un contacto **se da de baja desde tu plataforma de email marketing**, ese cambio **no se sincroniza** a Mentorize. Sigue teniendo acceso a tu plataforma con normalidad — solo dejará de recibir tus emails.
- Si **eliminas a un alumno** en Mentorize, **no se borra de tu plataforma de email marketing automáticamente**. Si no quieres que reciba más comunicaciones, bórralo también allí.
- La API Key se guarda cifrada.
- Las operaciones en cola se intentan un máximo de **3 veces**, con esperas de **10, 60 y 180 segundos**. Después se registra el fallo y se abandona ese touchpoint. Una sincronización posterior puede reconstruir tags derivados —por ejemplo acceso o estado del trial—, pero no garantiza recuperar una etiqueta conductual puntual.

## Referencias oficiales

- [Documentación para desarrolladores de Kit](https://developers.kit.com/)
- [Documentación para desarrolladores de ActiveCampaign](https://developers.activecampaign.com/)

---

## Preguntas frecuentes

### ¿Mentorize envía campañas o secuencias de email?

No. Mentorize crea o actualiza el contacto y aplica las etiquetas correspondientes. Las campañas, secuencias y automatizaciones se configuran y envían desde Kit o ActiveCampaign.

### ¿Kit y ActiveCampaign reciben los mismos datos?

Ambos reciben el contacto y sus etiquetas. En registros de eventos y vídeos con captura, la integración actual también envía ciertos campos de atribución a Kit; ActiveCampaign no recibe esos campos mediante esta integración.

### ¿Un fallo de sincronización cancela una compra o un registro?

No. La compra o el registro sigue adelante y la sincronización se reintenta hasta tres veces. Si se agotan los intentos, algunos tags derivados del estado pueden recuperarse después, pero una etiqueta ligada a una acción puntual puede perderse.
