Flow Builder — Конструктор автоматизаций

Руководство по Flow Builder Trigly: создание customer journey, DAG-выполнение, шаги, условия, пресеты и тестирование потоков.

Что такое Flow Builder

Flow Builder в Trigly — это визуальный конструктор автоматизированных customer journey (путей клиента). Каждый flow представляет собой DAG (направленный ациклический граф) из шагов, которые выполняются автоматически при наступлении триггерного события.

Flow Builder позволяет выстраивать сложные сценарии коммуникации: отправить приветственное письмо → подождать 3 дня → проверить, открыл ли клиент → если да — отправить акцию, если нет — отправить SMS-напоминание.


Модель данных

CampaignFlow

Поле Тип Описание
id UUID Уникальный идентификатор
name string Название потока
trigger_type string Тип триггера (event, segment_enter, schedule, manual)
trigger_config JSONB Конфигурация триггера
status enum draft, active, paused, archived
steps JSONB DAG шагов потока
settings JSONB Настройки (goal, exit_conditions, limits)
total_entered int Всего вошли в поток
total_completed int Всего завершили
total_exited_goal int Достигли цели и вышли
created_by UUID Автор

FlowExecution

Поле Тип Описание
flow_id UUID Связанный поток
customer_id UUID Контакт
status enum active, completed, exited_goal, failed
current_step_id string Текущий шаг
entered_at datetime Время входа
completed_at datetime Время завершения
step_history JSONB История выполнения шагов

Уникальное ограничение: один контакт может одновременно находиться только в одном выполнении каждого потока (flow_id, customer_id).


Жизненный цикл потока

draft → active → paused → active (повторная активация)
                         → archived
  • draft: Редактирование, добавление шагов. Новые контакты не входят.
  • active: Поток работает, новые контакты входят по триггеру.
  • paused: Новые контакты не входят. Текущие выполнения приостановлены.
  • archived: Поток заархивирован. Все выполнения завершены принудительно.

Типы триггеров

event — По событию

Контакт входит в поток при наступлении определённого события:

{
  "trigger_type": "event",
  "trigger_config": {
    "event_type": "purchase",
    "conditions": {
      "revenue": { "gte": 5000 }
    }
  }
}

segment_enter — При входе в сегмент

Контакт входит при попадании в динамический сегмент:

{
  "trigger_type": "segment_enter",
  "trigger_config": {
    "segment_id": "uuid-сегмента"
  }
}

schedule — По расписанию

Ежедневно/еженедельно входят все контакты из указанного сегмента:

{
  "trigger_type": "schedule",
  "trigger_config": {
    "cron": "0 10 * * 1",
    "segment_id": "uuid-сегмента"
  }
}

manual — Ручной запуск

Контакты добавляются вручную через API:

{
  "trigger_type": "manual"
}

Типы шагов

Flow Builder поддерживает 15 типов шагов, которые можно комбинировать в DAG-структуре.

Шаги отправки сообщений

send_email

Отправка email через настроенный EmailAdapter или UnisenderAdapter:

{
  "id": "step_1",
  "type": "send_email",
  "config": {
    "template_id": "uuid-шаблона",
    "subject": "Добро пожаловать, {{ first_name }}!"
  },
  "next_steps": ["step_2"]
}

send_sms

Отправка SMS через SMS.ru:

{
  "id": "step_2",
  "type": "send_sms",
  "config": {
    "template_id": "uuid-шаблона"
  },
  "next_steps": ["step_3"]
}

send_telegram

Отправка сообщения через Telegram Bot API:

{
  "id": "step_3",
  "type": "send_telegram",
  "config": {
    "template_id": "uuid-шаблона"
  },
  "next_steps": []
}

send_whatsapp

Отправка шаблонного сообщения WhatsApp:

{
  "type": "send_whatsapp",
  "config": {
    "template_name": "order_confirmation",
    "variables": ["{{ first_name }}", "{{ order_id }}"]
  }
}

send_push

Отправка Web Push уведомления:

{
  "type": "send_push",
  "config": {
    "title": "Не забудьте о корзине!",
    "body": "{{ first_name }}, ваши товары ждут вас",
    "url": "https://shop.example.com/cart"
  }
}

Умные шаги

smart_send

AI-выбор оптимального канала на основе engagement-данных из ClickHouse:

{
  "type": "smart_send",
  "config": {
    "template_id": "uuid-шаблона",
    "fallback_channel": "email"
  }
}

SmartChannelService анализирует 90-дневную историю взаимодействий контакта и выбирает канал с наивысшим скорингом. Если данных недостаточно — используется fallback.

channel_switch

Условный выбор канала:

{
  "type": "channel_switch",
  "config": {
    "conditions": [
      { "channel": "telegram", "condition": "has_telegram_chat_id" },
      { "channel": "email", "condition": "has_email" },
      { "channel": "sms", "condition": "has_phone" }
    ]
  }
}

Шаги управления временем

wait

Ожидание заданного времени:

{
  "type": "wait",
  "config": {
    "duration": "3d"
  },
  "next_steps": ["step_after_wait"]
}

Поддерживаемые форматы: 30m (минуты), 2h (часы), 3d (дни), 1w (недели).

Условные шаги

condition

Ветвление на основе условия:

{
  "type": "condition",
  "config": {
    "field": "total_orders",
    "operator": "gte",
    "value": 3
  },
  "next_steps": {
    "true": ["step_vip"],
    "false": ["step_regular"]
  }
}

Поддерживаемые операторы: eq, neq, gt, gte, lt, lte, contains, not_contains, in, not_in, exists, not_exists.

Можно проверять:

  • Поля контакта (email, phone, city, total_orders, total_revenue)
  • Пользовательские поля (custom_fields.*)
  • Теги (tags contains "VIP")
  • События (event.type == "purchase" за последние N дней)
  • Действия в потоке (шаг step_1 — opened/clicked/delivered)

Шаги обновления контакта

update_contact

Обновление полей контакта:

{
  "type": "update_contact",
  "config": {
    "fields": {
      "lifecycle_stage": "active",
      "custom_fields.onboarding_completed": true
    }
  }
}

add_tag / remove_tag

Добавление или удаление тега:

{
  "type": "add_tag",
  "config": { "tag": "welcome_sent" }
}
{
  "type": "remove_tag",
  "config": { "tag": "new_subscriber" }
}

Шаг выхода

exit

Принудительное завершение выполнения:

{
  "type": "exit",
  "config": {
    "reason": "goal_reached"
  }
}

Структура DAG

Шаги организованы в DAG (направленный ациклический граф). Каждый шаг имеет id, type, config и next_steps:

{
  "steps": [
    {
      "id": "start",
      "type": "send_email",
      "config": { "template_id": "uuid-1", "subject": "Добро пожаловать!" },
      "next_steps": ["wait_3d"]
    },
    {
      "id": "wait_3d",
      "type": "wait",
      "config": { "duration": "3d" },
      "next_steps": ["check_opened"]
    },
    {
      "id": "check_opened",
      "type": "condition",
      "config": { "check": "step_opened", "step_id": "start" },
      "next_steps": { "true": ["send_promo"], "false": ["send_reminder"] }
    },
    {
      "id": "send_promo",
      "type": "send_email",
      "config": { "template_id": "uuid-2", "subject": "Специально для вас!" },
      "next_steps": []
    },
    {
      "id": "send_reminder",
      "type": "send_sms",
      "config": { "template_id": "uuid-3" },
      "next_steps": []
    }
  ]
}

Визуально:

[Email: Приветствие] → [Ждать 3 дня] → [Открыл?]
                                          ├─ Да → [Email: Промо]
                                          └─ Нет → [SMS: Напоминание]

Готовые пресеты

Trigly предоставляет 5 готовых пресетов потоков:

1. Welcome Series (Приветственная серия)

Триггер: регистрация нового контакта.

Email: Приветствие → Ждать 1д → Email: Обзор продукта →
Ждать 3д → Условие: активен? → Да: Email: Персональная скидка
                                → Нет: SMS: Напоминание

