High‑Intent Abandonment Orchestration & Cross‑Canvas Control Using Wunderkind + Braze
Marketing to Squeezed Millennials
Designing high-intent abandonment in Braze is ultimately a data and orchestration problem: you need clean, mutually exclusive entry conditions, clear priority rules, and a way to keep users from bouncing between overlapping canvases.
Wunderkind Signals for Braze is designed to give you that control out of the box. Wunderkind resolves identity, evaluates high-intent behavior (cart, product, category, and catalog events), and then calls Braze’s Canvas Trigger API with a structured payload that your canvases can key off of via entry properties and segmentation logic.
Below is a practitioner-level walkthrough of how we architect these flows inside Braze so they’re scalable, debuggable, and conflict-free.
Modeling abandonment and catalog Signals
For each use case, Wunderkind sends a Signal into Braze with:
- A target Canvas ID
- A user identifier (via user alias keyed to the email address)
- A
canvas_entry_propertiesobject containing metadata like purpose, user type, and items
Example entry properties (simplified):
"canvas_entry_properties": { "Origin": "wunderkind", "DataOnly": "Y", "UserType": "prospect", "WkChannel": "email", "WkPurpose": "cart abandonment", "Items": [ { "WkCopy": "Product name", "WkId": "012345", "WkImageUrl": "https://.../image.jpg", "WkUrl": "https://.../p/012345" } ] }json
We standardize campaign naming and tags across abandonment and catalog so you can filter and prioritize consistently:
- Cart abandonment:
Wunderkind - Cart Abandonment(tagwknd-email-cartabandonment) - Product abandonment:
Wunderkind - Product Abandonment(tagwknd-email-prodabandonment) - Category recap:
Wunderkind - Category Abandonment(tagwknd-email-categoryabandonment) - Back in stock, price drop, low stock: separate “Wunderkind - [Type]” canvases with
wknd-email-backinstock,wknd-email-pricedrop,wknd-email-lowstocktags
All campaign types share the same Items array schema in entry properties, which your Braze templates access via Content Blocks (for example, }) and Liquid loops to render dynamic product grids.
active_signal_email: enforcing cross-canvas priority
To avoid users sitting in multiple Wunderkind-powered flows at once, we use a dedicated Braze custom attribute, active_signal_email.
Conceptually:
- On Canvas entry: set
active_signal_emailto the series key (for example,cart,product,category,back_in_stock,price_drop,low_stock) via a “Change User Attribute” step at the top of the Canvas. - On Canvas exit (completion or timeout): clear or reset it (for example, set to
noneor remove the attribute) in a final step, or via a separate Status Reset Canvas (described below).
Each Canvas’ entry criteria then includes both:
- “Email Available is true” or your stricter subscriber segment, and
active_signal_emaileither not set, or not set to a higher-priority program.
You get a simple, auditable priority table:
- Cart abandonment is treated as highest priority: cart canvases only require “not currently in cart abandonment,” because they should win over everything else.
- Product abandonment checks “not in cart abandonment” before entry (if the Signal fires while the user is in cart, we let cart win and block product).
- Category recap checks “not in cart” and “not in product.”
- Catalog alerts check for no active higher-intent abandonment program (or you can allow them to co-exist if business rules permit).
Because this is enforced on the Braze side as a single custom attribute, it plays well with other vendors and native triggers: your cross-vendor suppression is simply “exclude users where active_signal_email is not null / not none” on any competing flows you want to keep out of the path.
Entry/exit criteria and prospect vs. customer splits
We standardize entry logic via a base “Wunderkind Signal” Canvas template in Braze.
Key configuration:
- Entry schedule: API-triggered Canvas. Wunderkind calls
/canvas/trigger/sendby Canvas ID for each Signal. - Entry audience filters:
- Exit criteria:
- “Make any purchase” as a global exit across all abandonment and catalog canvases.
- Additional campaign-priority exits for lower-priority canvases. For example, category recap exits if the user has “Last received message from Canvas
wknd-cartabandonmentless than 1 day ago” or “Last received fromwknd-prodabandonmentless than 1 day ago.”
Prospect vs. customer handling happens via a Decision Split immediately after entry:
- Wunderkind’s upstream eligibility worker can flag the user as
UserType="prospect"orUserType="customer"via entry properties and/or use Braze segments for “Customer” based on purchase history. - In Canvas, you drop a Decision Split: if “in Customer segment” → Customer branch; else → Prospect branch.
This gives you mirrored but independent flows:
- Abandonment cadence (per branch):
- Catalog cadence (per branch):
You clone this template per campaign (cart, product, category, back-in-stock, price-drop, low-stock) and only adjust the messaging and, for catalog, the number of steps to match the shorter series.
Canvas configuration and filter logic
A typical cart abandonment Canvas, built from the shared template, looks like this:
- Entry: API-triggered on cart abandonment Signal.
- Entry audience:
- Email Available is true.
- Last Made Purchase > 1 day ago.
- Optional:
active_signal_emailis null or not equal tocart.
- User attribute update:
- Set
active_signal_email = "cart".
- Set
- Decision Split: Customer vs. prospect branch.
- Delay + Message steps:
- Delay 30 minutes → Email 1 (Wunderkind product grid Content Block).
- Delay 24 hours → Email 2.
- Delay 24 hours → Email 3 (customer) or Email 3 + 4 (prospect).
- Exit criteria (global):
- Make any purchase.
- Final step:
- Clear or reset
active_signal_email(for example, set tonone).
- Clear or reset
Product and category flows are identical structurally; only the purpose and exit rules differ:
- Product abandonment:
- Category recap:
Catalog flows (back-in-stock, price drop, low stock) reuse the template but with only 2 messages per branch and with content pulled from catalog-driven Signals rather than abandonment behavior.
“Status Reset” cleanup Canvas
Over time you’ll have edge cases: users who drop out mid-flow, profiles left with stale active_signal_email values, or data backfills that need a clean slate. To handle this, we recommend a lightweight “Status Reset” Canvas that runs on a schedule or listens for a generic Wunderkind maintenance Signal.
Typical logic:
- Entry audience: users where
active_signal_emailis not null AND they are not currently in any Wunderkind-tagged Canvas (for example, no “last received fromwknd-…canvas” in the past N hours). - Actions:
- Set
active_signal_emailtonone(or remove the attribute). - Optionally, write a timestamp to a separate custom attribute for debugging (“last_signal_reset_at”).
- Set
This keeps your priority system honest and prevents one bad attribute from blocking a user from re-entering legitimate flows later.
Preventing conflicts with other vendors and native Braze programs
The architecture above isolates Wunderkind-powered flows without forcing you to replatform or retire existing programs:
- Shared identity and link tracking: The
bxid=}Link Template is applied to both Wunderkind and non-Wunderkind emails, so your onsite identity resolution benefits all traffic and Braze gets consistent identifiers in URLs. - Clear tagging: All Wunderkind canvases are tagged (
wknd,wknd-email-cartabandonment, etc.), making it trivial to build filters and reports like “exclude users currently active in anywknd-*Canvas” from another vendor’s journey. - Mailability & unsubscribe in Braze: Wunderkind checks and sets subscription state via Braze APIs (
/users/export/ids,/email/status, subscription groups), so mailability logic stays native to Braze and applies evenly across Wunderkind and non-Wunderkind sends. - Priority enforced at the Canvas layer: Because
active_signal_emailis a Braze attribute, any vendor or native program can respect it. For example, you can add a simple entry filter “whereactive_signal_emailis null or equalsnone” on batch promos or third-party cart flows to avoid collisions.
The result is an architecture where Wunderkind handles identity and high-intent decisioning, while Braze remains the single source of truth for cadence, eligibility, and cross-channel orchestration. You get more send volume and revenue from abandonment and catalog programs—without duplicating flows across tools or fighting hidden conflicts.
Jennifer Yeadon
Jennifer Yeadon is the Director of Content at Wunderkind, where she wrangles words, untangles strategy, and occasionally talks to her coffee. She’s fascinated by consumer behavior. Jennifer has spent her career helping brands sound more human in a digital world and secretly believes a great subject line can change everything.
On This Page
Related Resources
Lorem ipsum dolor sit amet nibh massaconsectetur
Lorem ipsum dolor sit amet consectetur. Proin aliquam ut dolor at. Tincidunt mattis mauris ut duis nisielit aliquam dis. Tellus gravida id cursus cras vel pulvinar venenatis.