Задача
Подготовка B2B-рассылки обычно разбросана между таблицами, сервисом отправки, почтой и отдельной CRM. Из-за этого трудно контролировать качество базы, логику касаний, ответы и статус каждого контакта.
Нужно было собрать управляемый процесс: от импорта исходной базы до списка горячих лидов, с ограничениями отправки и остановкой коммуникации после ответа или отписки.
Решение
Разработан внутренний кабинет, который импортирует CSV и TSV, нормализует поля, удаляет дубли, валидирует email и запускает многошаговые цепочки. Каждый следующий шаг доступен только после открытия или клика предыдущего письма и выдержки заданной задержки.
События доставки, открытия, клика, bounce и отписки попадают в аналитику кампании. Входящие ответы собираются через IMAP и автоматически останавливают последующие касания, чтобы оператор не продолжал коммуникацию с ответившим контактом.
Ключевые функции
- импорт, предпросмотр, нормализация и глобальная дедупликация B2B-баз;
- хранение компании, категории, email и телефона;
- фильтрация и проверка адресов до запуска кампании;
- HTML-шаблоны с переменными, предпросмотром и ссылкой отписки;
- цепочки писем с задержками и условиями по open/click;
- часовые и дневные лимиты отправки;
- воронка кампаний и отдельный список горячих лидов;
- получение SMTP-событий и IMAP-ответов;
- экспериментальный адаптер 2GIS с ручной CAPTCHA-сессией.
Результат
MVP развёрнут для полного сценария: импорт базы, шаблоны, триггерная кампания, обработка SMTP.BZ-событий, ответы из IMAP и аналитика. Кабинет рассчитан на оператора и предусматривает контроль доступа, безопасное хранение конфигурации и отсутствие публичной регистрации.
Стек
Next.js 14 · React 18 · TypeScript · FastAPI · SQLAlchemy async · PostgreSQL 16 · Redis 7 · Celery · SMTP.BZ · IMAP · Docker Compose · Nginx