2. Abandoned Cart (Брошенная корзина)

Триггер: событие add_to_cart без последующего purchase.

Ждать 1ч → Email: Напоминание о корзине → Ждать 24ч →
Условие: купил? → Нет: Email: Скидка 10% → Ждать 48ч →
Условие: купил? → Нет: SMS: Последний шанс

3. Reactivation (Реактивация)

Триггер: сегмент «неактивные 60+ дней».

Email: Мы скучаем → Ждать 5д → Условие: открыл? →
Да: Email: Специальное предложение → Нет: Telegram: Короткое сообщение →
Ждать 7д → Условие: активен? → Нет: Тег: churned

4. Birthday (Поздравление с днём рождения)

Триггер: расписание, ежедневно проверяет дни рождения.

Smart Send: Поздравление + промокод → Ждать 7д →
Условие: использовал промокод? → Нет: SMS: Напоминание о промокоде

5. Post-Purchase (После покупки)

Триггер: событие purchase.

Ждать 2ч → Email: Подтверждение заказа → Ждать 7д →
Email: Запрос отзыва → Ждать 30д → Smart Send: Рекомендации

Использование пресетов

GET /api/v1/campaigns/flows/presets                — Список пресетов
POST /api/v1/campaigns/flows/presets/{name}/create  — Создать поток из пресета

API эндпоинты

CRUD потоков

POST   /api/v1/campaigns/flows                     — Создать поток
GET    /api/v1/campaigns/flows                      — Список потоков
GET    /api/v1/campaigns/flows/{id}                 — Получить поток
PATCH  /api/v1/campaigns/flows/{id}                 — Обновить поток
DELETE /api/v1/campaigns/flows/{id}                 — Удалить поток

Управление жизненным циклом

POST /api/v1/campaigns/flows/{id}/activate          — Активировать
POST /api/v1/campaigns/flows/{id}/pause             — Приостановить
POST /api/v1/campaigns/flows/{id}/archive           — Архивировать

Статистика и выполнения

GET /api/v1/campaigns/flows/{id}/stats              — Статистика потока
GET /api/v1/campaigns/flows/{id}/executions          — Список выполнений

Тестирование

POST /api/v1/campaigns/flows/{id}/test

{
  "customer_id": "uuid-контакта"
}

Запускает тестовое выполнение потока для одного контакта. Сообщения отправляются реально — используйте тестовый контакт.


Цели потока (Goals)

Поток может иметь цель — событие, при достижении которого контакт выходит из потока с пометкой exited_goal:

{
  "settings": {
    "goal": {
      "event_type": "purchase",
      "conditions": {
        "revenue": { "gte": 1000 }
      }
    }
  }
}

Celery-задача check_flow_goals проверяет достижение целей каждые 5 минут.


Лучшие практики

Проектирование потоков

  1. Начинайте с простого: 3-5 шагов. Добавляйте сложность по мере получения данных.
  2. Используйте wait-шаги: не отправляйте несколько сообщений подряд. Минимальный интервал — 1 час.
  3. Добавляйте условия: проверяйте engagement перед следующим шагом.
  4. Устанавливайте цели: определите, что считается успехом (покупка, активация, и т.д.).
  5. Тестируйте на себе: всегда прогоняйте поток на тестовом контакте перед активацией.

Выбор каналов в потоке

  1. Первый шаг — email: наименьшая стоимость, наибольший объём контента.
  2. Напоминания — Telegram/Push: бесплатные, высокий open rate.
  3. Критические — SMS: платный, но гарантированная доставка.
  4. Smart Send: используйте для персонализированного выбора на основе данных.

Мониторинг

  • Следите за total_entered vs total_completed — высокий процент отсева указывает на проблемы.
  • Проверяйте step_history в выполнениях для диагностики.
  • Архивируйте неэффективные потоки, а не удаляйте — сохраняйте историю.

Не нашли ответ?

Swagger UI с интерактивной документацией и поддержка в Telegram.