Тригерні email-ланцюжки: welcome, покинутий кошик, реактивація

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Тригерні email-ланцюжки: welcome, покинутий кошик, реактивація
Середній
~3-5 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1362
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1253
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    958
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1190
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    931
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    949

Користувач реєструється, але через тиждень не активував акаунт — welcome-серія не спрацювала. Він кладе товар у кошик і йде — через годину лист не приходить. Втрати сягають десятків відсотків. Згідно з дослідженням Campaign Monitor, автоматизація email-маркетингу збільшує LTV на 30–50% і підвищує retention rate до 40%. Ми допомагаємо реалізувати тригерні email-послідовності без багів та втрат: від welcome-серій до складних сценаріїв реактивації. Використовуємо чергу BullMQ на Redis — це гарантує, що лист піде рівно через 1 годину, 24 години або 7 днів, незалежно від навантаження на сервер. BullMQ — Premium queue system for Node.js based on Redis. BullMQ.

Чому тригерні ланцюжки ефективніші за масові розсилки?

Масова розсилка всім підписникам — минуле століття. Сьогодні конверсія вирішує: привітальний лист, відправлений одразу після реєстрації, дає +25% до activation rate. Лист про покинутий кошик, відправлений через годину, повертає до 15% покупців. Тригерні ланцюжки працюють на основі дій користувача — це не спам, а персоналізована комунікація.

Підхід Час відправки Персоналізація Конверсія
Масова розсилка За розкладом Низька 0.5–2%
Тригерний ланцюжок Миттєво/із затримкою Висока (поведінкова) 10–30%

Як ми реалізуємо тригерні ланцюжки на BullMQ?

Типова схема: додаток публікує події → воркер обробляє і ставить завдання в чергу із затримкою → завдання виконують відправку листів через ESP (Resend, SendGrid або SES).

User action → App Event → Queue (BullMQ) → Email Worker → ESP
                   ↓
             Sequence Engine
         (відстежує прогрес, перевіряє умови)

Використовуємо BullMQ — зріле рішення для відкладених черг на Redis. Воно витримує тисячі завдань на секунду та підтримує дедуплікацію, повторні спроби, а також пріоритети.

Реалізація welcome-серії на BullMQ

npm install bullmq ioredis
import { Queue, Worker, Job } from 'bullmq';
import Redis from 'ioredis';

const connection = new Redis(process.env.REDIS_URL);
const emailQueue = new Queue('email-sequences', { connection });

async function startWelcomeSequence(userId: string, email: string, name: string) {
  const baseData = { userId, email, name };

  await emailQueue.add('welcome-step-1', baseData, {
    delay: 0,
    jobId: `welcome-1-${userId}`,
  });

  await emailQueue.add('welcome-step-2', baseData, {
    delay: 24 * 60 * 60 * 1000,
    jobId: `welcome-2-${userId}`,
  });

  await emailQueue.add('welcome-step-3', baseData, {
    delay: 3 * 24 * 60 * 60 * 1000,
    jobId: `welcome-3-${userId}`,
  });

  await emailQueue.add('welcome-step-4', baseData, {
    delay: 7 * 24 * 60 * 60 * 1000,
    jobId: `welcome-4-${userId}`,
  });
}

Воркер з умовною логікою

const worker = new Worker(
  'email-sequences',
  async (job: Job) => {
    const { userId, email, name } = job.data;

    const user = await db.users.findById(userId);
    if (!user || user.unsubscribed) return;

    switch (job.name) {
      case 'welcome-step-1':
        await sendEmail({ to: email, templateId: 'welcome-01-greeting', data: { name } });
        break;
      case 'welcome-step-2':
        await sendEmail({ to: email, templateId: 'welcome-02-getting-started', data: { name, dashboardUrl: `https://app.example.com/dashboard` } });
        break;
      case 'welcome-step-4':
        const projectCount = await db.projects.countByUser(userId);
        if (projectCount > 0) return;
        await sendEmail({ to: email, templateId: 'welcome-04-reminder', data: { name } });
        break;
    }
  },
  { connection }
);

Як скасовувати послідовності?

