Команда инженеров · свой ЦОД в РФ · своё железо · своя панель · CloudStack + Linstor · MCP · база знаний по self-hosted
Вовлечение и рассылки

Dittofeed

Движок поведенческих рассылок с открытым кодом: автоматические сценарии по событию и разовые массовые рассылки по почте, SMS, push, в WhatsApp и Slack. Альтернатива Customer.io и OneSignal для своего сервера. Развернули облегченный стек, замерили ресурсы, зашли в живой конструктор сценариев и связали с PostHog - как часть замены Intercom по работе с жизненным циклом клиента.

Июль 2026 ~10 минут чтения Fatmetal Team
Вовлечение и рассылки Лицензия: MIT (ядро) Статус: запущен у нас, v0.23.0

Вердикт

Подходит
  • кому нужны письма по поведению без подписки: «зарегался, но не купил», win-back при отвале
  • продуктовым командам с событийной аналитикой (PostHog/Segment) - Dittofeed по когортам ведет сценарии
  • тем, кто хочет данные о клиентах на своем сервере, а не в чужом облаке
Не подходит
  • нужна только разовая рассылка новостей - проще Listmonk
  • нужен маркетинг-комбайн с лендингами и lead scoring - смотрите Mautic
  • не готовы подключать ESP (Sendgrid/SES) для реальной отправки
Мин. тариф: CPU4-RAM8-DISK100 Рекомендуем: CPU4-RAM8-DISK100 Сложность: medium RAM в простое: ~845 MiB Контейнеров: 5 Прод-готовность: за Caddy с TLS (сделали)
Серия

Зачем это в поиске замены Intercom

Мы собираем комплект вместо Intercom для своего сервера. Квартет систем поддержки закрыл переписку, PostHog - аналитику поведения (видно, КАК клиенты двигаются по онбордингу), Twenty CRM - продажи. Но оставался пробел: увидеть когорту «зарегался, ничего не купил» - это одно, а автоматически отправить ей письмо - другое. Этот слой и закрывает Dittofeed.

i

Связка с PostHog: PostHog строит воронку и когорту «зарегался, но не купил», Dittofeed по этой когорте ведет email-сценарий. PostHog видит поведение - Dittofeed по нему шлет сообщения.

Что это

Что это и какую задачу решает

Dittofeed - омниканальная платформа для коммуникаций с клиентами, с открытым кодом. Создаете автоматические сценарии (Journeys) или разовые массовые рассылки (Broadcasts) и шлете сообщения по любому каналу: email, SMS, push, WhatsApp, Slack. Сегментация с гибкими операторами, шаблоны на MJML или в low-code редакторе, интеграции с ESP (Sendgrid, Amazon SES), прием событий по Segment-совместимому API и аналитика доставки. Позиционируется как dev-friendly альтернатива Customer.io, OneSignal и Segment Engage.

Данные о пользователях и события лежат в PostgreSQL и ClickHouse, оркестрация сценариев - на Temporal (движок длительных процессов). Приложение на TypeScript/Node + React. Ядро под лицензией MIT; multi-tenancy, embedding и white-label - под отдельной коммерческой лицензией (open-core).

Node.js / TypeScriptReactPostgreSQL 15ClickHouse 24.12Temporal
Сравнение

Чем отличается от платных решений

Сравнение с Customer.io / OneSignal / Braze по тому, что влияет на выбор.

ПараметрDittofeedCustomer.io / OneSignal / Braze
Модель ценыбесплатно, ядро под MITподписка, часто по объему
Где данные о клиентахваш сервероблако вендора
Автоматические сценариивизуальный builderесть
Каналыemail/SMS/push/WhatsApp/Slackесть
Процесс разработки (git, тесты)да, ориентация на разработчиковограниченно
Зрелость / экосистемамоложе, комьюнити меньшегоды на рынке
Под капотом

Тех-стек и архитектура

Мы ставили lite-режим - официальный docker-compose.lite.yaml на готовых образах. Пять контейнеров: lite (api + dashboard + worker в одном образе, слушает 3000), postgres (метаданные, Drizzle ORM), clickhouse-server (события/аналитика), temporal (оркестрация сценариев поверх того же Postgres) и наш caddy для TLS. Аутентификация - single-tenant по паролю.

Конструктор сценариев Dittofeed: визуальный редактор триггерных цепочек
Живой конструктор сценариев: палитра узлов (Delay, Segment Split, Message, Wait For, Random Cohort) и цепочка Entry - Exit. Наш сценарий «Onboarding: registered no purchase». Кликните, чтобы открыть на весь экран.
Конфигурация

Минимальная конфигурация

Реальные требования против официального минимума.

Реально в простое (наш замер)~845 MiB на 5 контейнеров
ClickHouse (лимит контейнера)2 GB
lite (лимит контейнера)1 GB
Образы на диске~5.2 GB
Тариф FatmetalCPU4-RAM8-DISK100
i

Важно: в простое стек держит около 845 MiB - легко для класса «событийная платформа с ClickHouse + Temporal». Но ClickHouse требователен к CPU (SSE4.2) и любит память под нагрузкой, поэтому берем CPU4-RAM8, а не тариф CPU4-RAM8-DISK100.

Развертывание

Развертывание на Fatmetal

