> ## Documentation Index
> Fetch the complete documentation index at: https://internal.softcrum.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Módulo — messaging (MSG)

> Plantillas, campañas, envíos, deliverability, supresiones — y el enrutamiento de notificaciones de toda la plataforma, del que dependen los demás módulos. Schema messaging.

Depende de `core`; nunca de `loyalty`, `crm` ni `identity`.

> **El inglés es la versión autoritativa**: [`../../../modules/messaging/`](/modules/messaging/overview).

| Documento                                                                                                             | Propósito                                                         |
| --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| [`prd.md`](/es/modules/messaging/prd)                                                                                 | Qué es el módulo, para quién, qué NO hace, éxito, fases           |
| [`spec.md`](/es/modules/messaging/spec)                                                                               | La forma técnica viva: entidades, invariantes, eventos, endpoints |
| [`features/`](https://github.com/softcrumlabs/softcrum-suite/tree/master/docs/internal/es/modules/messaging/features) | Los feature specs — las unidades de entrega                       |

## Hoja de ruta

Nueve entregas. Seis componen F1a, porque todo otro módulo necesita notificar a alguien.

| FS                                                                                 | Feature                                             | Fase | Depende de | Estado  |
| ---------------------------------------------------------------------------------- | --------------------------------------------------- | ---- | ---------- | ------- |
| [FS-MSG-0001](/es/modules/messaging/features/fs-msg-0001-channel-cascade)          | Catálogo de canales y resolución en cascada         | F1a  | —          | `draft` |
| [FS-MSG-0002](/es/modules/messaging/features/fs-msg-0002-templates)                | Plantillas de mensaje                               | F1a  | 0001       | `draft` |
| [FS-MSG-0003](/es/modules/messaging/features/fs-msg-0003-sends-and-status)         | Envíos e historial de estados                       | F1a  | 0001, 0002 | `draft` |
| [FS-MSG-0004](/es/modules/messaging/features/fs-msg-0004-suppressions-preferences) | Supresiones y centro de preferencias                | F1a  | 0003       | `draft` |
| [FS-MSG-0005](/es/modules/messaging/features/fs-msg-0005-dual-rail-dispatch)       | Despacho de carril dual y workers                   | F1a  | 0003       | `draft` |
| [FS-MSG-0006](/es/modules/messaging/features/fs-msg-0006-channel-adapters)         | Adaptadores de canal — email, in-app, webhook, push | F1a  | 0005       | `draft` |
| [FS-MSG-0007](/es/modules/messaging/features/fs-msg-0007-campaigns-and-triggers)   | Campañas y disparadores                             | F1b  | 0002, 0005 | `draft` |
| [FS-MSG-0008](/es/modules/messaging/features/fs-msg-0008-sender-domains)           | Dominios de envío y deliverability                  | F1b  | 0006       | `draft` |
| [FS-MSG-0009](/es/modules/messaging/features/fs-msg-0009-sms-adapter)              | Adaptador SMS                                       | F1b  | 0006       | `draft` |

## El corte, explicado

* **La cascada va primera** (`0001`). `resolveChannels()` es lo que todo otro módulo llama para
  preguntar "¿puedo notificar a esta persona, y por dónde?". Nada más del módulo significa algo sin
  ella.
* **Envíos y despacho van separados** (`0003`, `0005`). Registrar que un mensaje existe y sacarlo bajo
  un rate limit compartido son problemas distintos: uno es una máquina de estados, el otro es equidad
  entre tenants.
* **Los adaptadores son una sola entrega** (`0006`), no uno por canal. Implementan el mismo puerto con
  el mismo contrato; separarlos repetiría el mismo spec cuatro veces.
* **Las campañas son F1b** (`0007`). F1a necesita que las notificaciones transaccionales funcionen —
  puntos acreditados, cupón emitido, OTP. Los blasts de marketing pueden seguir.
* **SMS va al final y aparte** (`0009`) porque es el único que necesita un vendor nuevo, y eso necesita
  su propio ADR (DEC-E1).

## La única regla que justifica todo el módulo

**Todo envío pasa la cascada y todo envío verifica supresiones.** No hay camino —ni transaccional, ni
interno, ni "solo esta vez"— que llegue a un adaptador de canal sin ambas cosas.
