From 232cef74aa401c4fa2f0bb5a4f3f30fd8976c7d7 Mon Sep 17 00:00:00 2001 From: tanjinhong72 <82503411+tanjinhong72@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:56:50 +0800 Subject: [PATCH 01/51] Update frequency of real time audience to batch destination Modify the update frequency of real-time audience to batch destination from 2-3 hours to 12-15 hours. --- src/engage/product-limits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engage/product-limits.md b/src/engage/product-limits.md index 68005d0246..230762d777 100644 --- a/src/engage/product-limits.md +++ b/src/engage/product-limits.md @@ -30,7 +30,7 @@ To learn more about custom limits and upgrades, contact your dedicated Customer | Batch Compute Concurrency Limit | 10 (default) per space | The number of batch computations that can run concurrently per space. When this limit is reached, Segment delays subsequent computations until current computations finish. | | Compute Throughput | 10000 computations per second | Computations include any Track or Identify call that triggers an audience or computed trait re-computation. Once the limit is reached, Segment may slow audience processing. | | Events Lookback History | 3 years | The period of time for which Segment stores audience and computed traits computation events. | -| Real-time to batch destination sync frequency | 2-3 hours | The frequency with which Segment syncs real-time audiences to batch destinations. | +| Real-time to batch destination sync frequency | 12-15 hours | The frequency with which Segment syncs real-time audiences to batch destinations. | | Event History | `1970-01-01` | Events with a timestamp less than `1970-01-01` aren't always ingested, which could impact audience backfills with event timestamps prior to this date. | | Engage Data Ingest | 1x the data ingested into Connections | The amount of data transferred into the Compute Engine. | | Audience Frequency Update | 1 per 8 hours | Audiences that require time windows (batch audiences), [funnels](/docs/engage/audiences/#funnel-audiences), [dynamic properties](/docs/engage/audiences/#dynamic-property-references), or [account-level membership](/docs/engage/audiences/#account-level-audiences) are processed on chronological schedules. The default schedule is once every eight hours; however, this can be delayed if the "Batch Compute Concurrency Limit" is reached. Unless otherwise agreed upon, the audiences will compute at the limit set forth. | From 529385cfe65d2dda8094bd7e79e91251561400a5 Mon Sep 17 00:00:00 2001 From: terence1988 Date: Mon, 28 Oct 2024 18:06:27 +1100 Subject: [PATCH 02/51] update common fields for IPv6 --- src/connections/spec/common.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/connections/spec/common.md b/src/connections/spec/common.md index d957ee49c5..f4f17d6a49 100644 --- a/src/connections/spec/common.md +++ b/src/connections/spec/common.md @@ -203,8 +203,8 @@ Other libraries only collect `context.library`, any other context variables must | timezone | ✅ | ✅ | ✅ | - IP Address isn't collected by Segment's libraries, but is instead filled in by Segment's servers when it receives a message for **client side events only**. -> info "IPv6 Addresses are not Supported" -> Segment does not support collection of IP addresses that are in the IPv6 format. +> info "IPv6" +> At the moment, Segment doesn't support automatically collecting IPv6 addresses. - The Android library collects `screen.density` with [this method](/docs/connections/spec/common/#context-fields-automatically-collected). From 4988c74a444052cbad5243e1268cbc8016d5a3b8 Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 28 Oct 2024 17:53:23 -0500 Subject: [PATCH 03/51] basic structure --- src/unify/Traits/recommended-items.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/unify/Traits/recommended-items.md diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md new file mode 100644 index 0000000000..2e524401b3 --- /dev/null +++ b/src/unify/Traits/recommended-items.md @@ -0,0 +1,4 @@ +--- +title: Recommended Items +plan: unify-plus +--- \ No newline at end of file From aa12bf1c677041826085fe0931c3e674099c5a76 Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 28 Oct 2024 18:19:02 -0500 Subject: [PATCH 04/51] Add basic create steps --- src/unify/Traits/recommended-items.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index 2e524401b3..dcef3e97b6 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -1,4 +1,27 @@ --- title: Recommended Items plan: unify-plus ---- \ No newline at end of file +--- + +Recommended Items, part of Segment's CustomerAI, lets you add personalized item recommendations to each user profile. + +Based on a user's past interactions, this trait generates a list of up to 10 items, like products, articles, or songs, that each user is most likely to engage with. + +This recommendation is designed for cases where you want to personalize experiences, like email content, in-app recommendations, or website suggestions, to fit each user's unique preferences. + +In this guide, you’ll learn how to set up a Recommended Item trait, as well as best practices to get the most out of your recommendations. + +## Create a Recommended Item trait + +Follow these steps to create a Recommended Item trait: + +1. In your Segment workspace, navigate to **Unify > Traits > + Create computed trait**. +2. In the **New Computed Trait** builder, click **Recommendation**, then click **Next**. +3. In **Select users**, click **+ Add condition** to choose the users who should receive recommendations. + - You can create recommendations for up to 2 million non-anonymous customers. +4. In **Define recommended items**, choose the item type you want to recommend. + - This is based on your product catalog. +5. Choose how many item types you want to return onto each profile. You can select up to 5 item types. +6. Click **Calculate** to get a preview of the number of users who will receive your recommendations, then click **Next**. +7. (Optional:) Select destinations you want to sync the trait to, then click **Next**. +8. Give your trait a name, then click **Create Trait**. \ No newline at end of file From 5f8f56f86ed6ac75af9d33c5c774a47bfa1e2865 Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 28 Oct 2024 18:23:20 -0500 Subject: [PATCH 05/51] add before you begin info --- src/unify/Traits/recommended-items.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index dcef3e97b6..710d85b94f 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -11,6 +11,12 @@ This recommendation is designed for cases where you want to personalize experien In this guide, you’ll learn how to set up a Recommended Item trait, as well as best practices to get the most out of your recommendations. +## Before you begin + +Before you create Recommended Item traits, you'll first need to set up a Recommendation Catalog. The catalog setup process involves mapping your interaction events (like `order_completed`, `product_added`, and so on), as well as providing product from those interaction events. + +For more information on setting up your Recommendation Catalog, see the [Product Based Audiences documentation](/docs/engage/audiences/product-based-audiences/#set-up-your-recommendation-catalog). + ## Create a Recommended Item trait Follow these steps to create a Recommended Item trait: @@ -24,4 +30,5 @@ Follow these steps to create a Recommended Item trait: 5. Choose how many item types you want to return onto each profile. You can select up to 5 item types. 6. Click **Calculate** to get a preview of the number of users who will receive your recommendations, then click **Next**. 7. (Optional:) Select destinations you want to sync the trait to, then click **Next**. -8. Give your trait a name, then click **Create Trait**. \ No newline at end of file +8. Give your trait a name, then click **Create Trait**. + From d3cd7f7b1671833cd5287bfab92f2ceed43084c5 Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 28 Oct 2024 18:42:44 -0500 Subject: [PATCH 06/51] add use case scenario and table --- src/unify/Traits/recommended-items.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index 710d85b94f..e4a94253e5 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -3,9 +3,9 @@ title: Recommended Items plan: unify-plus --- -Recommended Items, part of Segment's CustomerAI, lets you add personalized item recommendations to each user profile. +Recommended Items, part of Segment's CustomerAI, lets you add personalized item recommendations as a trait to each user profile. -Based on a user's past interactions, this trait generates a list of up to 10 items, like products, articles, or songs, that each user is most likely to engage with. +Based on a user's past interactions, this trait generates a list of up to 5 items, like products, articles, or songs, that each user is most likely to engage with. This recommendation is designed for cases where you want to personalize experiences, like email content, in-app recommendations, or website suggestions, to fit each user's unique preferences. @@ -32,3 +32,19 @@ Follow these steps to create a Recommended Item trait: 7. (Optional:) Select destinations you want to sync the trait to, then click **Next**. 8. Give your trait a name, then click **Create Trait**. +Segment begins creating your new trait. This process could take up to 48 hours. + +## Example use case: + +Suppose you’re managing a music streaming app and want to give each user personalized music recommendations based on their listening habits. Here's how you might set this trait up: + +| Step | Configuration | +| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Select users | Use an audience based on up to 2 million active, non-anonymous listeners who played at least one song in the past month. | +| Item type | Select **Albums** as the item type to recommend. Because you have an extensive catalog of music, this lets each listener receive recommendations tailored to their interests. | +| Number of item types | You decide to return a maximum of 5 albums for each profile, keeping the recommendations relevant and concise. | +| Calculate | Clicking **Calculate** gives you an overview of how many users will receive the album recommendations. Use it to ensure your conditions and catalog mapping meet your criteria. | +| Sync to destinations | This optional steps lets you sync the trait to third-party destinations that can deliver album recommendations over email, in-app messaging, or push notifications. | +| Trait naming | Name your trait `Personalized Album Recommendations`, making it easy to identify for future campaigns. | + +By setting up a trait like this, each user profile now includes personalized recommendations that reflect individual tastes. You can use these recommendations across a range of touchpoints, like in-app sections, personalized email content, or targeted messaging, to create a more engaging and customized user experience. \ No newline at end of file From 94523f895591698fbdf1130bdc9efa9ac9af02cc Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 28 Oct 2024 18:44:07 -0500 Subject: [PATCH 07/51] oops forgot header title --- src/unify/Traits/recommended-items.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index e4a94253e5..5696aea493 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -34,7 +34,7 @@ Follow these steps to create a Recommended Item trait: Segment begins creating your new trait. This process could take up to 48 hours. -## Example use case: +## Example use case: personalized album recommendations Suppose you’re managing a music streaming app and want to give each user personalized music recommendations based on their listening habits. Here's how you might set this trait up: From 3ac5011c7bbf00a7ad1d8e382fed2ea5df3f9e07 Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 28 Oct 2024 18:54:06 -0500 Subject: [PATCH 08/51] add section on how it all works --- src/unify/Traits/recommended-items.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index 5696aea493..af024278b9 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -5,12 +5,19 @@ plan: unify-plus Recommended Items, part of Segment's CustomerAI, lets you add personalized item recommendations as a trait to each user profile. -Based on a user's past interactions, this trait generates a list of up to 5 items, like products, articles, or songs, that each user is most likely to engage with. - -This recommendation is designed for cases where you want to personalize experiences, like email content, in-app recommendations, or website suggestions, to fit each user's unique preferences. +Based on a user's past interactions, this trait generates a list of up to 5 items, like products, articles, or songs, that each user is most likely to engage with. This recommendation is designed for cases where you want to personalize experiences, like email content, in-app recommendations, or website suggestions, to fit each user's unique preferences. In this guide, you’ll learn how to set up a Recommended Item trait, as well as best practices to get the most out of your recommendations. +## How Recommended Items works + +Recommended Items uses your interaction events (like `order_completed`, `product_added`, and `product_searched`) along with event metadata to generate personalized recommendations for each user. Here’s an overview of the process: + +1. **Data collection**: Segment captures user interactions from your select events. +2. **Pattern analysis**: Machine learning models analyze these interactions to recognize patterns and user preferences. +3. **Item ranking**: Based on this analysis, Segment generates an ordered list of recommended items for each user, ranked from most to least likely to engage. +4. **Profile storage**: Segment then saves these recommendations as an array on each eligible user profile. + ## Before you begin Before you create Recommended Item traits, you'll first need to set up a Recommendation Catalog. The catalog setup process involves mapping your interaction events (like `order_completed`, `product_added`, and so on), as well as providing product from those interaction events. From 26e816c2ebf70b12771db0f86948be477aff1f5f Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 28 Oct 2024 18:55:47 -0500 Subject: [PATCH 09/51] change before you begin to a callout --- src/unify/Traits/recommended-items.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index af024278b9..32dcd2ac44 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -18,14 +18,11 @@ Recommended Items uses your interaction events (like `order_completed`, `product 3. **Item ranking**: Based on this analysis, Segment generates an ordered list of recommended items for each user, ranked from most to least likely to engage. 4. **Profile storage**: Segment then saves these recommendations as an array on each eligible user profile. -## Before you begin - -Before you create Recommended Item traits, you'll first need to set up a Recommendation Catalog. The catalog setup process involves mapping your interaction events (like `order_completed`, `product_added`, and so on), as well as providing product from those interaction events. - -For more information on setting up your Recommendation Catalog, see the [Product Based Audiences documentation](/docs/engage/audiences/product-based-audiences/#set-up-your-recommendation-catalog). - ## Create a Recommended Item trait +> info "Before you begin" +> Before you create Recommended Item traits, you'll first need to set up a Recommendation Catalog. The catalog setup process involves mapping your interaction events, as well as providing product metadata from those interaction events. If you've not yet set up your Recommendation Catalog, follow the instructions in the [Product Based Audiences documentation](/docs/engage/audiences/product-based-audiences/#set-up-your-recommendation-catalog). + Follow these steps to create a Recommended Item trait: 1. In your Segment workspace, navigate to **Unify > Traits > + Create computed trait**. @@ -54,4 +51,5 @@ Suppose you’re managing a music streaming app and want to give each user perso | Sync to destinations | This optional steps lets you sync the trait to third-party destinations that can deliver album recommendations over email, in-app messaging, or push notifications. | | Trait naming | Name your trait `Personalized Album Recommendations`, making it easy to identify for future campaigns. | -By setting up a trait like this, each user profile now includes personalized recommendations that reflect individual tastes. You can use these recommendations across a range of touchpoints, like in-app sections, personalized email content, or targeted messaging, to create a more engaging and customized user experience. \ No newline at end of file +By setting up a trait like this, each user profile now includes personalized recommendations that reflect individual tastes. You can use these recommendations across a range of touchpoints, like in-app sections, personalized email content, or targeted messaging, to create a more engaging and customized user experience. + From 3a7ee152e0b49a84eaa243e67b4ae11992da7ad4 Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 28 Oct 2024 19:05:59 -0500 Subject: [PATCH 10/51] add best practices info --- src/unify/Traits/recommended-items.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index 32dcd2ac44..fa2baa2fe8 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -7,7 +7,7 @@ Recommended Items, part of Segment's CustomerAI, lets you add personalized item Based on a user's past interactions, this trait generates a list of up to 5 items, like products, articles, or songs, that each user is most likely to engage with. This recommendation is designed for cases where you want to personalize experiences, like email content, in-app recommendations, or website suggestions, to fit each user's unique preferences. -In this guide, you’ll learn how to set up a Recommended Item trait, as well as best practices to get the most out of your recommendations. +In this guide, you’ll learn how Recommended Items works, how to set up a Recommended Item trait, and best practices to get the most out of your recommendations. ## How Recommended Items works @@ -53,3 +53,10 @@ Suppose you’re managing a music streaming app and want to give each user perso By setting up a trait like this, each user profile now includes personalized recommendations that reflect individual tastes. You can use these recommendations across a range of touchpoints, like in-app sections, personalized email content, or targeted messaging, to create a more engaging and customized user experience. +## Best practices + +Keep the following in mind as you work with Recommended Items: + +- **Limit recommendations to key items**: Start with 5-7 items per profile. This keeps recommendations concise and tailored to each user's preferences. +- **Consider audience size**: Larger audiences could dilute the likelihood of high engagement for each recommended item. Aim for the top 20% of users to keep recommendations impactful. +- **Give the system time to build the trait**: Recommendation traits can take up to 48 hours to calculate, depending on data volume and complexity. Segment recommends waiting until 48 hours have passed before using the trait in campaigns. \ No newline at end of file From c4c4ee9b0ab35eaaf0552dfb9f8c19e62c8ee8c4 Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 28 Oct 2024 19:11:38 -0500 Subject: [PATCH 11/51] some cleanup --- src/unify/Traits/recommended-items.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index fa2baa2fe8..5dc8bd2778 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -13,15 +13,22 @@ In this guide, you’ll learn how Recommended Items works, how to set up a Recom Recommended Items uses your interaction events (like `order_completed`, `product_added`, and `product_searched`) along with event metadata to generate personalized recommendations for each user. Here’s an overview of the process: -1. **Data collection**: Segment captures user interactions from your select events. +1. **Data collection**: Segment captures user interactions from your chosen events. 2. **Pattern analysis**: Machine learning models analyze these interactions to recognize patterns and user preferences. 3. **Item ranking**: Based on this analysis, Segment generates an ordered list of recommended items for each user, ranked from most to least likely to engage. 4. **Profile storage**: Segment then saves these recommendations as an array on each eligible user profile. +Once Segment attaches the recommendation array to a profile, you can use it to: + +- Personalize experiences with the [Profile API](/docs/unify/profile-api/) +- Send Recommended Items traits to downstream destinations +- Build further segments based on Recommended Items +- Trigger customized campaigns and experiences tailored to individual users + ## Create a Recommended Item trait > info "Before you begin" -> Before you create Recommended Item traits, you'll first need to set up a Recommendation Catalog. The catalog setup process involves mapping your interaction events, as well as providing product metadata from those interaction events. If you've not yet set up your Recommendation Catalog, follow the instructions in the [Product Based Audiences documentation](/docs/engage/audiences/product-based-audiences/#set-up-your-recommendation-catalog). +> Before you create Recommended Item traits, you'll first need to set up a Recommendation Catalog. The catalog setup process involves mapping your interaction events and providing product metadata to support recommendations. If you haven't yet set up your Recommendation Catalog, follow the steps in the [Product Based Audiences documentation](/docs/engage/audiences/product-based-audiences/#set-up-your-recommendation-catalog). Follow these steps to create a Recommended Item trait: From 49c70bc29c66b1ef5f08687ff18af38b4c6ad943 Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 28 Oct 2024 19:40:45 -0500 Subject: [PATCH 12/51] add screenshot plus some more cleanup [netlify-build] --- src/unify/Traits/recommended-items.md | 27 ++++++++++++++-------- src/unify/images/recommendation_items.png | Bin 0 -> 147519 bytes 2 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 src/unify/images/recommendation_items.png diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index 5dc8bd2778..5ef17944a1 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -3,11 +3,15 @@ title: Recommended Items plan: unify-plus --- -Recommended Items, part of Segment's CustomerAI, lets you add personalized item recommendations as a trait to each user profile. +Recommended Items, part of Segment's CustomerAI, lets you add personalized item recommendations as a [computed trait](/docs/unify/traits/computed-traits/) to each user profile. -Based on a user's past interactions, this trait generates a list of up to 5 items, like products, articles, or songs, that each user is most likely to engage with. This recommendation is designed for cases where you want to personalize experiences, like email content, in-app recommendations, or website suggestions, to fit each user's unique preferences. +Based on a user's past interactions, this trait generates a list of up to 5 items, like products, articles, or songs, that each user is most likely to engage with. -In this guide, you’ll learn how Recommended Items works, how to set up a Recommended Item trait, and best practices to get the most out of your recommendations. +Segment designed Recommended Items for cases where you want to personalize experiences, like email content, in-app recommendations, or website suggestions, to fit each user's unique preferences. + +On this page, you’ll learn how Recommended Items works, how to create a Recommended Item trait, and best practices to get the most out of your recommendations. + +![The Select Computed Trait screen in the Segment UI, showing options like Predictions, Recommendation (selected), Event counter, Aggregation, and Most frequent. The Recommendation option description reads "Recommend personalized products" and includes additional details about Cross Sell, Personalization, and Next Best Action use cases.](../images/recommendation_items.png). ## How Recommended Items works @@ -25,7 +29,7 @@ Once Segment attaches the recommendation array to a profile, you can use it to: - Build further segments based on Recommended Items - Trigger customized campaigns and experiences tailored to individual users -## Create a Recommended Item trait +## Create a Recommended Items trait > info "Before you begin" > Before you create Recommended Item traits, you'll first need to set up a Recommendation Catalog. The catalog setup process involves mapping your interaction events and providing product metadata to support recommendations. If you haven't yet set up your Recommendation Catalog, follow the steps in the [Product Based Audiences documentation](/docs/engage/audiences/product-based-audiences/#set-up-your-recommendation-catalog). @@ -35,10 +39,11 @@ Follow these steps to create a Recommended Item trait: 1. In your Segment workspace, navigate to **Unify > Traits > + Create computed trait**. 2. In the **New Computed Trait** builder, click **Recommendation**, then click **Next**. 3. In **Select users**, click **+ Add condition** to choose the users who should receive recommendations. - - You can create recommendations for up to 2 million non-anonymous customers. + - You can create recommendations for up to 2 million **non-anonymous** customers. 4. In **Define recommended items**, choose the item type you want to recommend. - This is based on your product catalog. -5. Choose how many item types you want to return onto each profile. You can select up to 5 item types. +5. Choose how many item types you want to return onto each profile. + - You can select up to 5 item types. 6. Click **Calculate** to get a preview of the number of users who will receive your recommendations, then click **Next**. 7. (Optional:) Select destinations you want to sync the trait to, then click **Next**. 8. Give your trait a name, then click **Create Trait**. @@ -47,7 +52,9 @@ Segment begins creating your new trait. This process could take up to 48 hours. ## Example use case: personalized album recommendations -Suppose you’re managing a music streaming app and want to give each user personalized music recommendations based on their listening habits. Here's how you might set this trait up: +Suppose you’re managing a music streaming app and want to give each user personalized music recommendations based on their listening habits. + +Here's how you could configure this trait: | Step | Configuration | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -55,7 +62,7 @@ Suppose you’re managing a music streaming app and want to give each user perso | Item type | Select **Albums** as the item type to recommend. Because you have an extensive catalog of music, this lets each listener receive recommendations tailored to their interests. | | Number of item types | You decide to return a maximum of 5 albums for each profile, keeping the recommendations relevant and concise. | | Calculate | Clicking **Calculate** gives you an overview of how many users will receive the album recommendations. Use it to ensure your conditions and catalog mapping meet your criteria. | -| Sync to destinations | This optional steps lets you sync the trait to third-party destinations that can deliver album recommendations over email, in-app messaging, or push notifications. | +| Sync to destinations | This optional step lets you sync the trait to third-party destinations to deliver album recommendations over email, in-app messaging, or push notifications. | | Trait naming | Name your trait `Personalized Album Recommendations`, making it easy to identify for future campaigns. | By setting up a trait like this, each user profile now includes personalized recommendations that reflect individual tastes. You can use these recommendations across a range of touchpoints, like in-app sections, personalized email content, or targeted messaging, to create a more engaging and customized user experience. @@ -65,5 +72,5 @@ By setting up a trait like this, each user profile now includes personalized rec Keep the following in mind as you work with Recommended Items: - **Limit recommendations to key items**: Start with 5-7 items per profile. This keeps recommendations concise and tailored to each user's preferences. -- **Consider audience size**: Larger audiences could dilute the likelihood of high engagement for each recommended item. Aim for the top 20% of users to keep recommendations impactful. -- **Give the system time to build the trait**: Recommendation traits can take up to 48 hours to calculate, depending on data volume and complexity. Segment recommends waiting until 48 hours have passed before using the trait in campaigns. \ No newline at end of file +- **Consider audience size**: Larger audiences can dilute engagement rates for each recommended item. Focusing on the top 20% of users keeps recommendations relevant and impactful. +- **Give the system time to build the trait**: Recommended Item traits can take up to 48 hours to build, depending on data volume and complexity. Segment recommends waiting until 48 hours have passed before using the trait in campaigns. \ No newline at end of file diff --git a/src/unify/images/recommendation_items.png b/src/unify/images/recommendation_items.png new file mode 100644 index 0000000000000000000000000000000000000000..5936f7dec2f2f57c3eecbf9ebf4f9e13be66d5a6 GIT binary patch literal 147519 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 S0y_Z%{F4@!6Dt$Z^Z$Q3i8a^& literal 0 HcmV?d00001 From b6fd90290b70fd0e17af7dcfd7bbb9d2de48e571 Mon Sep 17 00:00:00 2001 From: AnnieZhao17 Date: Tue, 29 Oct 2024 15:38:21 -0700 Subject: [PATCH 13/51] Add databricks integrations [netlify-build] --- src/connections/aws-privatelink.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md index 596b0c3db5..05742a2d13 100644 --- a/src/connections/aws-privatelink.md +++ b/src/connections/aws-privatelink.md @@ -18,6 +18,8 @@ Usage limits for each customer during the AWS PrivateLink Private Beta include t The following Databricks integrations support PrivateLink: - [Databricks storage destination](/docs/connections/storage/catalog/databricks/) - [Databricks Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/databricks-setup/) +- [Databricks Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/databricks-profiles-sync/) +- [Databricks Data Graph](/docs/unify/data-graph/setup-guides/databricks-setup/) > info "Segment recommends reviewing the Databricks documentation before attempting AWS PrivateLink setup" > The setup required to configure the Databricks PrivateLink integration requires front-end and back-end PrivateLink configuration. Review the [Databricks documentation on AWS PrivateLink](https://docs.databricks.com/en/security/network/classic/privatelink.html){:target="_blank”} to ensure you have everything required to set up this configuration before continuing. From 80337597116f15faaa803565c48fa28c25fc3f4f Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 18:16:46 -0500 Subject: [PATCH 14/51] add to sidenav --- src/_data/sidenav/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/_data/sidenav/main.yml b/src/_data/sidenav/main.yml index 26bfcfcd9a..9955be1df0 100644 --- a/src/_data/sidenav/main.yml +++ b/src/_data/sidenav/main.yml @@ -389,6 +389,8 @@ sections: title: Custom Traits - path: '/unify/traits/sql-traits' title: SQL Traits + - path: '/unify/traits/recommended-items' + title: Recommended Items - path: /unify/profile-api title: Profile API - path: /unify/debugger From a2a18c77833e6341a539aa87dd4d7a8798c13f4e Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 19:03:27 -0500 Subject: [PATCH 15/51] Add Recommended Items to Computed Traits list --- src/unify/Traits/computed-traits.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/unify/Traits/computed-traits.md b/src/unify/Traits/computed-traits.md index db926bc73c..4ccfab1308 100644 --- a/src/unify/Traits/computed-traits.md +++ b/src/unify/Traits/computed-traits.md @@ -25,6 +25,8 @@ Segment currently supports the following types of computed traits: - [Last](#last) - [Unique List](#unique-list) - [Unique List Count](#unique-list-count) + - [Predictions](/docs/unify/traits/predictions/) + - [Recommended Items](/docs/unify/traits/recommended-items/) - [Conditions](#conditions) - [Connecting your Computed Trait to a Destination](#connecting-your-computed-trait-to-a-destination) - [Editing Realtime Traits](#editing-realtime-traits) From bf84578e5c58886c0dd41c894d4cfdd084db1714 Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 19:04:34 -0500 Subject: [PATCH 16/51] remove CustomerAI references [netlify-build] --- src/unify/Traits/recommended-items.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index 5ef17944a1..39bc367920 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -3,7 +3,7 @@ title: Recommended Items plan: unify-plus --- -Recommended Items, part of Segment's CustomerAI, lets you add personalized item recommendations as a [computed trait](/docs/unify/traits/computed-traits/) to each user profile. +With Recommended Items, you can add personalized item recommendations as a [computed trait](/docs/unify/traits/computed-traits/) to each user profile. Based on a user's past interactions, this trait generates a list of up to 5 items, like products, articles, or songs, that each user is most likely to engage with. From 1ee9470482a499154476b448c9da4cc891a07dd1 Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 19:36:22 -0500 Subject: [PATCH 17/51] add structure and first few sections --- .../journeys/event-triggered-journeys.md | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/engage/journeys/event-triggered-journeys.md diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md new file mode 100644 index 0000000000..8b152fbb0e --- /dev/null +++ b/src/engage/journeys/event-triggered-journeys.md @@ -0,0 +1,43 @@ +--- +title: Event-Triggered Journeys +plan: engage-foundations +--- + +With Event-triggered Journeys, you can build real-time, event-based marketing workflows to automate and personalize customer journeys. + +Unlike traditional audience-based journeys that rely on pre-defined user segments, these journeys start automatically when users perform specific actions on your website or app. + +On this page, you'll learn how to create an Event-triggered Journey, configure entry conditions, and apply best practices. + +## Overview + +Event-triggered Journeys help you create a responsive approach for time-sensitive use cases, like cart abandonment campaigns and transactional messages. Where audience-based journeys activate based on aggregated conditions, Event-triggered Journeys respond instantly to individual events, delivering personalized experiences based on the full context of each event. + +Opt for an event-triggered journey in situations like these: + +- When campaigns require real-time action in response to user behavior. +- For transactional messages (like receipts and confirmations) that require specific event-based triggers. +- In abandonment campaigns where a follow-up is needed if a corresponding completion event doesn’t occur. + +## Build an Event-triggered Journey + +Before you begin building an Event-triggered Journey, make sure that: + +- You've enabled all [destinations](/docs/connections/destinations/) intended for event delivery in [Connections](/docs/connections/). +- The events you want to use as triggers are already available in your Segment workspace. + +To set up an Event-triggered Journey: + +1. In your Segment workspace, navigate to **Engage > Journeys**, then click **+ Create journey**. +2. On the **Create journey** page, select **User performs an event**, then click **Next**. +3. Give your new journey a name and, optionally, a description. +4. Select entry event: + - Choose the event that will trigger user entry into the journey. + - (Optional:) Apply filters based on event property values to refine entry conditions. For example, enter only if `{property} = value A, value B, or value C`. +5. Configure entry rules: + - **Re-enter every time event occurs** (default): Users enter the journey each time they trigger the specified event. + - **Enter one time**: Users enter the journey once only, regardless of repeated event triggers. +6. **If you chose Re-enter every time event occurs in Step 5**, select a unique identifier. +7. Configure event delivery to destinations by selecting a destination or setting up a custom destination function. +8. Preview the contextual payload that Segment will send to your destination(s). +9. After you've finished setting up your journey, click **Publish**, then click **Publish** again in the popup. \ No newline at end of file From 787575c14b1d6901e37a78006d10dc529ba75d47 Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 20:00:39 -0500 Subject: [PATCH 18/51] add information on unique identifiers --- src/engage/journeys/event-triggered-journeys.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 8b152fbb0e..cbd1fa01df 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -37,7 +37,20 @@ To set up an Event-triggered Journey: 5. Configure entry rules: - **Re-enter every time event occurs** (default): Users enter the journey each time they trigger the specified event. - **Enter one time**: Users enter the journey once only, regardless of repeated event triggers. -6. **If you chose Re-enter every time event occurs in Step 5**, select a unique identifier. +6. **If you chose Re-enter every time event occurs in Step 5**, select a [unique identifier](#unique-identifiers). 7. Configure event delivery to destinations by selecting a destination or setting up a custom destination function. 8. Preview the contextual payload that Segment will send to your destination(s). -9. After you've finished setting up your journey, click **Publish**, then click **Publish** again in the popup. \ No newline at end of file +9. After you've finished setting up your journey, click **Publish**, then click **Publish** again in the popup. + +## Working with Event-trigged Journeys + +#### Unique identifiers + +Unique identifiers in Event-triggered Journeys help you manage multiple journey instances when a user triggers the same event more than once. + +You can configure unique identifiers if you select **Re-enter every time event occurs** when you create an event-triggered journey. Choose an event property as the unique identifier to ensure downstream events link back to the right journey instance. + +By defining an identifier, you ensure that follow-up events within the journey get matched to the correct instance, preserving context for tracking and personalization. + +For example, in an abandonment journey, suppose a user starts two applications (like `application_started`), each with a different `application_id`. By setting `application_id` as the unique identifier, Segment can match follow-up events (like `application_completed`) to the correct application journey. This way, each journey instance only receives the completion event for its specific application. + From 61cd860ad4acbf808c7474945a8c2e4666f03183 Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 20:10:13 -0500 Subject: [PATCH 19/51] rephrase additional configuration options section --- src/engage/journeys/event-triggered-journeys.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index cbd1fa01df..23edf99f43 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -42,7 +42,9 @@ To set up an Event-triggered Journey: 8. Preview the contextual payload that Segment will send to your destination(s). 9. After you've finished setting up your journey, click **Publish**, then click **Publish** again in the popup. -## Working with Event-trigged Journeys +### Journey setup configuration options + +Event-triggered Journeys includes advanced options to help you tailor journey behavior and customize data delivery to downstream destinations. #### Unique identifiers @@ -54,3 +56,8 @@ By defining an identifier, you ensure that follow-up events within the journey g For example, in an abandonment journey, suppose a user starts two applications (like `application_started`), each with a different `application_id`. By setting `application_id` as the unique identifier, Segment can match follow-up events (like `application_completed`) to the correct application journey. This way, each journey instance only receives the completion event for its specific application. +#### Set data to downstream destinations + +Event-triggered Journeys lets you send journey data to designated destinations, facilitating real-time, personalized messaging. Event-triggered Journeys supports the [Braze Actions](/docs/connections/destinations/catalog/actions-braze-cloud/), [Customer.io Actions](/docs/connections/destinations/catalog/actions-customerio/), and [Iterable Actions](/docs/connections/destinations/catalog/actions-iterable/) destinations. + +For other destinations, you can use [Destination Functions](/docs/connections/functions/destination-functions/) to run additional logic, like enriching with Profile API traits or filtering the payload. \ No newline at end of file From faa58b48c5a0c4a1cf34438cc8803c0aa990325c Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 22:00:13 -0500 Subject: [PATCH 20/51] some cleanup --- .../journeys/event-triggered-journeys.md | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 23edf99f43..0d3a7f9223 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -11,7 +11,9 @@ On this page, you'll learn how to create an Event-triggered Journey, configure e ## Overview -Event-triggered Journeys help you create a responsive approach for time-sensitive use cases, like cart abandonment campaigns and transactional messages. Where audience-based journeys activate based on aggregated conditions, Event-triggered Journeys respond instantly to individual events, delivering personalized experiences based on the full context of each event. +Event-triggered Journeys help you create a responsive approach for time-sensitive use cases, like cart abandonment campaigns and transactional messages. + +Where [audience-based journeys](/docs/engage/journeys/build-journey/) activate based on aggregated conditions, Event-triggered Journeys respond instantly to individual events, delivering personalized experiences based on the full context of each event. Opt for an event-triggered journey in situations like these: @@ -21,10 +23,8 @@ Opt for an event-triggered journey in situations like these: ## Build an Event-triggered Journey -Before you begin building an Event-triggered Journey, make sure that: - -- You've enabled all [destinations](/docs/connections/destinations/) intended for event delivery in [Connections](/docs/connections/). -- The events you want to use as triggers are already available in your Segment workspace. +> info "Before you begin" +> Before you start building an event-triggered journey, make sure that you've enabled all [destinations](/docs/connections/destinations/) you plan to send data to, and that the events you want to use as triggers are already available in your Segment workspace. To set up an Event-triggered Journey: @@ -56,8 +56,19 @@ By defining an identifier, you ensure that follow-up events within the journey g For example, in an abandonment journey, suppose a user starts two applications (like `application_started`), each with a different `application_id`. By setting `application_id` as the unique identifier, Segment can match follow-up events (like `application_completed`) to the correct application journey. This way, each journey instance only receives the completion event for its specific application. -#### Set data to downstream destinations +#### Send data to downstream destinations + +Event-triggered Journeys lets you send journey data to supported destinations, facilitating real-time, personalized messaging. Event-triggered Journeys supports the [Braze Actions](/docs/connections/destinations/catalog/actions-braze-cloud/), [Customer.io Actions](/docs/connections/destinations/catalog/actions-customerio/), and [Iterable Actions](/docs/connections/destinations/catalog/actions-iterable/) destinations. + +For other destinations, you can use [Destination Functions](/docs/connections/functions/destination-functions/) to run additional logic, like enriching with [Profile API traits](/docs/unify/profile-api/) or filtering the payload. + +## Working with Event-triggered Journeys -Event-triggered Journeys lets you send journey data to designated destinations, facilitating real-time, personalized messaging. Event-triggered Journeys supports the [Braze Actions](/docs/connections/destinations/catalog/actions-braze-cloud/), [Customer.io Actions](/docs/connections/destinations/catalog/actions-customerio/), and [Iterable Actions](/docs/connections/destinations/catalog/actions-iterable/) destinations. +Segment built Event-triggered Journeys to respond instantly to events, offering real-time capabilities with a few considerations in mind. -For other destinations, you can use [Destination Functions](/docs/connections/functions/destination-functions/) to run additional logic, like enriching with Profile API traits or filtering the payload. \ No newline at end of file +- **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 several actions-based destinations (like Braze, Customer.io, and Iterable) you can only add one destination for each journey instance. For other destinations, use a Destination Function to apply custom logic to the payload. +- **Event payload structure**: The event payload sent to destinations includes a unique computation key to track each journey instance. Segment automatically generates this key for each entry, ensuring data integrity for personalization +- **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. \ No newline at end of file From 062128c842d5e68576f7977292eda7e6a1701048 Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 22:02:34 -0500 Subject: [PATCH 21/51] real-time delivery blurb --- src/engage/journeys/event-triggered-journeys.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 0d3a7f9223..f37761e8b4 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -71,4 +71,5 @@ Segment built Event-triggered Journeys to respond instantly to events, offering - **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 several actions-based destinations (like Braze, Customer.io, and Iterable) you can only add one destination for each journey instance. For other destinations, use a Destination Function to apply custom logic to the payload. - **Event payload structure**: The event payload sent to destinations includes a unique computation key to track each journey instance. Segment automatically generates this key for each entry, ensuring data integrity for personalization -- **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. \ No newline at end of file +- **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 occurs to when the payload reaches the destination. However, external factors outside of Segment's control may occasionally introduce latency. \ No newline at end of file From 748ad9272549a20aadd5631aaf5af89e9937d229 Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 22:11:07 -0500 Subject: [PATCH 22/51] add best practices table --- src/engage/journeys/event-triggered-journeys.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index f37761e8b4..7789528093 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -62,6 +62,19 @@ Event-triggered Journeys lets you send journey data to supported destinations, f For other destinations, you can use [Destination Functions](/docs/connections/functions/destination-functions/) to run additional logic, like enriching with [Profile API traits](/docs/unify/profile-api/) or filtering the payload. +## Best practices + +Follow the best practices in this table to optimize your Event-triggered Journeys: + +| Recommendation | Details | +| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Use specific event filters | When you configure entry events, apply precise filters based on event property values to refine which users enter the journey. This helps target specific user actions and improves the journey's relevance. | +| Use unique identifiers | If a journey allows users to enter multiple times, set a unique identifier to track each instance accurately. Using an identifier like `application_id` ensures that follow-up events stay associated with the right journey instance. | +| Limit personal identifiable information | Stay compliant and respect user privacy by not including any sensitive or personal identifiable information (PII) data in journey conditions and destinations. | +| Preview payloads before publishing | Review the journey payload to verify that it includes all necessary context from the triggering event. This helps confirm that the data reaching destinations matches your campaign needs. | +| Test journey after publishing | Consider setting up a live test right after publishing to confirm that the journey behaves as expected and that data flows correctly to destinations. | + + ## Working with Event-triggered Journeys Segment built Event-triggered Journeys to respond instantly to events, offering real-time capabilities with a few considerations in mind. From e0766c360d134430a501d9d10bf8a0913d9733c0 Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 22:18:17 -0500 Subject: [PATCH 23/51] add use cases section --- .../journeys/event-triggered-journeys.md | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 7789528093..f56c96d3f7 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -85,4 +85,24 @@ Segment built Event-triggered Journeys to respond instantly to events, offering - **Destination options**: While Event-triggered Journeys support several actions-based destinations (like Braze, Customer.io, and Iterable) you can only add one destination for each journey instance. For other destinations, use a Destination Function to apply custom logic to the payload. - **Event payload structure**: The event payload sent to destinations includes a unique computation key to track each journey instance. Segment automatically generates this key for each entry, ensuring data integrity for personalization - **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 occurs to when the payload reaches the destination. However, external factors outside of Segment's control may occasionally introduce latency. \ No newline at end of file +- **Real-time delivery**: Event-triggered Journeys aim for an expected delivery time of under 5 minutes from the moment an event occurs to when the payload reaches the destination. However, external factors outside of Segment's control may occasionally introduce latency. + +## Use Cases + +Event-triggered Journeys can power a variety of real-time, personalized experiences. This section details some common scenarios to help you see how they might work in practice. + +### Real-time event forwarding + +Suppose you want to instantly send a personalized message whenever a user completes a specific action on your site, like filling out a form or subscribing to a service. With Event-triggered Journeys, you can configure the journey to trigger each time this entry event occurs. Segment will forward the event data, including all relevant details, to your connected destination in real-time. + +### Real-time abandonment Campaigns + +Imagine you’re running an e-commerce site and want to follow up with users who start the checkout process but don’t complete it within a certain timeframe. You can create an Event-triggered Journey to watch for abandonment cases like these. + +Start by setting the `checkout_started` event as the trigger and specify a unique identifier like `session_id` to track each user’s journey instance. Then, configure the journey to check for the `purchase_completed` event within a defined window (for example, 1 hour). If the user doesn’t complete the purchase, the journey can automatically send a nudge to encourage them to finish their order. + +### Personalized follow-up Messages + +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 Function to enrich the message with event-specific context. \ No newline at end of file From f0e45d243045d1c4b440fe13f89bde38950da779 Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 29 Oct 2024 23:04:57 -0500 Subject: [PATCH 24/51] add beta callout [netlify-build] --- src/engage/journeys/event-triggered-journeys.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index f56c96d3f7..1e87a00de6 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -9,6 +9,9 @@ Unlike traditional audience-based journeys that rely on pre-defined user segment On this page, you'll learn how to create an Event-triggered Journey, configure entry conditions, and apply best practices. +> info "Event-Triggered Journeys is in Beta" +> Event-Triggered Journeys is in public beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. + ## Overview Event-triggered Journeys help you create a responsive approach for time-sensitive use cases, like cart abandonment campaigns and transactional messages. From 4d0ad60cf1d38045d0c3b33833aa3a7843e983a9 Mon Sep 17 00:00:00 2001 From: stayseesong Date: Wed, 30 Oct 2024 13:25:35 -0700 Subject: [PATCH 25/51] [netlify-build] --- src/_data/sidenav/strat.yml | 2 + .../actions-first-party-dv360/index.md | 78 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/connections/destinations/catalog/actions-first-party-dv360/index.md diff --git a/src/_data/sidenav/strat.yml b/src/_data/sidenav/strat.yml index 9fc64cf428..51d8852447 100644 --- a/src/_data/sidenav/strat.yml +++ b/src/_data/sidenav/strat.yml @@ -77,6 +77,8 @@ sections: title: Google Ads Remarketing Lists destination (Personas) - path: /connections/destinations/catalog/actions-display-video-360 title: Display and Video 360 (Actions) Destination + - path: /connections/destinations/catalog/actions-first-party-dv360 + title: First Party Display and Video 360 (Actions) Destination - slug: salesforce diff --git a/src/connections/destinations/catalog/actions-first-party-dv360/index.md b/src/connections/destinations/catalog/actions-first-party-dv360/index.md new file mode 100644 index 0000000000..2b78046047 --- /dev/null +++ b/src/connections/destinations/catalog/actions-first-party-dv360/index.md @@ -0,0 +1,78 @@ +--- +title: First Party Display and Video 360 (Actions) Destination +strat: google +hide-settings: true +id: 6683e1d5e37fd84efcf3bbef +engage: true +--- + +Google’s [Display & Video (DV360)](https://marketingplatform.google.com/about/display-video-360/){:target="_blank"} is an end-to-end campaign management tool that enables enterprise customers to plan, measure, and run display and video advertisements. Segment’s integration with DV360 enables Segment customers to sync audiences created in Engage with DV360 for centralized audience management and improved retargeting. + +This destination is different from the existing DV360 Actions as it allows you to upload [contact info](https://developers.google.com/display-video/api/reference/rest/v3/firstAndThirdPartyAudiences#ContactInfo){:target="_blank"} and the [mobile device ID](https://developers.google.com/display-video/api/reference/rest/v3/firstAndThirdPartyAudiences#mobiledeviceidlist){:target="_blank"}. + +This destination can only be used with Engage. + +## Set up +Configuring this integration requires action by both you in your Segment workspace, and Google in your Google Marketing Platform account. As a result, the time required to finish configuration and setup can vary. + +### Enable the destination + +To enable the First Party DV 360 destionation: +1. Navigate to **Engage > Engage Settings > Destinations > Add Destination** in your Segment workspace. +2. Search for *First Party DV360* and click **Add destination**. +3. Navigate to **Connections > Destinations** and search for the **First Party DV 360** destination you created. +4. Select the **Mappings** tab and click **+ New Mapping**. +5. Select the action you'd like to use. You can choose from: + + Option | Details + ------ | -------- + Edit Customer Match Members - Contact Info List | Add or update customer match members in Contact Info List Audience. + Edit Customer Match Members - Mobile Device Id List | Add or update customer match members in Mobile Device Id List Audience. + Remove Customer Match Members - Contact Info List | Remove customer match members from the Contact Info List Audience. + Remove Customer Match Members - Mobile Device Id List | Remove customer match members from the Mobile Device Id List Audience. + + * Select either **Customer Info List** or **Mobile Device Id List** depending on what audience type you use. + * Select **Edit Customer Match Members** to add or update users to an audience. + * Select **Remove Customer Match Members** to remove users from an audience. + * If you want to create actions for both Customer Info List and Mobile Device Id List, you can create all 4 mappings. +6. Switch the toggle to enable the destination. + + +### Create an audience + +To create an audience in your destination: +1. Navigate to **Engage > Audiences** and click **+New audience**. +2. Fill out the audience seetings. + * If you want to use Mobile Device ID Lists, ensure to fill out your app ID. + * Make sure you enabled track calls. +3. Click **Save**. +4. You should see an audience populate in your DV360 account. If you don't immediately see this, it can take up to a couple of hours for your audience to populate. +5. Switch the toggle to **Connect to destination**. +6. Navigate to **Connections > Destinations** and select the First Party DV360 destination. +7. Select the **Mappings** tab. +8. Click **+ New Mapping** and select **Remove from Audience**. +9. Click **Save**. +10. Enable the mapping. + +## Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. + +Consent mode in the Gtag library and Google Analytics is designed to help website owners comply with privacy regulations, such as the General Data Protection Regulation (GDPR) in the European Union. It allows website owners to adjust how these tools use and collect data based on user consent. + +With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. + +Segment automatically sends consent as `TRUE` for this destination. Segment uses the [bulk-uploader workflow](https://developers.google.com/authorized-buyers/rtb/bulk-uploader#workflow){:target="_blank"} which requires consented data. Ensure all audiences and journeys are connected to consented audiences. + +{% include components/actions-fields.html %} + +## Data requirements +Based on Google’s documentation, make sure you send the correct required identifiers: +* [Contact info list requirements](https://developers.google.com/display-video/api/reference/rest/v3/firstAndThirdPartyAudiences#contactinfo){:target="_blank"} + * For example, you must send first name, last name, zip code, and country code all together and not just one. Make sure all phone numbers are in [E.164 format](https://en.wikipedia.org/wiki/E.164){:target="_blank"}. +* [Mobile ID Requirements](https://developers.google.com/display-video/api/reference/rest/v3/firstAndThirdPartyAudiences#mobiledeviceidlist){:target="_blank"} + + +## FAQs + +#### When will my data appear in DV360? +When you complete the connection between Segment and DV360, it can take from 24 to 48 hours for Google to create the user list. This must complete before Segment can begin to sync users into that list. From fdac5b435dff5e56f278498d007b35e45ce633c6 Mon Sep 17 00:00:00 2001 From: AnnieZhao17 Date: Wed, 30 Oct 2024 15:54:57 -0700 Subject: [PATCH 26/51] Add remaining integration support [netlify-build] --- src/connections/aws-privatelink.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md index 05742a2d13..8aee7e54cf 100644 --- a/src/connections/aws-privatelink.md +++ b/src/connections/aws-privatelink.md @@ -46,6 +46,7 @@ To implement Segment's PrivateLink integration for Databricks: The following RDS Postgres integrations support PrivateLink: - [RDS Postgres storage destination](/docs/connections/storage/catalog/postgres/) - [RDS Postgres Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup/) +- [RDS Postgres Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/) ### Prerequisites Before you can implement AWS PrivateLink for RDS Postgres, complete the following prerequisites: @@ -68,6 +69,8 @@ To implement Segment's PrivateLink integration for RDS Postgres: The following Redshift integrations support PrivateLink: - [Redshift storage destination](/docs/connections/storage/catalog/redshift/) - [Redshift Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/) +- [Redshift Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/) +- [Redshift Data Graph](/docs/unify/data-graph/setup-guides/redshift-setup/) ### Prerequisites Before you can implement AWS PrivateLink for Redshift, complete the following prerequisites: @@ -88,6 +91,8 @@ To implement Segment's PrivateLink integration for Redshift: The following Snowflake integrations support PrivateLink: - [Snowflake storage destination](/docs/connections/storage/catalog/snowflake/) - [Snowflake Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/snowflake-setup/) +- [Snowflake Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/) +- [Snowflake Data Graph](/docs/unify/data-graph/setup-guides/snowflake-setup/) ### Prerequisites Before you can implement AWS PrivateLink for Snowflake, complete the following prerequisites: From 995d1a6d5f964d50558d4192ce9ba8109e6c3c61 Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 30 Oct 2024 17:55:25 -0500 Subject: [PATCH 27/51] Add hidden flag --- src/engage/journeys/event-triggered-journeys.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 1e87a00de6..0bfd38705a 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -1,6 +1,7 @@ --- title: Event-Triggered Journeys plan: engage-foundations +hidden: true --- With Event-triggered Journeys, you can build real-time, event-based marketing workflows to automate and personalize customer journeys. From ca2467a06a7652fa9acaa67644faf6209709965f Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 30 Oct 2024 17:56:09 -0500 Subject: [PATCH 28/51] private not public beta --- src/engage/journeys/event-triggered-journeys.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 0bfd38705a..4954c79e36 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -10,8 +10,8 @@ Unlike traditional audience-based journeys that rely on pre-defined user segment On this page, you'll learn how to create an Event-triggered Journey, configure entry conditions, and apply best practices. -> info "Event-Triggered Journeys is in Beta" -> Event-Triggered Journeys is in public beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. +> info "Event-Triggered Journeys is in Private Beta" +> Event-Triggered Journeys is in private beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. ## Overview From 68b7c6ac8f09e4837528702c320c50f05645ef87 Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 30 Oct 2024 17:59:07 -0500 Subject: [PATCH 29/51] add optional audience filter to setup instructions --- src/engage/journeys/event-triggered-journeys.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 4954c79e36..5d67bc3c3d 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -37,6 +37,7 @@ To set up an Event-triggered Journey: 3. Give your new journey a name and, optionally, a description. 4. Select entry event: - Choose the event that will trigger user entry into the journey. + - (Optional:) Use an audience filter to restrict entry to users who are already part of a specific audience. - (Optional:) Apply filters based on event property values to refine entry conditions. For example, enter only if `{property} = value A, value B, or value C`. 5. Configure entry rules: - **Re-enter every time event occurs** (default): Users enter the journey each time they trigger the specified event. From 321b9a6874a2bd4647974c848d58f733d9bad45b Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 30 Oct 2024 18:02:40 -0500 Subject: [PATCH 30/51] clarify unique identifiers info --- src/engage/journeys/event-triggered-journeys.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 5d67bc3c3d..d7caa5dc41 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -55,9 +55,10 @@ Event-triggered Journeys includes advanced options to help you tailor journey be Unique identifiers in Event-triggered Journeys help you manage multiple journey instances when a user triggers the same event more than once. -You can configure unique identifiers if you select **Re-enter every time event occurs** when you create an event-triggered journey. Choose an event property as the unique identifier to ensure downstream events link back to the right journey instance. +When you select **Re-enter every time event occurs** when you create an event-triggered journey, you can choose an event property as a unique identifier. Selecting this option does two things: -By defining an identifier, you ensure that follow-up events within the journey get matched to the correct instance, preserving context for tracking and personalization. +- It creates a separate journey instance for each unique identifier value, allowing multiple instances to run in parallel for the same user. +- It ensures that any follow-up events link back to the right journey instance, preserving context for tracking and personalization. For example, in an abandonment journey, suppose a user starts two applications (like `application_started`), each with a different `application_id`. By setting `application_id` as the unique identifier, Segment can match follow-up events (like `application_completed`) to the correct application journey. This way, each journey instance only receives the completion event for its specific application. From 460fcac99c113be40e3a196187c8e3ea080fc09d Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 30 Oct 2024 18:05:16 -0500 Subject: [PATCH 31/51] remove PII guidance --- src/engage/journeys/event-triggered-journeys.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index d7caa5dc41..6249e41c25 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -76,7 +76,6 @@ Follow the best practices in this table to optimize your Event-triggered Journey | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Use specific event filters | When you configure entry events, apply precise filters based on event property values to refine which users enter the journey. This helps target specific user actions and improves the journey's relevance. | | Use unique identifiers | If a journey allows users to enter multiple times, set a unique identifier to track each instance accurately. Using an identifier like `application_id` ensures that follow-up events stay associated with the right journey instance. | -| Limit personal identifiable information | Stay compliant and respect user privacy by not including any sensitive or personal identifiable information (PII) data in journey conditions and destinations. | | Preview payloads before publishing | Review the journey payload to verify that it includes all necessary context from the triggering event. This helps confirm that the data reaching destinations matches your campaign needs. | | Test journey after publishing | Consider setting up a live test right after publishing to confirm that the journey behaves as expected and that data flows correctly to destinations. | From 17e5cbb43dcb102280a008e17181181d3a60c91d Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 30 Oct 2024 18:08:36 -0500 Subject: [PATCH 32/51] clarify real-time delivery bullet --- src/engage/journeys/event-triggered-journeys.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 6249e41c25..2494385fa1 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -88,9 +88,9 @@ Segment built Event-triggered Journeys to respond instantly to events, offering - **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 several actions-based destinations (like Braze, Customer.io, and Iterable) you can only add one destination for each journey instance. For other destinations, use a Destination Function to apply custom logic to the payload. -- **Event payload structure**: The event payload sent to destinations includes a unique computation key to track each journey instance. Segment automatically generates this key for each entry, ensuring data integrity for personalization +- **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 occurs to when the payload reaches the destination. However, external factors outside of Segment's control may occasionally introduce latency. +- **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. ## Use Cases From 8869f4eef307f6ed51c037f4d81fccf5351e896e Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 30 Oct 2024 18:10:41 -0500 Subject: [PATCH 33/51] update use case info --- src/engage/journeys/event-triggered-journeys.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 2494385fa1..cfdcc6d6a2 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -110,4 +110,4 @@ 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 Function to enrich the message with event-specific context. \ No newline at end of file +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. \ No newline at end of file From 310782f1532691d640f7e61a0ff08125899403e7 Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 30 Oct 2024 18:11:53 -0500 Subject: [PATCH 34/51] Add Actions link --- src/engage/journeys/event-triggered-journeys.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index cfdcc6d6a2..b3b4d63732 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -87,8 +87,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 several actions-based destinations (like Braze, Customer.io, and Iterable) you can only add one destination for each journey instance. For other destinations, use a Destination Function to apply custom logic to the payload. -- **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. +- **Destination options**: While Event-triggered Journeys support several [actions-based destinations](/docs/connections/destinations/actions/) (like Braze, Customer.io, and Iterable) you can only add one destination for each journey instance. For other destinations, use a Destination Function to apply custom logic to the payload. +- **Event payload structure**: Each payloadd 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. From 775d467eb60ba77cb23b03a7abdc692d3f3516e4 Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 30 Oct 2024 18:29:07 -0500 Subject: [PATCH 35/51] final cleanup [netlify-build] --- .../journeys/event-triggered-journeys.md | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index b3b4d63732..4600a05551 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -4,20 +4,20 @@ plan: engage-foundations hidden: true --- -With Event-triggered Journeys, you can build real-time, event-based marketing workflows to automate and personalize customer journeys. +With Event-Triggered Journeys, you can build real-time, event-based marketing workflows to automate and personalize customer journeys. -Unlike traditional audience-based journeys that rely on pre-defined user segments, these journeys start automatically when users perform specific actions on your website or app. +Unlike traditional audience-based journeys that rely on pre-defined user segments, event-triggered journeys start automatically when users perform specific actions on your website or app. -On this page, you'll learn how to create an Event-triggered Journey, configure entry conditions, and apply best practices. +On this page, you'll learn how to create an event-triggered journey, configure entry conditions, and work with published event-triggered journeys. -> info "Event-Triggered Journeys is in Private Beta" +> info "Event-Triggered Journeys Private Beta" > Event-Triggered Journeys is in private beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. ## Overview -Event-triggered Journeys help you create a responsive approach for time-sensitive use cases, like cart abandonment campaigns and transactional messages. +Event-triggered journeys help you create a responsive approach for time-sensitive use cases, like cart abandonment campaigns and transactional messages. -Where [audience-based journeys](/docs/engage/journeys/build-journey/) activate based on aggregated conditions, Event-triggered Journeys respond instantly to individual events, delivering personalized experiences based on the full context of each event. +Where [audience-based journeys](/docs/engage/journeys/build-journey/) activate based on aggregated conditions, event-triggered journeys respond instantly to individual events, delivering personalized experiences based on the full context of each event. Opt for an event-triggered journey in situations like these: @@ -25,12 +25,12 @@ Opt for an event-triggered journey in situations like these: - For transactional messages (like receipts and confirmations) that require specific event-based triggers. - In abandonment campaigns where a follow-up is needed if a corresponding completion event doesn’t occur. -## Build an Event-triggered Journey +## Build an event-triggered journey > info "Before you begin" -> Before you start building an event-triggered journey, make sure that you've enabled all [destinations](/docs/connections/destinations/) you plan to send data to, and that the events you want to use as triggers are already available in your Segment workspace. +> Before you start building an event-triggered journey, make sure that you've enabled all [destinations](/docs/connections/destinations/) you plan to send data to and that the events you want to use as triggers are already available in your Segment workspace. -To set up an Event-triggered Journey: +To set up an event-triggered journey: 1. In your Segment workspace, navigate to **Engage > Journeys**, then click **+ Create journey**. 2. On the **Create journey** page, select **User performs an event**, then click **Next**. @@ -49,28 +49,28 @@ To set up an Event-triggered Journey: ### Journey setup configuration options -Event-triggered Journeys includes advanced options to help you tailor journey behavior and customize data delivery to downstream destinations. +Event-Triggered Journeys includes advanced options to help you tailor journey behavior and customize data delivery to downstream destinations. #### Unique identifiers -Unique identifiers in Event-triggered Journeys help you manage multiple journey instances when a user triggers the same event more than once. +Unique identifiers in event-triggered journeys help you manage multiple journey instances when a user triggers the same event more than once. -When you select **Re-enter every time event occurs** when you create an event-triggered journey, you can choose an event property as a unique identifier. Selecting this option does two things: +When you select **Re-enter every time event occurs** when you create an event-triggered journeys, you can choose an event property as a unique identifier. Selecting this option does two things: - It creates a separate journey instance for each unique identifier value, allowing multiple instances to run in parallel for the same user. - It ensures that any follow-up events link back to the right journey instance, preserving context for tracking and personalization. -For example, in an abandonment journey, suppose a user starts two applications (like `application_started`), each with a different `application_id`. By setting `application_id` as the unique identifier, Segment can match follow-up events (like `application_completed`) to the correct application journey. This way, each journey instance only receives the completion event for its specific application. +For example, in an abandonment journey, suppose a user starts two applications (like `application_started`), each with a different `application_id`. By setting `application_id` as the unique identifier, Segment can match follow-up events (like `application_completed`) to the correct application journey. As a result, each journey instance only receives the completion event for its specific application. #### Send data to downstream destinations -Event-triggered Journeys lets you send journey data to supported destinations, facilitating real-time, personalized messaging. Event-triggered Journeys supports the [Braze Actions](/docs/connections/destinations/catalog/actions-braze-cloud/), [Customer.io Actions](/docs/connections/destinations/catalog/actions-customerio/), and [Iterable Actions](/docs/connections/destinations/catalog/actions-iterable/) destinations. +Event-Triggered Journeys lets you send journey data to supported destinations, facilitating real-time, personalized messaging. Event-Triggered Journeys supports the [Braze (Actions)](/docs/connections/destinations/catalog/actions-braze-cloud/), [Customer.io (Actions)](/docs/connections/destinations/catalog/actions-customerio/), and [Iterable (Actions)](/docs/connections/destinations/catalog/actions-iterable/) destinations. For other destinations, you can use [Destination Functions](/docs/connections/functions/destination-functions/) to run additional logic, like enriching with [Profile API traits](/docs/unify/profile-api/) or filtering the payload. ## Best practices -Follow the best practices in this table to optimize your Event-triggered Journeys: +Follow the best practices in this table to optimize your event-triggered journeys: | Recommendation | Details | | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -80,34 +80,34 @@ Follow the best practices in this table to optimize your Event-triggered Journey | Test journey after publishing | Consider setting up a live test right after publishing to confirm that the journey behaves as expected and that data flows correctly to destinations. | -## Working with Event-triggered Journeys +## Working with Event-Triggered Journeys -Segment built Event-triggered Journeys to respond instantly to events, offering real-time capabilities with a few considerations in mind. +Segment built Event-Triggered Journeys to respond instantly to events, offering real-time capabilities with a few considerations in mind. - **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 several [actions-based destinations](/docs/connections/destinations/actions/) (like Braze, Customer.io, and Iterable) you can only add one destination for each journey instance. For other destinations, use a Destination Function to apply custom logic to the payload. -- **Event payload structure**: Each payloadd 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. +- **Destination options**: While Event-Triggered Journeys support several [actions-based destinations](/docs/connections/destinations/actions/) (like Braze, Customer.io, and Iterable) you can only add one destination for each journey instance. For other destinations, use a Destination Function to apply custom logic to the payload. +- **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. +- **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. ## Use Cases -Event-triggered Journeys can power a variety of real-time, personalized experiences. This section details some common scenarios to help you see how they might work in practice. +Event-Triggered Journeys can power a variety of real-time, personalized experiences. This section details some common scenarios to help you see how they might work in practice. ### Real-time event forwarding -Suppose you want to instantly send a personalized message whenever a user completes a specific action on your site, like filling out a form or subscribing to a service. With Event-triggered Journeys, you can configure the journey to trigger each time this entry event occurs. Segment will forward the event data, including all relevant details, to your connected destination in real-time. +Suppose you want to instantly send a personalized message whenever a user completes a specific action on your site, like filling out a form or subscribing to a service. With Event-Triggered Journeys, you can configure the journey to trigger each time this entry event occurs. Segment will forward the event data, including all relevant details, to your connected destination in real-time. ### Real-time abandonment Campaigns -Imagine you’re running an e-commerce site and want to follow up with users who start the checkout process but don’t complete it within a certain timeframe. You can create an Event-triggered Journey to watch for abandonment cases like these. +Imagine you’re running an e-commerce site and want to follow up with users who start the checkout process but don’t complete it within a certain timeframe. You can create an event-triggered Journey to watch for abandonment cases like these. Start by setting the `checkout_started` event as the trigger and specify a unique identifier like `session_id` to track each user’s journey instance. Then, configure the journey to check for the `purchase_completed` event within a defined window (for example, 1 hour). If the user doesn’t complete the purchase, the journey can automatically send a nudge to encourage them to finish their order. ### Personalized follow-up Messages -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. +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. \ No newline at end of file From 7848ac5c7e5a6c66fc3144667c4714c7c1ed39fa Mon Sep 17 00:00:00 2001 From: AnnieZhao17 Date: Wed, 30 Oct 2024 16:34:10 -0700 Subject: [PATCH 36/51] Generalize datagraph link for full instructions --- src/connections/aws-privatelink.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md index 8aee7e54cf..7c5f2fcaaf 100644 --- a/src/connections/aws-privatelink.md +++ b/src/connections/aws-privatelink.md @@ -19,7 +19,7 @@ The following Databricks integrations support PrivateLink: - [Databricks storage destination](/docs/connections/storage/catalog/databricks/) - [Databricks Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/databricks-setup/) - [Databricks Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/databricks-profiles-sync/) -- [Databricks Data Graph](/docs/unify/data-graph/setup-guides/databricks-setup/) +- [Databricks Data Graph](/docs/unify/data-graph/) > info "Segment recommends reviewing the Databricks documentation before attempting AWS PrivateLink setup" > The setup required to configure the Databricks PrivateLink integration requires front-end and back-end PrivateLink configuration. Review the [Databricks documentation on AWS PrivateLink](https://docs.databricks.com/en/security/network/classic/privatelink.html){:target="_blank”} to ensure you have everything required to set up this configuration before continuing. @@ -70,7 +70,7 @@ The following Redshift integrations support PrivateLink: - [Redshift storage destination](/docs/connections/storage/catalog/redshift/) - [Redshift Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/) - [Redshift Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/) -- [Redshift Data Graph](/docs/unify/data-graph/setup-guides/redshift-setup/) +- [Redshift Data Graph](/docs/unify/data-graph/) ### Prerequisites Before you can implement AWS PrivateLink for Redshift, complete the following prerequisites: @@ -92,7 +92,7 @@ The following Snowflake integrations support PrivateLink: - [Snowflake storage destination](/docs/connections/storage/catalog/snowflake/) - [Snowflake Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/snowflake-setup/) - [Snowflake Profiles Sync](/docs/unify/profiles-sync/profiles-sync-setup/) -- [Snowflake Data Graph](/docs/unify/data-graph/setup-guides/snowflake-setup/) +- [Snowflake Data Graph](/docs/unify/data-graph/) ### Prerequisites Before you can implement AWS PrivateLink for Snowflake, complete the following prerequisites: From 305850c95a10758254eb4af4f84e900ef078fda9 Mon Sep 17 00:00:00 2001 From: AnnieZhao17 Date: Wed, 30 Oct 2024 16:34:38 -0700 Subject: [PATCH 37/51] [netlify-build] From 3a6479b364bc7edcd5dbdd843bfdc206bd0441f6 Mon Sep 17 00:00:00 2001 From: stayseesong <83784848+stayseesong@users.noreply.github.com> Date: Wed, 30 Oct 2024 16:50:44 -0700 Subject: [PATCH 38/51] Update src/connections/spec/common.md --- src/connections/spec/common.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/spec/common.md b/src/connections/spec/common.md index f4f17d6a49..5075b5a86e 100644 --- a/src/connections/spec/common.md +++ b/src/connections/spec/common.md @@ -204,7 +204,7 @@ Other libraries only collect `context.library`, any other context variables must - IP Address isn't collected by Segment's libraries, but is instead filled in by Segment's servers when it receives a message for **client side events only**. > info "IPv6" -> At the moment, Segment doesn't support automatically collecting IPv6 addresses. +> Segment doesn't support automatically collecting IPv6 addresses. - The Android library collects `screen.density` with [this method](/docs/connections/spec/common/#context-fields-automatically-collected). From 91036ad140d16cf6dc388813ec045b7f3e6da41f Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Wed, 30 Oct 2024 19:17:17 -0500 Subject: [PATCH 39/51] Update src/unify/Traits/recommended-items.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- src/unify/Traits/recommended-items.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index 39bc367920..604295fc4b 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -39,7 +39,7 @@ Follow these steps to create a Recommended Item trait: 1. In your Segment workspace, navigate to **Unify > Traits > + Create computed trait**. 2. In the **New Computed Trait** builder, click **Recommendation**, then click **Next**. 3. In **Select users**, click **+ Add condition** to choose the users who should receive recommendations. - - You can create recommendations for up to 2 million **non-anonymous** customers. + - You can create recommendations for up to 2 million *non-anonymous* customers. 4. In **Define recommended items**, choose the item type you want to recommend. - This is based on your product catalog. 5. Choose how many item types you want to return onto each profile. From 3f13d7583c9ad3b055f9c0d997755b97759d66bb Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Wed, 30 Oct 2024 19:17:25 -0500 Subject: [PATCH 40/51] Update src/unify/Traits/recommended-items.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- src/unify/Traits/recommended-items.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index 604295fc4b..efa7185156 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -34,7 +34,7 @@ Once Segment attaches the recommendation array to a profile, you can use it to: > info "Before you begin" > Before you create Recommended Item traits, you'll first need to set up a Recommendation Catalog. The catalog setup process involves mapping your interaction events and providing product metadata to support recommendations. If you haven't yet set up your Recommendation Catalog, follow the steps in the [Product Based Audiences documentation](/docs/engage/audiences/product-based-audiences/#set-up-your-recommendation-catalog). -Follow these steps to create a Recommended Item trait: +To create a Recommended Item trait: 1. In your Segment workspace, navigate to **Unify > Traits > + Create computed trait**. 2. In the **New Computed Trait** builder, click **Recommendation**, then click **Next**. From 41f67dc913ce6a4d3d0840c311ec9e950bbfb262 Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Wed, 30 Oct 2024 19:17:30 -0500 Subject: [PATCH 41/51] Update src/unify/Traits/recommended-items.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- src/unify/Traits/recommended-items.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unify/Traits/recommended-items.md b/src/unify/Traits/recommended-items.md index efa7185156..6574b1dd98 100644 --- a/src/unify/Traits/recommended-items.md +++ b/src/unify/Traits/recommended-items.md @@ -45,7 +45,7 @@ To create a Recommended Item trait: 5. Choose how many item types you want to return onto each profile. - You can select up to 5 item types. 6. Click **Calculate** to get a preview of the number of users who will receive your recommendations, then click **Next**. -7. (Optional:) Select destinations you want to sync the trait to, then click **Next**. +7. (*Optional*) Select destinations you want to sync the trait to, then click **Next**. 8. Give your trait a name, then click **Create Trait**. Segment begins creating your new trait. This process could take up to 48 hours. From 0420fe15d32de6940958f7c32f69bdb14b30193b Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 30 Oct 2024 22:08:26 -0500 Subject: [PATCH 42/51] Unify Plus limits update [netlify-build] --- src/unify/product-limits.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/unify/product-limits.md b/src/unify/product-limits.md index 542cd7f9ea..3ad67a0289 100644 --- a/src/unify/product-limits.md +++ b/src/unify/product-limits.md @@ -7,7 +7,7 @@ redirect_from: --- > info "" -> Beginning August 18, 2023, new Unify Plus and Engage users can refer to this page for Segment's product limits. Existing users prior to this date can continue to refer to the Engage product limits in the [Engage Default Limits](/docs/engage/product-limits/) documentation. +> Beginning November 1, 2024, new Unify Plus and Engage users can refer to this page for Segment's product limits. Existing users prior to this date can continue to refer to the Engage product limits in the [Engage Default Limits](/docs/engage/product-limits/) documentation. To provide consistent performance and reliability at scale, Segment enforces default use and rate limits within Unify. Most customers do not exceed these limits. @@ -16,9 +16,22 @@ To learn more about custom limits and upgrades, contact your dedicated Customer ## Unify Plus limits -Beginning August 18, 2023, new Unify Plus users will receive 50 Computed and five AI Traits. In addition, new users will receive the following depending on your Engage plan: -- **Engage Foundations**: 100 Audiences and 75 Journey Steps -- **Engage Premier**: 125 Audiences and 100 Journey Steps +Unify Plus customers receive the following based on their signup date: + +- **For new customers (as of November 1, 2024)**: 50 Computed Traits, 10 Predictions, 3 Recommendation Traits +- **For existing customers (prior to November 1, 2024)**: 50 Computed Traits, 5 Predictions + +Additionally, Unify Plus limits vary based on your Engage plan: + +- **For new customers (as of November 1, 2024)**: + - **Engage Foundations**: 100 Audiences, 75 Journey Steps + - **Engage Plus**: 100 Audiences, 75 Journey Steps, 10 Recommendation Audiences + +- **For existing customers (prior to November 1, 2024)**: Engage Foundations includes 100 Audiences, 75 Journey Steps + +> info "Recommended Items Computed Trait" +> Unify Plus customers who signed up before November 1, 2024, receive a single-use demo version of the [Recommended Items trait](/docs/unify/Traits/recommended-items), which does not refresh. + Visit Segment's [pricing page](https://segment.com/pricing/){:target="_blank"} to learn more. From ee1a7668c742158320168695e64407d83d135121 Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:51:36 -0500 Subject: [PATCH 43/51] Update src/engage/journeys/event-triggered-journeys.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- src/engage/journeys/event-triggered-journeys.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 4600a05551..efb05739e9 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -10,7 +10,7 @@ Unlike traditional audience-based journeys that rely on pre-defined user segment On this page, you'll learn how to create an event-triggered journey, configure entry conditions, and work with published event-triggered journeys. -> info "Event-Triggered Journeys Private Beta" +> info "Private Beta" > Event-Triggered Journeys is in private beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. ## Overview From 36d7cd54cab0f42a572c091a1952919f49c720bf Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:52:28 -0500 Subject: [PATCH 44/51] typo fix --- src/engage/journeys/event-triggered-journeys.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index efb05739e9..39ce8ee103 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -55,7 +55,7 @@ Event-Triggered Journeys includes advanced options to help you tailor journey be Unique identifiers in event-triggered journeys help you manage multiple journey instances when a user triggers the same event more than once. -When you select **Re-enter every time event occurs** when you create an event-triggered journeys, you can choose an event property as a unique identifier. Selecting this option does two things: +When you select **Re-enter every time event occurs** when you create an event-triggered journey, you can choose an event property as a unique identifier. Selecting this option does two things: - It creates a separate journey instance for each unique identifier value, allowing multiple instances to run in parallel for the same user. - It ensures that any follow-up events link back to the right journey instance, preserving context for tracking and personalization. @@ -110,4 +110,4 @@ 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. \ No newline at end of file +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. From 75acbe86b60126dbbf71d42fafe5afb55ed9ceb8 Mon Sep 17 00:00:00 2001 From: stayseesong <83784848+stayseesong@users.noreply.github.com> Date: Thu, 31 Oct 2024 09:56:45 -0700 Subject: [PATCH 45/51] Apply suggestions from code review --- src/engage/journeys/event-triggered-journeys.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/engage/journeys/event-triggered-journeys.md b/src/engage/journeys/event-triggered-journeys.md index 39ce8ee103..59716f8d2c 100644 --- a/src/engage/journeys/event-triggered-journeys.md +++ b/src/engage/journeys/event-triggered-journeys.md @@ -37,10 +37,10 @@ To set up an event-triggered journey: 3. Give your new journey a name and, optionally, a description. 4. Select entry event: - Choose the event that will trigger user entry into the journey. - - (Optional:) Use an audience filter to restrict entry to users who are already part of a specific audience. - - (Optional:) Apply filters based on event property values to refine entry conditions. For example, enter only if `{property} = value A, value B, or value C`. + - (*Optional*) Use an audience filter to restrict entry to users who are already part of a specific audience. + - (*Optional*) Apply filters based on event property values to refine entry conditions. For example, enter only if `{property} = value A, value B, or value C`. 5. Configure entry rules: - - **Re-enter every time event occurs** (default): Users enter the journey each time they trigger the specified event. + - **Re-enter every time event occurs** (*default*): Users enter the journey each time they trigger the specified event. - **Enter one time**: Users enter the journey once only, regardless of repeated event triggers. 6. **If you chose Re-enter every time event occurs in Step 5**, select a [unique identifier](#unique-identifiers). 7. Configure event delivery to destinations by selecting a destination or setting up a custom destination function. From f20930ddc635a204afc05df2bd8110439306f0bc Mon Sep 17 00:00:00 2001 From: pwseg Date: Thu, 31 Oct 2024 12:00:41 -0500 Subject: [PATCH 46/51] more clarity --- src/unify/product-limits.md | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/unify/product-limits.md b/src/unify/product-limits.md index 3ad67a0289..b061008938 100644 --- a/src/unify/product-limits.md +++ b/src/unify/product-limits.md @@ -18,20 +18,13 @@ To learn more about custom limits and upgrades, contact your dedicated Customer Unify Plus customers receive the following based on their signup date: -- **For new customers (as of November 1, 2024)**: 50 Computed Traits, 10 Predictions, 3 Recommendation Traits -- **For existing customers (prior to November 1, 2024)**: 50 Computed Traits, 5 Predictions +- **New Unify version (as of November 1, 2024)**: 50 Computed Traits, 10 Predictions, 3 Recommendation Traits +- **Existing Unify version (prior to November 1, 2024)**: 50 Computed Traits, 5 Predictions Additionally, Unify Plus limits vary based on your Engage plan: -- **For new customers (as of November 1, 2024)**: - - **Engage Foundations**: 100 Audiences, 75 Journey Steps - - **Engage Plus**: 100 Audiences, 75 Journey Steps, 10 Recommendation Audiences - -- **For existing customers (prior to November 1, 2024)**: Engage Foundations includes 100 Audiences, 75 Journey Steps - -> info "Recommended Items Computed Trait" -> Unify Plus customers who signed up before November 1, 2024, receive a single-use demo version of the [Recommended Items trait](/docs/unify/Traits/recommended-items), which does not refresh. - +- **Engage Plus**: 100 Audiences, 75 Journey Steps, 10 Recommendation Audiences +- **Engage Foundations** (available for renewal only as of November 1, 2024): 100 Audiences, 75 Journey Steps Visit Segment's [pricing page](https://segment.com/pricing/){:target="_blank"} to learn more. From 8e982d3938dc85a9716c43553c0dc3229730f513 Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Thu, 31 Oct 2024 12:06:03 -0500 Subject: [PATCH 47/51] Update src/unify/product-limits.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- src/unify/product-limits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unify/product-limits.md b/src/unify/product-limits.md index b061008938..cb62fe1e40 100644 --- a/src/unify/product-limits.md +++ b/src/unify/product-limits.md @@ -21,7 +21,7 @@ Unify Plus customers receive the following based on their signup date: - **New Unify version (as of November 1, 2024)**: 50 Computed Traits, 10 Predictions, 3 Recommendation Traits - **Existing Unify version (prior to November 1, 2024)**: 50 Computed Traits, 5 Predictions -Additionally, Unify Plus limits vary based on your Engage plan: +Unify Plus limits vary based on your Engage plan: - **Engage Plus**: 100 Audiences, 75 Journey Steps, 10 Recommendation Audiences - **Engage Foundations** (available for renewal only as of November 1, 2024): 100 Audiences, 75 Journey Steps From 9477ecf73f4d48f172abc4034a3a7048b6271345 Mon Sep 17 00:00:00 2001 From: stayseesong <83784848+stayseesong@users.noreply.github.com> Date: Thu, 31 Oct 2024 10:24:30 -0700 Subject: [PATCH 48/51] Apply suggestions from code review Co-authored-by: pwseg <86626706+pwseg@users.noreply.github.com> --- .../destinations/catalog/actions-first-party-dv360/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/connections/destinations/catalog/actions-first-party-dv360/index.md b/src/connections/destinations/catalog/actions-first-party-dv360/index.md index 2b78046047..567ec5ecff 100644 --- a/src/connections/destinations/catalog/actions-first-party-dv360/index.md +++ b/src/connections/destinations/catalog/actions-first-party-dv360/index.md @@ -12,7 +12,7 @@ This destination is different from the existing DV360 Actions as it allows you t This destination can only be used with Engage. -## Set up +## Setup Configuring this integration requires action by both you in your Segment workspace, and Google in your Google Marketing Platform account. As a result, the time required to finish configuration and setup can vary. ### Enable the destination @@ -68,7 +68,7 @@ Segment automatically sends consent as `TRUE` for this destination. Segment use ## Data requirements Based on Google’s documentation, make sure you send the correct required identifiers: * [Contact info list requirements](https://developers.google.com/display-video/api/reference/rest/v3/firstAndThirdPartyAudiences#contactinfo){:target="_blank"} - * For example, you must send first name, last name, zip code, and country code all together and not just one. Make sure all phone numbers are in [E.164 format](https://en.wikipedia.org/wiki/E.164){:target="_blank"}. + * For example, you must send first name, last name, ZIP code, and country code all together and not just one. Make sure all phone numbers are in [E.164 format](https://en.wikipedia.org/wiki/E.164){:target="_blank"}. * [Mobile ID Requirements](https://developers.google.com/display-video/api/reference/rest/v3/firstAndThirdPartyAudiences#mobiledeviceidlist){:target="_blank"} From dd0adfb3333122730813814ad93202aafeacf8ba Mon Sep 17 00:00:00 2001 From: stayseesong Date: Thu, 31 Oct 2024 10:28:07 -0700 Subject: [PATCH 49/51] make catalog 20241031 --- src/_data/catalog/destination_categories.yml | 2 +- src/_data/catalog/destinations.yml | 4 ++-- src/_data/catalog/destinations_private.yml | 2 +- src/_data/catalog/source_categories.yml | 2 +- src/_data/catalog/sources.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index d4f365dbd1..cabafc2f57 100644 --- a/src/_data/catalog/destination_categories.yml +++ b/src/_data/catalog/destination_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination categories last updated 2024-10-29 +# destination categories last updated 2024-10-31 items: - display_name: A/B Testing slug: a-b-testing diff --git a/src/_data/catalog/destinations.yml b/src/_data/catalog/destinations.yml index 8bfaa0cb43..7f3f116e5e 100644 --- a/src/_data/catalog/destinations.yml +++ b/src/_data/catalog/destinations.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2024-10-29 +# destination data last updated 2024-10-31 items: - id: 637e8d185e2dec264895ea89 display_name: 1Flow @@ -105316,7 +105316,7 @@ items: mark: url: https://cdn.filepicker.io/api/file/ID6Qu6cBSmivatPUnoMY methods: - track: false + track: true identify: true group: true alias: false diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml index 9b3c3fcf77..b42c473040 100644 --- a/src/_data/catalog/destinations_private.yml +++ b/src/_data/catalog/destinations_private.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2024-10-29 +# destination data last updated 2024-10-31 items: - id: 54521fd925e721e32a72eee1 display_name: Pardot diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml index afd777398f..abd13ad89e 100644 --- a/src/_data/catalog/source_categories.yml +++ b/src/_data/catalog/source_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# source categories last updated 2024-10-29 +# source categories last updated 2024-10-31 items: - display_name: A/B Testing slug: a-b-testing diff --git a/src/_data/catalog/sources.yml b/src/_data/catalog/sources.yml index 3c05cfeba2..ddba4c0e6d 100644 --- a/src/_data/catalog/sources.yml +++ b/src/_data/catalog/sources.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# sources last updated 2024-10-29 +# sources last updated 2024-10-31 items: - id: 8HWbgPTt3k display_name: .NET From 6282796b8ec6cf93ba2b717d73c01f25f6532a6e Mon Sep 17 00:00:00 2001 From: stayseesong Date: Thu, 31 Oct 2024 10:35:02 -0700 Subject: [PATCH 50/51] added destination --- src/_data/catalog/destinations_private.yml | 543 ++++++++++++++++++++- 1 file changed, 542 insertions(+), 1 deletion(-) diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml index 9b3c3fcf77..c4dadc6229 100644 --- a/src/_data/catalog/destinations_private.yml +++ b/src/_data/catalog/destinations_private.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2024-10-29 +# destination data last updated 2024-10-31 items: - id: 54521fd925e721e32a72eee1 display_name: Pardot @@ -799,3 +799,544 @@ items: '@path': $.traits enable_batching: true trigger: type = "track" or type = "identify" + - id: 6683e1d5e37fd84efcf3bbef + display_name: First Party Dv360 + name: First Party Dv360 + slug: first-party-dv360 + previous_names: + - First Party Dv360 + url: connections/destinations/catalog/first-party-dv360 + website: http://www.segment.com + status: PRIVATE_BUILDING + logo: + url: >- + https://cdn-devcenter.segment.com/da053d87-a568-4bae-827f-857f7f4b2aba.svg + mark: + url: >- + https://cdn-devcenter.segment.com/31811060-3f10-46b0-94de-bf299beb94a4.svg + methods: + track: true + identify: false + group: false + alias: false + screen: false + page: false + platforms: + browser: true + mobile: false + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + settings: [] + actions: + - id: pMRu4ozQwh3SzjYycCzDfn + name: Add to List + slug: addToList + description: Adds to list + platform: CLOUD + hidden: false + defaultTrigger: null + fields: [] + - id: kjEdc2dNCshXomx9VDnp9 + name: Remove Customer Match Members - Mobile Device Id List + slug: removeFromAudMobileDeviceId + description: >- + Remove customer match members in Google Display & Video 360 Mobile + Device Id List Audience. + platform: CLOUD + hidden: false + defaultTrigger: event = "Audience Entered" + fields: + - id: dRiii61cWqivpbMNjxGUKL + sortOrder: 0 + fieldKey: mobileDeviceIds + label: Mobile Device IDs + type: STRING + description: >- + A list of mobile device IDs defining Customer Match audience + members. The size of mobileDeviceIds mustn't be greater than + 500,000. + placeholder: '' + defaultValue: + '@path': $.context.traits.mobileDeviceIds + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ppDfvVSHs3wpC3Ycoh2gUu + sortOrder: 1 + fieldKey: external_id + label: External ID + type: STRING + description: The ID of the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.external_audience_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: 6w8gbwpX2zANVtazbjtfMc + sortOrder: 2 + fieldKey: advertiser_id + label: Advertiser ID + type: STRING + description: The Advertiser ID associated with the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.audience_settings.advertiserId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: 81favwMqHXmAecMuLmXGo6 + sortOrder: 3 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: Enable batching of requests. + placeholder: '' + defaultValue: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: tuBG56koj3PdEWoMt7j8Xv + sortOrder: 4 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch + sizes may be lower. + placeholder: '' + defaultValue: 500000 + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: texVBBbJ5ZvG5eBR49wLoL + name: Edit Customer Match Members - Mobile Device Id List + slug: addToAudMobileDeviceId + description: >- + Add or update customer match members in Google Display & Video 360 + Mobile Device Id List Audience. + platform: CLOUD + hidden: false + defaultTrigger: event = "Audience Entered" + fields: + - id: 8hSAZXT5u7knkEUGKLpe8A + sortOrder: 0 + fieldKey: mobileDeviceIds + label: Mobile Device IDs + type: STRING + description: >- + A list of mobile device IDs defining Customer Match audience + members. The size of mobileDeviceIds mustn't be greater than + 500,000. + placeholder: '' + defaultValue: + '@path': $.context.traits.mobileDeviceIds + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2KfCTSk2bzm1Br7DZ5d9jM + sortOrder: 1 + fieldKey: external_id + label: External ID + type: STRING + description: The ID of the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.external_audience_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: 9ecWScNV2vuWrFNgfoHf1 + sortOrder: 2 + fieldKey: advertiser_id + label: Advertiser ID + type: STRING + description: The Advertiser ID associated with the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.audience_settings.advertiserId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: gpaqTHscj6acVK5x12WsMV + sortOrder: 3 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: Enable batching of requests. + placeholder: '' + defaultValue: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: 4p4wD9VF3j7GSp3TvBMLHB + sortOrder: 4 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch + sizes may be lower. + placeholder: '' + defaultValue: 500000 + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: u4XdrL4XCgThQLiwKZKC7e + name: Edit Customer Match Members - Contact Info List + slug: addToAudContactInfo + description: >- + Add or update customer match members in Google Display & Video 360 + Contact Info List Audience. + platform: CLOUD + hidden: false + defaultTrigger: event = "Audience Entered" + fields: + - id: 8Ry596bd6tBhdH2ErcXZUS + sortOrder: 0 + fieldKey: emails + label: Emails + type: STRING + description: >- + A list of the user's emails. If not already hashed, the system + will hash them before use. + placeholder: '' + defaultValue: + '@path': $.context.traits.emails + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: zCC3pVDww1k3bwsYeU3ak + sortOrder: 1 + fieldKey: phoneNumbers + label: Phone Numbers + type: STRING + description: >- + A list of the user's phone numbers. If not already hashed, the + system will hash them before use. + placeholder: '' + defaultValue: + '@path': $.context.traits.phoneNumbers + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9JQTx74mEBTAMwcUjfKo93 + sortOrder: 2 + fieldKey: zipCodes + label: ZIP Codes + type: STRING + description: A list of the user's zip codes. + placeholder: '' + defaultValue: + '@path': $.context.traits.zipCodes + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qPeGF7HX6EhNJpQoRwNmnN + sortOrder: 3 + fieldKey: firstName + label: First Name + type: STRING + description: >- + The user's first name. If not already hashed, the system will hash + it before use. + placeholder: '' + defaultValue: + '@path': $.context.traits.firstName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2NGtbSMELmDoTmdQGWb8jH + sortOrder: 4 + fieldKey: lastName + label: Last Name + type: STRING + description: >- + The user's last name. If not already hashed, the system will hash + it before use. + placeholder: '' + defaultValue: + '@path': $.context.traits.lastName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: w8BbkKZShNdnyc2uASpB4Z + sortOrder: 5 + fieldKey: countryCode + label: Country Code + type: STRING + description: The country code of the user. + placeholder: '' + defaultValue: + '@path': $.context.traits..countryCode + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wA4Syt8pYqUASr9cAQEWvA + sortOrder: 6 + fieldKey: external_id + label: External ID + type: STRING + description: The ID of the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.external_audience_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: hqpDxsMA2C4r8TdNiyaGtM + sortOrder: 7 + fieldKey: advertiser_id + label: Advertiser ID + type: STRING + description: The Advertiser ID associated with the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.audience_settings.advertiserId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: v3qUWULxzJDrdjTUgSpigZ + sortOrder: 8 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: Enable batching of requests. + placeholder: '' + defaultValue: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: ndYdVUnqzCJfyzoVPKay9F + sortOrder: 9 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch + sizes may be lower. + placeholder: '' + defaultValue: 500000 + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: vykfWPGTjXpdHZiaaSUYRC + name: Remove Customer Match Members - Contact Info List + slug: removeFromAudContactInfo + description: >- + Remove customer match members in Google Display & Video 360 Contact + Info List Audience. + platform: CLOUD + hidden: false + defaultTrigger: event = "Audience Exited" + fields: + - id: eEkzo7KFjZZ5SY6MYsGNsa + sortOrder: 0 + fieldKey: emails + label: Emails + type: STRING + description: >- + A list of the user's emails. If not already hashed, the system + will hash them before use. + placeholder: '' + defaultValue: + '@path': $.context.traits.emails + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: umefzMMP12tpbD2oopGbPv + sortOrder: 1 + fieldKey: phoneNumbers + label: Phone Numbers + type: STRING + description: >- + A list of the user's phone numbers. If not already hashed, the + system will hash them before use. + placeholder: '' + defaultValue: + '@path': $.context.traits.phoneNumbers + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3sx6yoo2rwgRPCB5WYDZCb + sortOrder: 2 + fieldKey: zipCodes + label: ZIP Codes + type: STRING + description: A list of the user's zip codes. + placeholder: '' + defaultValue: + '@path': $.context.traits.zipCodes + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jeiJHUQawC7xqWmAnxJp3Z + sortOrder: 3 + fieldKey: firstName + label: First Name + type: STRING + description: >- + The user's first name. If not already hashed, the system will hash + it before use. + placeholder: '' + defaultValue: + '@path': $.context.traits.firstName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9KEVS8t6JhY8474QVZcKiF + sortOrder: 4 + fieldKey: lastName + label: Last Name + type: STRING + description: >- + The user's last name. If not already hashed, the system will hash + it before use. + placeholder: '' + defaultValue: + '@path': $.context.traits.lastName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kUE2RG2AqX2LGqcykzFbUU + sortOrder: 5 + fieldKey: countryCode + label: Country Code + type: STRING + description: The country code of the user. + placeholder: '' + defaultValue: + '@path': $.context.traits..countryCode + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: xfEU7m8dxHehcuUBoLj7SS + sortOrder: 6 + fieldKey: external_id + label: External ID + type: STRING + description: The ID of the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.external_audience_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: o4hCVmsRy2dkqCxAvYk2ZX + sortOrder: 7 + fieldKey: advertiser_id + label: Advertiser ID + type: STRING + description: The Advertiser ID associated with the DV360 Audience. + placeholder: '' + defaultValue: + '@path': $.context.personas.audience_settings.advertiserId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: mYacAw9gXNbCxHdS5JioJF + sortOrder: 8 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: Enable batching of requests. + placeholder: '' + defaultValue: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + - id: 4yLRfKRg9qcv6JR87whu9H + sortOrder: 9 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch + sizes may be lower. + placeholder: '' + defaultValue: 500000 + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: true + presets: [] From baf408649afd80e34d9e320d15e48b1765c4970d Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Thu, 31 Oct 2024 12:41:19 -0500 Subject: [PATCH 51/51] remove white space --- .../destinations/catalog/actions-first-party-dv360/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-first-party-dv360/index.md b/src/connections/destinations/catalog/actions-first-party-dv360/index.md index 567ec5ecff..446d7efd16 100644 --- a/src/connections/destinations/catalog/actions-first-party-dv360/index.md +++ b/src/connections/destinations/catalog/actions-first-party-dv360/index.md @@ -61,7 +61,7 @@ Consent mode in the Gtag library and Google Analytics is designed to help websit With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. -Segment automatically sends consent as `TRUE` for this destination. Segment uses the [bulk-uploader workflow](https://developers.google.com/authorized-buyers/rtb/bulk-uploader#workflow){:target="_blank"} which requires consented data. Ensure all audiences and journeys are connected to consented audiences. +Segment automatically sends consent as `TRUE` for this destination. Segment uses the [bulk-uploader workflow](https://developers.google.com/authorized-buyers/rtb/bulk-uploader#workflow){:target="_blank"} which requires consented data. Ensure all audiences and journeys are connected to consented audiences. {% include components/actions-fields.html %}