Fatmetal Cloud Server (CPU4-RAM8) + Ubuntu 24.04 + Docker, наружу через Caddy с TLS.

  1. Взять официальный lite-compose

    git clone --depth 1 https://github.com/dittofeed/dittofeed
    cd dittofeed

    Lite-режим использует готовые образы (сборка не нужна): один контейнер приложения + Postgres + ClickHouse + Temporal.

  2. Сменить дефолтные секреты

    В .env задайте свои значения: ключ SECRET_KEY и пароли PASSWORD (вход в кабинет), CLICKHOUSE_PASSWORD, DATABASE_PASSWORD - сгенерируйте через openssl rand. Там же укажите DASHBOARD_API_BASE с вашим доменом.

  3. Поднять стек

    docker compose -f docker-compose.lite.yaml up -d

    На первом запуске BOOTSTRAP=true сидит рабочее пространство и шаблон Welcome Email - после старта его закомментируйте. Наружу отдаем порт 3000 через Caddy с автоматическим TLS.

Message Templates Dittofeed со стартовым шаблоном Welcome Email
Message Templates: шаблоны сообщений по каналам. Bootstrap создает стартовый Welcome Email (Email).
Замеры

Что измерили после запуска

Цифры со свежей установки на нашем сервере, без нагрузки.

RAM в простое (всего, 5 контейнеров)~845 MiB
lite (app: api+dashboard+worker)~403 MiB
clickhouse-server~227 MiB
postgres / temporal / caddy~120 / ~82 / ~12 MiB
Образы всего~5.2 GB
i

Главное: для событийной платформы это очень экономно - ~845 MiB против 12+ GiB у PostHog. Dittofeed решает узкую задачу (сообщения по поведению), поэтому и стек компактнее.

Сегменты Dittofeed: аудитории по поведению и свойствам
Сегменты: аудитории по свойствам и поведению - основа для таргетинга сценариев.

Проверено на версии v0.23.0 (dittofeed-lite), июль 2026. На новых версиях результаты могут отличаться.

Подводные камни

Где может сломаться

Реальные грабли, на которые наткнулись при запуске.

!

Дефолтные пароли. В compose по умолчанию пароль входа PASSWORD равен слову password, плюс тестовый SECRET_KEY и такой же CLICKHOUSE_PASSWORD. Обязательно сменить до выхода наружу - иначе кабинет открыт всем.

!

BOOTSTRAP только на первый запуск. Оставите BOOTSTRAP=true - при рестарте повторно инициализирует. После первого старта закомментируйте.

i

Для реальной отправки нужен ESP. Sendgrid, Amazon SES или SMTP. Для демонстрации сценариев можно обойтись без отправки или локальным MailHog.

Безопасность

Безопасность и обновления

Наружу - только через reverse-proxy с TLS: у нас Caddy с Let's Encrypt, приложение слушает 3000 на localhost. Сразу смените дефолтные секреты и задайте сильный PASSWORD для single-tenant входа. Персональные данные клиентов (профили, события) остаются у вас - помните про 152-ФЗ. Обновление - через профиль admin-cli и смену тега образа; перед апгрейдом бэкапьте PostgreSQL и данные ClickHouse.

Рядом

Связь с другими стеками

  • Аналитика поведения - PostHog: строит воронку и когорты, Dittofeed по ним шлет письма.
  • Простые рассылки - Listmonk, если нужны только регулярные письма без автоматических сценариев.
  • Обратный прокси - Caddy или Traefik для TLS и домена; данные о клиентах держите на своей виртуалке.
Честно

Когда это НЕ ваш выбор

Нужна только рассылка новостей

Если задача - разово разослать письмо базе, Dittofeed избыточен. Listmonk легче и проще под регулярные письма.

Нужен маркетинг-комбайн

Лендинги, формы, lead scoring, полноценные кампании - это скорее Mautic. Dittofeed - про триггерные сообщения по продуктовым событиям.

Нет событий о пользователях

Сила Dittofeed - в поведенческих сценариях. Без потока событий (из продукта, PostHog или Segment) остаются только простые массовые рассылки.

FAQ

Частые вопросы

Сколько Dittofeed ест в простое?

Около 845 MiB на 5 контейнеров (lite 403 / clickhouse 227 / postgres 120 / temporal 82 / caddy 12 MiB).

На чем написан?

TypeScript/Node + React; данные в PostgreSQL и ClickHouse, оркестрация сценариев - на Temporal.

Это правда бесплатно?

Ядро под MIT («free forever»). Multi-tenancy, embedding и white-label - под отдельной коммерческой лицензией.

Чем отличается от Customer.io?

Тем же ядром (сценарии, сегменты, каналы), но на своем сервере, без подписки по объему; ориентирован на разработчиков.

Как связать с PostHog?

PostHog собирает поведение и когорты, события прокидываются в Dittofeed (Segment-совместимый API), а сценарии шлют письма по этим когортам.

Что нужно для реальной отправки?

Подключить ESP - Sendgrid, Amazon SES или SMTP. Для демо сценариев можно обойтись без отправки.

Какая версия у вас?

dittofeed-lite v0.23.0, single-tenant, за Caddy с TLS.

Итог

Dittofeed - недостающий кирпич «письма по поведению» в замене Intercom для своего сервера: автоматические сценарии и массовые рассылки по всем каналам, с данными о клиентах на вашем сервере и без подписки по объему. При этом он на удивление легкий - ~845 MiB против 12+ GiB у PostHog, потому что решает узкую задачу. В связке с PostHog получается полный цикл: увидели, что клиент «зарегался, но не купил» - и автоматически отправили ему письмо; отвалился - запустили win-back. Для разовых рассылок берите Listmonk, для маркетинг-комбайна - Mautic, а для триггерных сообщений по продуктовым событиям Dittofeed - точное попадание.

Анонсы новых разборов в Telegram-канале Новые гайды и карточки в маркетплейсе первыми @fatmetal_channel →

Этот стек у нас запущен на тарифе CPU4-RAM8-DISK100 за Caddy с TLS. Нашли баг в гайде - напишите, поправим в течение дня.