Конструктор шаблонов рассылок: как мы убрали 6 задач и 4 исполнителей из процесса
Раньше, чтобы внедрить новый шаблон письма, нужно было пройти цепочку: дизайнер → фронтенд → бэкенд → QA на стороне сервиса рассылок → QA на стороне сервиса-отправителя. Создание и редактирование шаблонов превращалось в мини-проект с большим количеством исполнителей. Мы предложили и реализовали Конструктор шаблонов. Нагрузка на команду разработки снизилась — усилия направили на более важные направления.
Контекст: как было раньше
Напомним контекст. В статье о сервисе рассылок мы рассказывали, как построили единую точку отправки email и SMS для всех внутренних сервисов. А в истории про агрегаторы — как перешли на мультиагрегаторную модель.
Но у сервиса рассылок была ещё одна проблема — процесс работы с шаблонами.
Как это выглядело раньше:
Чтобы внедрить новый шаблон письма, нужно было пройти цепочку:
-
Задача дизайнеру — нарисовать макет.
-
Задача фронтенд-специалисту — сверстать шаблон.
-
Уточнение у отправителя — какие данные в каком формате он будет посылать.
-
Задача бэкенд-специалисту — интегрировать шаблон и настроить переменные.
-
Задача QA — проверить шаблон на стороне сервиса рассылок.
-
Задача QA — проверить на стороне сервиса-отправителя.
Что это давало на практике:
-
Создание и редактирование шаблонов — это большой список задач на большое количество исполнителей.
-
Каждый шаблон — это мини-проект с координацией между командами.
-
Бизнес ждал, команда тратила время на рутину.
-
Были задержки из-за релизных моделей разных команд
Одна кнопка «изменить шаблон» превращалась в цепочку из 6 задач и 4+ исполнителей.
Идея: Конструктор шаблонов
Мы предложили бизнесу Конструктор шаблонов — инструмент, в котором можно собирать вёрстку шаблона двумя способами:
-
Перетягиванием через блоки — для тех, кто не хочет работать с кодом.
-
Вставкой готового HTML — для тех, у кого уже есть вёрстка.
Цель: убрать цепочку задач и дать бизнесу инструмент, который позволяет создавать и редактировать шаблоны без участия разработки на каждом шаге.
Что вошло в Конструктор
1. Сборка из заготовленных блоков
Можно собирать шаблон из готовых блоков:
-
менять текст;
-
менять иконки;
-
удалять блоки;
-
переставлять блоки местами.
Это даёт гибкость без необходимости писать код.
2. Вставка готового HTML-шаблона
Вместо работы с блоками можно вставить готовый HTML-шаблон с местами под переменные.
Как это работает:
-
В шаблоне есть места для переменных (например,
{{name}},{{order_id}}). -
При отправке сервис подставляет данные в эти места.
-
Для этого есть инструкция — как размечать переменные в HTML.
3. Превью собранного шаблона
Перед сохранением можно посмотреть, как шаблон будет выглядеть.
Это важно: не нужно отправлять тестовое письмо, чтобы увидеть результат. Превью показывает вёрстку сразу.
4. Название и комментарий к шаблону
У каждого шаблона есть:
-
название — для быстрого поиска;
-
комментарий — для описания назначения и особенностей.
Это помогает не путаться, когда шаблонов становится много.
5. Привязка API-пользователей и отправителей
Можно указать, какие API-пользователи (в основном сервисы, которые шлют письма) могут пользоваться шаблоном.
Что можно настроить:
-
Список API-пользователей, которым доступен шаблон.
-
Отправитель для каждого API-пользователя — из списка доступных.
-
Активация и деактивация API-пользователей.
Это даёт контроль: кто и через какого отправителя может использовать шаблон. Так же оперативно их выключать и обратно включать.
6. Инструкция по интеграции
Для каждого шаблона есть инструкция по интеграции:
-
Запрос, который нужно сделать.
-
Ответ, который вернётся.
-
Схема параметров — если есть большая вложенность и при обработке шаблона данные могут подгрузиться неверно.
Схема параметров — важная деталь: если в шаблоне сложная структура данных, инструкция помогает разработчику правильно передать параметры.
7. Функционал, который мы добавили при проектировании
Помимо запрошенного, мы предусмотрели:
-
Валидация переменных — проверка, что все переменные в шаблоне определены и имеют корректный формат.
-
Тестовая отправка — отправить письмо с тестовыми данными, чтобы проверить, как оно выглядит в реальной почте.
-
Клонирование шаблона — создать новый шаблон на основе существующего.
-
Версионирование — история изменений шаблона с возможностью отката.
-
Роли и доступы — кто может создавать, редактировать и использовать шаблоны.
Как это работает: полный цикл
Опишем, как теперь создаётся новый шаблон.
-
Бизнес заходит в Конструктор — в дашборде сервиса рассылок.
-
Выбирает способ: собрать из блоков или вставить готовый HTML.
-
Собирает шаблон — перетаскивает блоки или вставляет HTML с переменными.
-
Смотрит превью — как шаблон будет выглядеть.
-
Добавляет название и комментарий.
-
Привязывает API-пользователей и указывает отправителя для каждого.
-
Проверяет инструкцию по интеграции — запрос, ответ, схема параметров.
-
Сохраняет и активирует шаблон.
Результат: шаблон готов. Разработка не участвовала на каждом шаге.
Результат: нагрузка на команду снизилась
Главный итог: доработка была реализована, что помогло снизить нагрузку на команду разработки и направить усилия на более важные направления.
Стек
-
Backend: Laravel (PHP)
-
Frontend: Vue.js (дашборд)
-
Очереди: RabbitMQ (для отправки)
-
Интеграция: API, JSON
Что мы вынесли из этой истории
1. Инструмент для бизнеса освобождает разработку
Когда бизнес может сам создавать и редактировать шаблоны — разработка не тратит время на рутину. Это win-win: бизнес быстрее, команда свободнее.
2. Два способа сборки — для разных пользователей
Не все хотят работать с блоками. Не все умеют писать HTML. Конструктор должен поддерживать оба сценария: перетаскивание блоков и вставку готового кода.
3. Превью экономит время
Возможность увидеть результат до сохранения — это экономия на тестовых отправках и правках.
4. Инструкция по интеграции — обязательна
Если шаблон использует переменные, разработчику нужно знать, как их передавать. Схема параметров помогает не запутаться при сложной вложенности.
5. Валидация и тестовая отправка — страховка от ошибок
Проверка переменных и тестовая отправка снижают риск, что шаблон уйдёт клиенту с ошибкой.
Заключение
Эта история — про то, что оптимизация внутренних процессов так же важна, как и разработка новых функций. Конструктор шаблонов не добавил новых возможностей для клиентов — но он убрал 6 задач и 4+ исполнителей из процесса.
Бизнес получил инструмент. Команда — свободное время. Продукт — меньше рутины.