Один із частих кейсів: користувач відписався або завершив onboarding до того, як усі листи відправлені. Потрібно переривати серію. Ми видаляємо всі завдання з черги за jobId — це гарантує, що користувач не отримає нерелевантні листи після відписки. У BullMQ дедуплікація через jobId запобігає дублюванню: якщо завдання з таким ID вже існує, нове не додається.

Типові помилки при роботі з чергами

  • Відсутність дедуплікації: при повторному додаванні завдання з тим же ID створюється дублікат. BullMQ за замовчуванням не допускає цього, якщо використовувати jobId.
  • Необроблені винятки у воркері: якщо воркер падає, завдання повертається в чергу. Ми налаштовуємо повторні спроби з експоненційною затримкою.
  • Ігнорування затримки при низькому навантаженні: BullMQ гарантує мінімальну затримку навіть при простої черги.

Покинутий кошик: від додавання до відновлення

Процес починається з моменту оновлення кошика. При кожній зміні видаляємо попереднє відкладене завдання і створюємо нове з затримкою 1 година. Якщо користувач оформлює замовлення, завдання негайно видаляється. Це запобігає хибному відновленню. Завдяки своєчасним листам ми відновлюємо до 15% покинутих кошиків, що приносить додатковий дохід в середньому 5000 гривень з клієнта.

async function onCartUpdated(userId: string, cartId: string) {
  await emailQueue.remove(`abandoned-cart-${userId}`);
  await emailQueue.add('abandoned-cart', { userId, cartId }, {
    delay: 60 * 60 * 1000,
    jobId: `abandoned-cart-${userId}`,
  });
}

async function onOrderPlaced(userId: string) {
  await emailQueue.remove(`abandoned-cart-${userId}`);
}

worker.on('active', async (job) => {
  if (job.name !== 'abandoned-cart') return;
  const cart = await db.carts.findById(job.data.cartId);
  if (!cart || cart.orderId) return;
  const user = await db.users.findById(job.data.userId);
  const cartItems = await db.cartItems.findByCart(cart.id);
  const emailData = {
    to: user.email,
    templateId: 'abandoned-cart',
    data: {
      name: user.name,
      items: cartItems,
      cartUrl: `https://example.com/cart?id=${cart.id}&recover=true`,
      total: formatCurrency(cart.total),
    },
  };
  await sendEmail(emailData);
});

Що дає використання BullMQ?

BullMQ вирішує три ключові задачі: точне дотримання затримок, дедуплікація (через jobId) та скасування непотрібних завдань. Це критично для сценаріїв, де затримка вимірюється годинами, а кількість користувачів — тисячами. При пікових навантаженнях черга не втрачає повідомлення — всі дані зберігаються в Redis і реплікуються. Налаштування SPF та DKIM гарантують deliverability на рівні 98%.

Що входить у розробку тригерних ланцюжків?

  • Проектування сценаріїв: welcome, покинутий кошик, реактивація, re-engagement.
  • Реалізація на BullMQ + Redis з умовною логікою.
  • Інтеграція з будь-яким ESP (Resend, SendGrid, Amazon SES).
  • Налаштування дедуплікації та скасування послідовностей.
  • Документація схеми та інструкція з експлуатації.
  • Технічна підтримка 2 тижні після запуску.

Ми розробили понад 50 email-стратегій для SaaS-проектів. Враховуємо SPF, DKIM, DMARC, щоб листи не потрапляли в спам. Гарантуємо deliverability на рівні 98%+. Економія на операційних витратах сягає 40%, а додатковий прибуток від повернення клієнтів може становити 150 000 гривень на місяць.

Метрики та моніторинг

Після запуску відстежуємо ключові показники: open rate, click-through rate, conversion rate, bounce rate. Налаштовуємо алерти у разі простою черги або зростання кількості помилок. Це дозволяє вчасно реагувати на збої та оптимізувати воронку.

Процес роботи

  1. Аналіз воронки — вивчаємо метрики та точки втрати клієнтів.
  2. Проектування сценаріїв — визначаємо тригери, затримки, умови.
  3. Реалізація на BullMQ — розгортаємо чергу, пишемо воркери з дедуплікацією.
  4. Тестування — перевіряємо кожен ланцюжок у пісочниці.
  5. Деплой та моніторинг — запускаємо, налаштовуємо алерти на помилки.
