Why hotels care
Independent groups and soft brands run many properties under one HAIP deploy. Front desk SMS, confirmation WhatsApp, and marketing templates must bill / brand / opt-in per hotel — not one global Twilio account shared by every property on the box.
Today Twilio credentials are env-global (docs/channels/whatsapp.md explicitly: "Env-global Twilio credentials (not yet property-scoped)"). That blocks real multi-property ops and is a GDPR / consent risk if property A’s guest gets property B’s sender ID.
Current state (code anchors)
apps/api/src/modules/notifications/ — SmsProvider / WhatsApp provider interfaces
docs/channels/whatsapp.md — Twilio Content API path; notes env-global gap
- Guest marketing gate:
gdprConsentMarketing (already property-aware at guest level)
- Multi-tenancy rule: every property-scoped table/query must filter
propertyId
What we need
- Per-property messaging credentials store (encrypted at rest — follow migration credential vault patterns if present)
- Provider resolution:
propertyId → credentials → Twilio SMS / WhatsApp adapter (env-global only as fallback for single-property demos)
- Admin/API to set/rotate/test credentials without restarting the API
- Audit log on credential create/rotate/delete (never log secrets)
- Tests: property A cannot send using property B’s sender; missing creds → clear error, not silent console success in prod
Open questions (operators — please comment)
Out of scope
- Inventing Meta/WhatsApp Cloud API contracts beyond what
docs/channels/whatsapp.md already locks
- Two-way inbound chatbot product (Phase 2 in that doc)
Acceptance criteria
How to contribute
Great for NestJS + multi-tenant config folks, or hotel IT who already manage per-property Twilio subaccounts.
Comment to claim a slice: (A) schema + encryption, (B) provider resolution, (C) admin API/UI, (D) tests/docs.
Search keywords: Twilio, WhatsApp, multi-property, per-property credentials, SMS, GDPR consent, hotel group PMS
Why hotels care
Independent groups and soft brands run many properties under one HAIP deploy. Front desk SMS, confirmation WhatsApp, and marketing templates must bill / brand / opt-in per hotel — not one global Twilio account shared by every property on the box.
Today Twilio credentials are env-global (
docs/channels/whatsapp.mdexplicitly: "Env-global Twilio credentials (not yet property-scoped)"). That blocks real multi-property ops and is a GDPR / consent risk if property A’s guest gets property B’s sender ID.Current state (code anchors)
apps/api/src/modules/notifications/—SmsProvider/ WhatsApp provider interfacesdocs/channels/whatsapp.md— Twilio Content API path; notes env-global gapgdprConsentMarketing(already property-aware at guest level)propertyIdWhat we need
propertyId→ credentials → Twilio SMS / WhatsApp adapter (env-global only as fallback for single-property demos)Open questions (operators — please comment)
adminonly, or a newmessaging.managepermission?Out of scope
docs/channels/whatsapp.mdalready locksAcceptance criteria
docs/channels/whatsapp.mdHow to contribute
Great for NestJS + multi-tenant config folks, or hotel IT who already manage per-property Twilio subaccounts.
Comment to claim a slice: (A) schema + encryption, (B) provider resolution, (C) admin API/UI, (D) tests/docs.
Search keywords: Twilio, WhatsApp, multi-property, per-property credentials, SMS, GDPR consent, hotel group PMS