ADR — WAHA over Meta Cloud API for WhatsApp
TL;DR
Use WAHA (unofficial WhatsApp HTTP API) self-hosted on a VPS for outbound notifications and admin messaging. Meta Cloud API is too expensive at MVP volume.
Context
- Required: 1-hour-before class WhatsApp reminder, admin manual messages, OTP-style notifications.
- Volume: small (few hundred messages / month at MVP).
- Meta Cloud API: requires Business verification, template approval, per-message fees that don't suit current volume / cash flow.
Decision
Run WAHA in Docker on a personal VPS. Use one WhatsApp number for outbound. Rotate or upgrade to Meta Cloud API only if the number is banned or volume crosses a threshold making fees comparable.
Consequences
- WhatsApp number ban risk is real and increases with frequency / templated-marketing-style messages.
- WAHA sessions drop silently — operational toil; keep a restart checklist in the application operations docs.
- No template approval = ToS gray zone.
- Cheap and flexible.
Alternatives Considered
- Meta Cloud API: rejected due to cost / overhead at MVP.
- Email-only fallback: insufficient for the WhatsApp-first audience.
- Twilio: priced in USD, expensive.
Related ADRs
References
- Operational checklist (external app docs):
ops/waha-session-restart.md
- Future-state backlog item to revisit if banned: TBD when triggered.