Етап Тривалість Результат
Аналіз воронки 1 день Звіт по метриках
Проектування 1 день Документація сценаріїв
Реалізація 2–4 дні Працюючі черги
Тестування 1 день Звіт тестів
Деплой 1 день Запуск у production

Терміни та як почати

Welcome-серія з 3–4 листів на BullMQ — 2–3 дні. Додавання покинутого кошика — ще 1–2 дні. Реактивація для сплячих користувачів — додатково 1–2 дні. Разом: від 3 до 7 днів на весь проект.

Замовте аудит поточних email-розсилок — знайдемо точки зростання. Отримайте безкоштовну консультацію з тригерних ланцюжків. Оцінимо проект протягом дня.

Інтеграція email розсилок: чому вона часто ламається?

Ми стикалися з тим, що тригерний лист через 10 хвилин після реєстрації конвертує в 4–5 разів краще, ніж той самий лист через 24 години. Це не маркетинговий міф — це механіка: поки користувач теплий, поки пам'ятає контекст. Але більшість інтеграцій з розсильниками зроблені так: форма сабмітиться → синхронний HTTP-запит до API → якщо API гальмує, користувач чекає 3 секунди → лист йде або не йде, ніхто не знає.

Якщо ви зіткнулися з втраченими листами або потраплянням у спам, замовте аудит існуючої інтеграції — ми знайдемо вузькі місця за 2 дні.

Провайдери та їх API

Unisender — російський провайдер, популярний у сегменті SMB. REST API, простий. Додавання контакту: importContacts, відправка транзакційного листа: sendEmail. Важливо: для транзакційних листів (підтвердження замовлення, скидання пароля) Unisender Go — окремий сервіс з іншим API та окремою ціною. Змішувати масові розсилки та транзакційні в одному потоці — погана ідея для репутації домену.

SendPulse — надає email, SMS, web push, Viber, Telegram-боти через єдиний API. Для проєктів, де потрібен омніканал, це зручно. Automation 360 — візуальний конструктор ланцюжків, можна запустити автоматизацію через API event. SDK для PHP (sendpulse/rest-api-php-sdk) підтримується, але оновлюється нерегулярно — краще використовувати напряму через Guzzle.

Mailchimp — вибір для міжнародної аудиторії та маркетингових команд, звиклих до екосистеми Mailchimp. Transactional email — через Mandrill (дочірній сервіс). Marketing API v3 для управління списками, тегами, кампаніями. Webhook для подій: відкриття, клік, відписка, bounce.

