diff --git a/src/_data/sidenav/main.yml b/src/_data/sidenav/main.yml index 8fcf0bfa3e..f518b83825 100644 --- a/src/_data/sidenav/main.yml +++ b/src/_data/sidenav/main.yml @@ -470,29 +470,36 @@ sections: section: - path: '/engage/journeys' title: Journeys Overview - - path: '/engage/journeys/build-journey' - title: 'Build a Journey' - - path: '/engage/journeys/step-types' - title: 'Journey Step Types' - - path: '/engage/journeys/journeys-edits' - title: 'Journey Edits and Versioning' - - path: '/engage/journeys/send-data' - title: Send Data to Destinations - - path: '/engage/journeys/journeys-analytics' - title: Journeys Analytics - - section_title: Event-Triggered Journeys - slug: '/engage/journeys/event-triggered-journeys' + - section_title: Journeys V1 + slug: '/engage/journeys/v1' + section: + - path: '/engage/journeys/v1/build-journey' + title: 'Build a Journey' + - path: '/engage/journeys/v1/step-types' + title: 'Journey Step Types' + - path: '/engage/journeys/v1/send-data' + title: Send Data to Destinations + - section_title: Journeys V2 + slug: '/engage/journeys/v2' section: - - path: /engage/journeys/event-triggered-journeys + - path: /engage/journeys/v2/ title: Overview - - path: /engage/journeys/event-triggered-journeys-steps + - path: /engage/journeys/v2/event-triggered-journeys-steps title: Event-Triggered Journeys Steps - - path: /engage/journeys/journey-context + - path: /engage/journeys/v2/exit-rules + title: Exit Rules + - path: /engage/journeys/v2/journey-context title: Journey Context + - path: /engage/journeys/v2/use-cases + title: Use Cases + - path: /engage/journeys/v2/limits + title: Product Limits + - path: '/engage/journeys/journeys-edits' + title: 'Journey Edits and Versioning' + - path: '/engage/journeys/journeys-analytics' + title: Journeys Analytics - path: '/engage/journeys/faq-best-practices' title: Journeys Best Practices and FAQ - - path: '/engage/journeys/use-cases' - title: Example Journeys Use Cases - path: '/engage/journeys/journeys-logic' title: Understand Journeys Logic - path: '/engage/journeys/key-terms' diff --git a/src/engage/journeys/images/application_started.png b/src/engage/journeys/images/application_started.png new file mode 100644 index 0000000000..07eb8686e9 Binary files /dev/null and b/src/engage/journeys/images/application_started.png differ diff --git a/src/engage/journeys/images/cart_abandonment.png b/src/engage/journeys/images/cart_abandonment.png new file mode 100644 index 0000000000..0cb73dacff Binary files /dev/null and b/src/engage/journeys/images/cart_abandonment.png differ diff --git a/src/engage/journeys/images/multi_step_loopback.png b/src/engage/journeys/images/multi_step_loopback.png new file mode 100644 index 0000000000..31cac96f87 Binary files /dev/null and b/src/engage/journeys/images/multi_step_loopback.png differ diff --git a/src/engage/journeys/use-cases.md b/src/engage/journeys/use-cases.md index ee855ab41b..635f5a1bdc 100644 --- a/src/engage/journeys/use-cases.md +++ b/src/engage/journeys/use-cases.md @@ -1,6 +1,7 @@ --- title: Example Journeys Use Cases plan: engage-foundations +hidden: true redirect_from: - "/personas/journeys/use-cases" --- diff --git a/src/engage/journeys/build-journey.md b/src/engage/journeys/v1/build-journey.md similarity index 99% rename from src/engage/journeys/build-journey.md rename to src/engage/journeys/v1/build-journey.md index d9973ff84c..a0a46ed2a4 100644 --- a/src/engage/journeys/build-journey.md +++ b/src/engage/journeys/v1/build-journey.md @@ -3,6 +3,7 @@ title: Build a Journey plan: engage-foundations redirect_from: - "/personas/journeys/build-journey" + - "/engage/journeys/build-journey" --- ## Before you begin diff --git a/src/engage/journeys/send-data.md b/src/engage/journeys/v1/send-data.md similarity index 99% rename from src/engage/journeys/send-data.md rename to src/engage/journeys/v1/send-data.md index eccb3b93d8..aa8ca578a1 100644 --- a/src/engage/journeys/send-data.md +++ b/src/engage/journeys/v1/send-data.md @@ -3,6 +3,7 @@ title: Send Journeys data to a Destination plan: engage-foundations redirect_from: - '/personas/journeys/send-data' + - '/engage/journeys/send-data' --- When you send data to destinations, you send a series of events or user lists, depending on the destination type. diff --git a/src/engage/journeys/step-types.md b/src/engage/journeys/v1/step-types.md similarity index 99% rename from src/engage/journeys/step-types.md rename to src/engage/journeys/v1/step-types.md index 9c950924f3..801ffeea9a 100644 --- a/src/engage/journeys/step-types.md +++ b/src/engage/journeys/v1/step-types.md @@ -1,6 +1,8 @@ --- title: Journeys Step Types plan: engage-foundations +redirect_from: + - "/engage/journeys/step-types" --- On this page, you'll find information about the steps you can add to a Journey. diff --git a/src/engage/journeys/event-triggered-journeys-steps.md b/src/engage/journeys/v2/event-triggered-journeys-steps.md similarity index 94% rename from src/engage/journeys/event-triggered-journeys-steps.md rename to src/engage/journeys/v2/event-triggered-journeys-steps.md index 853a262440..63c19ef59e 100644 --- a/src/engage/journeys/event-triggered-journeys-steps.md +++ b/src/engage/journeys/v2/event-triggered-journeys-steps.md @@ -1,6 +1,8 @@ --- title: Event-Triggered Journeys Steps plan: engage-foundations +redirect_from: + - "/engage/journeys/event-triggered-journeys-steps" --- [Event-Triggered Journeys](/docs/engage/journeys/event-triggered-journeys/) in Engage use steps to control how users move through a journey based on their actions or predefined conditions. @@ -195,17 +197,17 @@ Segment evaluates each journey instance independently. This means a user could b You can configure a Randomized Split step with the following options: -| Setting | Description | -| ---------------------------- | ---------------------------------------------------------------------------- | -| Branches | Add up to five branches. Each branch must be assigned a percentage. | -| Distribution percentages | Define what portion of users should go down each branch. Total must be 100%. | -| Branch naming | Branches are labeled alphabetically (for example, Branch A, Branch B). | -| Consistent branch assignment | Optionally ensure a user always enters the same branch on re-entry. | +| Setting | Description | +| ------------------------ | ---------------------------------------------------------------------------- | +| Branches | Add up to five branches. Each branch must be assigned a percentage. | +| Distribution percentages | Define what portion of users should go down each branch. Total must be 100%. | +| Branch naming | Branches are labeled alphabetically (for example, Branch A, Branch B). | +| Assign same branch | Optionally ensure a user always enters the same branch on re-entry. | -Segment won't publish your journey if the percentages don’t add up to 100%, or if any percentage is left blank. +Segment won't let you save or publish your journey if the percentages don’t add up to 100%, or if any percentage is left blank. -> info "Branch assignment is random" -> The Randomized Split step uses probabilistic logic to assign users to branches. At lower volumes, actual distribution may not exactly match your configured percentages, but it tends to even out at scale. +> info "Actual branch counts may differ from percentages" +> The Randomized Split step assigns users to branches based on probability, not fixed rules. At lower volumes, the actual distribution may not match your configured percentages exactly, but results typically even out with more traffic. To add a Randomized Split to your journey: @@ -213,7 +215,7 @@ To add a Randomized Split to your journey: 2. Select **Randomized Split**. 3. Give the step a unique name. 4. Add up to five branches and assign a percentage to each one. -5. (Optional) Enable **Keep branch assignment consistent** if you want users to always go down the same branch on re-entry. +5. (Optional) Enable **Assign same branch** if you want users to always go down the same branch on re-entry. 6. Click **Save**. Once configured, Segment routes profiles through this step based on your distribution settings. diff --git a/src/engage/journeys/exit-rules.md b/src/engage/journeys/v2/exit-rules.md similarity index 100% rename from src/engage/journeys/exit-rules.md rename to src/engage/journeys/v2/exit-rules.md diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/v2/index.md similarity index 88% rename from src/engage/journeys/event-triggered-journeys.md rename to src/engage/journeys/v2/index.md index 9435e17f4e..470d26fa8f 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/v2/index.md @@ -1,6 +1,8 @@ --- title: Event-Triggered Journeys plan: engage-foundations +redirect_from: + - "/engage/journeys/event-triggered-journeys" --- With Event-Triggered Journeys, you can build real-time, event-based marketing workflows to automate and personalize customer journeys. @@ -96,6 +98,44 @@ For example, in an abandonment journey, suppose a user starts two applications ( - **Supported destinations:** Only Actions Destinations in the Segment catalog are supported. - **Data mapping:** Ensure all required keys for the destination are properly mapped to avoid errors. +## Duplicate a journey + +To save time and avoid recreating steps from scratch, you can duplicate any existing journey. + +Duplicating a journey creates a copy of the configuration and opens it in **Draft** mode. You can duplicate both draft and published journeys, but journey names must be unique. + +### What gets copied + +When you duplicate a journey, Segment copies the following: + +- Entry conditions and filters +- All journey steps and structure +- Destination actions, including: + - Event names + - Payload configuration + - Trait and context enrichment + - Attribute mappings + +Segment **doesn't** copy the following: + +- Journey name (you must enter a new, unique name) +- Activation destination keys (Segment will regenerate these) + +> warning "" +> If a destination action was disabled in the original journey, it will be enabled by default in the duplicated version. + +### How to duplicate a journey + +1. Go to **Engage > Journeys** and find the journey you want to duplicate. +2. Click the **•••** (Options menu), either in the list view or from within the journey. +3. Select **Duplicate**. +4. Enter a new name when prompted. +5. Review the duplicated journey and make any needed changes. +6. If your journey includes destination sends, be sure to copy the new destination keys into your destination system. + +> warning +> Currently, you can only duplicate journeys within the same Engage space. Duplicating across spaces or workspaces is not supported. + ## Best practices Follow the best practices in this table to optimize your event-triggered journeys: @@ -115,9 +155,8 @@ Segment built Event-Triggered Journeys to respond instantly to events, offering - **Entry event requirements**: The entry event you use must already exist in your Segment workspace for it to appear as a selection in journey setup. Make sure that you've already created the event before setting up your journey. - **Event property filters**: You can filter event properties using the `equals` or `equals any of` operators. When you apply multiple conditions, filters operate with `AND` logic, meaning all conditions must be true for the event to trigger entry into the journey. - **Audience filtering**: You can only use active, pre-existing audience records as filters. For more complex filtering, like specific profile traits or multiple audiences, first [create the audience](/docs/engage/audiences/#building-an-audience) in **Engage > Audiences**, then apply it as a filter once it’s live. -- **Destination options**: While Event-Triggered Journeys support all [actions-based destinations](/docs/connections/destinations/actions/) and Destination Functions, you can only add one destination per Send to Destination step. If you need to send to multiple destinations, you can use multiple Send to Destination steps. +- **Destination options**: Event-Triggered Journeys support all [actions-based destinations](/docs/connections/destinations/actions/) and Destination Functions. - **Event payload structure**: Each payload sent to a destination includes a unique key to identify the specific send step within the journey, rather than the journey instance itself. You can also set a custom event name to make it easier to identify the specific event instance you want to track in your destination. -- **Editing and versioning**: After you publish an event-triggered journey, you won't be able to edit it. To modify a journey, create a new journey. - **Real-time delivery**: Event-Triggered Journeys aim for an expected delivery time of under 5 minutes from the moment an event is performed to when the payload reaches the destination, assuming there is no delay step in the journey. However, external factors outside of Segment's control may occasionally introduce latency. ## Observability @@ -176,3 +215,5 @@ Start by setting the `checkout_started` event as the trigger and specify a uniqu Say you want to follow up with users after they engage with specific content, like downloading an e-book or watching a demo video. Event-Triggered Journeys can help you send timely, personalized messages based on these interactions. To do this, set the entry event to `content_downloaded` or `video_watched` and configure the journey to send a follow-up email. You could even personalize the email with details from the triggering event, like the content title or timestamp, by configuring your destination payload to enrich the message with event-specific context. + +For detailed instructions on setting up journeys for these use cases, see [Journeys (V2) Use Cases](/docs/engage/journeys/v2/use-cases) \ No newline at end of file diff --git a/src/engage/journeys/journey-context.md b/src/engage/journeys/v2/journey-context.md similarity index 99% rename from src/engage/journeys/journey-context.md rename to src/engage/journeys/v2/journey-context.md index 2cb17457a0..c739180709 100644 --- a/src/engage/journeys/journey-context.md +++ b/src/engage/journeys/v2/journey-context.md @@ -1,6 +1,8 @@ --- title: Journey Context plan: engage-foundations +redirect_from: + - "/engage/journeys/journey-context" --- [Event-Triggered Journeys](/docs/engage/journeys/event-triggered-journeys/) redefine how you orchestrate and personalize customer experiences. diff --git a/src/engage/journeys/v2/use-cases.md b/src/engage/journeys/v2/use-cases.md new file mode 100644 index 0000000000..1d5720610d --- /dev/null +++ b/src/engage/journeys/v2/use-cases.md @@ -0,0 +1,638 @@ +--- +title: Journeys (V2) Use Cases +plan: engage-foundations +redirect_from: + - "/engage/journeys/use-cases" +--- + +Event-Triggered Journeys give you the tools to create real-time, personalized flows that react to user behavior as it happens. This page explains sample use cases to help you get started with common patterns like confirmations, abandonment campaigns, and re-engagement flows. + +Each example includes a short explanation, key steps to configure, and optional sample event payloads. + +## Real-time event forwarding + +Send a confirmation message immediately after a user takes a key action, like placing an order or submitting a form. This type of journey helps reinforce trust and provides instant feedback by delivering personalized messages based on event details. + +This use case is ideal for transactional events that should trigger follow-up communication without delay. + +### How to build this journey + +1. Set the journey entry condition to `Users perform an event`. +2. Choose the event that represents the user action (for example, `Order_Confirmation`). +3. **(Optional)**: Add event property filters if you only want to trigger the journey under specific conditions. +4. Click **Build**, then add a **Send to Destination** step to forward the event. +5. Configure destination: + - Select the destination you want to send the payload to. + - Enrich the payload with profile traits or journey context as needed. +6. Click **Save** to publish the journey. + +The following example shows a `Order_Confirmation` event payload that could trigger this journey. You can customize the event name and properties based on your use case. + +```json +{ + "userId": "99", + "context": {}, + "integrations": {}, + "event": "Order_Confirmation", + "properties": { + "productId": "001", + "productName": "T-Shirt", + "productColor": "green", + "productSize": "Large", + "productPrice": "$55.34", + "event_location": "A", + "cart_ID": "123456", + "scenario": "01 Ordered Product" + } +} +``` + +## Application abandonment campaign + +Send a personalized nudge when a user starts an action (like filling out an application) but doesn’t complete it within a certain time window. This type of journey helps recover drop-offs by checking for a completion event and following up only if it's missing. + +This use case is ideal for flows like job applications, signups, demo requests, or onboarding forms. + +### How to build this journey + +1. Set the journey entry condition to `Users perform an event`. +2. Choose the event that indicates the user started the flow (for example, `Application_Started`). +3. (Optional): Add event property filters if you only want to trigger the journey under specific conditions. +4. Click **Build**, then add a **Hold Until** step. +5. In the Hold Until step: + - Specify the completion event (for example, `Application_Completed`) as the condition. + - Set a maximum hold duration. +6. Add a **Send to Destination** step on the "timeout" branch to send a follow-up message. +7. Configure the destination: + - Select the destination you want to send the payload to. + - Enrich the payload with profile traits or journey context as needed. +8. Preview the payload that Segment will send to your destination. +9. Publish the journey. + +![Screenshot of the journey setup screen showing the Application_Started entry event selected, with re-entry enabled and Application_id set as the unique identifier.](../images/application_started.png) + + +### Sample entry and evaluation events + +The following example shows both the entry event that starts the journey and the evaluation event that cancels the nudge if the user completes the application. + +{% codeexample %} +{% codeexampletab Entry event %} +```json +{ + "userId": "88", + "context": {}, + "integrations": {}, + "event": "Application_Started", + "properties": { + "Category": "A", + "Tier": "Premium", + "VIP": true, + "Application_id": "1234", + "scenario": "Trigger campaign with Application Started" + } +} +``` +{% endcodeexampletab %} + +{% codeexampletab Evaluation event %} +```json +{ + "userId": "88", + "context": {}, + "integrations": {}, + "event": "Application_Completed", + "properties": { + "Category": "A", + "Tier": "Premium", + "VIP": true, + "Application_id": "1234", + "scenario": "Complete campaign without a nudge b/c Application was Completed" + } +} +``` +{% endcodeexampletab %} +{% endcodeexample %} + +## Cart abandonment (cart viewed flow) + +Send a personalized follow-up when a user views their cart but doesn’t complete the checkout. This journey tracks whether a checkout event occurs within a short window after the cart is viewed. If it doesn’t, you can send a reminder to bring them back. + +This use case works well for e-commerce sites that want to reduce cart abandonment and recover potential sales. + +### How to build this journey + +1. Set the journey entry condition to `Users perform an event`. +2. Choose the entry event that indicates cart activity (for example, `Cart_Viewed`). +3. (Optional): Add event property filters to narrow the scope of who enters. +4. Click **Build**, then add a **Hold Until** step. +5. In the Hold Until step: + - Specify `Checkout_Completed` as the evaluation event. + - Set a maximum hold duration based on how long you want to wait before nudging (for example, 1 hour). +6. Add a **Send to Destination** step on the timeout branch to send the cart reminder. +7. Configure the destination: + - Select the destination you want to send the payload to. + - Enrich the payload with profile traits or journey context as needed. +8. Preview the payload that Segment will send to your destination. +9. Publish the journey. + +### Example event data + +The following examples show the entry and evaluation events for this journey pattern. + +{% codeexample %} +{% codeexampletab Entry event %} +```json +{ + "userId": "88", + "context": {}, + "integrations": {}, + "event": "Cart_Viewed", + "properties": { + "cart_ID": "123", + "scenario": "01 Simple Cart Abandonment", + "checkout_cart": [ + { + "productId": "001", + "productName": "T-Shirt", + "productColor": "green", + "productSize": "Large", + "productPrice": "$55.34" + }, + { + "productId": "002", + "productName": "Jeans", + "productColor": "blue", + "productSize": "Medium", + "productPrice": "$99.56" + } + ] + } +} +``` +{% endcodeexampletab %} + +{% codeexampletab Evaluation event %} +```json +{ + "userId": "88", + "context": {}, + "integrations": {}, + "event": "Checkout_Completed", + "properties": { + "cart_ID": "123", + "scenario": "01 Simple Cart Abandonment", + "checkout_cart": [ + { + "productId": "001", + "productName": "T-Shirt", + "productColor": "green", + "productSize": "Large", + "productPrice": "$55.34" + }, + { + "productId": "002", + "productName": "Jeans", + "productColor": "blue", + "productSize": "Medium", + "productPrice": "$99.56" + } + ] + } +} +``` +{% endcodeexampletab %} +{% endcodeexample %} + +## Cart abandonment (complex `cart_modified` flow) + +Send a personalized reminder when a user adds items to their cart but doesn’t complete checkout, even if they modify their cart along the way. This journey resets the wait timer each time the cart is updated, ensuring that follow-up messages reflect the most recent cart contents. + +This use case is ideal for e-commerce journeys where users frequently change items before deciding to purchase. + +### How to build this journey + +1. Set the journey entry condition to `Users perform an event`. +2. Choose the entry event that indicates the cart is started (for example, `Product_Added`). +3. (Optional): Add event property filters if needed. +4. Click **Build**, then add a **Hold Until** step. +5. In the Hold Until step: + - Specify `Cart_Modified` as an update event that resets the timer and updates the journey context. + - Specify `Order_Confirmation` as the evaluation event that exits the user from the journey. + - Set the maximum hold duration (for example, 2 hours). +6. Add a **Send to Destination** step on the timeout branch to send a cart reminder. +7. Configure the destination: + - Select the destination you want to send the payload to. + - Enrich the payload with profile traits or journey context as needed. +8. Preview the payload that Segment will send to your destination. +9. Publish the journey. + +![Screenshot of a journey that starts with a Product_Added trigger, followed by a Hold Until step with three branches: Cart_Modified (resets timer), Order_Confirmation (completes journey), and a fallback path after 1 day that sends an abandonment nudge and marks the journey complete.)](../images/cart_abandonment.png) + +### Example event data + +The following example shows the entry event that starts the journey, the update event that modifies the cart, and the evaluation event that would cancel the reminder. + +{% codeexample %} +{% codeexampletab Entry event %} +```json +{ + "userId": "23", + "context": {}, + "integrations": {}, + "event": "Product_Added", + "properties": { + "productId": "001", + "productName": "T-Shirt", + "productColor": "green", + "productSize": "Large", + "productPrice": "$55.34", + "cart_ID": "12345", + "scenario": "01 Simple Loopback Abandonment" + } +} +``` +{% endcodeexampletab %} + +{% codeexampletab Update event (Cart_Modified) %} +```json +{ + "userId": "23", + "context": {}, + "integrations": {}, + "event": "Cart_Modified", + "properties": { + "productId": "002", + "productName": "Jeans", + "productColor": "Blue", + "productSize": "medium", + "productPrice": "$88.43", + "productCategory": "A", + "cart_ID": "12345", + "scenario": "01 Simple Loopback Abandonment", + "checkout_cart": [ + { + "productId": "001", + "productName": "T-Shirt", + "productPrice": "$55.34", + "productColor": "green", + "productSize": "Large" + }, + { + "productId": "002", + "productName": "Jeans", + "productColor": "blue", + "productSize": "Medium", + "productPrice": "$99.56" + } + ] + } +} +``` +{% endcodeexampletab %} + +{% codeexampletab Evaluation event (Order_Confirmation) %} +```json +{ + "userId": "23", + "context": {}, + "integrations": {}, + "event": "Order_Confirmation", + "properties": { + "productPrice": "$170.78", + "cart_ID": "12345", + "scenario": "01 Simple Loopback Abandonment", + "checkout_cart": [ + { + "productId": "001", + "productName": "T-Shirt", + "productPrice": "$55.34", + "productColor": "green", + "productSize": "Large" + }, + { + "productId": "002", + "productName": "Jeans", + "productColor": "blue", + "productSize": "Medium", + "productPrice": "$99.56" + }, + { + "productId": "003", + "productName": "Sweatshirt", + "productColor": "Black", + "productSize": "Medium", + "productPrice": "$99.08" + } + ] + } +} +``` +{% endcodeexampletab %} +{% endcodeexample %} + + +## Browse abandonment (multi-step flow) + +Send a series of personalized reminders to users who browse multiple products but don’t take action, like adding an item to their cart. This journey tracks a sequence of `Viewed_Product` events and only exits when the user adds a product or reaches the end of the flow. + +This use case is helpful for nurturing intent-based activity over time, especially for higher-consideration purchases. + +### How to build this journey + +1. Set the journey entry condition to `Users perform an event`. +2. Choose the entry event that represents product views (for example, `Viewed_Product`). +3. (Optional): Add property filters to target only certain products or categories. +4. Click **Build**, then add a **Hold Until** step. +5. In the Hold Until step: + - Specify `Product_Added` as the evaluation event. + - Set a maximum hold duration (for example, 1 hour). +6. Add a second **Hold Until** step to repeat the pattern: + - Again, check for `Product_Added`. + - Adjust the hold duration as needed. +7. Add a **Send to Destination** step at the end of the second hold duration. + - Enrich the payload with recent event data or profile traits. +8. Preview the payload that Segment will send to your destination. +9. Publish the journey. + +### Example event data + +The following examples show the entry and evaluation events for this flow. + +{% codeexample %} +{% codeexampletab Entry event (first view) %} +```json +{ + "userId": "26", + "context": {}, + "integrations": {}, + "event": "Viewed_Product", + "properties": { + "productId": "001", + "productName": "T-Shirt", + "productColor": "green", + "productSize": "Large", + "productPrice": "$55.34", + "productCategory": "A", + "session_ID": "12345", + "scenario": "01 Browse Abandonment" + } +} +``` +{% endcodeexampletab %} + +{% codeexampletab Subsequent view %} +```json +{ + "userId": "26", + "context": {}, + "integrations": {}, + "event": "Viewed_Product", + "properties": { + "productId": "002", + "productName": "Jeans", + "productColor": "Blue", + "productSize": "Medium", + "productPrice": "$88.77", + "productCategory": "A", + "session_ID": "12345", + "scenario": "01 Browse Abandonment" + } +} +``` +{% endcodeexampletab %} + +{% codeexampletab Final view before nudge %} +```json +{ + "userId": "26", + "context": {}, + "integrations": {}, + "event": "Viewed_Product", + "properties": { + "productId": "004", + "productName": "Socks", + "productColor": "White", + "productSize": "Regular", + "productPrice": "$03.44", + "productCategory": "A", + "session_ID": "12345", + "scenario": "01 Browse Abandonment" + } +} +``` +{% endcodeexampletab %} +{% endcodeexample %} + +## Event-based re-engagement campaign + +Send a series of follow-up messages when a user starts a flow—like a trial—but doesn’t complete a key milestone within a set timeframe. This journey uses multiple Hold Until steps to send nudges at scheduled intervals until the user takes the expected action. + +This use case is ideal for trial reminders, onboarding flows, or progressive engagement campaigns. + +### How to build this journey + +1. Set the journey entry condition to `Users perform an event`. +2. Choose the entry event that starts the campaign (for example, `Trial_Started`). +3. (Optional): Add property filters to narrow who enters the journey. +4. Click **Build**, then add a **Hold Until** step. +5. In the Hold Until step: + - Specify `Trial_Ended` as the evaluation event. + - Set a hold duration (for example, 3 days). +6. Add a **Send to Destination** step on the timeout branch to send the first reminder. +7. Add another **Hold Until** step and repeat the same logic. +8. Add a second **Send to Destination** step at the end of that branch. +9. Preview the payloads that Segment will send to each destination. +10. Publish the journey. + +### Example event data + +The following events show a user starting and (eventually) ending a trial. The re-engagement messages are only sent if the `Trial_Ended` event doesn't occur before the hold expires. + +{% codeexample %} +{% codeexampletab Entry event (`trial_started`) %} +```json +{ + "userId": "747", + "context": {}, + "integrations": {}, + "event": "Trial_Started", + "properties": { + "productId": "001", + "productName": "Basic Plan", + "productCategory": "Enterprise", + "productPrice": "$55.34", + "Account_ID": "12345", + "scenario": "01 Siemens" + } +} +``` +{% endcodeexampletab %} + +{% codeexampletab Evaluation event (Trial_Ended) %} +```json +{ + "userId": "747", + "context": {}, + "integrations": {}, + "event": "Trial_Ended", + "properties": { + "productId": "001", + "productName": "Basic Plan", + "productCategory": "Enterprise", + "productPrice": "$55.34", + "Account_ID": "12345", + "scenario": "01 Siemens" + } +} +``` +{% endcodeexampletab %} +{% endcodeexample %} + +## Complex multi-step with loopback abandonment campaign + +Re-engage users with a personalized sequence of nudges as they move through multiple funnel stages—such as visiting the site, creating an account, starting a trial, and subscribing. This journey listens for key events at each stage, and if no progress is made within a set time, it triggers follow-ups to bring users back. + +This use case is useful for SaaS products, gated onboarding flows, or any multi-step process where users drop off between key actions. + +### How to build this journey + +1. Set the journey entry condition to `Users perform an event`. +2. Choose the initial entry event (for example, `Website_Viewed`). +3. (Optional): Add property filters to limit entry to specific sessions or pages. +4. Click **Build**, then add a series of **Hold Until** steps for each major conversion point. +5. In each Hold Until step: + - Specify the expected event (for example, `Account_Created`, `Trial_Started`, or `Subscription_Started`). + - Configure a fallback path using the maximum hold duration. +6. On the timeout branch of each Hold Until step, add a **Send to Destination** step to send a reminder. +7. After each message, optionally add another Hold Until step to check for the next milestone. +8. Preview the payloads that Segment will send to your destinations. +9. Publish the journey. + +![Screenshot of a complex multi-step journey showing multiple Hold Until steps for events like Account_Created, Trial_Started, and Subscription_Started, each with fallback paths that send reminders or complete the journey based on user behavior.](../images/multi_step_loopback.png) + + +### Example event data + +These examples show key moments in the journey, from entry to conversion milestones. Each Hold Until step corresponds to one of these events. + +{% codeexample %} +{% codeexampletab Entry event (`website_viewed`) %} +```json +{ + "userId": "999", + "context": {}, + "integrations": {}, + "event": "Website_Viewed", + "properties": { + "pageViewed": "Home", + "path": "site/home", + "sessionID": "12345", + "scenario": "01 Complex Multi-step" + } +} +``` +{% endcodeexampletab %} + +{% codeexampletab Hold 1 evaluation (`Account_Created`) %} +```json +{ + "userId": "999", + "context": {}, + "integrations": {}, + "event": "Account_Created", + "properties": { + "name": "Tom", + "email": "tom@twilio.com", + "accountID": "09876", + "sessionID": "12345", + "scenario": "01 Complex Multi-step" + } +} +``` +{% endcodeexampletab %} + +{% codeexampletab Hold 2 update (`Payment_Method`) %} +```json +{ + "userId": "999", + "context": {}, + "integrations": {}, + "event": "Payment_Method", + "properties": { + "paymentMerchant": "Visa", + "paymentType": "Credit Card", + "accountID": "09876", + "sessionID": "12345", + "scenario": "01 Complex Multi-step" + } +} +``` +{% endcodeexampletab %} + +{% codeexampletab Hold 3 evaluation (`trial_started`) %} +```json +{ + "userId": "999", + "context": {}, + "integrations": {}, + "event": "Trial_Started", + "properties": { + "productId": "001", + "productName": "Basic Plan", + "productCategory": "Enterprise", + "productPrice": "$55.34", + "sessionID": "12345", + "accountID": "09876", + "scenario": "01 Complex Multi-step" + } +} +``` +{% endcodeexampletab %} + + +{% codeexampletab Hold 4 evaluation (`trial_ended`) %} +```json +{ + "userId": "999", + "context": {}, + "integrations": {}, + "event": "Trial_Ended", + "properties": { + "productId": "001", + "productName": "Basic Plan", + "productCategory": "Enterprise", + "productPrice": "$55.34", + "sessionID": "12345", + "accountID": "09876", + "scenario": "01 Complex Multi-step" + } +} +``` +{% endcodeexampletab %} + + +{% codeexampletab Hold 5 evaluation (`subscription_started`) %} +```json +{ + "userId": "999", + "context": {}, + "integrations": {}, + "event": "Subscription Started", + "properties": { + "productId": "001", + "productName": "Basic Plan", + "productCategory": "Enterprise", + "productPrice": "$55.34", + "sessionID": "12345", + "accountID": "09876", + "scenario": "01 Complex Multi-step" + } +} +``` +{% endcodeexampletab %} +{% endcodeexample %} + + + +--> \ No newline at end of file