Skip to main content
Depends on core; never on loyalty, crm or identity. Spanish mirror: ../../es/modules/messaging/. English is authoritative.

Feature roadmap

Nine deliveries. Six make F1a, because every other module needs to notify somebody.

The cut, explained

  • The cascade comes first (0001). resolveChannels() is what every other module calls to ask “may I notify this person, on what”. Nothing else in the module means anything without it.
  • Sends and dispatch are separate (0003, 0005). Recording that a message exists and getting it out under a shared provider rate limit are different problems: one is a state machine, the other is fairness between tenants.
  • Adapters are one delivery (0006), not one per channel. They implement the same port with the same contract; splitting them would repeat the same spec four times.
  • Campaigns are F1b (0007). F1a needs transactional notifications to work — points earned, coupon issued, OTP. Marketing blasts are a product surface that can follow.
  • SMS is last and separate (0009) because it is the only one that needs a new vendor, which needs its own ADR (DEC-E1).

The one rule the whole module exists to enforce

Every send passes the cascade, and every send checks suppressions. There is no path — not transactional, not internal, not “just this once” — that reaches a channel adapter without both.