Шаг 1 задачи MLF-287 («Сценарии: достроить ключевые ноды до конкурентного MVP»). Основа для макетов инспекторов в Claude Design → согласование с М. Терентьевым → реализация.
Метод: deep-research (fan-out поиск → фетч 23 источников → 93 утверждения → состязательная верификация 25 ключевых, 3 голоса на claim → синтез). Дата: 2026-07-09. Продукты: ноды 1–3 (Email/Delay/If) — Customer.io, Braze, Klaviyo, Iterable; нода 4 (ACTION, §4) — добавились HubSpot, ActiveCampaign, n8n (отдельный добор). Mailchimp / Ortto подтверждёнными данными почти не покрыты — см. «Пробелы».
Инспекторы конкурентов сходятся на устойчивых паттернах — их и берём за базу MVP:
N мин/час/дн, (2) ожидание до момента (время суток / дни недели / окно доставки с таймзоной), (3) wait until по условию с обязательным max wait time (таймаут-ветка).$add, Iterable Handlebars); типизированного increment «из коробки» почти нет — наша модель из задачи сильнее. Селектор источника значения брать у Customer.io.Что показывает инспектор (подтверждено):
Queue Draft
(генерирует черновики, не отправляет автоматически); пользователь вручную переключает
на Send Automatically. → Для нас: явный тумблер «черновик / отправлять автоматически»,
безопасный дефолт.Терминология конкурентов: Send behavior, Queue Draft / Send Automatically (Customer.io); Variants / Control group (Braze).
Рекомендация для MVP-инспектора Email: ✓ реализована в макете.
from / reply-to / subject — ✓ в инспекторе ноды; частотные лимиты — остаются open question
(см. §Открытые вопросы).Три независимые модели задержки — их удобно сделать режимами одной ноды (radio/tabs):
A. Фиксированная длительность (подтверждено, Klaviyo)
Wait N Minutes / Hours / Days — минимальный универсальный контрол. Это и есть базовый
Delay из задачи MLF-287.
B. Ожидание до момента (подтверждено, Klaviyo + Customer.io)
Recipient's Local Timezone.C. Wait until (ожидание условия/события) (подтверждено, Customer.io)
appointment_time для reminder).waiting_delay jobs).Терминология: Time delay, Delay until, Time Window, Wait Until, Maximum wait time.
Рекомендация для MVP: режим A (фикс. N мин/час/дн) — обязателен, соответствует задаче. Режим C с max-wait-таймаутом стоит спроектировать сразу, т.к. If/Else по реакции («открыл в течение 2 дней») по сути = delay-until-event с таймаутом. Режим B (окно доставки) — nice-to-have, заложить в schema.
✓ Реализация в макете (нода «Пауза»): режим A (фикс. длительность) — есть. Режим B (до момента: время суток + дни недели + таймзона) — есть как переключатель, окно доставки помечено заделом. Режим C уточнён при реализации: отдельного «wait-until с таймаутом» не делаем — «открыл в течение N» собирается связкой Пауза → Условие (см. §3), это чище, чем таймер внутри ноды.
Существует в двух формах — их стоит различать и в нашем UI:
Форма 1 — бинарный yes/no (подтверждено у всех: Braze / Iterable / Customer.io / Klaviyo)
false.Форма 2 — множественный switch (подтверждено, Braze / Customer.io / Iterable)
Everybody Else всегда последняя.All others. Плюс отдельная Random Cohort — случайное распределение по процентам.Everyone else.По каким условиям ветвят (подтверждено):
Has clicked email).Терминология: Decision Split / Audience Paths (Braze), Yes-No Split / Attribute Split (Iterable), True-False / Multi-Split / Random Cohort (Customer.io), Conditional Split (Klaviyo).
Рекомендация для MVP (главный дифференциатор задачи): ✓ реализована в макете
(editor-ui-redesign.html, нода «Условие»).
⚠️ Терминологическое уточнение по макету: нода «Условие» — это и есть этот If/Else (развилка да/нет). Отдельная нода «Фильтр» — не про §3: она отсеивает контактов (два выхода «прошёл / отсеян», кто не подходит — дальше не идёт), и в макете тоже обновлена под тот же билдер.
Добор отдельным прогоном (6 углов, 25 источников, 88 утверждений → 25 верифицировано, 25/25 подтверждено). Дата: 2026-07-09.
Главный вывод: типизированные операции increment/append как first-class-контрол —
редкость. Конкуренты идут тремя путями:
| Продукт | Нода | set | increment | append/list | Как задаётся значение |
|---|---|---|---|---|---|
| Customer.io | Create or update person |
✅ | ❌ (нет типизир.) | через JSON dot-notation | type-дропдаун: Static / Profile attr / Journey attr / Liquid / JS |
| Braze | User Update |
✅ | ✅ (в JSON) | $add/$remove (в JSON) |
UI-редактор (только Custom Attributes) + Advanced JSON; Liquid |
| Iterable | User Update tiles (User Profile / List Membership / Subscription) |
✅ | через Handlebars-math в JSON |
отдельный List Membership tile | JSON-редактор + Handlebars |
| Klaviyo | Update profile property |
✅ (+create/delete property) | ❌ | add/remove одного значения | шаги «+ Add step», тип нового свойства Text/Number/List/Boolean/Date |
| HubSpot | Edit record (+ отдельный Increase/decrease property value) |
✅ (set/edit/copy/clear) | ✅ (отдельная action) | Append/Replace/Remove/Clear для list-полей | literal или Insert data (ссылка на др. свойство) |
| ActiveCampaign | Perform Math (отдельная action) |
— | ✅ (add/sub/mul/div) | — | 2 операнда, каждый literal или field (⚡-иконка) → Output-поле |
Ключевые детали для проектирования:
Static value / Profile attribute / Journey attribute / Liquid / Javascript. Панель
открывается по Add Details; есть Name, Action Conditions, target-селектор («человек
в сценарии» / «кто-то другой» → find-or-create). Одна нода меняет несколько атрибутов.
Remove attribute = unset (пустая строка/null ≡ удаление). Инкремента как типа нет —
только через liquid/webhook. Воркфлоу авто-ждёт завершения апдейта.increment/decrement и $add/$remove по массивам, но только
в Advanced JSON, не в простом UI. Шаг синхронный (нижестоящие ноды видят обновлённые
данные) — важно для нашей durable-модели.Add tag / Remove tag (сгруппированы с Subscribe/Unsubscribe, Perform Math).Add to a list / Remove from a list, дропдаун существующих списков + инлайн-создание
нового (имя + теги). Правая панель, поле имени, Status Draft/Live/Manual (Manual = ручная
проверка перед применением).Apply / Update / Remove association labels).→ Для нас (теги в identity graph): тумблер add/remove + селектор тега с созданием на лету (паттерн Klaviyo).
Send and receive data) — правая панель. Method GET/POST/PUT/DELETE/PATCH
(POST по умолч.), Request URL (Basic Auth через user:pass@host), настраиваемые Headers
(Content-Type по умолч. application/json), тело — JSON с liquid {{customer.id}} или
form-encoded. Авто-добавляет X-CIO-Idempotency-Key / X-CIO-Signature. Ответ можно
замапить обратно в атрибуты сценария (response.x, dot-notation) или в профиль (вкл.
инкремент lifetime_value). Есть sending behavior (Draft/auto), conversion tracking,
Wait before continuing journey (пауза до ответа).Using Fields Below (строки Name/Value + Add Parameter) или Using JSON. Body: тумблер
Send Body → Content-Type (Form URLencoded / Form-Data / JSON / Binary / Raw). Auth-селектор:
Predefined Credential Type / Generic (Basic, Custom, Digest, Header, OAuth1, OAuth2, Query).
Продвинутые опции — прогрессивно через Add Option.Field Containing Person ID /
Field Containing Object ID.Правая боковая панель доминирует (Customer.io, Klaviyo, HubSpot). ActiveCampaign — модалка-
пикер действий. Часто список операций/шагов внутри одной ноды (Klaviyo + Add step,
Customer.io — несколько атрибутов за раз).
set/increment/append как типизированные операции — сильнее большинства
конкурентов. ✓ В макете: операции set / append / increment / decrement / clear.Wait before continuing и маппинг ответа
в профиль — полезные будущие паттерны. ✓ В макете webhook есть, Wait before continuing помечен заделом.editor-ui-redesign.html): инспектор — правая панель 420px с плавным слайдом.editor-ui-redesign.html). Открытым остаётся frequency capping (частотные лимиты) — в макете
его нет, где ему жить (нода vs глобальные настройки кампании), пока не решено.ACTION-нода (операции, теги, webhook, CRM, UX-паттерн) — закрыта добором §4.
Email: customer.io/docs/journeys/sending-behavior · braze.com/.../multivariant_testing/create_multivariate_campaign Delay: help.klaviyo.com/.../115003885212 · .../360046164352 · docs.customer.io/journeys/delivery-window · .../wait-until · .../send/timezones/match · .../release-notes/2022-06-06-wait-until-changes If/Else: braze.com/.../decision_split · .../audience_paths · customerio.netlify.app/docs/journeys/branches · support.iterable.com/.../4411913074964-Parts-of-a-Journey · help.klaviyo.com/.../115003883992 UX: docs.n8n.io/.../ux-guidelines · help.ortto.com/a-766 · docs.customer.io/journeys/workflow-builder
Action (верифицировано, добор §4): Customer.io: docs.customer.io/journeys/create-update-person · .../workflows/webhooks/action · .../cdp/sources/connections/salesforce/mapping-to-customerio · Braze: braze.com/.../canvas_components/user_update · Iterable: support.iterable.com/.../17743524980756-Journey-Setup-User-Update-Tiles · ActiveCampaign: help.activecampaign.com/.../20353560158364-Data-Formatting · .../360003463720-do-math · .../15428354770716-Action-Updates · Klaviyo: help.klaviyo.com/.../30101956634523 · .../360001768432 · HubSpot: knowledge.hubspot.com/workflows/choose-your-workflow-actions · .../edit-records-using-workflows · .../salesforce/map-hubspot-properties-to-salesforce-fields · n8n: docs.n8n.io/.../n8n-nodes-base.httprequest · .../credentials/httprequest · .../n8n-nodes-base.webhook
Статистика: прогон 1 (ноды 1–3) — 5 углов, 23 источника, 25 верифицировано (24✓/1✗), 105 агентов. Прогон 2 (ACTION, §4) — 6 углов, 25 источников, 25 верифицировано (25✓/0✗), 108 агентов.