Задача: MLF-286 — «Сценарии: триггеры —
событие cdp.events (с фильтром) + вход в сегмент». Это шаг 1 карточки (ресёрч), его
результат ложится в шаг 2 (макеты инспектора START) и согласование с М. Терентьевым.
Дата: 2026-07-06 Метод: deep-research harness (6 углов → 21 источник → 63 факта → adversarial-верификация 25 ключевых, 24 подтверждено / 1 опровергнут) + точечная догрузка Mindbox через поисковый индекс. Скоуп: только то, что нужно для START-ноды — event-триггер с фильтром по свойствам события и триггер входа/выхода из сегмента. Каналы, шаги сценария, аналитика — вне ресёрча.
Достоверность. Разделы Customer.io / Braze / Segment основаны на first-party документации вендоров и прошли верификацию. Раздел Mindbox — только по сниппетам поискового индекса: домены
help.mindbox.ru/developers.mindbox.ruиз окружения не резолвятся (DNS), страницы фетчем не открыть. Формулировки Mindbox ниже — предположительные, требуют очной проверки в интерфейсе перед опорой в макетах.
Два базовых типа триггера релевантны нашей START-ноде:
AUTOMATION_START они лягут как соседние triggerType.Двухслойная модель «trigger + filter» — отраслевой стандарт: триггер решает «кто и когда становится eligible», фильтр-предикат сужает вход по атрибутам. Оба условия должны совпасть. Тренд 2025 — сворачивать фильтр внутрь триггера (Customer.io «Attribute or Segment», апрель 2025).
Асимметрия глубины фильтра. Полный предикат-билдер (AND/OR + вложенные группы,
богатый набор операторов) живёт на уровне сегмента. Фильтр по свойствам события
внутри триггера у вендоров осознанно беднее (Segment v2: только equals /
equals any of, только AND). Была ключевая развилка (§7.1) — ✓ решено в макете в пользу
полного билдера (переиспользуем компонент сегментов и на триггере).
Segment-enter — forward-going, не ретроактивно: входят только те, кто начал матчить после включения/правки. Backfill существующих — отдельное явное действие.
Повторный вход / дедуп — явная настройка на триггере. Два канонических подхода:
режимы «один раз / каждый раз» (Segment) и cooldown-окно в секундах + дедуп событий
(Braze). Ложится на нашу reEntryPolicy (ADR-300 §7).
Терминология: campaign / trigger / filter / data-driven segment / frequency.
Event, Segment (move into / out of a segment), Date, Webhook, Form-submission,
Attribute-or-segment. Event-триггер и segment-триггер — отдельные взаимоисключающие
типы в билдере кампании.
Источники: campaign-triggers,
journeys-overview.
"A trigger determines who's eligible to enter a campaign and when, while a filter is additional criteria that a person or triggering data must meet." — оба условия должны совпасть. Пример из доков: триггер = «просмотр pricing-страницы» (event), фильтр = «только не на платном тарифе» (attribute). Источник: campaign-triggers-and-filters.
Enrollment требует И триггер, И фильтр. Если в момент прихода события фильтр ещё не совпал — Customer.io ретраит матчинг до 30 минут, затем отменяет вход.
"a journey starts after the trigger conditions AND filter conditions are met. If the person does not meet the filter conditions when we receive the event, we will retry for up to 30 minutes." Источник: campaign-triggers, troubleshoot-campaign-entrance. → Прямой кандидат для семантики нашего enrollment: событие пришло, но профиль ещё не обновился — окно дожидания, а не мгновенный отказ.
Фильтр-предикаты по атрибутам профиля вшиваются прямо в триггер, без создания
отдельного сегмента. Логика inline — All / At least one. Нюанс: inline покрывает
только атрибуты профиля; фильтры по свойствам события/объекта всё ещё требуют
материализованного сегмента.
Источник: release-note 2025-04-21.
Data-driven сегмент = динамическое членство:
"People enter the segment when they match the conditions and leave the segment when they stop matching the conditions." Изменение членства и есть срабатывание триггера. Правки триггеров/фильтров не ретроактивны. Exit по умолчанию: для большинства кампаний — когда перестал матчить filter; для segment-triggered — когда перестал матчить filter ИЛИ trigger (членство). Источники: data-driven-segments, campaign-changes, exit-conditions.
"You can nest conditions using the Group option. This lets you create complex segmentation logic like
condition1 AND (condition2 OR condition3)." Top-level селектор:All= AND,At least one= OR; у каждой вложенной группы — свой drop-down логики. Это ближайший аналог того предикат-билдера сегментов, который карточка просит переиспользовать в инспекторе START. Источник: data-driven-segments.
Терминология: Canvas / entry (delivery) type / Action-Based / re-eligibility / Entry Controls.
Три первичных: Scheduled, Action-Based, API-Triggered. Action-Based = вход при конкретном поведении (открыл приложение, добавил email, вошёл в локацию) — это аналог нашего event-триггера. Источник: delivery-and-entry-types.
В Canvas аудитория вычисляется ДО срабатывания триггера (исключение — триггер change-in-attribute, там порядок обратный):
"an audience is evaluated before the trigger ... This will cause users to drop out of the Canvas if not part of your selected audience before any trigger actions are evaluated." Источник: canvas/faqs. → Развилка порядка вычисления фильтр↔триггер в нашем enrollment: проверять членство до или после события.
Опровергнуто ресёрчем (0-3): утверждение, что entry/event-properties в Braze нельзя фильтровать, только подставлять через Liquid. Это неверно — фильтрация по свойствам события в Braze есть. Не тащить это ограничение в наши рассуждения.
Ближайший к нам по модели данных (track-события уже в event-store), поэтому наиболее ценен как образец event-триггера.
Тип входа «User performs an event» — вход в реальном времени (< 5 мин) при tracked-событии, которое уже существует в workspace.
"The entry event you use must already exist in your Segment workspace."
На уровне триггера: только операторы equals и equals any of; несколько
условий — только по AND (OR-групп на уровне триггера нет). Greater than доступен
лишь в шаге Data split, не во входном фильтре.
"You can filter event properties using the
equalsorequals any ofoperators ... When you apply multiple conditions, filters operate with AND logic."
Источники: segment.com/docs/engage/journeys/v2, twilio.com/docs/segment/engage/journeys/v2.
Домены Mindbox из окружения недоступны (DNS). Ниже — реконструкция по сниппетам поисковой выдачи; формулировки предположительные, проверить в интерфейсе.
Терминология: сценарий (workflow) / стартовый блок / условие запуска / «Условие» (контекстные фильтры) / пересчитываемый сегмент.
Что осталось непроверенным по Mindbox: точная семантика «вошёл в сегмент» как события-триггера (мгновенно/по пересчёту), наличие OR-групп в билдере, дедуп/повторный вход. → Кандидат на отдельную догрузку при доступе к докам.
| Аспект | Customer.io | Braze | Segment v2 | Mindbox (предпол.) |
|---|---|---|---|---|
| Термин триггера | trigger | entry type | entry condition | условие запуска |
| Event-триггер | Event | Action-Based | «User performs an event» | «Произошло событие» |
| Segment-enter | Segment (move into) | сегмент как audience-гейт | сегмент-триггер | «входит в пересчит. сегмент» |
| Segment-exit | move out of segment | — | exit-rules | — |
| Фильтр по свойствам события | сегмент/inline (атрибуты профиля) | есть | equals/equals any of, AND-only |
«специальные контексты» / блок «Условие» |
| Предикат-билдер (сегмент) | All/At least one + Group (AND/OR + вложенность) | — | полный на уровне сегмента | фильтры с «И» |
| Segment-enter тайминг | forward-going, не ретроактивно | audience до триггера | real-time < 5 мин | по пересчёту сегмента (?) |
| Дедуп / re-entry | frequency setting | toggle + cooldown в секундах | «one time» / «every time» + unique-property | ? |
| Ожидание фильтра | ретрай до 30 мин | — | — | ? |
Ниже — паттерны, отобранные под ADR-300 (§6.4 contact_event уже реализован; event-триггер
и segment-enter расширяют контракт createExecution / selectMatchingAutomations).
Отрасль разделяет два уровня:
equals/equals any of, AND).Карточка просит переиспользовать предикат-билдер сегментов в инспекторе START. Два пути:
→ Решено в макете: вариант A (полный билдер). ✓ В готовом макете (editor-ui-redesign.html,
инспектор START) фильтр по свойствам события собран на полном предикат-билдере (И/ИЛИ/НЕ, группы,
богатые операторы) — тот же компонент, что для сегментов и ноды «Условие». Урезанный вариант B
не берём.
Два подтверждённых паттерна:
Для нашего append-only cdp.events окно дожидания Customer.io особенно релевантно: событие
и обновление профиля могут прийти разными ingest-запросами. Решить, поддерживаем ли grace-window.
Никто из вендоров явно не раскрывает immediate-vs-recompute тайминг; все дают лишь forward-going семантику. Для нас это архитектурный выбор: считать вход в сегмент
reEntryPolicyНаша reEntryPolicy (ignore | queue | restart, ADR-300 §7) уже покрывает «один раз / каждый
раз». Стоит свериться:
ignore при наличии любого прошедшего execution;В духе существующих инспекторов и §7.1 (вариант B как дефолт):
AUTOMATION_START.trigger:
type: 'event'
eventName: string // произвольное имя из cdp.events (track)
propertyFilter: <predicate> // переиспользуемый предикат-билдер
reEntryPolicy: { mode, ... } // ADR-300 §7
| type: 'segment_enter'
segmentId: string
direction: 'enter' | 'exit' // симметрия по образцу Customer.io
reEntryPolicy: { mode, ... }
<predicate> — тот же тип, что у сегментов (All/At-least-one + группы), но на event-триггере
можно ограничить набор операторов (решение §7.1).
Часть закрыта готовым макетом START (
editor-ui-redesign.html, MLF-286/287) — помечено ✓. Остальные — про серверный тайминг, макет их не показывает (это логика бэкенда), остаются открытыми.
reEntryPolicy, или нужно окно
«не входить чаще N» (Braze-модель)? Открыт — в макете reEntryPolicy = пропустить/в очередь/
заново (3 варианта); окна cooldown нет, решение по нему не зафиксировано.Customer.io: campaign-triggers · campaign-triggers-and-filters · data-driven-segments · release 2025-04-21 · campaign-changes · exit-conditions · troubleshoot-campaign-entrance Braze: delivery-and-entry-types · re_eligibility · canvas/faqs Segment/Twilio: journeys/v2 · twilio journeys/v2 Mindbox (не верифиц.): workflow-events · workflow-conditions · filters-begin · filters-and
На основе этого ресёрча собран интерактивный макет инспектора START (типы триггера событие/сегмент, автокомплит имени события, билдер фильтра, правило повторного входа):
docs/automation/mockups/start-inspector.html (MLF-286).docs/automation/mockups/editor-ui-redesign.html. ✓ В нём инспектор START реализован в финальном
виде: типы триггера событие/сегмент (вход и выход), автокомплит имени события, полный билдер
фильтра (вариант A из §7.1), reEntryPolicy = пропустить/в очередь/заново.Согласование — с Михаилом Терентьевым (MLF-286/287); без апрува макетов в разработку не берём.