Comunicaciones y canales
IncentIA envía mensajes a los miembros por varios canales nativos, con selección automática del mejor canal según preferencias y disponibilidad.
Canales soportados
| Canal | Proveedor | Uso típico |
|---|---|---|
| SMTP configurable | Comunicaciones extensas, facturas, newsletter | |
| SMS | Twilio | Alertas cortas, OTP, recordatorios |
| Meta Business API | Conversacional, mensajes urgentes, altos CTR | |
| Telegram | Bot API | Nicho B2B, comunidades |
| Push | Web Push (VAPID) / APNs / FCM | Notificaciones app / PWA |
Cada canal requiere configuración del proveedor (API keys, números emisores, VAPID keys, etc.) a nivel de tenant.
Channel Router
El ChannelRouter decide qué canal usar para cada mensaje según:
- Preferencia del miembro — si dijo "prefiero WhatsApp", intenta ese primero.
- Disponibilidad — si el miembro no tiene teléfono o no ha aceptado push, se descarta.
- Opt-in — respeta consentimientos GDPR / LOPD.
- Tipo de mensaje — algunos tipos están ligados a canales concretos (ej. OTP por SMS).
- Fallback — si el canal preferido falla, prueba el siguiente.
Plantillas (templates)
Cada mensaje se construye a partir de una plantilla por canal:
- Texto con variables:
Hola {{member.name}}, tienes {{points}} puntos disponibles. - HTML para email (con layout, imágenes, CTA).
- Media (imágenes, PDFs) adjuntable según canal.
Las plantillas se scopean:
- Globales del tenant — usadas por defecto.
- Por campaña — específicas para una activación concreta.
- Por tipo de evento —
EvidenceApproved,EvidenceRejected,RewardRedeemed, etc.
Cuando se dispara un evento, se busca plantilla en este orden:
- Plantilla de la campaña (si aplica).
- Plantilla global del tenant.
- Texto por defecto en código (fallback).
Flujos visuales
El editor visual de flujos permite diseñar secuencias de mensajes con:
- Triggers — "cuando un miembro se registra", "cuando cumpleaños", "cuando puntos > X".
- Condiciones — "si es VIP", "si vive en Madrid", "si lleva 30d sin actividad".
- Esperas — "espera 3 días antes del siguiente paso".
- Acciones — enviar mensaje, actualizar atributo, asignar a segmento, etc.
Ejemplo de flujo:
[Trigger] Miembro se registra
↓
[Acción] Enviar email bienvenida (plantilla welcome_email)
↓
[Espera] 7 días
↓
[Condición] ¿Ha hecho alguna compra?
├─ Sí → [Acción] Enviar WhatsApp agradecimiento
└─ No → [Acción] Enviar push con oferta de reactivación
Los flujos corren en background (vía Hangfire) y son idempotentes — un miembro no recibe el mismo paso dos veces.
Dynamic Links
Las comunicaciones suelen incluir URLs. Si apuntas directamente a la landing, y WhatsApp la bloquea, los miembros ven un error.
Solución: Dynamic Links — URLs cortas en tu dominio (https://tu-dominio.app/r/verano) que redirigen al destino real. Si WhatsApp bloquea el dominio redireccionado, cambias el destino del Dynamic Link y los nuevos clicks funcionan sin reenviar el mensaje.
Ver Dynamic Links.
Métricas
Por cada mensaje se trackea:
- Enviado / Entregado / Abierto / Clicado / Rebotado.
- Canal usado.
- Tiempo de respuesta (solo email / WhatsApp).
- Opt-out desencadenado.
Agregables por campaña, plantilla o segmento.
Opt-in y cumplimiento
- Cada miembro tiene preferencias de canal y tipo de mensaje (marketing, transaccional).
- Los mensajes transaccionales (OTP, evidencia aprobada) se envían siempre.
- Los marketing requieren opt-in explícito.
- Todo cambio queda registrado para cumplimiento GDPR / LOPD.
Pruebas y simulación
Antes de lanzar un flujo grande:
- Modo dry-run — simula el flujo sin enviar mensajes reales.
- Audiencia de prueba — ejecuta contra un segmento de solo internos.
- Preview de plantilla con datos de ejemplo.