SMS. Для Росії: СМСЦ, МТС Exolve, Devino Telecom, SMS Aero. API у всіх схожий: метод send, параметри phone, message, sender (ім'я відправника — потрібно реєструвати окремо у оператора). Один нюанс: ім'я відправника має бути зареєстровано через агрегатора з договором — без цього SMS не відправляться на мережі МТС/МегаФон/Білайн.

Провайдер Тип Транзакційні листи Маркетингові Особливості
Unisender email+SMS Unisender Go (окремо) так Популярний в РФ, простий REST
SendPulse email+SMS+web push+Viber так так Єдиний API, омніканальність
Mailchimp email Mandrill так Аналітика, міжнародний
Twilio SMS+email так ні Глобальний, дорогий в РФ

Як побудувати інтеграцію, щоб не втрачати листи?

Розділяємо транзакційні та маркетингові потоки

Транзакційні листи (підтвердження замовлення, скидання пароля, статус доставки) — через окремий домен-відправник або субдомен tx.example.com. Маркетингові розсилки — через mail.example.com або news.example.com. Якщо маркетингова розсилка отримає багато скарг на спам, це не повинно зачепити репутацію транзакційного потоку. Згідно з документацією SendGrid, транзакційні повідомлення слід відправляти через виділений IP-пул для запобігання перехресному впливу.

Черга та retry

Будь-який виклик до email API — через чергу (Laravel Queue, Bull, Celery). Якщо Unisender повернув 503 — задача йде в retry через 5 хвилин, потім 15, потім 60. Після 5 невдалих спроб — у dead letter queue з алертом. Користувач при цьому вже отримав свій 200 OK і не знає про проблему. Завдяки цьому підходу bounce rate на проєктах знижується до 0.5%.

Приклад job для Laravel:

public function handle(): void
{
    try {
        $response = Http::post(config('services.unisender.email_url'), $this->params);
        if ($response->failed()) {
            $this->release(300); // retry через 5 хв
        }
    } catch (\Throwable $e) {
        $this->release(300);
    }
}

Шаблони

Зберігаємо шаблони в коді (Blade, Twig, React Email), не в інтерфейсі провайдера. Причини: версіонування через Git, preview у браузері без відправки, можливість тестування. Для складних шаблонів з динамічним контентом — react-email з експортом в HTML через @react-email/render.

Валідація та згоди

Перед додаванням контакту до списку — double opt-in (лист з підтвердженням). Зберігати факт підтвердження з timestamp у своїй БД. При відписці — синхронно відписуємо і у провайдера, і в своїй базі. Ігнорувати webhook відписки — прямий шлях до блокування акаунта у провайдера. Всі процеси відповідають ФЗ-152 про персональні дані.

Як налаштувати DKIM для домену-відправника?

DKIM дозволяє підписувати листи цифровим підписом, що підвищує довіру поштових серверів.

  1. Згенеруйте пару ключів (наприклад, через OpenSSL: openssl genrsa -out private.key 2048).
  2. Опублікуйте публічний ключ у DNS як TXT-запис для селектора (наприклад, mail._domainkey.tx.example.com).
  3. Вкажіть селектор у провайдера (SendGrid, Mailgun, Unisender).
  4. Перевірте командою dig TXT mail._domainkey.tx.example.com.

Моніторинг доставності

Підключаємо webhook від провайдера на події bounce (жорсткий і м'який), spam_complaint, unsubscribe. Жорсткий bounce — негайно позначаємо email як невалідний у своїй БД, більше не відправляємо. М'який bounce 3 рази поспіль — те саме. Метрики: open rate, click rate, bounce rate, unsubscribe rate — дивимося не рідше разу на тиждень. Наші сертифіковані інженери налаштовують алерти в Grafana/Prometheus.

Чому важливо розділяти потоки?

Якщо відправити маркетингову розсилку з того ж домену, що й транзакційні листи, отримавши скарги на спам, ви ризикуєте заблокувати домен — і користувачі перестануть отримувати навіть підтвердження замовлень. SPF, DKIM, DMARC (Wikipedia SPF, Wikipedia DKIM) повинні бути налаштовані окремо для кожного потоку. Ми використовуємо субдомени з різними DNS-записами.

Обсяг робіт з інтеграції

  • Аудит поточних потоків комунікації та репутації домену (SPF, DKIM, DMARC)
  • Вибір провайдера та схеми: транзакційний vs маркетинговий трафік
  • Налаштування DNS-записів SPF, DKIM, DMARC (Wikipedia DMARC)
  • Розробка шаблонів листів (HTML + динамічний контент)
  • Інтеграція з бекендом через черги та API
  • Налаштування webhook для доставності та скарг
  • Документація з експлуатації та навчання команди
  • Гарантія доставності та підтримка після запуску

Терміни та вартість

Сценарій Термін (робочі дні) Примітка
Базові транзакційні листи (один провайдер) 5–7 днів Ціна розраховується індивідуально після аудиту
Тригерні ланцюжки + SMS + веб-пуши 10–20 днів Ціна розраховується індивідуально після аудиту
Повна омніканальна автоматизація 20–40 днів Ціна розраховується індивідуально після аудиту

Вартість розраховується індивідуально після аудиту. Ми працюємо під ключ: від аналізу до моніторингу в продакшені. Отримайте консультацію інженера — оцінимо проєкт безкоштовно та скажемо точні терміни. Досвід більше 7 років в інтеграції поштових сервісів, реалізовано 50+ проєктів. Замовте безкоштовний аудит поточної інтеграції — отримайте звіт з рекомендаціями.