Клиенту требовалась внутренняя CRM-система для привлечения новых лидов и ведения переписки с потенциальными клиентами по электронной почте.
Хотели сократить ручную отправку писем и зависимость от сторонних инструментов. Цель проекта - объединить подготовку и отправку писем, работу с контактными базами и дальнейшее общение с лидами в одном удобном интерфейсе.
Система должна была автоматизировать первоначальные обращения к выбранным группам получателей, сохранять историю переписки и помогать менеджерам отслеживать отправки и ответы. Также требовалось разграничить доступ сотрудников к функциям системы.
Для клиента было важно получить собственное решение, которое можно дорабатывать под внутренние процессы и развивать по мере появления новых задач.
Разработал CRM с нуля: спроектировал UX/UI, структуру базы данных, backend, пользовательские интерфейсы и серверное окружение
1) Интеграция с почтой
Совместно с клиентом выбрали Mail.ru в качестве основного почтового сервиса. Для автоматизации работы с почтой использовал Playwright: он позволил реализовать действия через браузерный интерфейс, когда возможностей API было недостаточно. Организовал отправку и чтение писем, сохранение почтовых сессий и их кеширование
2) Импорт и подготовка данных
Реализовал загрузку контактных баз из CSV, почтовых аккаунтов и прокси из TXT, а также ручное добавление прокси. Добавил проверку работоспособности почтовых аккаунтов и прокси, контроль минимальной скорости прокси и исключение повторных email при импорте аккаунтов. Данные организовал по группам для дальнейшего использования в рассылках
3) Настройка и запуск рассылок
Разработал интерфейс выбора групп отправителей и получателей, настройки приветственных сообщений и шаблонов. Добавил поддержку спинтакса - формирования разных вариантов текста из заданных менеджером фрагментов. Реализовал планирование отправок с настраиваемыми интервалами, лимитами новых диалогов на аккаунт и ограничениями использования одного IP-адреса
4) Фоновая обработка
Вынес отправку и чтение писем, импорт и проверку данных в отдельные фоновые процессы. Для распределения задач использовал BullMQ и Dragonfly, для запуска по расписанию — отдельные планировщики. Реализовал сохранение статусов, результатов и журналов выполнения в PostgreSQL
5) Рабочее место менеджера
Создал раздел диалогов с историей отправленных и полученных сообщений. Менеджеры могут просматривать ответы лидов, продолжать переписку и использовать заранее настроенные шаблоны. Для подготовки и форматирования писем интегрировал редактор TipTap
6) Администрирование и контроль
Реализовал вход по индивидуальному ключу с разграничением доступа к функциям системы. В административной части доступны управление базами и аккаунтами, настройка параметров отправки и проверок прокси. В разделе рассылок можно отслеживать выполнение задач по выбранным отправителям и получателям
7) Развёртывание
Объединил frontend, backend и фоновые обработчики в монорепозитории. Настроил запуск компонентов в отдельных Docker-контейнерах и развернул приложение на сервере с Docker Compose и Nginx
Основной стек: SvelteKit, TypeScript, Node.js, Fastify, PostgreSQL, Dragonfly, BullMQ, Playwright, TipTap, Docker Compose, Nginx.
Клиент получил собственную CRM для привлечения лидов и дальнейшего общения с ними по электронной почте. В одном интерфейсе объединены контактные базы, почтовые аккаунты, подготовка и запуск рассылок, контроль отправок и история переписки.
Первоначальные обращения отправляются автоматически по заданным правилам. Менеджеры могут просматривать ответы, продолжать диалоги и использовать подготовленные шаблоны сообщений.
По обратной связи клиента, около 70% отправленных писем попадали в папку "Входящие" получателей.
Система развёрнута на сервере клиента, что позволяет контролировать хранение данных и дальнейшее развитие продукта.
Систему можно развивать под задачи бизнеса: подключать внешние сервисы, добавлять новые функции и адаптировать рабочие процессы.