Постройте один сервис, который каждая команда вызывает с типом уведомления + получателем, а сервис сам разрешает канал, шаблон, пользовательские настройки и приоритет. Ключевой архитектурный ход — приоритетные полосы (priority lanes): OTP не может ждать за маркетинговой рассылкой на 2 млн пользователей.
Архитектура
Services ─▶ Notify API ─▶ [validate + enrich] ─▶ Kafka topics
├─ otp/txn (high lane)
└─ marketing (bulk lane)
│
┌──── Dispatcher (per lane) ────┐
│ prefs check ─▶ template render │
└────┬──────┬──────┬────────────┘
Push Email SMS In-App
(provider adapters + rate limit)
