From 935dda1ea29fb1297e231da7bd0a4e0fad552120 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Mon, 31 Jul 2023 19:58:27 -0400 Subject: [PATCH 01/30] unhiding q3 stuff --- src/privacy/consent-management.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index a6018a98c1..76b4171bcf 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -27,8 +27,7 @@ If an end user changes the categories they consent to (or if they consent using > warning "Segment recommends mapping all destinations to a category" > Segment assumes any destinations without a mapping do not require user consent and will receive all events containing a consent object. - - To learn more about configuring consent categories in your workspace, see the [Configure Consent Management documentation](/docs/privacy/configure-consent-management/). @@ -71,6 +69,7 @@ Segment requires every event from all of your sources to include the end-user co { "context": { "consent": { + "version": 1, "consentPreferences": { "Advertising": true, "Analytics": false, @@ -82,15 +81,12 @@ Segment requires every event from all of your sources to include the end-user co } ``` - +A consent conflict flag and the categories consented to by a user are both pulled from the consent object and are visible as traits on a user's profile in Unify. ## Reconcile consent conflicts From eacc1b200ee546e33650fb57816f7de3a2414308 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 6 Sep 2023 18:45:05 -0400 Subject: [PATCH 02/30] make requested docs updates --- src/privacy/consent-management.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index a6018a98c1..1abf9a46cb 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -109,7 +109,8 @@ If an event includes both an integrations and consent object, Segment will look | Consent Object | Integration Object | Result | | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------ | | Not provided

`"context": {`
`}` | Not provided or empty object | Data flows to all destinations | -| Empty consent object

`"context": {`
` "consent": {`
` }`
`}`
OR
`"context": {`
` "consent": {`
` "categoryPreference": {`
` }`
` }`
`}`| Not provided or empty object | Data does **NOT** flow to any mapped destinations - consent is considered to be `false` for all categories.

Data flows to all destinations **NOT** mapped to a consent category. | +| Empty consent object

`"context": {`
` "consent": {`
` }`
`}`| Not provided or empty object | Data flows to any mapped destinations - consent is considered to be `true` for all categories.| +| Empty categoryPreference object

`"context": {`
` "consent": {`
` "categoryPreference": {`
` }`
` }`
`}`| Not provided or empty object | Data does **NOT** flow to any mapped destinations - consent is considered to be `false` for all categories.

Data flows to all destinations **NOT** mapped to a consent category. | | Not provided

`"context": {`
`}` | `{facebook: true,`
`amplitude: false}` | Data flows to the destinations that are `true` in the integrations object (Facebook). Any metadata provided in the integrations object also flows to your downstream destinations. | | Empty consent object

`"context": {`
` "consent": {`
` }`
`}`
OR
`"context": {`
` "consent": {`
` "categoryPreference": {`
` }`
` }`
`}`| `{facebook: true,`
`amplitude: false}` | Data does **NOT** flow to any mapped destinations - consent is considered to be `false` for all categories.

Data flows to all destinations **NOT** mapped to a consent category, destinations set to `true` in the integrations object, and destinations not included in the integrations object. | | `{ad: true,`
`analytics: false}`

_Segment has no category-to-destination mapping for ad and analytics_ | Provided, not provided, or empty object | Data flows to all destinations, as all destinations are unmapped. If the integrations object is present, data flow may be impacted. | From 0d6b739fb503d31cc5eaa1a48daa6248a3ac8cc8 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 7 Sep 2023 14:14:29 -0400 Subject: [PATCH 03/30] consolidating first two rows into one row --- src/privacy/consent-management.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index 1abf9a46cb..1405463355 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -108,8 +108,7 @@ If an event includes both an integrations and consent object, Segment will look | Consent Object | Integration Object | Result | | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------ | -| Not provided

`"context": {`
`}` | Not provided or empty object | Data flows to all destinations | -| Empty consent object

`"context": {`
` "consent": {`
` }`
`}`| Not provided or empty object | Data flows to any mapped destinations - consent is considered to be `true` for all categories.| +| Not provided or empty consent object

`"context": {`
`}`
OR
`"context": {`
` "consent": {`
` }`
`}` | Not provided or empty object | Data flows to all destinations. | | Empty categoryPreference object

`"context": {`
` "consent": {`
` "categoryPreference": {`
` }`
` }`
`}`| Not provided or empty object | Data does **NOT** flow to any mapped destinations - consent is considered to be `false` for all categories.

Data flows to all destinations **NOT** mapped to a consent category. | | Not provided

`"context": {`
`}` | `{facebook: true,`
`amplitude: false}` | Data flows to the destinations that are `true` in the integrations object (Facebook). Any metadata provided in the integrations object also flows to your downstream destinations. | | Empty consent object

`"context": {`
` "consent": {`
` }`
`}`
OR
`"context": {`
` "consent": {`
` "categoryPreference": {`
` }`
` }`
`}`| `{facebook: true,`
`amplitude: false}` | Data does **NOT** flow to any mapped destinations - consent is considered to be `false` for all categories.

Data flows to all destinations **NOT** mapped to a consent category, destinations set to `true` in the integrations object, and destinations not included in the integrations object. | From f59a08286db4153efc1237b41c794e25d15d2bba Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Fri, 8 Sep 2023 16:06:09 -0400 Subject: [PATCH 04/30] update supported destinations, add version, move configure consent management blurb --- src/privacy/configure-consent-management.md | 4 ++-- src/privacy/consent-management.md | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index e1bd6ea7d7..c57d9d34bc 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -22,9 +22,9 @@ Before you can configure consent in Segment, take the following steps: ## Step 1: Create consent categories in the Segment app > info "Limited availability of sources and destinations during private beta" -> During private beta, you can send events from web sources to consent categories. Enforcement of consent preferences is only available for event streaming destinations, webhooks, and functions. You can map one event streaming destination, webhook, or function to multiple consent categories. All other source and destination types are not impacted by consent mappings. +> During private beta, you can send events from web sources to consent categories. Enforcement of consent preferences is only available for data lakes, warehouses, event streaming destinations, webhooks, and functions. You can map one data lake, warehouse, event streaming destination, webhook, or function to multiple consent categories. All other source and destination types are not impacted by consent mappings. > -> Storage, RETL, and Engage destinations do not enforce consent preferences. +> Blob storage, RETL, and Engage destinations do not enforce consent preferences. 1. From the [Segment homepage](https://app.segment.com/goto-my-workspace/){:target="_blank”}, select the Privacy tab and click **Consent Management**. 2. On the Consent management page, click **Create categories**. diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index 783049ffba..219facd508 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -10,11 +10,11 @@ related: When an end user visits your site, they set **consent preferences**, or make decisions about the types of data they want you to collect, use, and share. These consent preferences are typically presented as a set list of categories that describe how your company intends to use that data. Common categories include personalization, advertising, and site performance. -Segment works with your third-party consent management platform (CMP) or bespoke consent solution to capture an end user's consent preferences and enforce those preferences by only routing events to the categories consented to by an end user. +Segment works with your third-party consent management platform (CMP) or bespoke consent solution to *capture* an end user's consent preferences and *enforce* those preferences by only routing events to the categories consented to by an end user. ![Diagram outlining information flowing from an end user to Segment destinations](/docs/privacy/images/consent-overview.png) -After a user sets their consent preferences, Segment captures them with the [Analytics.js Consent Tools wrapper](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-tools) and updates the [consent object](#consent-object). The events are then sent downstream to any streaming destinations in categories that a user consented to share data with. +After a user sets their consent preferences, Segment captures them with the [Analytics.js Consent Tools wrapper](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-tools){:target="_blank"} and updates the [consent object](#consent-object). The events are then sent downstream to any streaming destinations in categories that a user consented to share data with. > info "" > Segment collects consent for both registered users and anonymous users. @@ -42,6 +42,7 @@ For example, if a user agreed to share their information with you for all catego "timestamp": "2023-01-01T00:00:00.000Z", "context": { "consent": { + "version": 1, "consentPreferences" : { "Advertising": true, "Analytics": false, @@ -58,9 +59,6 @@ For example, if a user agreed to share their information with you for all catego > > See the [Semantic Events](/docs/connections/spec/semantic/) docs for more details. - -To learn more about configuring consent categories in your workspace, see the [Configure Consent Management documentation](/docs/privacy/configure-consent-management/). - ## Consent object Segment requires every event from all of your sources to include the end-user consent preferences, captured by your consent management tools or your application logic, in the form of the **consent object**. The consent object is a JSON object with the following format: @@ -88,6 +86,8 @@ Segment assigns a `version` to your consent object. The `version` describes the A consent conflict flag and the categories consented to by a user are both pulled from the consent object and are visible as traits on a user's profile in Unify. + + ## Reconcile consent conflicts From a12d6051c6acdb0925919c7f6bd1d82f57c4243c Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 12 Sep 2023 20:03:20 -0400 Subject: [PATCH 05/30] reorg --- src/privacy/consent-management.md | 55 ++++++++++++++----------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index 219facd508..015252d001 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -10,7 +10,7 @@ related: When an end user visits your site, they set **consent preferences**, or make decisions about the types of data they want you to collect, use, and share. These consent preferences are typically presented as a set list of categories that describe how your company intends to use that data. Common categories include personalization, advertising, and site performance. -Segment works with your third-party consent management platform (CMP) or bespoke consent solution to *capture* an end user's consent preferences and *enforce* those preferences by only routing events to the categories consented to by an end user. +Segment works with your third-party consent management platform (CMP) or bespoke consent solution to capture an end user's consent preferences and enforce those preferences by only routing events to the categories consented to by an end user. ![Diagram outlining information flowing from an end user to Segment destinations](/docs/privacy/images/consent-overview.png) @@ -19,6 +19,29 @@ After a user sets their consent preferences, Segment captures them with the [Ana > info "" > Segment collects consent for both registered users and anonymous users. +## Consent object + +Segment requires every event from all of your sources to include the end-user consent preferences, captured by your consent management tools or your application logic, in the form of the **consent object**. The consent object is a JSON object with the following format: + +```json +{ +"context": { + "consent": { + "version": 1, + "consentPreferences": { + "Advertising": true, + "Analytics": false, + "Functional": true, + "DataSharing": false + } + } + } +} + +``` + +A consent conflict flag and the categories consented to by a user are both pulled from the consent object and are visible as traits on a user's profile in Unify. + ## Enforce consent Segment routes events with a consent object to the destinations in categories consented to by a user and to destinations that do not have a consent category. @@ -59,36 +82,6 @@ For example, if a user agreed to share their information with you for all catego > > See the [Semantic Events](/docs/connections/spec/semantic/) docs for more details. -## Consent object - -Segment requires every event from all of your sources to include the end-user consent preferences, captured by your consent management tools or your application logic, in the form of the **consent object**. The consent object is a JSON object with the following format: - -```json -{ -"context": { - "consent": { - "version": 1, - "consentPreferences": { - "Advertising": true, - "Analytics": false, - "Functional": true, - "DataSharing": false - } - } - } -} - -``` - -### Consent policy version - -Segment assigns a `version` to your consent object. The `version` describes the version of Segment's consent schema that message used. - -A consent conflict flag and the categories consented to by a user are both pulled from the consent object and are visible as traits on a user's profile in Unify. - - - - ## Reconcile consent conflicts Segment resolves conflicts between your [consent object and your integration object](#reconcile-consent-object-and-integrations-object-conflicts) and between your [CMP and the consent categories you configured in the Segment app](#reconcile-cmp-and-segment-consent-category-conflicts). From 2288317e824a6c33befdaaf7b016a6a13e551e0e Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 14 Sep 2023 13:13:24 -0400 Subject: [PATCH 06/30] mobile consent wrapper sections --- src/privacy/configure-consent-management.md | 29 ++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index c57d9d34bc..0af146d34e 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -7,7 +7,7 @@ hidden: true After setting up a third-party consent management platform (CMP), you can enforce the consent collected from your users by configuring consent categories in your your Segment workspace and adding the [consent object](/docs/privacy/consent-management/#consent-object) to your web libraries. -Once you've configured consent in the Segment app, your events are routed only to the categories your end users consented to share data with. +Once you've configured consent in the Segment app and updated your libraries with the consent wrapper, your events are routed only to the categories your end users consented to share data with. ## Prerequisites @@ -17,7 +17,9 @@ Once you've configured consent in the Segment app, your events are routed only t Before you can configure consent in Segment, take the following steps: - **Set up your third-party consent management tool and create consent categories**. Take note of your consent categories and the key or ID associated with each category. - **Know how your company uses each destination**. You need to know which destinations to map to each category. -- **Access to your web libraries**. After you set up consent categories in the Segment app, you need to add a wrapper to your Analytics.js snippet so that Segment can receive your end users' preferences. Segment provides a [wrapper for OneTrust](#step-2-add-the-consent-wrapper-to-analyticsjs), or if you're using a different CMP, you can create your own wrapper using the [instructions provided in the analytics-next repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-tools){:target="_blank”}. +- **Access to your web and mobile libraries**. After you set up consent categories in the Segment app, you need to add a wrapper to your Analytics.js, Swift, or Kotlin libraries so that Segment can receive your end users' preferences. Segment provides a [wrapper for OneTrust](#step-2-add-the-consent-wrapper-to-analyticsjs), or if you're using a different CMP, you can create your own wrapper for Analytics.js using the [instructions provided in the analytics-next repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-tools){:target="_blank”} and for your mobile libraries using the [instructions provided in the mobile-consent repository](link.com){:target="_blank”}. + + ## Step 1: Create consent categories in the Segment app @@ -39,7 +41,28 @@ Before you can configure consent in Segment, take the following steps: > warning "Segment recommends mapping all destinations to a category" > Segment assumes all destinations without a mapping do not require user consent and will receive all events containing a consent object. -## Step 2: Add the consent wrapper to Analytics.js +## Step 2: Add a consent wrapper to your library + +You can add a consent wrapper to your analytics-js, Swift, and Kotlin libraries. + +Adding the consent wrapper to another [mobile library](/docs/connections/sources/catalog/#mobile) requires additional configuration. See the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"} for more details. + + + +### Analytics.js + +Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. + +### Swift + + + +Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. + +### Kotlin + + + Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. ## Edit consent categories From 2507c2d86c55416699fba6179ae6be00dba3a842 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 14 Sep 2023 15:21:42 -0400 Subject: [PATCH 07/30] Update consent-management.md --- src/privacy/consent-management.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index 015252d001..1d57429efa 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -14,7 +14,7 @@ Segment works with your third-party consent management platform (CMP) or bespoke ![Diagram outlining information flowing from an end user to Segment destinations](/docs/privacy/images/consent-overview.png) -After a user sets their consent preferences, Segment captures them with the [Analytics.js Consent Tools wrapper](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-tools){:target="_blank"} and updates the [consent object](#consent-object). The events are then sent downstream to any streaming destinations in categories that a user consented to share data with. +After a user sets their consent preferences, Segment captures them with a wrapper for your mobile and web libraries and updates the [consent object](#consent-object). The events are then sent downstream to any streaming destinations in categories that an end user consented to share data with. > info "" > Segment collects consent for both registered users and anonymous users. @@ -27,7 +27,6 @@ Segment requires every event from all of your sources to include the end-user co { "context": { "consent": { - "version": 1, "consentPreferences": { "Advertising": true, "Analytics": false, @@ -65,7 +64,6 @@ For example, if a user agreed to share their information with you for all catego "timestamp": "2023-01-01T00:00:00.000Z", "context": { "consent": { - "version": 1, "consentPreferences" : { "Advertising": true, "Analytics": false, From d33fd49e43a436f2e1e79bf44e06d5ca480060d8 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 14 Sep 2023 18:39:02 -0400 Subject: [PATCH 08/30] Update configure-consent-management.md --- src/privacy/configure-consent-management.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 0af146d34e..128527f681 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -47,7 +47,10 @@ You can add a consent wrapper to your analytics-js, Swift, and Kotlin libraries. Adding the consent wrapper to another [mobile library](/docs/connections/sources/catalog/#mobile) requires additional configuration. See the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"} for more details. - +> info "Consent Management is not backwards compatible with Segment's legacy iOS and Android libraries" +> If you are using one of Segment's legacy mobile libraries (Android or iOS,) you will need to upgrade to [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) or [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/migration/) before using Consent Management. + + ### Analytics.js @@ -55,13 +58,13 @@ Please follow the instructions from the README in the [@segment/analytics-consen ### Swift - + Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. ### Kotlin - + Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. From 895af0201a7ecdc1c3f2a2ba8f342f8949415516 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Fri, 15 Sep 2023 11:29:47 -0400 Subject: [PATCH 09/30] Update w Kotlin link --- src/privacy/configure-consent-management.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 128527f681..b417a0f969 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -45,10 +45,10 @@ Before you can configure consent in Segment, take the following steps: You can add a consent wrapper to your analytics-js, Swift, and Kotlin libraries. -Adding the consent wrapper to another [mobile library](/docs/connections/sources/catalog/#mobile) requires additional configuration. See the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"} for more details. +If you'd like to add the consent wrapper to a [mobile library](/docs/connections/sources/catalog/#mobile) that is not Swift or Kotlin, you must generate your own plugin. You can use the [Swift](TODO: ADD LINK) and [Kotlin](TODO: ADD LINK) plugins as an example. > info "Consent Management is not backwards compatible with Segment's legacy iOS and Android libraries" -> If you are using one of Segment's legacy mobile libraries (Android or iOS,) you will need to upgrade to [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) or [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/migration/) before using Consent Management. +> If you are using one of Segment's legacy mobile libraries (iOS or Android,) you will need to upgrade to [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/migration/) or [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) before using Consent Management. @@ -64,9 +64,7 @@ Please follow the instructions from the README in the [@segment/analytics-consen ### Kotlin - - -Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. +Please follow the instructions from the README in the [@segment-integrations/analytics-kotlin-consent](https://github.com/segment-integrations/analytics-kotlin-consent/blob/main/README.md#getting-started){:target="_blank"} repository. ## Edit consent categories From 4aba9f7a5e113dedf5bff20c44888baf34f54d63 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Fri, 15 Sep 2023 12:47:13 -0400 Subject: [PATCH 10/30] better explain Segment Consent Preference --- src/privacy/configure-consent-management.md | 2 +- src/privacy/consent-management.md | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index b417a0f969..2cea93ab91 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -17,7 +17,7 @@ Once you've configured consent in the Segment app and updated your libraries wit Before you can configure consent in Segment, take the following steps: - **Set up your third-party consent management tool and create consent categories**. Take note of your consent categories and the key or ID associated with each category. - **Know how your company uses each destination**. You need to know which destinations to map to each category. -- **Access to your web and mobile libraries**. After you set up consent categories in the Segment app, you need to add a wrapper to your Analytics.js, Swift, or Kotlin libraries so that Segment can receive your end users' preferences. Segment provides a [wrapper for OneTrust](#step-2-add-the-consent-wrapper-to-analyticsjs), or if you're using a different CMP, you can create your own wrapper for Analytics.js using the [instructions provided in the analytics-next repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-tools){:target="_blank”} and for your mobile libraries using the [instructions provided in the mobile-consent repository](link.com){:target="_blank”}. +- **Access to your web and mobile libraries**. After you set up consent categories in the Segment app, you need to add a wrapper to your Analytics.js, Swift, or Kotlin libraries so that Segment can receive your end users' preferences. Segment provides an [Analytics.js, Kotlin, or Swift wrapper for OneTrust](#step-2-add-the-consent-wrapper-to-analyticsjs), or if you're using a different CMP, you can create your own wrapper using the [instructions provided in the analytics-next repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-tools){:target="_blank”} and for your mobile libraries using the [instructions provided in the mobile-consent repository](link.com){:target="_blank”}. diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index 1d57429efa..f732cc7b50 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -14,7 +14,7 @@ Segment works with your third-party consent management platform (CMP) or bespoke ![Diagram outlining information flowing from an end user to Segment destinations](/docs/privacy/images/consent-overview.png) -After a user sets their consent preferences, Segment captures them with a wrapper for your mobile and web libraries and updates the [consent object](#consent-object). The events are then sent downstream to any streaming destinations in categories that an end user consented to share data with. +After a user sets their consent preferences, Segment captures them with a wrapper for your mobile and web libraries and updates the [consent object](#consent-object). The events are then sent downstream to any destinations in categories that an end user consented to share data with. > info "" > Segment collects consent for both registered users and anonymous users. @@ -39,15 +39,12 @@ Segment requires every event from all of your sources to include the end-user co ``` -A consent conflict flag and the categories consented to by a user are both pulled from the consent object and are visible as traits on a user's profile in Unify. +The categories consented to by a user and a flag if a [consent conflict](#reconcile-consent-conflicts) exists are pulled from the consent object and are visible as traits on a user's profile in Unify. ## Enforce consent Segment routes events with a consent object to the destinations in categories consented to by a user and to destinations that do not have a consent category. -If an end user changes the categories they consent to (or if they consent using a different device or identifier,) any events they generate after updating their consent preferences will contain the updated consent information. Segment only sends events to the destinations in the categories that are currently consented to. - -> warning "Segment recommends mapping all destinations to a category" -> Segment assumes any destinations without a mapping do not require user consent and will receive all events containing a consent object. +If an end user consents for the first time or changes the categories they consent to (or if they consent using a different device or identifier,) Segment generates a **Segment Consent Preference** event. For example, if a user agreed to share their information with you for all categories on their first visit to your site, and then on their next visit to the site only consented to sharing data for functional and advertising purposes but not for analytics or data sharing, a [Track call](/docs/connections/spec/track/) demonstrating their new consent preferences would have the following format: From bd24f46bbbfbf5ad01e3502ee2d25b7272ae4d9e Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Fri, 15 Sep 2023 12:57:43 -0400 Subject: [PATCH 11/30] Add Kotlin link --- src/privacy/configure-consent-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 2cea93ab91..3d582f2439 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -45,7 +45,7 @@ Before you can configure consent in Segment, take the following steps: You can add a consent wrapper to your analytics-js, Swift, and Kotlin libraries. -If you'd like to add the consent wrapper to a [mobile library](/docs/connections/sources/catalog/#mobile) that is not Swift or Kotlin, you must generate your own plugin. You can use the [Swift](TODO: ADD LINK) and [Kotlin](TODO: ADD LINK) plugins as an example. +If you'd like to add the consent wrapper to a [mobile library](/docs/connections/sources/catalog/#mobile) that is not Swift or Kotlin, you must generate your own plugin. You can use the [Swift](TODO: ADD LINK) and [Kotlin](https://github.com/segment-integrations/analytics-kotlin-consent/blob/main/README.md#getting-started){:target="_blank"} plugins as an example. > info "Consent Management is not backwards compatible with Segment's legacy iOS and Android libraries" > If you are using one of Segment's legacy mobile libraries (iOS or Android,) you will need to upgrade to [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/migration/) or [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) before using Consent Management. From 554a404767482bac8e9f2f4cf344d883e7d44bd1 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Fri, 15 Sep 2023 13:24:58 -0400 Subject: [PATCH 12/30] [netlify-build] --- src/privacy/configure-consent-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 3d582f2439..f44721d5ef 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -50,7 +50,7 @@ If you'd like to add the consent wrapper to a [mobile library](/docs/connections > info "Consent Management is not backwards compatible with Segment's legacy iOS and Android libraries" > If you are using one of Segment's legacy mobile libraries (iOS or Android,) you will need to upgrade to [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/migration/) or [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) before using Consent Management. - + ### Analytics.js From dd81c47848337eef034751e7a5cc7a66dea066c5 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Mon, 18 Sep 2023 20:02:32 -0400 Subject: [PATCH 13/30] requested fixes [netlify-build] --- src/privacy/configure-consent-management.md | 41 ++++++++------------- src/privacy/consent-management.md | 35 ++++++++++++------ 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index f44721d5ef..8e465d27da 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -5,9 +5,9 @@ hidden: true > info "Consent Management is in private beta" > This means that Consent Management features are in active development, and some functionality may change before it becomes generally available. [Contact Segment](https://segment.com/help/contact/){:target="_blank"} with any feedback or questions. -After setting up a third-party consent management platform (CMP), you can enforce the consent collected from your users by configuring consent categories in your your Segment workspace and adding the [consent object](/docs/privacy/consent-management/#consent-object) to your web libraries. +After setting up a third-party or bespoke consent management platform (CMP), you can enforce the consent collected from your users by adding the [consent object](/docs/privacy/consent-management/#consent-object) to your web libraries. -Once you've configured consent in the Segment app and updated your libraries with the consent wrapper, your events are routed only to the categories your end users consented to share data with. +Once you've configured consent in the Segment app and updated your sources to contain consent preference in every event, your events are routed only to the categories your end users consented to share data with. Events without the consent preference will continue to flow to destinations without consent enforcement ## Prerequisites @@ -17,7 +17,7 @@ Once you've configured consent in the Segment app and updated your libraries wit Before you can configure consent in Segment, take the following steps: - **Set up your third-party consent management tool and create consent categories**. Take note of your consent categories and the key or ID associated with each category. - **Know how your company uses each destination**. You need to know which destinations to map to each category. -- **Access to your web and mobile libraries**. After you set up consent categories in the Segment app, you need to add a wrapper to your Analytics.js, Swift, or Kotlin libraries so that Segment can receive your end users' preferences. Segment provides an [Analytics.js, Kotlin, or Swift wrapper for OneTrust](#step-2-add-the-consent-wrapper-to-analyticsjs), or if you're using a different CMP, you can create your own wrapper using the [instructions provided in the analytics-next repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-tools){:target="_blank”} and for your mobile libraries using the [instructions provided in the mobile-consent repository](link.com){:target="_blank”}. +- **Access to your web and mobile libraries**. After you set up consent categories in the Segment app, you need to integrate your CDP and your Segment sources using a wrapper or other solution. @@ -26,7 +26,7 @@ Before you can configure consent in Segment, take the following steps: > info "Limited availability of sources and destinations during private beta" > During private beta, you can send events from web sources to consent categories. Enforcement of consent preferences is only available for data lakes, warehouses, event streaming destinations, webhooks, and functions. You can map one data lake, warehouse, event streaming destination, webhook, or function to multiple consent categories. All other source and destination types are not impacted by consent mappings. > -> Blob storage, RETL, and Engage destinations do not enforce consent preferences. +> AWS S3, RETL, and Engage destinations do not enforce consent preferences. 1. From the [Segment homepage](https://app.segment.com/goto-my-workspace/){:target="_blank”}, select the Privacy tab and click **Consent Management**. 2. On the Consent management page, click **Create categories**. @@ -39,32 +39,23 @@ Before you can configure consent in Segment, take the following steps: 5. Once you've finished setting up your category or categories, click **Save**. > warning "Segment recommends mapping all destinations to a category" -> Segment assumes all destinations without a mapping do not require user consent and will receive all events containing a consent object. +> Segment assumes all destinations without a mapping do not require user consent and will receive all events containing a consent object. If a destination is mapped to multiple categories, a user must consent to all categories to for data to flow to the destination. -## Step 2: Add a consent wrapper to your library +## Step 2: Integrating your CMP with Segment -You can add a consent wrapper to your analytics-js, Swift, and Kotlin libraries. +Once you've created consent categories in the Segment app, you need to integrate your CMP with Segment. Segment recommends using a CMP wrapper, but you can use any solution provided it meets the following criteria: +- Reads the end user consent preference from your CMP and includes the consent object in every event +- Generates the Segment Consent Preference Track event every time a user provides or updates their consent preferences with their anonymousId and userId -If you'd like to add the consent wrapper to a [mobile library](/docs/connections/sources/catalog/#mobile) that is not Swift or Kotlin, you must generate your own plugin. You can use the [Swift](TODO: ADD LINK) and [Kotlin](https://github.com/segment-integrations/analytics-kotlin-consent/blob/main/README.md#getting-started){:target="_blank"} plugins as an example. +Segment provides a OneTrust wrapper for the following sources: +- **Analytics.js**: Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. +- **Kotlin**: Please follow the instructions from the README in the [@segment-integrations/analytics-kotlin-consent](https://github.com/segment-integrations/analytics-kotlin-consent/blob/main/README.md#getting-started){:target="_blank"} repository. +- **Swift**: Please follow the instructions from the README in the [@repository](){:target="_blank"}. -> info "Consent Management is not backwards compatible with Segment's legacy iOS and Android libraries" -> If you are using one of Segment's legacy mobile libraries (iOS or Android,) you will need to upgrade to [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/migration/) or [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) before using Consent Management. - - - -### Analytics.js - -Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. - -### Swift +If you'd like to integrate with any other CDP, Segment requires you to build your own wrapper or use any mechanism provided it meets the above requirements of data and event generation. - - -Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. - -### Kotlin - -Please follow the instructions from the README in the [@segment-integrations/analytics-kotlin-consent](https://github.com/segment-integrations/analytics-kotlin-consent/blob/main/README.md#getting-started){:target="_blank"} repository. +> warning "Consent Management is not backwards compatible with Segment's legacy iOS and Android libraries" +> If you are using one of Segment's legacy mobile libraries (iOS or Android,) you will need to upgrade to [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/migration/) or [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) before using Consent Management. ## Edit consent categories diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index f732cc7b50..d6fd7d9e56 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -14,7 +14,9 @@ Segment works with your third-party consent management platform (CMP) or bespoke ![Diagram outlining information flowing from an end user to Segment destinations](/docs/privacy/images/consent-overview.png) -After a user sets their consent preferences, Segment captures them with a wrapper for your mobile and web libraries and updates the [consent object](#consent-object). The events are then sent downstream to any destinations in categories that an end user consented to share data with. +After a user sets their consent preferences on your website or mobile app, Segment requires you to add the [consent object](#consent-object) to all events. If you are using OneTrust, Segment provides a wrapper for your mobile and web libraries that can add the consent object to your events. If you are using another CMP, you are required to add the consent object to your events by creating your own wrapper. For more information, see the [Configure Consent Management documentation](/docs/privacy/configure-consent-management). + +The events, stamped with the consent object, are then sent downstream to any destinations in categories that an end user consented to share data with. > info "" > Segment collects consent for both registered users and anonymous users. @@ -27,7 +29,7 @@ Segment requires every event from all of your sources to include the end-user co { "context": { "consent": { - "consentPreferences": { + "categoryPreferences": { "Advertising": true, "Analytics": false, "Functional": true, @@ -39,14 +41,21 @@ Segment requires every event from all of your sources to include the end-user co ``` -The categories consented to by a user and a flag if a [consent conflict](#reconcile-consent-conflicts) exists are pulled from the consent object and are visible as traits on a user's profile in Unify. + ## Enforce consent -Segment routes events with a consent object to the destinations in categories consented to by a user and to destinations that do not have a consent category. +Segment routes events with a consent object to the destinations in categories consented to by a user and to destinations that do not have a consent category. Segment requires the use of the [Segment Consent Preference event](#segment-consent-preference-event) to route events to Unify and Engage. + +If you are using Segment's OneTrust consent wrappers, Segment automatically generates a Segment Consent Preference event. + +If you do not use OneTrust as your CMP and you only use Segment Connections, you do not have to generate a Segment Consent Preference event. -If an end user consents for the first time or changes the categories they consent to (or if they consent using a different device or identifier,) Segment generates a **Segment Consent Preference** event. +If you use Unify and Engage in your Segment instance, you must generate the Segment Consent Preference event, regardless of what consent management solution you use. -For example, if a user agreed to share their information with you for all categories on their first visit to your site, and then on their next visit to the site only consented to sharing data for functional and advertising purposes but not for analytics or data sharing, a [Track call](/docs/connections/spec/track/) demonstrating their new consent preferences would have the following format: +### Segment Consent Preference event +If an end user consents for the first time or changes the categories they consent to, Segment requires you to generate a **Segment Consent Preference** Track event. This event is automatically generated if you are using one of Segment's [OneTrust consent wrappers](/docs/privacy/configure-consent-management/#step-2-add-the-consent-wrapper-to-analyticsjs), or you can generate it using a wrapper you created on your own. + +For example, if an end user agreed to share their information for functional and advertising purposes but not for analytics or data sharing, the Segment Consent Preference [Track call](/docs/connections/spec/track/) demonstrating their new consent preferences would have the following format: ``` json { @@ -61,17 +70,19 @@ For example, if a user agreed to share their information with you for all catego "timestamp": "2023-01-01T00:00:00.000Z", "context": { "consent": { - "consentPreferences" : { - "Advertising": true, - "Analytics": false, - "Functional": true, - "DataSharing": false -} + "categoryPreferences" : { + "Advertising": true, + "Analytics": false, + "Functional": true, + "DataSharing": false + } } } } ``` +If you use Protocols, the Segment app automatically adds the Segment Consent Preference Track event to all your existing Tracking Plans and for every new Tracking Plan. Segment recommends you don’t delete or edit the default fields in the Segment Consent Preference Track events, but you can add new fields as needed. + > info "Segment Consent Preference is a reserved event name" > Segment has standardized a series of reserved event names that have special semantic meaning and maps these events to tools that support them. > From 8657986553b45ce000785770bf50cbc2463048ad Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Mon, 18 Sep 2023 20:03:21 -0400 Subject: [PATCH 14/30] removed reconcile-consent.md content is on the overview page --- src/privacy/reconcile-consent.md | 63 -------------------------------- 1 file changed, 63 deletions(-) delete mode 100644 src/privacy/reconcile-consent.md diff --git a/src/privacy/reconcile-consent.md b/src/privacy/reconcile-consent.md deleted file mode 100644 index a513ee0167..0000000000 --- a/src/privacy/reconcile-consent.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Reconciling Consent Conflicts -hidden: true ---- - -Segment sends data only to destinations in categories consented to by the end user. When conflicts arise between the consent object and integrations object or your consent management tool, Segment reconciles consent according to the following tables. - - - -> info "Consent Management is in private beta" -> This means that Consent Management features are in active development, and some functionality may change before it becomes generally available. [Contact Segment](https://segment.com/help/contact/){:target="_blank"} with any feedback or questions. - -## Reconcile consent category trait conflicts - -Segment detects when there are conflicting consent categories for a user and reconciles them according to the following table: - - - -## Reconcile a user's conflicting preferences - -If a user has conflicting preferences (for example, they consented yes for a category on mobile, but not on the web, or consented differently using two different emails) Segment routes data according to the following table: - -| Category | Consent on mobile | Consent on the web | -| -------- | ----------------- | ------------------ | - - - - -## Reconcile consent object and integrations object conflicts - -You can add the integrations object and the consent object to your Segment payloads to control how Segment routes data to your downstream destinations. - -> success " " -> For more information about the Integrations object, please see [Filtering your Segment Data](/docs/guides/filtering-data/#filtering-with-the-integrations-object). - -If an event includes both an integrations and consent object, Segment will look at the consent object first, and then take into account the integrations object according to the following table: - - -| Consent Object | Integration Object | Result | -| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------ | -| Not provided or empty object | Not provided or empty object | Message delivered to all destinations | -| `context {consent{}}`
OR
`context {consent {categoryPreference{}}}` | Not provided or empty object | Data **NOT** delivered - consent is considered to be `false` for all categories | -| Not provided or empty object

`context{}` | `{facebook: true,`
`amplitude: false}` | Message and metadata delivered to Facebook | -| Empty consent object
`context {consent{}}`
OR
`context {``consent {``categoryPreference{}``}}` | `{facebook: true,`
`amplitude: false}` | Data **NOT** delivered - consent is considered to be `false` for all categories | -| `{ad: true,`
`analytics: false}`

_Segment has no category-to-destination mapping for ad and analytics_ | Provided, not provided, or empty object | Data **NOT** delivered | -| `{ad: true,`
`analytics: false}`

_ad = facebook, google ads_
| Not provided or empty object | Data delivered to destinations that map to consented purpose. In this case, data is delivered to all ad destinations (Facebook and Google Ads).

No data delivered to analytics destinations | -| `{ad: true,`
`analytics: false}`

_ad = facebook, google ads_
_analytics = amplitude_ | `{facebook: true,`
`amplitude: false}` | Data delivered to all ad destinations even though Google Ads is not present in the integrations object.
Metadata is sent from Facebook.

Data **NOT** delivered to analytics destinations. | -| `{ad: true,`
`analytics: false}`

_ad = facebook, google ads_
_analytics = amplitude_ | `{facebook: false,`
`amplitude: false}` | Data delivered only to Google Ads, not to Facebook. Data **NOT** delivered to analytics destinations. | -| `{ad: true,`
`analytics: true}`

_ad = facebook, google ads_
_analytics = facebook, amplitude_ | `{facebook: true,`
`amplitude: false}` | Data delivered to all ad destinations, including Facebook, because analytics is true.
Metadata is sent from Facebook.
No data is sent to Amplitude because it is `false` in the integrations object. | -| `{ad: false,`
`analytics: true}`

_ad = facebook, google ads_
_analytics = facebook, amplitude_ | `{facebook: true,`
`amplitude: false}` | Data **NOT** delivered to ad destinations. Data delivered to Facebook for analytics only and not to Amplitude. | - - -## Reconcile Consent Management tool and Segment tool conflicts - -If there is a mismatch in consent categories between your consent management tool and the Segment app, Segment reconciles the consent object according to the following table: - -| Consent Management Tool | Segment App | Result | -| ------------------------------------------------------ | ------------------------------------------------------------------------ | ------ | -| `{ad: true}` | There is no "ad" category | No data is shared to destinations that the customer may think of as "ad" destinations or may have been mapped in the consent management tool | -| `{person: true}` | There is no category `person`, but there is a `personalization` category | No data is shared to destinations the customer may consider `person` or the mapped `personalization` category | -| `{ad: true`,
`person: true`,
`analytics:true}` | The `ad`, `person`, `analytics`, and `functional` categories are mapped | Data will be shared with consenting categories of ad, person, and analytics.

No data will be shared with destinations mapped to `functional`, because this content is considered to be false. | - From 76bb057237e3fbe7a7860adf811518784479f4a8 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Mon, 18 Sep 2023 20:04:20 -0400 Subject: [PATCH 15/30] [netlify-build] forgot to save --- src/privacy/consent-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index d6fd7d9e56..e3fed1d8bc 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -8,7 +8,7 @@ related: > info "Consent Management is in private beta" > This means that Consent Management features are in active development, and some functionality may change before it becomes generally available. [Contact Segment](https://segment.com/help/contact/){:target="_blank"} with any feedback or questions. -When an end user visits your site, they set **consent preferences**, or make decisions about the types of data they want you to collect, use, and share. These consent preferences are typically presented as a set list of categories that describe how your company intends to use that data. Common categories include personalization, advertising, and site performance. +When an end user visits your site or app, they set **consent preferences**, or make decisions about the types of data they want you to collect, use, and share. These consent preferences are typically presented as a set list of categories that describe how your company intends to use that data. Common categories include personalization, advertising, and site performance. Segment works with your third-party consent management platform (CMP) or bespoke consent solution to capture an end user's consent preferences and enforce those preferences by only routing events to the categories consented to by an end user. From edaa6b85bc6344906fa9fe8cdeb86687979735c6 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 19 Sep 2023 13:31:35 -0400 Subject: [PATCH 16/30] [netlify-build] making additional changes --- src/privacy/configure-consent-management.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 8e465d27da..7d3e569f1f 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -5,7 +5,7 @@ hidden: true > info "Consent Management is in private beta" > This means that Consent Management features are in active development, and some functionality may change before it becomes generally available. [Contact Segment](https://segment.com/help/contact/){:target="_blank"} with any feedback or questions. -After setting up a third-party or bespoke consent management platform (CMP), you can enforce the consent collected from your users by adding the [consent object](/docs/privacy/consent-management/#consent-object) to your web libraries. +After setting up your consent management platform (CMP), you can enforce the consent collected from your users by adding the [consent object](/docs/privacy/consent-management/#consent-object) to your events. Once you've configured consent in the Segment app and updated your sources to contain consent preference in every event, your events are routed only to the categories your end users consented to share data with. Events without the consent preference will continue to flow to destinations without consent enforcement @@ -24,9 +24,7 @@ Before you can configure consent in Segment, take the following steps: ## Step 1: Create consent categories in the Segment app > info "Limited availability of sources and destinations during private beta" -> During private beta, you can send events from web sources to consent categories. Enforcement of consent preferences is only available for data lakes, warehouses, event streaming destinations, webhooks, and functions. You can map one data lake, warehouse, event streaming destination, webhook, or function to multiple consent categories. All other source and destination types are not impacted by consent mappings. -> -> AWS S3, RETL, and Engage destinations do not enforce consent preferences. +> During private beta, AWS S3, RETL, and Engage destinations do not enforce consent preferences. 1. From the [Segment homepage](https://app.segment.com/goto-my-workspace/){:target="_blank”}, select the Privacy tab and click **Consent Management**. 2. On the Consent management page, click **Create categories**. From 1e0139e7cb4c44724d58ac24202adcd71de6d0ad Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 19 Sep 2023 15:42:27 -0400 Subject: [PATCH 17/30] Update configure-consent-management.md --- src/privacy/configure-consent-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 7d3e569f1f..bb9cf37a6d 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -7,7 +7,7 @@ hidden: true After setting up your consent management platform (CMP), you can enforce the consent collected from your users by adding the [consent object](/docs/privacy/consent-management/#consent-object) to your events. -Once you've configured consent in the Segment app and updated your sources to contain consent preference in every event, your events are routed only to the categories your end users consented to share data with. Events without the consent preference will continue to flow to destinations without consent enforcement +Once you've configured consent in the Segment app and updated your sources to contain consent preference in every event, your events are routed only to the categories your end users consented to share data with. Events without the consent preference will continue to flow to destinations without consent enforcement. ## Prerequisites From c813404121df8314862e8e03ba2223493e9892fd Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 19 Sep 2023 20:03:57 -0400 Subject: [PATCH 18/30] making additional changes [netlify-build] --- src/privacy/configure-consent-management.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index bb9cf37a6d..47a4cefa8b 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -17,7 +17,7 @@ Once you've configured consent in the Segment app and updated your sources to co Before you can configure consent in Segment, take the following steps: - **Set up your third-party consent management tool and create consent categories**. Take note of your consent categories and the key or ID associated with each category. - **Know how your company uses each destination**. You need to know which destinations to map to each category. -- **Access to your web and mobile libraries**. After you set up consent categories in the Segment app, you need to integrate your CDP and your Segment sources using a wrapper or other solution. +- **Access to your web and mobile libraries**. After you set up consent categories in the Segment app, you need to integrate your CMP and your Segment sources using a wrapper or other solution. @@ -42,8 +42,8 @@ Before you can configure consent in Segment, take the following steps: ## Step 2: Integrating your CMP with Segment Once you've created consent categories in the Segment app, you need to integrate your CMP with Segment. Segment recommends using a CMP wrapper, but you can use any solution provided it meets the following criteria: -- Reads the end user consent preference from your CMP and includes the consent object in every event -- Generates the Segment Consent Preference Track event every time a user provides or updates their consent preferences with their anonymousId and userId +- Reads the end user consent preference from your CMP and includes the [consent object](/docs/privacy/consent-management/#consent-object) in every event +- Generates the [Segment Consent Preference Track](/docs/privacy/consent-management/#segment-consent-preference-track) event every time a user provides or updates their consent preferences with their anonymousId and userId Segment provides a OneTrust wrapper for the following sources: - **Analytics.js**: Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. From c14530129f6c632c48c0667cfbede773e68b7af5 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:58:28 -0400 Subject: [PATCH 19/30] making requested changes [netlify-build] --- src/privacy/consent-management.md | 20 ++++++++++---------- src/privacy/consent-segment-connections.md | 0 2 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 src/privacy/consent-segment-connections.md diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index e3fed1d8bc..f78fe23c34 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -10,11 +10,11 @@ related: When an end user visits your site or app, they set **consent preferences**, or make decisions about the types of data they want you to collect, use, and share. These consent preferences are typically presented as a set list of categories that describe how your company intends to use that data. Common categories include personalization, advertising, and site performance. -Segment works with your third-party consent management platform (CMP) or bespoke consent solution to capture an end user's consent preferences and enforce those preferences by only routing events to the categories consented to by an end user. +Segment integrates with your commercial third-party or bespoke consent management platform (CMP) that captures an end user's consent preferences and enforces those preferences by only routing events to the categories consented to by an end user. ![Diagram outlining information flowing from an end user to Segment destinations](/docs/privacy/images/consent-overview.png) -After a user sets their consent preferences on your website or mobile app, Segment requires you to add the [consent object](#consent-object) to all events. If you are using OneTrust, Segment provides a wrapper for your mobile and web libraries that can add the consent object to your events. If you are using another CMP, you are required to add the consent object to your events by creating your own wrapper. For more information, see the [Configure Consent Management documentation](/docs/privacy/configure-consent-management). +After a user sets their consent preferences on your site or app, Segment requires you to add the [consent object](#consent-object) to all events. If you are using OneTrust, Segment provides a wrapper for your mobile and web libraries that can add the consent object to your events. If you are using another CMP, you are required to add the consent object to your events by creating your own wrapper. For more information, see the [Configure Consent Management documentation](/docs/privacy/configure-consent-management). The events, stamped with the consent object, are then sent downstream to any destinations in categories that an end user consented to share data with. @@ -23,7 +23,7 @@ The events, stamped with the consent object, are then sent downstream to any des ## Consent object -Segment requires every event from all of your sources to include the end-user consent preferences, captured by your consent management tools or your application logic, in the form of the **consent object**. The consent object is a JSON object with the following format: +Segment requires every event from all of your sources to include the end-user consent preferences, captured by your consent management platform or your application logic, in the form of the **consent object**. The consent object is a JSON object with the following format: ```json { @@ -43,17 +43,17 @@ Segment requires every event from all of your sources to include the end-user co -## Enforce consent -Segment routes events with a consent object to the destinations in categories consented to by a user and to destinations that do not have a consent category. Segment requires the use of the [Segment Consent Preference event](#segment-consent-preference-event) to route events to Unify and Engage. +Events without the consent object will continue to flow to destinations without consent enforcement. -If you are using Segment's OneTrust consent wrappers, Segment automatically generates a Segment Consent Preference event. +## Enforce consent +Segment requires the use of the [Segment Consent Preference event](#segment-consent-preference-event) to route events to Unify and Engage. -If you do not use OneTrust as your CMP and you only use Segment Connections, you do not have to generate a Segment Consent Preference event. +Segment uses Profiles in [Unify](/docs/unify/) as the source of truth of an end user's consent preference when enforcing consent in Twilio Engage. To get consent preference on the Profile, Segment requires the use of the [Segment Consent Preference event](#segment-consent-preference-event) and Identify events to route events to Unify. The Segment Consent Preference and Identify event should include the [consent object](#consent-object). -If you use Unify and Engage in your Segment instance, you must generate the Segment Consent Preference event, regardless of what consent management solution you use. +Note: Consent in Unify and Twilio Engage are currently unavailable. If you are using Segment's OneTrust consent wrappers, Segment automatically generates a Segment Consent Preference event with every save of consent preference edits done by the end user on OneTrust consent modal. ### Segment Consent Preference event -If an end user consents for the first time or changes the categories they consent to, Segment requires you to generate a **Segment Consent Preference** Track event. This event is automatically generated if you are using one of Segment's [OneTrust consent wrappers](/docs/privacy/configure-consent-management/#step-2-add-the-consent-wrapper-to-analyticsjs), or you can generate it using a wrapper you created on your own. +If an end user consents for the first time or changes the categories they consent to, Segment requires you to generate a **Segment Consent Preference** Track event. This event is automatically generated if you are using one of Segment's [OneTrust consent wrappers](/docs/privacy/configure-consent-management/#step-2-add-the-consent-wrapper-to-analyticsjs), or you can generate on your own. This event is required to add the end user's consent to their Profile in Unify. For example, if an end user agreed to share their information for functional and advertising purposes but not for analytics or data sharing, the Segment Consent Preference [Track call](/docs/connections/spec/track/) demonstrating their new consent preferences would have the following format: @@ -81,7 +81,7 @@ For example, if an end user agreed to share their information for functional and } ``` -If you use Protocols, the Segment app automatically adds the Segment Consent Preference Track event to all your existing Tracking Plans and for every new Tracking Plan. Segment recommends you don’t delete or edit the default fields in the Segment Consent Preference Track events, but you can add new fields as needed. +If you use Protocols, the Segment app automatically adds the Segment Consent Preference Track event to all your existing Tracking Plans and for every new Tracking Plan. Segment recommends you don’t edit or delete the default fields in the Segment Consent Preference Track events, but you can add new fields as needed. > info "Segment Consent Preference is a reserved event name" > Segment has standardized a series of reserved event names that have special semantic meaning and maps these events to tools that support them. diff --git a/src/privacy/consent-segment-connections.md b/src/privacy/consent-segment-connections.md new file mode 100644 index 0000000000..e69de29bb2 From 0d28b1e9eca9930d96ad8487279610d97a0fd583 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 20 Sep 2023 16:00:56 -0400 Subject: [PATCH 20/30] Update configure-consent-management.md --- src/privacy/configure-consent-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 47a4cefa8b..dcf990649b 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -43,7 +43,7 @@ Before you can configure consent in Segment, take the following steps: Once you've created consent categories in the Segment app, you need to integrate your CMP with Segment. Segment recommends using a CMP wrapper, but you can use any solution provided it meets the following criteria: - Reads the end user consent preference from your CMP and includes the [consent object](/docs/privacy/consent-management/#consent-object) in every event -- Generates the [Segment Consent Preference Track](/docs/privacy/consent-management/#segment-consent-preference-track) event every time a user provides or updates their consent preferences with their anonymousId and userId +- If using Unify and Engage, generates the [Segment Consent Preference Track](/docs/privacy/consent-management/#segment-consent-preference-track) event every time a user provides or updates their consent preferences with their anonymousId and userId Segment provides a OneTrust wrapper for the following sources: - **Analytics.js**: Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. From 6ffd0b1c71b0c8ef36abba8db277fa184dc000c4 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 20 Sep 2023 19:55:12 -0400 Subject: [PATCH 21/30] complete overhaul [netlify-build] --- src/privacy/configure-consent-management.md | 10 +- src/privacy/consent-in-segment-connections.md | 81 ++++++++++++ src/privacy/consent-in-unify.md | 49 +++++++ src/privacy/consent-management.md | 120 ++---------------- 4 files changed, 146 insertions(+), 114 deletions(-) create mode 100644 src/privacy/consent-in-segment-connections.md create mode 100644 src/privacy/consent-in-unify.md diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index dcf990649b..41fb8c58d7 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -1,11 +1,15 @@ --- title: Configure Consent Management hidden: true +related: + - "/privacy/consent-management/" + - "/privacy/consent-in-segment-connections/" + - "/privacy/consent-in-unify/" --- > info "Consent Management is in private beta" > This means that Consent Management features are in active development, and some functionality may change before it becomes generally available. [Contact Segment](https://segment.com/help/contact/){:target="_blank"} with any feedback or questions. -After setting up your consent management platform (CMP), you can enforce the consent collected from your users by adding the [consent object](/docs/privacy/consent-management/#consent-object) to your events. +After setting up your consent management platform (CMP), you can enforce the consent collected from your users by adding the [consent object](/docs/privacy/consent-in-segment-connections/#consent-object) to your events. Once you've configured consent in the Segment app and updated your sources to contain consent preference in every event, your events are routed only to the categories your end users consented to share data with. Events without the consent preference will continue to flow to destinations without consent enforcement. @@ -42,8 +46,8 @@ Before you can configure consent in Segment, take the following steps: ## Step 2: Integrating your CMP with Segment Once you've created consent categories in the Segment app, you need to integrate your CMP with Segment. Segment recommends using a CMP wrapper, but you can use any solution provided it meets the following criteria: -- Reads the end user consent preference from your CMP and includes the [consent object](/docs/privacy/consent-management/#consent-object) in every event -- If using Unify and Engage, generates the [Segment Consent Preference Track](/docs/privacy/consent-management/#segment-consent-preference-track) event every time a user provides or updates their consent preferences with their anonymousId and userId +- Reads the end user consent preference from your CMP and includes the [consent object](/docs/privacy/consent-in-segment-connections/#consent-object) in every event +- If using Unify and Engage, generates the [Segment Consent Preference](/docs/privacy/consent-in-unify/#segment-consent-preference-event) event every time a user provides or updates their consent preferences with their anonymousId and userId Segment provides a OneTrust wrapper for the following sources: - **Analytics.js**: Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. diff --git a/src/privacy/consent-in-segment-connections.md b/src/privacy/consent-in-segment-connections.md new file mode 100644 index 0000000000..1156c3a5a5 --- /dev/null +++ b/src/privacy/consent-in-segment-connections.md @@ -0,0 +1,81 @@ +--- +title: Consent in Segment Connections +hidden: true +related: + - "/privacy/consent-management/" + - "/privacy/configure-consent-management/" + - "/privacy/consent-in-unify/" +--- + +> info "Consent Management is in private beta" +> This means that Consent Management features are in active development, and some functionality may change before it becomes generally available. [Contact Segment](https://segment.com/help/contact/){:target="_blank"} with any feedback or questions. + +Segment Connections users can add the [consent object](#consent-object) to their sources to stamp events with the end-user consent preferences captured by your consent management platform (CMP) and send them downstream to destinations in categories that an end user consented to share data with. Events without the consent object continue to flow to destinations without consent enforcement. + +For more information about configuring the consent object, see the [Configure Consent Management](/docs/privacy/configure-consent-management) documentation. + +If your sources also contain the integrations object, Segment will look at the consent object first, and then take into account the integrations object according to the table in the [Reconcile consent object and integrations object](#reconcile-consent-object-and-integrations-object-conflicts) documentation. + +> info “Unify users must also send the Segment Consent Preference Event to their destinations” +> If you use Unify, see the [Consent in Unify](/docs/privacy/consent-in-unify) documentation for more information about the Segment Consent Preference event, which Segment uses to add consent preference to the Profile. + +## Consent object + +Segment requires every event from all of your sources to include the end-user consent preferences, captured by your CMP or your application logic, in the form of the **consent object**. The consent object is a JSON object with the following format: + +```json +{ +"context": { + "consent": { + "categoryPreferences": { + "Advertising": true, + "Analytics": false, + "Functional": true, + "DataSharing": false + } + } + } +} + +``` + + + +Events without the consent object will continue to flow to destinations without consent enforcement. + +## Reconcile consent conflicts + +Segment resolves conflicts between your [consent object and your integration object](#reconcile-consent-object-and-integrations-object-conflicts) and between your [CMP and the consent categories you configured in the Segment app](#reconcile-cmp-and-segment-consent-category-conflicts). + +### Reconcile consent object and integrations object conflicts + +You can add both the integrations object and the consent object to your Segment payloads for greater control over how Segment routes data to your downstream destinations. + +> success "" +> For more information about the Integrations object, please see [Filtering your Segment Data](/docs/guides/filtering-data/#filtering-with-the-integrations-object). + +If an event includes both an integrations and consent object, Segment will look at the consent object first, and then take into account the integrations object according to the following table: + +| Consent Object | Integration Object | Result | +| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------ | +| Not provided or empty consent object

`"context": {`
`}`
OR
`"context": {`
` "consent": {`
` }`
`}` | Not provided or empty object | Data flows to all destinations. | +| Empty categoryPreference object

`"context": {`
` "consent": {`
` "categoryPreference": {`
` }`
` }`
`}`| Not provided or empty object | Data does **NOT** flow to any mapped destinations - consent is considered to be `false` for all categories.

Data flows to all destinations **NOT** mapped to a consent category. | +| Not provided

`"context": {`
`}` | `{facebook: true,`
`amplitude: false}` | Data flows to the destinations that are `true` in the integrations object (Facebook). Any metadata provided in the integrations object also flows to your downstream destinations. | +| Empty consent object

`"context": {`
` "consent": {`
` }`
`}`
OR
`"context": {`
` "consent": {`
` "categoryPreference": {`
` }`
` }`
`}`| `{facebook: true,`
`amplitude: false}` | Data does **NOT** flow to any mapped destinations - consent is considered to be `false` for all categories.

Data flows to all destinations **NOT** mapped to a consent category, destinations set to `true` in the integrations object, and destinations not included in the integrations object. | +| `{ad: true,`
`analytics: false}`

_Segment has no category-to-destination mapping for ad and analytics_ | Provided, not provided, or empty object | Data flows to all destinations, as all destinations are unmapped. If the integrations object is present, data flow may be impacted. | +| `{ad: true,`
`analytics: false}`

_ad = facebook, google-ads_
| Not provided or empty object | Data flows to destinations that map to a consented purpose. In this case, data flows to all ad destinations (Facebook and Google Ads).

No data flows to analytics destinations. | +| `{ad: true,`
`analytics: false}`

_ad = facebook, google-ads_
_analytics = amplitude_ | `{facebook: true,`
`amplitude: false}` | Data flows to all ad destinations, even though Google Ads is not present in the integrations object.

Data does **NOT** flow to analytics destinations. | +| `{ad: true,`
`analytics: false}`

_ad = facebook, google-ads_
_analytics = amplitude_ | `{facebook: false,`
`amplitude: false}` | Data only flows to Google Ads and not to Facebook, which is `false` in the integrations object.

Data does **NOT** flow to analytics destinations. | +| `{ad: true,`
`analytics: false}`

_ad = facebook, google-ads_
_analytics = facebook, amplitude_ | `{facebook: true,`
`amplitude: false}` | When destinations are mapped to multiple categories, data only flows if consent is `true` for all categories. In this case, data only flows to Google Ads and not to Facebook.

Data does **NOT** flow to analytics destinations. | +| `{ad: true,`
`analytics: true}`

_ad = facebook, google-ads_
_analytics = facebook, amplitude_ | `{facebook: true,`
`amplitude: false}` | When destinations are mapped to multiple categories, data only flows if consent is `true` for all categories. In this case, data flows to Google Ads and Facebook. No data flows to Amplitude because it is `false` in the integrations object. | +| `{ad: false,`
`analytics: true}`

_ad = facebook, google-ads_
_analytics = facebook, amplitude_ | `{facebook: true,`
`amplitude: false}` | When destinations are mapped to multiple categories, data only flows if consent is `true` for all categories.

In this example, data does **NOT** flow to any destination because of the interaction between the integrations and consent objects. | + +### Reconcile CMP and Segment consent category conflicts + +If you have a category configured in your consent management tool (for example, `advertising`) and there is no category with the same ID in Segment, the data will flow to unmapped destinations. If destinations are mapped to a different category in the Segment app, data flow will honor end user consent for that category. + +If there is a category configured in Segment (`functional`) that is not mapped in your CMP, data will not flow to destinations mapped to the `functional` category. + +## Content observability + +Events discarded due to consent preferences appear in [Delivery Overview](/docs/connections/delivery-overview/) at the "Filtered at destination" step with the discard reason *Filtered by end user consent*. \ No newline at end of file diff --git a/src/privacy/consent-in-unify.md b/src/privacy/consent-in-unify.md new file mode 100644 index 0000000000..23e097f80e --- /dev/null +++ b/src/privacy/consent-in-unify.md @@ -0,0 +1,49 @@ +--- +title: Consent in Unify +hidden: true +related: + - "/privacy/consent-management/" + - "/privacy/configure-consent-management/" + - "/privacy/consent-in-segment-connections/" +--- + +> info "Consent in Unify and Twilio Engage is currently unavailable." +> However, Segment's OneTrust consent wrappers automatically generate the Segment Consent Preference Track event, which will be required for future integrations with Unify and Twilio Engage. + +Segment uses Profiles in [Unify](/docs/unify/) as the source of truth of an end user's consent preference when enforcing consent in Twilio Engage. To get consent preference on the Profile, Segment requires the use of the [Segment Consent Preference event](#segment-consent-preference-event) and Identify events to route events to Unify. The Segment Consent Preference and Identify event should include the [consent object](/docs/privacy/consent-in-segment-connections/#consent-object). + +## Segment Consent Preference event +Every time an end user provides or updates their consent preferences, Segment requires you to generate a **Segment Consent Preference** event. If you are using [Segment's OneTrust consent wrappers](/docs/privacy/configure-consent-management/#step-2-integrating-your-cmp-with-segment), Segment automatically generates a Segment Consent Preference event. This event is required to add the end user’s consent preference on their Profile in Unify. + +For example, if an end user agreed to share their information for functional and advertising purposes but not for analytics or data sharing, the Segment Consent Preference [Track call](/docs/connections/spec/track/) demonstrating their new consent preferences would have the following format: + +``` json +{ + "anonymousId": "23adfd82-aa0f-45a7-a756-24f2a7a4c895", + "type": "track", + "event": "Segment Consent Preference", + "userId": "u123", + "traits": { + "email": "peter@example.com", + "phone": "555-555-5555", + } + "timestamp": "2023-01-01T00:00:00.000Z", + "context": { + "consent": { + "categoryPreferences" : { + "Advertising": true, + "Analytics": false, + "Functional": true, + "DataSharing": false + } + } + } +} +``` + +If you use Protocols, the Segment app automatically adds the Segment Consent Preference event to all your existing Tracking Plans and for every new Tracking Plan. Segment recommends you don’t edit or delete the default fields in the Segment Consent Preference events, but you can add new fields as needed. + +> info "Segment Consent Preference is a reserved event name" +> Segment has standardized a series of reserved event names that have special semantic meaning and maps these events to tools that support them. +> +> See the [Semantic Events](/docs/connections/spec/semantic/) docs for more details. diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index f78fe23c34..bb485f9fce 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -1,130 +1,28 @@ --- title: Consent Management Overview hidden: true +hide_toc: true related: - - "/privacy/account-deletion/" - - "/privacy/complying-with-the-gdpr/" + - "/privacy/configure-consent-management/" + - "/privacy/consent-in-segment-connections/" + - "/privacy/consent-in-unify/" --- > info "Consent Management is in private beta" > This means that Consent Management features are in active development, and some functionality may change before it becomes generally available. [Contact Segment](https://segment.com/help/contact/){:target="_blank"} with any feedback or questions. -When an end user visits your site or app, they set **consent preferences**, or make decisions about the types of data they want you to collect, use, and share. These consent preferences are typically presented as a set list of categories that describe how your company intends to use that data. Common categories include personalization, advertising, and site performance. +When an end user visits your web or mobile app, they set **consent preferences**, or make decisions about the types of data they want you to collect, use, and share. These consent preferences are typically presented as a set list of categories that describe how your company intends to use that data. Some common categories include personalization, advertising, and site performance. -Segment integrates with your commercial third-party or bespoke consent management platform (CMP) that captures an end user's consent preferences and enforces those preferences by only routing events to the categories consented to by an end user. +Segment integrates with your commercial third-party or bespoke consent management platform (CMP) that captures an end user's consent preferences and enforces those preferences by only routing events to the categories consented to by an end user. ![Diagram outlining information flowing from an end user to Segment destinations](/docs/privacy/images/consent-overview.png) -After a user sets their consent preferences on your site or app, Segment requires you to add the [consent object](#consent-object) to all events. If you are using OneTrust, Segment provides a wrapper for your mobile and web libraries that can add the consent object to your events. If you are using another CMP, you are required to add the consent object to your events by creating your own wrapper. For more information, see the [Configure Consent Management documentation](/docs/privacy/configure-consent-management). +After a user sets their consent preferences on your web or mobile app, Segment requires you to add the [consent object](/docs/privacy/consent-in-segment-connections/#consent-object) to all events. If you are using OneTrust, Segment provides a wrapper for your web and mobile libraries that can add the consent object to your events. If you are using another CMP, you are required to add the consent object to your events by either creating your own wrapper or using another mechanism. For more information, see the [Configure Consent Management documentation](/docs/privacy/configure-consent-management). The events, stamped with the consent object, are then sent downstream to any destinations in categories that an end user consented to share data with. > info "" > Segment collects consent for both registered users and anonymous users. -## Consent object +For more information about consent in Segment Connections, see the [Consent in Segment Connections](/docs/privacy/consent-in-segment-connections) documentation. -Segment requires every event from all of your sources to include the end-user consent preferences, captured by your consent management platform or your application logic, in the form of the **consent object**. The consent object is a JSON object with the following format: - -```json -{ -"context": { - "consent": { - "categoryPreferences": { - "Advertising": true, - "Analytics": false, - "Functional": true, - "DataSharing": false - } - } - } -} - -``` - - - -Events without the consent object will continue to flow to destinations without consent enforcement. - -## Enforce consent -Segment requires the use of the [Segment Consent Preference event](#segment-consent-preference-event) to route events to Unify and Engage. - -Segment uses Profiles in [Unify](/docs/unify/) as the source of truth of an end user's consent preference when enforcing consent in Twilio Engage. To get consent preference on the Profile, Segment requires the use of the [Segment Consent Preference event](#segment-consent-preference-event) and Identify events to route events to Unify. The Segment Consent Preference and Identify event should include the [consent object](#consent-object). - -Note: Consent in Unify and Twilio Engage are currently unavailable. If you are using Segment's OneTrust consent wrappers, Segment automatically generates a Segment Consent Preference event with every save of consent preference edits done by the end user on OneTrust consent modal. - -### Segment Consent Preference event -If an end user consents for the first time or changes the categories they consent to, Segment requires you to generate a **Segment Consent Preference** Track event. This event is automatically generated if you are using one of Segment's [OneTrust consent wrappers](/docs/privacy/configure-consent-management/#step-2-add-the-consent-wrapper-to-analyticsjs), or you can generate on your own. This event is required to add the end user's consent to their Profile in Unify. - -For example, if an end user agreed to share their information for functional and advertising purposes but not for analytics or data sharing, the Segment Consent Preference [Track call](/docs/connections/spec/track/) demonstrating their new consent preferences would have the following format: - -``` json -{ - "anonymousId": "23adfd82-aa0f-45a7-a756-24f2a7a4c895", - "type": "track", - "event": "Segment Consent Preference", - "userId": "u123", - "traits": { - "email": "peter@example.com", - "phone": "555-555-5555", - } - "timestamp": "2023-01-01T00:00:00.000Z", - "context": { - "consent": { - "categoryPreferences" : { - "Advertising": true, - "Analytics": false, - "Functional": true, - "DataSharing": false - } - } - } -} -``` - -If you use Protocols, the Segment app automatically adds the Segment Consent Preference Track event to all your existing Tracking Plans and for every new Tracking Plan. Segment recommends you don’t edit or delete the default fields in the Segment Consent Preference Track events, but you can add new fields as needed. - -> info "Segment Consent Preference is a reserved event name" -> Segment has standardized a series of reserved event names that have special semantic meaning and maps these events to tools that support them. -> -> See the [Semantic Events](/docs/connections/spec/semantic/) docs for more details. - -## Reconcile consent conflicts - -Segment resolves conflicts between your [consent object and your integration object](#reconcile-consent-object-and-integrations-object-conflicts) and between your [CMP and the consent categories you configured in the Segment app](#reconcile-cmp-and-segment-consent-category-conflicts). - -### Reconcile consent object and integrations object conflicts - -You can add both the integrations object and the consent object to your Segment payloads for greater control over how Segment routes data to your downstream destinations. - -> success " " -> For more information about the Integrations object, please see [Filtering your Segment Data](/docs/guides/filtering-data/#filtering-with-the-integrations-object). - -If an event includes both an integrations and consent object, Segment will look at the consent object first, and then take into account the integrations object according to the following table: - -| Consent Object | Integration Object | Result | -| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------ | -| Not provided or empty consent object

`"context": {`
`}`
OR
`"context": {`
` "consent": {`
` }`
`}` | Not provided or empty object | Data flows to all destinations. | -| Empty categoryPreference object

`"context": {`
` "consent": {`
` "categoryPreference": {`
` }`
` }`
`}`| Not provided or empty object | Data does **NOT** flow to any mapped destinations - consent is considered to be `false` for all categories.

Data flows to all destinations **NOT** mapped to a consent category. | -| Not provided

`"context": {`
`}` | `{facebook: true,`
`amplitude: false}` | Data flows to the destinations that are `true` in the integrations object (Facebook). Any metadata provided in the integrations object also flows to your downstream destinations. | -| Empty consent object

`"context": {`
` "consent": {`
` }`
`}`
OR
`"context": {`
` "consent": {`
` "categoryPreference": {`
` }`
` }`
`}`| `{facebook: true,`
`amplitude: false}` | Data does **NOT** flow to any mapped destinations - consent is considered to be `false` for all categories.

Data flows to all destinations **NOT** mapped to a consent category, destinations set to `true` in the integrations object, and destinations not included in the integrations object. | -| `{ad: true,`
`analytics: false}`

_Segment has no category-to-destination mapping for ad and analytics_ | Provided, not provided, or empty object | Data flows to all destinations, as all destinations are unmapped. If the integrations object is present, data flow may be impacted. | -| `{ad: true,`
`analytics: false}`

_ad = facebook, google-ads_
| Not provided or empty object | Data flows to destinations that map to a consented purpose. In this case, data flows to all ad destinations (Facebook and Google Ads).

No data flows to analytics destinations. | -| `{ad: true,`
`analytics: false}`

_ad = facebook, google-ads_
_analytics = amplitude_ | `{facebook: true,`
`amplitude: false}` | Data flows to all ad destinations, even though Google Ads is not present in the integrations object.

Data does **NOT** flow to analytics destinations. | -| `{ad: true,`
`analytics: false}`

_ad = facebook, google-ads_
_analytics = amplitude_ | `{facebook: false,`
`amplitude: false}` | Data only flows to Google Ads and not to Facebook, which is `false` in the integrations object.

Data does **NOT** flow to analytics destinations. | -| `{ad: true,`
`analytics: false}`

_ad = facebook, google-ads_
_analytics = facebook, amplitude_ | `{facebook: true,`
`amplitude: false}` | When destinations are mapped to multiple categories, data only flows if consent is `true` for all categories. In this case, data only flows to Google Ads and not to Facebook.

Data does **NOT** flow to analytics destinations. | -| `{ad: true,`
`analytics: true}`

_ad = facebook, google-ads_
_analytics = facebook, amplitude_ | `{facebook: true,`
`amplitude: false}` | When destinations are mapped to multiple categories, data only flows if consent is `true` for all categories. In this case, data flows to Google Ads and Facebook. No data flows to Amplitude because it is `false` in the integrations object. | -| `{ad: false,`
`analytics: true}`

_ad = facebook, google-ads_
_analytics = facebook, amplitude_ | `{facebook: true,`
`amplitude: false}` | When destinations are mapped to multiple categories, data only flows if consent is `true` for all categories.

In this example, data does **NOT** flow to any destination because of the interaction between the integrations and consent objects. | - -### Reconcile CMP and Segment consent category conflicts - -If you have a category configured in your consent management tool (for example, `advertising`) and there is no category with the same ID in Segment, the data will flow to unmapped destinations. If destinations are mapped to a different category in the Segment app, data flow will honor end user consent for that category. - -If there is a category configured in Segment (`functional`) that is not mapped in your CMP, data will not flow to destinations mapped to the `functional` category. - -## Consent observability - - - -Events discarded due to consent preferences appear in [Delivery Overview](/docs/connections/delivery-overview/) at the "Filtered at destination" step with the discard reason __Filtered by end user consent__. \ No newline at end of file +If you are a Unify user, you can also see the [Consent in Unify](/docs/privacy/consent-in-unify) for more information about the Segment Consent Preference event, which Segment uses to add consent preference to the Profile. From be3d8c0b50d625bae9513c2a5e4183a6982194c9 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 21 Sep 2023 15:16:04 -0400 Subject: [PATCH 22/30] [netlify-build] --- src/privacy/configure-consent-management.md | 2 +- src/privacy/consent-in-segment-connections.md | 6 +++--- src/privacy/consent-in-unify.md | 2 +- src/privacy/consent-management.md | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 41fb8c58d7..38a1c86fef 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -54,7 +54,7 @@ Segment provides a OneTrust wrapper for the following sources: - **Kotlin**: Please follow the instructions from the README in the [@segment-integrations/analytics-kotlin-consent](https://github.com/segment-integrations/analytics-kotlin-consent/blob/main/README.md#getting-started){:target="_blank"} repository. - **Swift**: Please follow the instructions from the README in the [@repository](){:target="_blank"}. -If you'd like to integrate with any other CDP, Segment requires you to build your own wrapper or use any mechanism provided it meets the above requirements of data and event generation. +If you'd like to integrate with any other CMP, Segment requires you to build your own wrapper or use any mechanism provided it meets the above requirements of data and event generation. > warning "Consent Management is not backwards compatible with Segment's legacy iOS and Android libraries" > If you are using one of Segment's legacy mobile libraries (iOS or Android,) you will need to upgrade to [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/migration/) or [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) before using Consent Management. diff --git a/src/privacy/consent-in-segment-connections.md b/src/privacy/consent-in-segment-connections.md index 1156c3a5a5..6deff20fa9 100644 --- a/src/privacy/consent-in-segment-connections.md +++ b/src/privacy/consent-in-segment-connections.md @@ -10,9 +10,9 @@ related: > info "Consent Management is in private beta" > This means that Consent Management features are in active development, and some functionality may change before it becomes generally available. [Contact Segment](https://segment.com/help/contact/){:target="_blank"} with any feedback or questions. -Segment Connections users can add the [consent object](#consent-object) to their sources to stamp events with the end-user consent preferences captured by your consent management platform (CMP) and send them downstream to destinations in categories that an end user consented to share data with. Events without the consent object continue to flow to destinations without consent enforcement. +Segment Connections users can add the [consent object](#consent-object) to their sources to stamp events with the end user consent preferences captured by your consent management platform (CMP) and send them downstream to destinations in categories that an end user consented to share data with. Events without the consent object continue to flow to destinations without consent enforcement. -For more information about configuring the consent object, see the [Configure Consent Management](/docs/privacy/configure-consent-management) documentation. +For more information about configuring consent categories, see the [Configure Consent Management](/docs/privacy/configure-consent-management/#step-1-create-consent-categories-in-the-segment-app) documentation. If your sources also contain the integrations object, Segment will look at the consent object first, and then take into account the integrations object according to the table in the [Reconcile consent object and integrations object](#reconcile-consent-object-and-integrations-object-conflicts) documentation. @@ -21,7 +21,7 @@ If your sources also contain the integrations object, Segment will look at the c ## Consent object -Segment requires every event from all of your sources to include the end-user consent preferences, captured by your CMP or your application logic, in the form of the **consent object**. The consent object is a JSON object with the following format: +Segment requires every event from all of your sources to include the end user consent preferences, captured by your CMP or your application logic, in the form of the **consent object**. The consent object is a JSON object with the following format: ```json { diff --git a/src/privacy/consent-in-unify.md b/src/privacy/consent-in-unify.md index 23e097f80e..9af6ab463d 100644 --- a/src/privacy/consent-in-unify.md +++ b/src/privacy/consent-in-unify.md @@ -10,7 +10,7 @@ related: > info "Consent in Unify and Twilio Engage is currently unavailable." > However, Segment's OneTrust consent wrappers automatically generate the Segment Consent Preference Track event, which will be required for future integrations with Unify and Twilio Engage. -Segment uses Profiles in [Unify](/docs/unify/) as the source of truth of an end user's consent preference when enforcing consent in Twilio Engage. To get consent preference on the Profile, Segment requires the use of the [Segment Consent Preference event](#segment-consent-preference-event) and Identify events to route events to Unify. The Segment Consent Preference and Identify event should include the [consent object](/docs/privacy/consent-in-segment-connections/#consent-object). +Segment uses Profiles in [Unify](/docs/unify/) as the source of truth of an end user's consent preference when enforcing consent in Twilio Engage. To get consent preference on the Profile, Segment requires the use of the [Segment Consent Preference event](#segment-consent-preference-event) and [Identify](/docs/connections/spec/Identify) events to route events to Unify. The Segment Consent Preference and Identify event should include the [consent object](/docs/privacy/consent-in-segment-connections/#consent-object). ## Segment Consent Preference event Every time an end user provides or updates their consent preferences, Segment requires you to generate a **Segment Consent Preference** event. If you are using [Segment's OneTrust consent wrappers](/docs/privacy/configure-consent-management/#step-2-integrating-your-cmp-with-segment), Segment automatically generates a Segment Consent Preference event. This event is required to add the end user’s consent preference on their Profile in Unify. diff --git a/src/privacy/consent-management.md b/src/privacy/consent-management.md index bb485f9fce..234c15b5e9 100644 --- a/src/privacy/consent-management.md +++ b/src/privacy/consent-management.md @@ -16,7 +16,7 @@ Segment integrates with your commercial third-party or bespoke consent managemen ![Diagram outlining information flowing from an end user to Segment destinations](/docs/privacy/images/consent-overview.png) -After a user sets their consent preferences on your web or mobile app, Segment requires you to add the [consent object](/docs/privacy/consent-in-segment-connections/#consent-object) to all events. If you are using OneTrust, Segment provides a wrapper for your web and mobile libraries that can add the consent object to your events. If you are using another CMP, you are required to add the consent object to your events by either creating your own wrapper or using another mechanism. For more information, see the [Configure Consent Management documentation](/docs/privacy/configure-consent-management). +After a user sets their consent preferences on your web or mobile app, Segment requires you to add the [consent object](/docs/privacy/consent-in-segment-connections/#consent-object) to all events. If you are using OneTrust, Segment provides a wrapper for your web and mobile libraries that can add the consent object to your events. If you are using another CMP, you are required to add the consent object to your events by either creating your own wrapper or using another mechanism. For more information, see the [Configure Consent Management documentation](/docs/privacy/configure-consent-management/#step-2-integrating-your-cmp-with-segment). The events, stamped with the consent object, are then sent downstream to any destinations in categories that an end user consented to share data with. From 21dee3a9443732d802413f14680090dc1df69b82 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 21 Sep 2023 16:11:55 -0400 Subject: [PATCH 23/30] [netlify-build] --- src/privacy/consent-in-segment-connections.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/privacy/consent-in-segment-connections.md b/src/privacy/consent-in-segment-connections.md index 6deff20fa9..8f98cd4fb0 100644 --- a/src/privacy/consent-in-segment-connections.md +++ b/src/privacy/consent-in-segment-connections.md @@ -16,8 +16,8 @@ For more information about configuring consent categories, see the [Configure Co If your sources also contain the integrations object, Segment will look at the consent object first, and then take into account the integrations object according to the table in the [Reconcile consent object and integrations object](#reconcile-consent-object-and-integrations-object-conflicts) documentation. -> info “Unify users must also send the Segment Consent Preference Event to their destinations” -> If you use Unify, see the [Consent in Unify](/docs/privacy/consent-in-unify) documentation for more information about the Segment Consent Preference event, which Segment uses to add consent preference to the Profile. +> info “Unify users must send an additional event to add consent preferences to Profiles” +> If you use Unify, see the [Consent in Unify](/docs/privacy/consent-in-unify) documentation for more information about the Segment Consent Preference event, which Segment uses with the consent object to add consent preference to Profiles. ## Consent object From 6a4a70b7dfe3c318ab6540fd2d737d0cf31c38d6 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 21 Sep 2023 18:48:20 -0400 Subject: [PATCH 24/30] [netlify-build] --- src/privacy/consent-segment-connections.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/privacy/consent-segment-connections.md diff --git a/src/privacy/consent-segment-connections.md b/src/privacy/consent-segment-connections.md deleted file mode 100644 index e69de29bb2..0000000000 From bd9d60f3825e7d6db7f34b8a916b9380430fd3d6 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Mon, 25 Sep 2023 12:20:34 -0400 Subject: [PATCH 25/30] [netlify-build] --- src/privacy/consent-in-segment-connections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/consent-in-segment-connections.md b/src/privacy/consent-in-segment-connections.md index 8f98cd4fb0..c9cddeaa0d 100644 --- a/src/privacy/consent-in-segment-connections.md +++ b/src/privacy/consent-in-segment-connections.md @@ -16,7 +16,7 @@ For more information about configuring consent categories, see the [Configure Co If your sources also contain the integrations object, Segment will look at the consent object first, and then take into account the integrations object according to the table in the [Reconcile consent object and integrations object](#reconcile-consent-object-and-integrations-object-conflicts) documentation. -> info “Unify users must send an additional event to add consent preferences to Profiles” +> info "Unify users must send an additional event to add consent preferences to Profiles" > If you use Unify, see the [Consent in Unify](/docs/privacy/consent-in-unify) documentation for more information about the Segment Consent Preference event, which Segment uses with the consent object to add consent preference to Profiles. ## Consent object From dc91e5a8758af781654d8c25f6b7e9fabf05cfe0 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 26 Sep 2023 12:11:12 -0400 Subject: [PATCH 26/30] Update src/privacy/configure-consent-management.md Co-authored-by: pwseg <86626706+pwseg@users.noreply.github.com> --- src/privacy/configure-consent-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 38a1c86fef..1201fdcff0 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -41,7 +41,7 @@ Before you can configure consent in Segment, take the following steps: 5. Once you've finished setting up your category or categories, click **Save**. > warning "Segment recommends mapping all destinations to a category" -> Segment assumes all destinations without a mapping do not require user consent and will receive all events containing a consent object. If a destination is mapped to multiple categories, a user must consent to all categories to for data to flow to the destination. +> Segment assumes all destinations without a mapping do not require user consent and will receive all events containing a consent object. If a destination is mapped to multiple categories, a user must consent to all categories for data to flow to the destination. ## Step 2: Integrating your CMP with Segment From 14d5cfd5bc343d3b6a93baaa1af06071bed7a993 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 27 Sep 2023 14:51:54 -0400 Subject: [PATCH 27/30] remove references to Swift [netlify-build] --- src/privacy/configure-consent-management.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 1201fdcff0..471b085bfc 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -52,12 +52,16 @@ Once you've created consent categories in the Segment app, you need to integrate Segment provides a OneTrust wrapper for the following sources: - **Analytics.js**: Please follow the instructions from the README in the [@segment/analytics-consent-wrapper-onetrust repository](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-wrapper-onetrust){:target="_blank"}. - **Kotlin**: Please follow the instructions from the README in the [@segment-integrations/analytics-kotlin-consent](https://github.com/segment-integrations/analytics-kotlin-consent/blob/main/README.md#getting-started){:target="_blank"} repository. -- **Swift**: Please follow the instructions from the README in the [@repository](){:target="_blank"}. + If you'd like to integrate with any other CMP, Segment requires you to build your own wrapper or use any mechanism provided it meets the above requirements of data and event generation. +> warning "Consent Management is not backwards compatible with Segment's legacy Android library" +> If you are using one Segment's legacy Android library, you will need to upgrade to [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) before using Consent Management. + + ## Edit consent categories From b5bd7c7b8a8704c6e83209d10eeb14e689325866 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 27 Sep 2023 15:16:43 -0400 Subject: [PATCH 28/30] more fixes [netlify-build] --- src/privacy/configure-consent-management.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/privacy/configure-consent-management.md b/src/privacy/configure-consent-management.md index 471b085bfc..ba87f66e6b 100644 --- a/src/privacy/configure-consent-management.md +++ b/src/privacy/configure-consent-management.md @@ -57,11 +57,13 @@ Segment provides a OneTrust wrapper for the following sources: If you'd like to integrate with any other CMP, Segment requires you to build your own wrapper or use any mechanism provided it meets the above requirements of data and event generation. > warning "Consent Management is not backwards compatible with Segment's legacy Android library" -> If you are using one Segment's legacy Android library, you will need to upgrade to [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) before using Consent Management. +> If you are using Segment's legacy Android library, you will need to upgrade to [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) before using Consent Management. +> If you are using one of Segment's legacy mobile libraries (iOS or Android,) you will need to upgrade to [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/migration/) or [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/) before using Consent Management. + +---> ## Edit consent categories From 4c5573a2b47e0d6ab9028bc1b7ae152e7fae7590 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 27 Sep 2023 17:04:29 -0400 Subject: [PATCH 29/30] Added details surrounding retention periods --- src/privacy/user-deletion-and-suppression.md | 21 +++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/privacy/user-deletion-and-suppression.md b/src/privacy/user-deletion-and-suppression.md index f45764e32b..ba9001854d 100644 --- a/src/privacy/user-deletion-and-suppression.md +++ b/src/privacy/user-deletion-and-suppression.md @@ -124,8 +124,27 @@ To change your data retention settings, navigate to **Privacy > Settings > Data ### Workspace Default Archive Retention Period -Select the default retention period for the workspace here. This value applies to all sources in the workspace, unless overridden. +Select the default retention period for the workspace in this setting. This value applies to all sources in the workspace, unless overridden in the [Source-Level Archive Retention Periods](#source-level-archive-retention-periods) setting. + +You can select from the following Archive Retention time periods: + +- 7 days +- 30 days +- 90 days +- 180 days +- 365 days +- Unlimited (**default**) ### Source-Level Archive Retention Periods Override the workspace default retention period on a per-source level. + +You can select from the following Archive Retention time periods: + +- Default (This is the default value you set in the [Workspace Default Archive Retention Period](#workspace-default-archive-retention-period)) +- 7 days +- 30 days +- 90 days +- 180 days +- 365 days +- Unlimited \ No newline at end of file From 0644246a05e7da67df7a9d3bfdc68293cc9221dc Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 27 Sep 2023 18:27:30 -0400 Subject: [PATCH 30/30] reversed last commit --- src/privacy/user-deletion-and-suppression.md | 21 +------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/src/privacy/user-deletion-and-suppression.md b/src/privacy/user-deletion-and-suppression.md index ba9001854d..f45764e32b 100644 --- a/src/privacy/user-deletion-and-suppression.md +++ b/src/privacy/user-deletion-and-suppression.md @@ -124,27 +124,8 @@ To change your data retention settings, navigate to **Privacy > Settings > Data ### Workspace Default Archive Retention Period -Select the default retention period for the workspace in this setting. This value applies to all sources in the workspace, unless overridden in the [Source-Level Archive Retention Periods](#source-level-archive-retention-periods) setting. - -You can select from the following Archive Retention time periods: - -- 7 days -- 30 days -- 90 days -- 180 days -- 365 days -- Unlimited (**default**) +Select the default retention period for the workspace here. This value applies to all sources in the workspace, unless overridden. ### Source-Level Archive Retention Periods Override the workspace default retention period on a per-source level. - -You can select from the following Archive Retention time periods: - -- Default (This is the default value you set in the [Workspace Default Archive Retention Period](#workspace-default-archive-retention-period)) -- 7 days -- 30 days -- 90 days -- 180 days -- 365 days -- Unlimited \ No newline at end of file