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 минут.
Лучшие практики
Проектирование потоков
- Начинайте с простого: 3-5 шагов. Добавляйте сложность по мере получения данных.
- Используйте wait-шаги: не отправляйте несколько сообщений подряд. Минимальный интервал — 1 час.
- Добавляйте условия: проверяйте engagement перед следующим шагом.
- Устанавливайте цели: определите, что считается успехом (покупка, активация, и т.д.).
- Тестируйте на себе: всегда прогоняйте поток на тестовом контакте перед активацией.
Выбор каналов в потоке
- Первый шаг — email: наименьшая стоимость, наибольший объём контента.
- Напоминания — Telegram/Push: бесплатные, высокий open rate.
- Критические — SMS: платный, но гарантированная доставка.
- Smart Send: используйте для персонализированного выбора на основе данных.
Мониторинг
- Следите за
total_enteredvstotal_completed— высокий процент отсева указывает на проблемы. - Проверяйте
step_historyв выполнениях для диагностики. - Архивируйте неэффективные потоки, а не удаляйте — сохраняйте историю.
Не нашли ответ?
Swagger UI с интерактивной документацией и поддержка в Telegram.