Мультитенантная B2B-платформа для рассылок WhatsApp Business через Twilio: организации, контакты и списки, шаблоны сообщений с одобрением WhatsApp и массовая отправка.
Моя роль
Backend-разработчик. Разработал API, хранение учётных данных тенантов, аутентификацию и pipeline отправки.
Стек
Go
Echo
PostgreSQL
Supabase Auth
Twilio
GCP Secret Manager
Задача
Каждый клиент подключает собственный аккаунт Twilio, поэтому учётные данные нужно безопасно хранить для каждого тенанта, шаблоны должны проходить одобрение WhatsApp, а рассылку на тысячи контактов нельзя отправлять по одному внутри запроса.
Архитектура
Echo API на PostgreSQL (GORM) аутентифицирует пользователей через Supabase или по API-ключу. Учётные данные Twilio тенантов хранятся в GCP Secret Manager и запрашиваются в момент отправки. Рассылка раздаётся пулу воркеров, которые отправляют сообщения через Twilio и собирают результаты по каждому контакту; номера телефонов нормализуются в E.164.
Ключевые решения
01Секреты тенантов вне базы данных
Почему
Учётные данные Twilio каждого клиента хранятся в GCP Secret Manager, а не в PostgreSQL, поэтому утечка базы их не раскрывает, а секреты можно версионировать и менять.
02Пул воркеров для отправки
Почему
Фиксированный пул горутин отправляет параллельно, удерживая число одновременных запросов к Twilio в заданных рамках.
Компромисс
Результаты приходят не по порядку, и их нужно сопоставлять с контактами.
03Два способа аутентификации
Почему
Люди работают в веб-приложении через сессии Supabase, интеграции — через API-ключи. Ключ хранится дважды: как bcrypt-хэш для поиска и как шифротекст AES-GCM, чтобы владелец мог увидеть его снова.
Что я сделал
Организации, пользователи, контакты, списки контактов и шаблоны сообщений
Создание шаблонов и запросы на одобрение WhatsApp через Twilio Content API
Массовая отправка пулом из 10 горутин с каналами задач и результатов
Учётные данные Twilio каждого тенанта в Google Cloud Secret Manager
Supabase Auth или API-ключи — bcrypt-хэш для поиска и шифрование AES-GCM для повторного показа