From 83b5128cb023161039c864602b940f6086f6cb3a Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Mon, 17 Jan 2022 21:21:17 +0000 Subject: [PATCH 01/70] Fix link typo --- .../website/shopify-littledata/index.md | 55 +++++++++---------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 16438d393b..8791f1dae0 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -6,7 +6,7 @@ redirect_from: -Littledata's [Shopify to Segment connection](https://blog.littledata.io/help/posts/segment-overview/){:target="_blank"} uses a combination of client-side (browser) and server-side tracking to ensure 100% accurate data about your Shopify store in Segment. Littledata automatically integrates with Shopify and Shopify Plus sites to capture every customer touchpoint, including sales, marketing, customer and product performance data. +Littledata's [Shopify to Segment connection](https://blog.littledata.io/help/posts/segment-overview/){:target="\_blank"} uses a combination of client-side (browser) and server-side tracking to ensure 100% accurate data about your Shopify store in Segment. Littledata automatically integrates with Shopify and Shopify Plus sites to capture every customer touchpoint, including sales, marketing, customer and product performance data. Littledata is available as an independent [Shopify App](https://apps.shopify.com/segment-com-by-littledata). @@ -40,20 +40,20 @@ Here's an architecture diagram that shows how the Littledata app mediates data f ## Getting Started 1. **Login** to your Shopify Store account. -2. Go the [Shopify app store listing](https://apps.shopify.com/segment-com-by-littledata){:target="_blank"} for **_Segment.com by Littledata_**. +2. Go the [Shopify app store listing](https://apps.shopify.com/segment-com-by-littledata){:target="_blank"} for \*\*\_Segment.com by Littledata_\*\*. ![](images/Nd5L0C6.png) 3. Click **Add app** to begin the installation process. 4. **Sign up** for a Littledata account using an email address, Google login or Facebook login. _More team members can be added to the subscription after completing the installation process._ 5. Add the [**Segment write key**](/docs/connections/find-writekey/) for the source that is going to send data in the **input field**. ![](images/eLUh6GF.png) -6. Choose either an **Automatic** or a **Manual** install. _Automatic installs work in most instances, but if you choose to do a manual install, just follow [this guide](https://blog.littledata.io/help/posts/segment-installation-guide/){:target="_blank"}._ +6. Choose either an **Automatic** or a **Manual** install. _Automatic installs work in most instances, but if you choose to do a manual install, just follow [this guide](https://blog.littledata.io/help/posts/segment-installation-guide/){:target="\_blank"}._ ![](images/iYM76VI.png) 7. Segment's **analytics.js** library, Littledata **tracking script** and **webhooks** will be automatically applied to the store and the installation process will then be complete. ![](images/kvjNx4M.png) ## Event schema -This source has a full [tracking plan and event schema](https://docs.google.com/spreadsheets/d/1aljowRhMU9_7uGXmcipbP1Y14S4cOSdXGQA2Vx7BHko/copy){:target="_blank"} in Google Sheets, which is ready to [upload into Protocols](/docs/protocols/apis-and-extensions/#google-sheets-tracking-plan-uploader). +This source has a full [tracking plan and event schema](https://docs.google.com/spreadsheets/d/1aljowRhMU9_7uGXmcipbP1Y14S4cOSdXGQA2Vx7BHko/copy){:target="\_blank"} in Google Sheets, which is ready to [upload into Protocols](/docs/protocols/apis-and-extensions/#google-sheets-tracking-plan-uploader). ## Device-mode events @@ -83,23 +83,23 @@ The source also respects [GDPR-compliant cookie](https://blog.littledata.io/2021 Below is a table of events that **Shopify by Littledata** sends to Segment from Littledata's servers. These events appear as tables in your warehouse, and as regular events in your other Destinations that support cloud-mode. They include the `anonymousId` that links them to the device-mode events where the event was part of a previous user session, or associated with a `userId` that was previously linked with an `anonymousId`. See Littledata's [troubleshooting guide on attribution](https://blog.littledata.io/help/posts/troubleshooting-marketing-attribution-for-shopify/) for more details. -| Event Name | Description | -| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Checkout Started | A user has started checkout | -| Checkout Step Completed | A user has completed a step in the checkout | -| Coupon Applied | Sent with Checkout Step Completed or Order Completed when user has applied a coupon | -| Customer Created | User added as a customer | -| Customer Enabled (v2) | A user has confirmed their email address and created a Shopify customer account with verified_email set as true | -| Fulfillment Created (v2) | An order fulfillment status has changed (including status, tracking_numbers and tracking_urls where the shipping integration allows) | -| Fulfillment Updated (v2) | An order fulfillment status has changed (including status, tracking_numbers and tracking_urls where the shipping integration allows) | -| Order Cancelled (v2) | An admin has cancelled an order (including the cancel_reason) | -| Order Completed | A prospect has completed an order | -| Order Refunded | An order has been refunded | -| POS Order Placed (v2) | A user has placed an order through Shopify POS | -| Payment Failure (v2) | A user completed checkout step 3 but the payment method failed (for example, the card details were valid but the [charge did not succeed(https://stripe.com/docs/testing#cards-responses)]) | -| Payment Info Entered | A user has entered payment info | -| Product Added | A user has added a product to the cart, and left it in the cart for more than 10 seconds | -| Product Removed | A user has removed a product from the cart | +| Event Name | Description | +| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Checkout Started | A user has started checkout | +| Checkout Step Completed | A user has completed a step in the checkout | +| Coupon Applied | Sent with Checkout Step Completed or Order Completed when user has applied a coupon | +| Customer Created | User added as a customer | +| Customer Enabled (v2) | A user has confirmed their email address and created a Shopify customer account with verified_email set as true | +| Fulfillment Created (v2) | An order fulfillment status has changed (including status, tracking_numbers and tracking_urls where the shipping integration allows) | +| Fulfillment Updated (v2) | An order fulfillment status has changed (including status, tracking_numbers and tracking_urls where the shipping integration allows) | +| Order Cancelled (v2) | An admin has cancelled an order (including the cancel_reason) | +| Order Completed | A prospect has completed an order | +| Order Refunded | An order has been refunded | +| POS Order Placed (v2) | A user has placed an order through Shopify POS | +| Payment Failure (v2) | A user completed checkout step 3 but the payment method failed (for example, the card details were valid but the [charge did not succeed](https://stripe.com/docs/testing#cards-responses) | +| Payment Info Entered | A user has entered payment info | +| Product Added | A user has added a product to the cart, and left it in the cart for more than 10 seconds | +| Product Removed | A user has removed a product from the cart | ## User identity @@ -154,9 +154,9 @@ To support seamless customer tracking the [Mixpanel](/docs/connections/destinati ## Subscription events -All [recurring orders in the Shopify checkout](https://blog.littledata.io/help/posts/tracking-subscription-orders-in-the-shopify-checkout/){:target="_blank"}, from any subscription app, are tracked as Order Completed events. +All [recurring orders in the Shopify checkout](https://blog.littledata.io/help/posts/tracking-subscription-orders-in-the-shopify-checkout/){:target="\_blank"}, from any subscription app, are tracked as Order Completed events. -Additional subscription lifecycle events via Littledata's [ReCharge connection](https://www.littledata.io/connections/recharge){:target="_blank"} are available in cloud-mode destinations. See the [Track (custom)](https://docs.google.com/spreadsheets/d/1aljowRhMU9_7uGXmcipbP1Y14S4cOSdXGQA2Vx7BHko/edit#gid=1155311093){:target="_blank"} tab of the event schema. +Additional subscription lifecycle events via Littledata's [ReCharge connection](https://www.littledata.io/connections/recharge){:target="\_blank"} are available in cloud-mode destinations. See the [Track (custom)](https://docs.google.com/spreadsheets/d/1aljowRhMU9_7uGXmcipbP1Y14S4cOSdXGQA2Vx7BHko/edit#gid=1155311093){:target="\_blank"} tab of the event schema. | Event Name | Description | | ------------------------ | ----------------------------------------------------------------------------------------------------------- | @@ -170,7 +170,7 @@ Additional subscription lifecycle events via Littledata's [ReCharge connection]( ## Event properties -The list below outlines the properties included in most events. See the 'Track (eCommerce)' tab of the [event schema](https://docs.google.com/spreadsheets/d/1aljowRhMU9_7uGXmcipbP1Y14S4cOSdXGQA2Vx7BHko/copy){:target="_blank"} for exactly which properties are sent with which events. +The list below outlines the properties included in most events. See the 'Track (eCommerce)' tab of the [event schema](https://docs.google.com/spreadsheets/d/1aljowRhMU9_7uGXmcipbP1Y14S4cOSdXGQA2Vx7BHko/copy){:target="\_blank"} for exactly which properties are sent with which events. | Property | Description | Property Type | | -------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------- | @@ -201,8 +201,7 @@ The list below outlines the properties included in most events. See the 'Track ( | `total` | The total value of the order | Float | | `userId` | Chosen user identifier, defaulting to Shopify Customer ID | String | -> note "" -> \*`revenue` is available only with the Order Completed event, and only if the store opts in via the Littledata application. Revenue is a reserved property in many Segment destinations. Opting in will override the `total` property sent to Google Analytics. +> note "" \*`revenue` is available only with the Order Completed event, and only if the store opts in via the Littledata application. Revenue is a reserved property in many Segment destinations. Opting in will override the `total` property sent to Google Analytics. ## Product properties @@ -232,7 +231,7 @@ Each item in the `products` array, or Product Viewed and Product Added events, w ## Import all orders -With an [annual Littledata Plus plan](https://www.littledata.io/app/enterprise){:target="_blank"} you can import all Shopify orders and refunds from before you started using Segment, to sync with destinations that support timestamped events (for example, a data warehouse). This enables you to build a complete customer history in your chosen destination. +With an [annual Littledata Plus plan](https://www.littledata.io/app/enterprise){:target="\_blank"} you can import all Shopify orders and refunds from before you started using Segment, to sync with destinations that support timestamped events (for example, a data warehouse). This enables you to build a complete customer history in your chosen destination. ## Advanced settings @@ -240,7 +239,7 @@ You can edit these data pipeline settings within Littledata's app. ### cookiesToTrack -You can send any cookie set on a landing page (for example, a session identifier or marketing campaign name) to Segment with an Identify call. A common use is to set the array as `['iterableEmailCampaignId', 'iterableTemplateId']` to pass Iterable `campaignId` and `templateId` through to the [Order Completed event](https://support.iterable.com/hc/en-us/articles/204795719-Sending-Data-from-Segment-to-Iterable-#order-completed){:target="_blank"}. +You can send any cookie set on a landing page (for example, a session identifier or marketing campaign name) to Segment with an Identify call. A common use is to set the array as `['iterableEmailCampaignId', 'iterableTemplateId']` to pass Iterable `campaignId` and `templateId` through to the [Order Completed event](https://support.iterable.com/hc/en-us/articles/204795719-Sending-Data-from-Segment-to-Iterable-#order-completed){:target="\_blank"}. ### CDNForAnalyticsJS From dff21b0e91e4ab734b7088d98ef56f9d65ac4fd3 Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Mon, 7 Nov 2022 08:22:03 +0000 Subject: [PATCH 02/70] Improved architecture diagram --- .../catalog/libraries/website/shopify-littledata/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 8791f1dae0..d691b41647 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -32,7 +32,7 @@ During the Segment connection setup, Littledata also adds a set of webhooks to y Here's an architecture diagram that shows how the Littledata app mediates data flow between Shopify and Segment. -![](images/littledata_arch.png) +![Connecting Shopify to Segment](https://res.cloudinary.com/littledata/image/upload/v1667808538/Architecture%20diagrams/segment.png) > warning "Note" > This integration is maintained by Littledata _and is not supported by Segment directly_. The Littledata app has been reviewed by the Segment team for conformance with Segment's [E-Commerce Spec](/docs/connections/spec/ecommerce/v2/), and is the recommended way of using Segment with Shopify. However, it does require a paid subscription with Littledata, who mediates the connection between Shopify and Segment. [Contact the Littledata Support team](mailto:support@littledata.io) with any questions. From ef20d957d778b9a972a292479b9247f2024879b5 Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Mon, 7 Nov 2022 08:24:55 +0000 Subject: [PATCH 03/70] Improved diagram --- .../website/shopify-littledata/index.md | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index d8aefa6d99..46a9531189 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -33,7 +33,7 @@ During the Segment connection setup, Littledata also adds a set of webhooks to y Here's an architecture diagram that shows how the Littledata app mediates data flow between Shopify and Segment. -![](images/littledata_arch.png) +![Connecting Shopify to Segment](https://res.cloudinary.com/littledata/image/upload/v1667808538/Architecture%20diagrams/segment.png) > warning "Note" > This integration is maintained by Littledata _and isn't supported by Segment directly_. The Littledata app has been reviewed by the Segment team for conformance with Segment's [E-Commerce Spec](/docs/connections/spec/ecommerce/v2/), and is the recommended way of using Segment with Shopify. However, it does require a paid subscription with Littledata, who mediates the connection between Shopify and Segment. [Contact the Littledata Support team](mailto:help@littledata.io) with any questions. @@ -41,7 +41,7 @@ Here's an architecture diagram that shows how the Littledata app mediates data f ## Getting Started 1. **Log in** to your Shopify Store account. -2. Go the [Shopify app store listing](https://apps.shopify.com/segment-com-by-littledata){:target="_blank"} for **Segment.com by Littledata**. +2. Go the [Shopify app store listing](https://apps.shopify.com/segment-com-by-littledata){:target="\_blank"} for **Segment.com by Littledata**. ![](images/Nd5L0C6.png) 3. Click **Add app** to begin the installation process. 4. **Choose a Littledata subscription** suitable for your store's volume of monthly orders. @@ -119,27 +119,27 @@ For every event where there is an identifiable Shopify customer (from both the d The following traits are included with an Identify call: -| Property Name | Description | Property Type | -| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `accepts_marketing` | Whether the customer has accepted marketing | Boolean | -| `createdAt` | The date customer record was created | Date | -| `customerLifetimeValue` | The total spend of customer on the Shopify store | Double | -| `default_address.street` | The customer's default street address | String | -| `default_address.city` | The customer's city address | String | -| `default_address.postalCode` | The customer's ZIP / post code | String | -| `default_address.state` | The customer's state address | String | -| `default_adress.country` | The customer's country | String | -| `description` | The customer notes | String | -| `email` | The customer's email address | String | -| `firstName` | The customer's first name | String | -| `lastName` | The customer's last name | String | -| `marketingOptIn` | The `marketing_opt_in` field from [Shopify customer](https://shopify.dev/docs/admin-api/rest/reference/customers/customer) | String | -| `phone` | The customer's phone number | String | -| `purchaseCount` | The number of orders by this customer | Integer | -| `state` | The Shopify [customer state](https://shopify.dev/api/admin-graphql/2022-07/enums/customerstate){:target="_blank"}. This can be `enabled`, `disabled`, `invited` to create an account, or customer `declined` | String | -| `tags` | The custom tags [applied to the customer](https://shopify.dev/docs/admin-api/rest/reference/customers/customer) | String | -| `userId` | Chosen user identifier, defaulting to Shopify Customer ID | Double | -| `verified_email` (v2) | Whether the customer has verified their email | Boolean | +| Property Name | Description | Property Type | +| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `accepts_marketing` | Whether the customer has accepted marketing | Boolean | +| `createdAt` | The date customer record was created | Date | +| `customerLifetimeValue` | The total spend of customer on the Shopify store | Double | +| `default_address.street` | The customer's default street address | String | +| `default_address.city` | The customer's city address | String | +| `default_address.postalCode` | The customer's ZIP / post code | String | +| `default_address.state` | The customer's state address | String | +| `default_adress.country` | The customer's country | String | +| `description` | The customer notes | String | +| `email` | The customer's email address | String | +| `firstName` | The customer's first name | String | +| `lastName` | The customer's last name | String | +| `marketingOptIn` | The `marketing_opt_in` field from [Shopify customer](https://shopify.dev/docs/admin-api/rest/reference/customers/customer) | String | +| `phone` | The customer's phone number | String | +| `purchaseCount` | The number of orders by this customer | Integer | +| `state` | The Shopify [customer state](https://shopify.dev/api/admin-graphql/2022-07/enums/customerstate){:target="\_blank"}. This can be `enabled`, `disabled`, `invited` to create an account, or customer `declined` | String | +| `tags` | The custom tags [applied to the customer](https://shopify.dev/docs/admin-api/rest/reference/customers/customer) | String | +| `userId` | Chosen user identifier, defaulting to Shopify Customer ID | Double | +| `verified_email` (v2) | Whether the customer has verified their email | Boolean | ## Support for Google Analytics destination From f26797a37d93ce46648f8f5c25ddade049f6ea55 Mon Sep 17 00:00:00 2001 From: markzegarelli Date: Mon, 7 Nov 2022 11:08:03 -0800 Subject: [PATCH 04/70] Bring image in locally --- .../shopify-littledata/images/segment.png | Bin 0 -> 139149 bytes .../website/shopify-littledata/index.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/connections/sources/catalog/libraries/website/shopify-littledata/images/segment.png diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/images/segment.png b/src/connections/sources/catalog/libraries/website/shopify-littledata/images/segment.png new file mode 100644 index 0000000000000000000000000000000000000000..e098afee7daf2d04882e96ead5402dd370481182 GIT binary patch literal 139149 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 Ha`S%yAO@24 literal 0 HcmV?d00001 diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 46a9531189..d937b4a8a7 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -33,7 +33,7 @@ During the Segment connection setup, Littledata also adds a set of webhooks to y Here's an architecture diagram that shows how the Littledata app mediates data flow between Shopify and Segment. -![Connecting Shopify to Segment](https://res.cloudinary.com/littledata/image/upload/v1667808538/Architecture%20diagrams/segment.png) +![Connecting Shopify to Segment](images/segment.png) > warning "Note" > This integration is maintained by Littledata _and isn't supported by Segment directly_. The Littledata app has been reviewed by the Segment team for conformance with Segment's [E-Commerce Spec](/docs/connections/spec/ecommerce/v2/), and is the recommended way of using Segment with Shopify. However, it does require a paid subscription with Littledata, who mediates the connection between Shopify and Segment. [Contact the Littledata Support team](mailto:help@littledata.io) with any questions. From 926523aa167e5e89f4d7bb29a5990ce4c05aa725 Mon Sep 17 00:00:00 2001 From: markzegarelli Date: Mon, 7 Nov 2022 11:09:39 -0800 Subject: [PATCH 05/70] Vale edits --- .../libraries/website/shopify-littledata/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index d937b4a8a7..c623f864a9 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -7,7 +7,7 @@ id: V8ji9rWzoS -Littledata's [Shopify to Segment connection](https://help.littledata.io/posts/segment-overview/){:target="\_blank"} uses a combination of client-side (browser) and server-side tracking to ensure 100% accurate data about your Shopify store in Segment. Littledata automatically integrates with Shopify and Shopify Plus sites to capture every customer touchpoint, including sales, marketing, customer and product performance data. +Littledata's [Shopify to Segment connection](https://help.littledata.io/posts/segment-overview/){:target="\_blank"} uses a combination of client-side (browser) and server-side tracking to ensure 100% accurate data about your Shopify store in Segment. Littledata automatically integrates with Shopify and Shopify Plus sites to capture every customer touch point, including sales, marketing, customer and product performance data. Littledata is available as an independent [Shopify App](https://apps.shopify.com/segment-com-by-littledata){:target="\_blank"}. @@ -78,7 +78,7 @@ Below is a table of events that **Shopify by Littledata** sends to Segment throu You can _opt out_ of device-mode pageviews or events by setting `disableClientSideEvents: true` or `disablePageviews: true` in the `LittledataLayer` settings. -The source also respects [GDPR-compliant cookie](https://blog.littledata.io/2021/06/18/shopify-cookie-banner-gdpr-compliance/) consent via Shopify's cookie banner, or popular consent management platforms such as [OneTrust](https://help.littledata.io/help/integrating-onetrust-with-shopify/) and [TrustArc](https://help.littledata.io/posts/integrating-trustarc-with-shopify/). +The source also respects [GDPR-compliant cookie](https://blog.littledata.io/2021/06/18/shopify-cookie-banner-gdpr-compliance/) consent through Shopify's cookie banner, or popular consent management platforms such as [OneTrust](https://help.littledata.io/help/integrating-onetrust-with-shopify/) and [TrustArc](https://help.littledata.io/posts/integrating-trustarc-with-shopify/). ## Cloud-mode events @@ -143,7 +143,7 @@ The following traits are included with an Identify call: ## Support for Google Analytics destination -All events (device-mode and cloud-mode) contain the Google Analytics `clientId` field where known. This allows the [Google Analytics destination](/docs/connections/destinations/catalog/google-analytics/#supported-sources-and-connection-modes) to be configured in cloud-mode only, so all client side events are relayed via Segment's servers - reducing the scripts needed on your website. +All events (device-mode and cloud-mode) contain the Google Analytics `clientId` field where known. This allows the [Google Analytics destination](/docs/connections/destinations/catalog/google-analytics/#supported-sources-and-connection-modes) to be configured in cloud-mode only, so all client side events are relayed through Segment's servers - reducing the scripts needed on your website. ## Support for email marketing destinations @@ -194,7 +194,7 @@ The list below outlines the properties included in most events. See the 'Track ( | `sent_from` | A unique property to identify events sent by Littledata | String | | `shipping_method` | The shipping method chosen for checkout | String | | `shipping` | The shipping cost | Float | -| `source_name` | The source of the order or checkout (e.g. `web`, `android`, `pos`) | String | +| `source_name` | The source of the order or checkout (like `web`, `android`, `pos`) | String | | `step` | The checkout [step number](https://help.littledata.io/posts/shopify-checkout-funnel-updates/) | Integer | | `subscription_revenue` | The revenue associated with a [Subscription Event](#subscription-events) | Float | | `subtotal` | Order total after discounts but before taxes and shipping | Float | @@ -202,7 +202,7 @@ The list below outlines the properties included in most events. See the 'Track ( | `total` | The total value of the order | Float | | `userId` | Chosen user identifier, defaulting to Shopify Customer ID | String | -> note "" \*`revenue` is available only with the Order Completed event, and only if the store opts in via the Littledata application. Revenue is a reserved property in many Segment destinations. Opting in will override the `total` property sent to Google Analytics. +> note "" \*`revenue` is available only with the Order Completed event, and only if the store opts in through the Littledata application. Revenue is a reserved property in many Segment destinations. Opting in will override the `total` property sent to Google Analytics. ## Product properties @@ -232,9 +232,9 @@ Each item in the `products` array, or Product Viewed and Product Added events, w ## Import all orders -With an [annual Littledata Plus plan](https://www.littledata.io/app/enterprise){:target="\_blank"} you can import all Shopify orders and refunds from before you started using Segment, to sync with destinations that support timestamped events (for example, a data warehouse). This enables you to build a complete customer history in your chosen destination. +With an [annual Littledata Plus plan](https://www.littledata.io/app/enterprise){:target="_blank"} you can import all Shopify orders and refunds from before you started using Segment, to sync with destinations that support timestamped events (for example, a data warehouse). This enables you to build a complete customer history in your chosen destination. -This data import includse all the [event properties](#event-properties) usually sent with an `Order Completed` event, including the [customer traits](#identify-calls). +This data import includes all the [event properties](#event-properties) usually sent with an `Order Completed` event, including the [customer traits](#identify-calls). ## Advanced settings From 5ecb7cc9045abdc439af1768f760f563f44dede7 Mon Sep 17 00:00:00 2001 From: Ahmed Saleh Date: Mon, 28 Aug 2023 07:52:55 -0700 Subject: [PATCH 06/70] Add Rupt integration documentation --- .../catalog/actions-rupt/index.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/connections/destinations/catalog/actions-rupt/index.md diff --git a/src/connections/destinations/catalog/actions-rupt/index.md b/src/connections/destinations/catalog/actions-rupt/index.md new file mode 100644 index 0000000000..429a5e961b --- /dev/null +++ b/src/connections/destinations/catalog/actions-rupt/index.md @@ -0,0 +1,32 @@ +--- +title: Rupt Destination +hide-boilerplate: true +hide-dossier: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Rupt](https://rupt.dev?utm_source=segment.com&utm_medium=docs&utm_campaign=partners){:target="_blank"} helps customers monitor and monetize account sharing. + +{% include content/ajs-upgrade.md %} + +## Benefits of Rupt (Actions) + +Rupt (Actions) provides the following benefits: + +- **Account sharing detection**. Find out exactly which accounts are being shared and how many people are sharing them.. +- **Convert & monetize account sharers**. Prebuilt UI to convert account sharers into paying customers. +- **Track account sharing revenue**. Track revenue from account sharing conversions. + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Configure Rupt**. +4. Select an existing Source to connect to Rupt (Actions). +5. Get your **API key Client ID** from the [Rupt dashboard](https://dashboard.rupt.dev?utm_source=segment.com&utm_medium=docs&utm_campaign=partners){:target="_blank"}. +6. Add your API key to the segment Rupt Action settings. + +{% include components/actions-fields.html %} + +To learn more about how Rupt works, see: [How account sharing prevention works](https://www.rupt.dev/docs/how-account-sharing-prevention-works?utm_source=segment.com&utm_medium=docs&utm_campaign=partners){:target="_blank"}. From 3f499bd85bbe57c2820cec31a1a2bf4c6bbbbf65 Mon Sep 17 00:00:00 2001 From: giriraj Date: Tue, 29 Aug 2023 15:55:45 +0530 Subject: [PATCH 07/70] ambee docs --- .../destinations/catalog/ambee-apis/index.md | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 src/connections/destinations/catalog/ambee-apis/index.md diff --git a/src/connections/destinations/catalog/ambee-apis/index.md b/src/connections/destinations/catalog/ambee-apis/index.md new file mode 100644 index 0000000000..eb6d4a424e --- /dev/null +++ b/src/connections/destinations/catalog/ambee-apis/index.md @@ -0,0 +1,178 @@ +--- +title: "[]{#_txprw7e8ra85 .anchor}Segment Documentation--Ambee" +--- + +## **Ambee Destination** + +title: Ambee Destination id: integration_id + +{% include content/plan-grid.md name=\"actions\" %} + +Ambee provides self-serve predictive analytics for businesses, +leveraging machine learning to automate audience insights and +recommendations based on climate and environmental datasets. Ambee +offers actionable air quality and pollen data that can reinforce your +climate strategy, simplify personalization, and enhance business +outcomes. + +This destination is maintained by Ambee. For any issues with the +destination, contact their [[Support +Team]{.underline}](https://support.getambee.com/portal/en/home). + +{% include content/ajs-upgrade.md %} + +### **Getting started** + +From the **Segment** web app, click **Catalog**, then click +**Destinations**. + +Find the **Destinations Actions** item in the left navigation, and click +it. + +Click Configure **Ambee** + +Select an existing Source to connect to **Ambee** (Actions). + +{% include components/actions-fields.html %} + +## **Settings** + +### **Segment Write Key** + +The write key is a unique identifier for each Source. It lets Segment +know which Source is sending the data and which destinations should +receive that data. + +To find a write key, you first need to create a non-Cloud Source such as +a website, server, or mobile source. + +Then, in the Source, go to **Settings,** and then go to **API Keys**. + +### + +### **API Key** + +To start working with Ambee as your destination, you will require +Ambee's API Key. Sign up for Ambee by visiting [[this +website]{.underline}](https://auth.ambeedata.com/users/register?redirectUrl=https://api-dashboard.getambee.com). + +Once you are signed in, you will get your limited-period API key on the +dashboard\'s homepage. If your use case requires data in bulk, you will +need to subscribe to Ambee's [[enterprise +plan]{.underline}](https://www.getambee.com/pricing). During +subscription, you will need to specify your choice of API--air quality +and/or pollen. []{.mark} + +After subscription, you can use Ambee's air quality and/or pollen data +by pasting your API key under **the API Key section** in **Mapping**. + +## **Ambee Destination Mapping** + +### **Ambee Air Quality Subscription** + +Ambee's air quality subscription helps you personalize and position your +messaging via emails, sms, and push notifications to improve user +engagement on your website based on air quality triggers for locations +across the world. You can also retarget messaging based on your user's +geo-location, for example- + +- Promote the sale of your EVs in highly polluted areas + +- Advertise anti-pollution products like masks, skincare, etc., during + > highly polluted durations + +- Showcase ads for smart air purifiers in highly polluted localities + +The table below shows the AQI risk levels, their associated value, and +what each category means for the public. Ambee uses globally valid data +that follows US EPA standards to provide relevant recommendations. If +you are subscribed to **air quality,** you can select the risk levels +for AQI from the drop-down box under **the air quality** section. + + ------------------------------------------------------------------------ + AQI risk Index Values What it means + levels + ------------- --------------- ------------------------------------------ + Good 0 - 50 Air quality is good and poses little or no + risk. + + Moderate 51 - 100 Air quality is acceptable; however, there + may be some health concerns for a small + number of extremely sensitive people. + + Unhealthy For 101 - 150 When air quality is in this range, people + Sensitive in sensitive groups may experience health + Groups effects when engaging in outdoor + activities. + + Unhealthy 151 - 200 When air quality is in this range, + everyone who is active outdoors may + experience effects. Members of sensitive + groups are likely to experience more + serious effects. + + Very 201 - 300 When air quality is in this range, it is + Unhealthy expected that there will be widespread + effects among the general population and + more serious effects in members of + sensitive groups. + + Hazardous 301 - 400 Air quality in this range triggers health + warnings of emergency conditions. The + entire population is more likely to be + affected by serious health effects. + + 401 - 500 + ------------------------------------------------------------------------ + +### **Ambee Pollen Subscription ** + +Ambee's pollen subscription helps you contextualize and hyper-target +your marketing and advertising campaigns via emails, sms, and push +notifications to improve user engagement with the help of pollen +triggers for locations across the world. You can also personalize your +ad content based on the user's geolocation, for example- + +- Advertise anti-allergy tissues based on high pollen condition + +- Promote OTC medicines to allergy sufferers + +The risk levels below are recommended by NAB to understand the risks +they are exposed to, and it helps them take preventative measures to +reduce their exposure to pollen. Ambee uses the NAB-compliant index to +provide accurate insights. If you are subscribed to **pollen**, you can +select the risk levels for pollen from the drop-down box under the +**pollen** section. + + ------------------------------------------------------------------------ + Risk Level Tree Grass Weed What it means + ------------- ---------- ----------- ----------- ----------------------- + Low 0-95 0-29 0-20 Individuals susceptible + to pollen may + experience mild + allergic symptoms + + Moderate 96-207 30-60 21-77 Many individuals + sensitive to pollen may + experience allergic + symptoms + + High 208-703 61-341 78-266 Most individuals with + any sensitivity to + pollen will experience + allergic symptoms. + Extremely sensitive + groups could experience + serious symptoms + + Very High 704+ 342+ 267+ Almost all individuals + with any sensitivity to + pollen will experience + symptoms. + ------------------------------------------------------------------------ + +### **IP Address** + +Ambee will fetch the user's IP address to trigger air quality and/or +pollen notifications for device mode --- analytics.js or mobile +(android/iOS). From 3d8f5e1a62f169af08d0e41b3a4cfe1524ecf210 Mon Sep 17 00:00:00 2001 From: ahmedmawiri <139409171+ahmedmawiri@users.noreply.github.com> Date: Tue, 29 Aug 2023 12:00:58 -0700 Subject: [PATCH 08/70] Added "Actions" to the destination description (PR comments) Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-rupt/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/connections/destinations/catalog/actions-rupt/index.md b/src/connections/destinations/catalog/actions-rupt/index.md index 429a5e961b..12a2af501b 100644 --- a/src/connections/destinations/catalog/actions-rupt/index.md +++ b/src/connections/destinations/catalog/actions-rupt/index.md @@ -1,5 +1,5 @@ --- -title: Rupt Destination +title: Rupt (Actions) Destination hide-boilerplate: true hide-dossier: true --- @@ -21,11 +21,11 @@ Rupt (Actions) provides the following benefits: ## Getting started 1. From the Segment web app, click **Catalog**, then click **Destinations**. -2. Find the Destinations Actions item in the left navigation, and click it. -3. Click **Configure Rupt**. +2. Search for *Rupt (Actions)* and select it. +3. Click **Configure Rupt (Actions)**. 4. Select an existing Source to connect to Rupt (Actions). -5. Get your **API key Client ID** from the [Rupt dashboard](https://dashboard.rupt.dev?utm_source=segment.com&utm_medium=docs&utm_campaign=partners){:target="_blank"}. -6. Add your API key to the segment Rupt Action settings. +5. Copy your **API key Client ID** from the [Rupt dashboard](https://dashboard.rupt.dev?utm_source=segment.com&utm_medium=docs&utm_campaign=partners){:target="_blank"}. +6. Add your API key to the Rupt (Actions) settings in Segment. {% include components/actions-fields.html %} From 366bfbb02853503f1f0b594334b2d35d4504c899 Mon Sep 17 00:00:00 2001 From: rchinn-segment Date: Wed, 30 Aug 2023 10:12:00 +0900 Subject: [PATCH 09/70] Initial edits --- .../destinations/catalog/ambee-apis/index.md | 164 ++++++------------ 1 file changed, 56 insertions(+), 108 deletions(-) diff --git a/src/connections/destinations/catalog/ambee-apis/index.md b/src/connections/destinations/catalog/ambee-apis/index.md index eb6d4a424e..9974d33b14 100644 --- a/src/connections/destinations/catalog/ambee-apis/index.md +++ b/src/connections/destinations/catalog/ambee-apis/index.md @@ -1,43 +1,40 @@ --- -title: "[]{#_txprw7e8ra85 .anchor}Segment Documentation--Ambee" +title: "Ambee" +hidden: true +beta: true +id: --- -## **Ambee Destination** - -title: Ambee Destination id: integration_id - -{% include content/plan-grid.md name=\"actions\" %} +{% include content/plan-grid.md name="actions" %} Ambee provides self-serve predictive analytics for businesses, -leveraging machine learning to automate audience insights and +using machine learning to automate audience insights and recommendations based on climate and environmental datasets. Ambee offers actionable air quality and pollen data that can reinforce your climate strategy, simplify personalization, and enhance business outcomes. This destination is maintained by Ambee. For any issues with the -destination, contact their [[Support -Team]{.underline}](https://support.getambee.com/portal/en/home). +destination, contact Ambee's [Support +Team](https://support.getambee.com/portal/en/home){:target="_blank"}. {% include content/ajs-upgrade.md %} -### **Getting started** +## Getting started -From the **Segment** web app, click **Catalog**, then click -**Destinations**. -Find the **Destinations Actions** item in the left navigation, and click +1. From the **Segment** web app, click **Catalog**, then click +**Destinations**. +2. Find the **Destinations Actions** item in the left navigation, and click it. - -Click Configure **Ambee** - -Select an existing Source to connect to **Ambee** (Actions). +3. Click Configure **Ambee** +4. Select an existing Source to connect to **Ambee** (Actions). {% include components/actions-fields.html %} -## **Settings** +## Settings -### **Segment Write Key** +### Segment write key The write key is a unique identifier for each Source. It lets Segment know which Source is sending the data and which destinations should @@ -46,96 +43,67 @@ receive that data. To find a write key, you first need to create a non-Cloud Source such as a website, server, or mobile source. -Then, in the Source, go to **Settings,** and then go to **API Keys**. +Then, in the Source, navigate to **Settings** > **API Keys**. -### -### **API Key** +### API Key -To start working with Ambee as your destination, you will require -Ambee's API Key. Sign up for Ambee by visiting [[this -website]{.underline}](https://auth.ambeedata.com/users/register?redirectUrl=https://api-dashboard.getambee.com). +To start working with Ambee as your destination, you'll need +Ambee's API Key. Sign up for Ambee [here](https://auth.ambeedata.com/users/register?redirectUrl=https://api-dashboard.getambee.com){:target="_blank"}. Once you are signed in, you will get your limited-period API key on the -dashboard\'s homepage. If your use case requires data in bulk, you will -need to subscribe to Ambee's [[enterprise -plan]{.underline}](https://www.getambee.com/pricing). During -subscription, you will need to specify your choice of API--air quality -and/or pollen. []{.mark} +dashboard's homepage. If your use case requires data in bulk, you'll +need to subscribe to Ambee's [enterprise +plan](https://www.getambee.com/pricing){:target="_blank"}. During +subscription, you'll need to specify your choice of API: **air quality** +and/or **pollen**. After subscription, you can use Ambee's air quality and/or pollen data by pasting your API key under **the API Key section** in **Mapping**. -## **Ambee Destination Mapping** +## Ambee Destination Mapping -### **Ambee Air Quality Subscription** +### Ambee Air Quality Subscription Ambee's air quality subscription helps you personalize and position your messaging via emails, sms, and push notifications to improve user engagement on your website based on air quality triggers for locations across the world. You can also retarget messaging based on your user's -geo-location, for example- +geo-location, for example: -- Promote the sale of your EVs in highly polluted areas +- Promote the sale of your EVs in highly polluted areas -- Advertise anti-pollution products like masks, skincare, etc., during - > highly polluted durations +- Advertise anti-pollution products like masks, skincare, and more, during highly polluted durations -- Showcase ads for smart air purifiers in highly polluted localities +- Showcase ads for smart air purifiers in highly polluted localities The table below shows the AQI risk levels, their associated value, and what each category means for the public. Ambee uses globally valid data that follows US EPA standards to provide relevant recommendations. If -you are subscribed to **air quality,** you can select the risk levels +you are subscribed to **air quality** you can select the risk levels for AQI from the drop-down box under **the air quality** section. - ------------------------------------------------------------------------ - AQI risk Index Values What it means - levels - ------------- --------------- ------------------------------------------ - Good 0 - 50 Air quality is good and poses little or no - risk. - - Moderate 51 - 100 Air quality is acceptable; however, there - may be some health concerns for a small - number of extremely sensitive people. - - Unhealthy For 101 - 150 When air quality is in this range, people - Sensitive in sensitive groups may experience health - Groups effects when engaging in outdoor - activities. - - Unhealthy 151 - 200 When air quality is in this range, - everyone who is active outdoors may - experience effects. Members of sensitive - groups are likely to experience more - serious effects. - - Very 201 - 300 When air quality is in this range, it is - Unhealthy expected that there will be widespread - effects among the general population and - more serious effects in members of - sensitive groups. - - Hazardous 301 - 400 Air quality in this range triggers health - warnings of emergency conditions. The - entire population is more likely to be - affected by serious health effects. - - 401 - 500 - ------------------------------------------------------------------------ - -### **Ambee Pollen Subscription ** + | AQI risk levels | Index Values | What it means | + |---------------------|-----------------|-----------------------------| + | Good | 0-50 | Air quality is good and poses little or no risk. | + | Moderate | 51-100 | Air quality is acceptable; however, there may be some health concerns for a small number of extremely sensitive people. | + | Unhealthy for sensitive groups | 101-150 | When air quality is in this range, people in sensitive groups may experience health effects when engaging in outdoor activities. | + | Unhealthy | 151-200 | When air quality is in this range, everyone who is active outdoors may experience effects. Members of sensitive groups are likely to experience more serious effects. | + | Very unhealthy | 201-300 | When air quality is in this range, it is expected that there will be widespread effects among general population and more serious effects in members of sensitive groups. | + | Hazardous | 301-400 | Air quality in this range triggers health warnings of emergency conditions. The entire population is more likely to be affected by serious health effects. | + | | 401-500 | | + +### Ambee Pollen Subscription Ambee's pollen subscription helps you contextualize and hyper-target -your marketing and advertising campaigns via emails, sms, and push +your marketing and advertising campaigns with emails, sms, and push notifications to improve user engagement with the help of pollen triggers for locations across the world. You can also personalize your -ad content based on the user's geolocation, for example- +ad content based on the user's geolocation, for example: -- Advertise anti-allergy tissues based on high pollen condition +- Advertise anti-allergy tissues based on high pollen condition -- Promote OTC medicines to allergy sufferers +- Promote OTC medicines to allergy sufferers The risk levels below are recommended by NAB to understand the risks they are exposed to, and it helps them take preventative measures to @@ -144,35 +112,15 @@ provide accurate insights. If you are subscribed to **pollen**, you can select the risk levels for pollen from the drop-down box under the **pollen** section. - ------------------------------------------------------------------------ - Risk Level Tree Grass Weed What it means - ------------- ---------- ----------- ----------- ----------------------- - Low 0-95 0-29 0-20 Individuals susceptible - to pollen may - experience mild - allergic symptoms - - Moderate 96-207 30-60 21-77 Many individuals - sensitive to pollen may - experience allergic - symptoms - - High 208-703 61-341 78-266 Most individuals with - any sensitivity to - pollen will experience - allergic symptoms. - Extremely sensitive - groups could experience - serious symptoms - - Very High 704+ 342+ 267+ Almost all individuals - with any sensitivity to - pollen will experience - symptoms. - ------------------------------------------------------------------------ - -### **IP Address** +| Risk Level | Tree | Grass | Weed | What it means | +|---------------|---------|-----------|-------------|-----------------| +| Low | 0-95 | 0-29 | 0-20 | Individuals susceptible to pollen may experience mild allergic symtoms. | +| Moderate | 96-207 | 30-60 | 21-77 | Many individuals sensitive to pollen may experience allergic symptoms. | +| High | 208-703 | 61-341 | 78-266 | Most individuals with any sensitivty to pollen will experience allergic symptoms. Extremely sensitive groups could experience serious symptoms. | +| Very High | 704+ | 342+ | 267+ | Almost all individuals with any sensitivity to pollen will experience symptoms. | + +### IP Address Ambee will fetch the user's IP address to trigger air quality and/or -pollen notifications for device mode --- analytics.js or mobile +pollen notifications for device mode with analytics.js or mobile (android/iOS). From 54c484549eca86b6deab35a91d34f67d3ae73e54 Mon Sep 17 00:00:00 2001 From: rchinn-segment Date: Wed, 30 Aug 2023 10:15:12 +0900 Subject: [PATCH 10/70] fix table --- .../destinations/catalog/ambee-apis/index.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/connections/destinations/catalog/ambee-apis/index.md b/src/connections/destinations/catalog/ambee-apis/index.md index 9974d33b14..fe0e694ab1 100644 --- a/src/connections/destinations/catalog/ambee-apis/index.md +++ b/src/connections/destinations/catalog/ambee-apis/index.md @@ -85,13 +85,13 @@ for AQI from the drop-down box under **the air quality** section. | AQI risk levels | Index Values | What it means | |---------------------|-----------------|-----------------------------| - | Good | 0-50 | Air quality is good and poses little or no risk. | - | Moderate | 51-100 | Air quality is acceptable; however, there may be some health concerns for a small number of extremely sensitive people. | + | Good | 0-50 | Air quality is good and poses little or no risk. | + | Moderate | 51-100 | Air quality is acceptable; however, there may be some health concerns for a small number of extremely sensitive people. | | Unhealthy for sensitive groups | 101-150 | When air quality is in this range, people in sensitive groups may experience health effects when engaging in outdoor activities. | - | Unhealthy | 151-200 | When air quality is in this range, everyone who is active outdoors may experience effects. Members of sensitive groups are likely to experience more serious effects. | - | Very unhealthy | 201-300 | When air quality is in this range, it is expected that there will be widespread effects among general population and more serious effects in members of sensitive groups. | - | Hazardous | 301-400 | Air quality in this range triggers health warnings of emergency conditions. The entire population is more likely to be affected by serious health effects. | - | | 401-500 | | + | Unhealthy | 151-200 | When air quality is in this range, everyone who is active outdoors may experience effects. Members of sensitive groups are likely to experience more serious effects. | + | Very unhealthy | 201-300 | When air quality is in this range, it is expected that there will be widespread effects among general population and more serious effects in members of sensitive groups. | + | Hazardous | 301-400 | Air quality in this range triggers health warnings of emergency conditions. The entire population is more likely to be affected by serious health effects. | + | | 401-500 | | ### Ambee Pollen Subscription @@ -115,9 +115,9 @@ select the risk levels for pollen from the drop-down box under the | Risk Level | Tree | Grass | Weed | What it means | |---------------|---------|-----------|-------------|-----------------| | Low | 0-95 | 0-29 | 0-20 | Individuals susceptible to pollen may experience mild allergic symtoms. | -| Moderate | 96-207 | 30-60 | 21-77 | Many individuals sensitive to pollen may experience allergic symptoms. | -| High | 208-703 | 61-341 | 78-266 | Most individuals with any sensitivty to pollen will experience allergic symptoms. Extremely sensitive groups could experience serious symptoms. | -| Very High | 704+ | 342+ | 267+ | Almost all individuals with any sensitivity to pollen will experience symptoms. | +| Moderate | 96-207 | 30-60 | 21-77 | Many individuals sensitive to pollen may experience allergic symptoms. | +| High | 208-703 | 61-341 | 78-266 | Most individuals with any sensitivty to pollen will experience allergic symptoms. Extremely sensitive groups could experience serious symptoms. | +| Very High | 704+ | 342+ | 267+ | Almost all individuals with any sensitivity to pollen will experience symptoms. | ### IP Address From 9d01646d7c20596d07446a1d84bd32482ea6d60f Mon Sep 17 00:00:00 2001 From: giriraj0012 <127201522+giriraj0012@users.noreply.github.com> Date: Tue, 5 Sep 2023 12:30:05 +0530 Subject: [PATCH 11/70] Update index.md --- .../destinations/catalog/ambee-apis/index.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/connections/destinations/catalog/ambee-apis/index.md b/src/connections/destinations/catalog/ambee-apis/index.md index fe0e694ab1..750200f870 100644 --- a/src/connections/destinations/catalog/ambee-apis/index.md +++ b/src/connections/destinations/catalog/ambee-apis/index.md @@ -11,7 +11,7 @@ Ambee provides self-serve predictive analytics for businesses, using machine learning to automate audience insights and recommendations based on climate and environmental datasets. Ambee offers actionable air quality and pollen data that can reinforce your -climate strategy, simplify personalization, and enhance business +climate strategy, simplify personalization and enhance business outcomes. This destination is maintained by Ambee. For any issues with the @@ -40,7 +40,7 @@ The write key is a unique identifier for each Source. It lets Segment know which Source is sending the data and which destinations should receive that data. -To find a write key, you first need to create a non-Cloud Source such as +To find a write key, you first need to create a non-cloud Source such as a website, server, or mobile source. Then, in the Source, navigate to **Settings** > **API Keys**. @@ -66,7 +66,7 @@ by pasting your API key under **the API Key section** in **Mapping**. ### Ambee Air Quality Subscription Ambee's air quality subscription helps you personalize and position your -messaging via emails, sms, and push notifications to improve user +messaging via emails, SMS, and push notifications to improve user engagement on your website based on air quality triggers for locations across the world. You can also retarget messaging based on your user's geo-location, for example: @@ -90,13 +90,12 @@ for AQI from the drop-down box under **the air quality** section. | Unhealthy for sensitive groups | 101-150 | When air quality is in this range, people in sensitive groups may experience health effects when engaging in outdoor activities. | | Unhealthy | 151-200 | When air quality is in this range, everyone who is active outdoors may experience effects. Members of sensitive groups are likely to experience more serious effects. | | Very unhealthy | 201-300 | When air quality is in this range, it is expected that there will be widespread effects among general population and more serious effects in members of sensitive groups. | - | Hazardous | 301-400 | Air quality in this range triggers health warnings of emergency conditions. The entire population is more likely to be affected by serious health effects. | - | | 401-500 | | + | Hazardous | 301-500 | Air quality in this range triggers health warnings of emergency conditions. The entire population is more likely to be affected by serious health effects. ### Ambee Pollen Subscription Ambee's pollen subscription helps you contextualize and hyper-target -your marketing and advertising campaigns with emails, sms, and push +your marketing and advertising campaigns with emails, SMS, and push notifications to improve user engagement with the help of pollen triggers for locations across the world. You can also personalize your ad content based on the user's geolocation, for example: @@ -116,7 +115,7 @@ select the risk levels for pollen from the drop-down box under the |---------------|---------|-----------|-------------|-----------------| | Low | 0-95 | 0-29 | 0-20 | Individuals susceptible to pollen may experience mild allergic symtoms. | | Moderate | 96-207 | 30-60 | 21-77 | Many individuals sensitive to pollen may experience allergic symptoms. | -| High | 208-703 | 61-341 | 78-266 | Most individuals with any sensitivty to pollen will experience allergic symptoms. Extremely sensitive groups could experience serious symptoms. | +| High | 208-703 | 61-341 | 78-266 | Most individuals with any sensitivity to pollen will experience allergic symptoms. Extremely sensitive groups could experience serious symptoms. | | Very High | 704+ | 342+ | 267+ | Almost all individuals with any sensitivity to pollen will experience symptoms. | ### IP Address From fce2177616ae21a01e5f11fbdce427ee3722efac Mon Sep 17 00:00:00 2001 From: Nick Wolfe Date: Tue, 12 Sep 2023 12:11:24 -0700 Subject: [PATCH 12/70] APP-35621 - Gainsight PX Cloud Actions Initial commit for docs --- .../actions-gainsight-px-cloud/index.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md new file mode 100644 index 0000000000..64c5ca32d1 --- /dev/null +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -0,0 +1,32 @@ +--- +title: Gainsight PX Cloud (Actions) Destination +--- + + +{% include content/plan-grid.md name="actions" %} + +[](https://www.gainsight.com/product-experience/analytics/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) +Gainsight PX provides a personalized product experience platform to help companies acquire, retain, and grow customers by creating real-time, personalized engagements driven by product usage data. With Gainsight PX, companies can implement an effective product-led go-to-market strategy that will increase product adoption and customer lifetime value. +This destination is maintained by Gainsight PX. For any issues with the destination, [contact their Support team](mailto:pxsupport@gainsight.com). + +> **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/actions-gainsight-px-cloud) Gainsight PX Cloud Segment destination. There's also a page about the [non-Actions Gainsight PX Cloud destination](/docs/connections/destinations/catalog/gainsight-px-cloud-server). Both of these destinations receives data from Segment. + +{% include content/ajs-upgrade.md %} + +## Benefits of Gainsight PX Cloud (Actions) vs Gainsight PX Cloud Classic + +Gainsight PX Cloud (Actions) provides the following benefits over the classic Gainsight PX Cloud destination: + +- **Data Center Support**. The new Actions-based integration allows for the selection of the PX datacenter. This is required for any PX customers based in any data center other than the main US datacenter (accessed via app.aptrinsic.com). + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Configure Gainsight PX Cloud (Actions)**. +4. Select an existing Source to connect to Gainsight PX Cloud (Actions). +5. To find your Gainsight PX key, log into Gainsight PX and navigate to Settings > Products > Web App. If you have not already entered the URL for your web application, do that and click the Generate button. The Tag Key is the value that begins with "AP-" to the right of the URL value. Use the “Copy” button to copy the value to your clipboard. +6. Paste the Gainsight PX Tag Key into the Segment connection settings API Key field. +7. Choose the appropriate data center value in the "Other Settings" Data Center dropdown. If the PX instance is accessed via app.aptrinsic.com, select 'United States', otherwise choose the appropriate selection based on the suffix after "app-" in the application's URL. + +{% include components/actions-fields.html %} From f19ab42315339b753750d74b8f9a0b9c7b4c6645 Mon Sep 17 00:00:00 2001 From: bobbyatsegment <93934274+bobbyatsegment@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:28:37 -0400 Subject: [PATCH 13/70] Add note on connecting new mappings to model --- src/connections/reverse-etl/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/connections/reverse-etl/index.md b/src/connections/reverse-etl/index.md index d63544c814..4f277af1c3 100644 --- a/src/connections/reverse-etl/index.md +++ b/src/connections/reverse-etl/index.md @@ -96,6 +96,9 @@ To add your first destination: ### Step 4: Create mappings After you’ve added a destination, you can create mappings from your warehouse to the destination. Mappings enable you to map the data you extract from your warehouse to the fields in your destination. +> info "" +> When adding new mappings to an existing model, only the changes that have transpired since the last sync will be synchronized, not the entire dataset. For a comprehensive data synchronization, we advise you to first recreate the model, followed by establishing a one-to-one mapping with the new model. This approach ensures that all data synchronizes effectively. + To create a mapping: 1. Navigate to **Conections > Destinations** and select the **Reverse ETL** tab. 2. Select the destination that you want to create a mapping for. From 40c7c6367174d32d93ade41f84e246da71cf9c12 Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Wed, 13 Sep 2023 18:39:05 -0700 Subject: [PATCH 14/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: Thomas Gilbert <64277654+tcgilbert@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index 64c5ca32d1..6fb1c294f9 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -1,5 +1,6 @@ --- title: Gainsight PX Cloud (Actions) Destination +id: 61f83101210c42a28a88d240 --- From 08d0661c805d9f9c4a836192e65d10834e7b1f1c Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Wed, 13 Sep 2023 18:39:31 -0700 Subject: [PATCH 15/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index 6fb1c294f9..eb990c3728 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -6,7 +6,6 @@ id: 61f83101210c42a28a88d240 {% include content/plan-grid.md name="actions" %} -[](https://www.gainsight.com/product-experience/analytics/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) Gainsight PX provides a personalized product experience platform to help companies acquire, retain, and grow customers by creating real-time, personalized engagements driven by product usage data. With Gainsight PX, companies can implement an effective product-led go-to-market strategy that will increase product adoption and customer lifetime value. This destination is maintained by Gainsight PX. For any issues with the destination, [contact their Support team](mailto:pxsupport@gainsight.com). From 98f69b8537b2085753c7870d049a7e891d9cfaad Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Wed, 13 Sep 2023 18:39:52 -0700 Subject: [PATCH 16/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index eb990c3728..f90ff124f5 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -6,7 +6,7 @@ id: 61f83101210c42a28a88d240 {% include content/plan-grid.md name="actions" %} -Gainsight PX provides a personalized product experience platform to help companies acquire, retain, and grow customers by creating real-time, personalized engagements driven by product usage data. With Gainsight PX, companies can implement an effective product-led go-to-market strategy that will increase product adoption and customer lifetime value. +[Gainsight PX](https://www.gainsight.com/product-experience/analytics/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} provides a personalized product experience platform to help companies acquire, retain, and grow customers by creating real-time, personalized engagements driven by product usage data. With Gainsight PX, companies can implement an effective product-led go-to-market strategy that will increase product adoption and customer lifetime value. This destination is maintained by Gainsight PX. For any issues with the destination, [contact their Support team](mailto:pxsupport@gainsight.com). > **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/actions-gainsight-px-cloud) Gainsight PX Cloud Segment destination. There's also a page about the [non-Actions Gainsight PX Cloud destination](/docs/connections/destinations/catalog/gainsight-px-cloud-server). Both of these destinations receives data from Segment. From cb7f55c19ee287307a8594f26d5b662cb44b31c8 Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Wed, 13 Sep 2023 18:40:21 -0700 Subject: [PATCH 17/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index f90ff124f5..355a2455bd 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -9,7 +9,7 @@ id: 61f83101210c42a28a88d240 [Gainsight PX](https://www.gainsight.com/product-experience/analytics/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} provides a personalized product experience platform to help companies acquire, retain, and grow customers by creating real-time, personalized engagements driven by product usage data. With Gainsight PX, companies can implement an effective product-led go-to-market strategy that will increase product adoption and customer lifetime value. This destination is maintained by Gainsight PX. For any issues with the destination, [contact their Support team](mailto:pxsupport@gainsight.com). -> **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/actions-gainsight-px-cloud) Gainsight PX Cloud Segment destination. There's also a page about the [non-Actions Gainsight PX Cloud destination](/docs/connections/destinations/catalog/gainsight-px-cloud-server). Both of these destinations receives data from Segment. +> **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/actions-gainsight-px-cloud) Gainsight PX Cloud Segment destination. There's also a page about the [non-Actions Gainsight PX Cloud destination](/docs/connections/destinations/catalog/gainsight-px-cloud-server). Both of these destinations receive data from Segment. {% include content/ajs-upgrade.md %} From 27cf061da7b9fcb207e157387106413e6c00086f Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Wed, 13 Sep 2023 18:40:35 -0700 Subject: [PATCH 18/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index 355a2455bd..140eb22999 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -7,7 +7,7 @@ id: 61f83101210c42a28a88d240 {% include content/plan-grid.md name="actions" %} [Gainsight PX](https://www.gainsight.com/product-experience/analytics/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} provides a personalized product experience platform to help companies acquire, retain, and grow customers by creating real-time, personalized engagements driven by product usage data. With Gainsight PX, companies can implement an effective product-led go-to-market strategy that will increase product adoption and customer lifetime value. -This destination is maintained by Gainsight PX. For any issues with the destination, [contact their Support team](mailto:pxsupport@gainsight.com). +This destination is maintained by Gainsight PX. For any issues with the destination, [contact the Gainsight PX Support team](mailto:pxsupport@gainsight.com). > **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/actions-gainsight-px-cloud) Gainsight PX Cloud Segment destination. There's also a page about the [non-Actions Gainsight PX Cloud destination](/docs/connections/destinations/catalog/gainsight-px-cloud-server). Both of these destinations receive data from Segment. From 716d54658bdd16cd9cc75038bbe8a2d6e77b0277 Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Wed, 13 Sep 2023 18:40:48 -0700 Subject: [PATCH 19/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index 140eb22999..f11aff7540 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -21,7 +21,7 @@ Gainsight PX Cloud (Actions) provides the following benefits over the classic Ga ## Getting started -1. From the Segment web app, click **Catalog**, then click **Destinations**. +1. From the Segment web app, navigate to **Connections > Catalog** and select the **Destinations** tab. 2. Find the Destinations Actions item in the left navigation, and click it. 3. Click **Configure Gainsight PX Cloud (Actions)**. 4. Select an existing Source to connect to Gainsight PX Cloud (Actions). From 1aa9587d716bfc66af4c85c1d97a7774e087aeb9 Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Wed, 13 Sep 2023 18:41:06 -0700 Subject: [PATCH 20/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index f11aff7540..9e880a0646 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -22,7 +22,7 @@ Gainsight PX Cloud (Actions) provides the following benefits over the classic Ga ## Getting started 1. From the Segment web app, navigate to **Connections > Catalog** and select the **Destinations** tab. -2. Find the Destinations Actions item in the left navigation, and click it. +2. Search for *Gainsight PX Cloud (Actions)* and select it. 3. Click **Configure Gainsight PX Cloud (Actions)**. 4. Select an existing Source to connect to Gainsight PX Cloud (Actions). 5. To find your Gainsight PX key, log into Gainsight PX and navigate to Settings > Products > Web App. If you have not already entered the URL for your web application, do that and click the Generate button. The Tag Key is the value that begins with "AP-" to the right of the URL value. Use the “Copy” button to copy the value to your clipboard. From 83bbf410496c2fb133713e470a6adaac7a95ebc4 Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Wed, 13 Sep 2023 18:41:14 -0700 Subject: [PATCH 21/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index 9e880a0646..b508d4ee8d 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -23,7 +23,7 @@ Gainsight PX Cloud (Actions) provides the following benefits over the classic Ga 1. From the Segment web app, navigate to **Connections > Catalog** and select the **Destinations** tab. 2. Search for *Gainsight PX Cloud (Actions)* and select it. -3. Click **Configure Gainsight PX Cloud (Actions)**. +3. Click **Add destination**. 4. Select an existing Source to connect to Gainsight PX Cloud (Actions). 5. To find your Gainsight PX key, log into Gainsight PX and navigate to Settings > Products > Web App. If you have not already entered the URL for your web application, do that and click the Generate button. The Tag Key is the value that begins with "AP-" to the right of the URL value. Use the “Copy” button to copy the value to your clipboard. 6. Paste the Gainsight PX Tag Key into the Segment connection settings API Key field. From 4b92d8198186163c0853895315b4bd33fd5579f8 Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Wed, 13 Sep 2023 18:41:27 -0700 Subject: [PATCH 22/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index b508d4ee8d..0703f7219b 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -25,7 +25,8 @@ Gainsight PX Cloud (Actions) provides the following benefits over the classic Ga 2. Search for *Gainsight PX Cloud (Actions)* and select it. 3. Click **Add destination**. 4. Select an existing Source to connect to Gainsight PX Cloud (Actions). -5. To find your Gainsight PX key, log into Gainsight PX and navigate to Settings > Products > Web App. If you have not already entered the URL for your web application, do that and click the Generate button. The Tag Key is the value that begins with "AP-" to the right of the URL value. Use the “Copy” button to copy the value to your clipboard. +5. Find your Gainsight PX key. + * Log in to Gainsight PX and navigate to **Settings > Products > Web App**. Enter the URL for your web application and click the **Generate** button. The Tag Key is the value that begins with "AP-" to the right of the URL value. Copy the value to your clipboard. 6. Paste the Gainsight PX Tag Key into the Segment connection settings API Key field. 7. Choose the appropriate data center value in the "Other Settings" Data Center dropdown. If the PX instance is accessed via app.aptrinsic.com, select 'United States', otherwise choose the appropriate selection based on the suffix after "app-" in the application's URL. From 2141d18e0e8f4229257525f81eaf2e959dd9bfcc Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Wed, 13 Sep 2023 18:41:49 -0700 Subject: [PATCH 23/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index 0703f7219b..c0d367770c 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -28,6 +28,6 @@ Gainsight PX Cloud (Actions) provides the following benefits over the classic Ga 5. Find your Gainsight PX key. * Log in to Gainsight PX and navigate to **Settings > Products > Web App**. Enter the URL for your web application and click the **Generate** button. The Tag Key is the value that begins with "AP-" to the right of the URL value. Copy the value to your clipboard. 6. Paste the Gainsight PX Tag Key into the Segment connection settings API Key field. -7. Choose the appropriate data center value in the "Other Settings" Data Center dropdown. If the PX instance is accessed via app.aptrinsic.com, select 'United States', otherwise choose the appropriate selection based on the suffix after "app-" in the application's URL. +7. Choose the appropriate data center value in the "Other Settings" Data Center dropdown. If you access the PX instance with app.aptrinsic.com, select 'United States', otherwise, choose the appropriate selection based on the suffix after "app-" in the application's URL. {% include components/actions-fields.html %} From a6a5da95c44e4c4b9ff065e0550a8f42a6df0def Mon Sep 17 00:00:00 2001 From: Rohan Moradiya Date: Sat, 16 Sep 2023 14:22:47 +0530 Subject: [PATCH 24/70] Renamed iOS and Android repo to make it identical for both platforms --- .../destinations/catalog/test-flow/index.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/connections/destinations/catalog/test-flow/index.md b/src/connections/destinations/catalog/test-flow/index.md index 5d20e748b4..c607639cba 100644 --- a/src/connections/destinations/catalog/test-flow/index.md +++ b/src/connections/destinations/catalog/test-flow/index.md @@ -11,8 +11,8 @@ Using 1Flow, you can reach users _in-the-moment_ while they are interacting with The 1Flow Mobile Plugin Destination is open-source and available on GitHub. You can view these repositories here: -- [iOS](https://github.com/1Flow-Inc/Segment1Flow.git){:target="_blank"} -- [Android](https://github.com/1Flow-Inc/1flow-segment-tool.git){:target="_blank"} +- [iOS](https://github.com/1Flow-Inc/segment-1flow-ios.git){:target="_blank"} +- [Android](https://github.com/1Flow-Inc/segment-1flow-android.git){:target="_blank"} This destination is maintained by 1Flow. For any issues with the destination, [contact Support team](mailto:support@1flow.app). @@ -30,16 +30,18 @@ This destination is maintained by 1Flow. For any issues with the destination, [c In the Xcode File menu, click Add Packages. You'll see a dialog where you can search for Swift packages. In the search field, enter the URL to this repo. -https://github.com/1Flow-Inc/Segment1Flow +https://github.com/1Flow-Inc/segment-1flow-ios You'll then have the option to pin to a version, or specific branch, as well as which project in your workspace to add it to. Once you've made your selections, click the Add Package button. ### Step 2: Initialise Segment and Add 1Fow Destination ``` - let config = Configuration(writeKey: "YOUR_WRITE_KEY_HERE") - let analytics = Analytics(configuration: config) - analytics.add(plugin: OneFlowDestination()) +import Segment1Flow +... +let config = Configuration(writeKey: "YOUR_WRITE_KEY_HERE") +let analytics = Analytics(configuration: config) +analytics.add(plugin: OneFlowDestination()) ``` ## Android From cf758eed8ebd2446a5cf028ebdcaad479cac706f Mon Sep 17 00:00:00 2001 From: Rohan Moradiya Date: Sat, 16 Sep 2023 14:30:46 +0530 Subject: [PATCH 25/70] Changed android SDK version --- src/connections/destinations/catalog/test-flow/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/test-flow/index.md b/src/connections/destinations/catalog/test-flow/index.md index c607639cba..6a55986a00 100644 --- a/src/connections/destinations/catalog/test-flow/index.md +++ b/src/connections/destinations/catalog/test-flow/index.md @@ -85,7 +85,7 @@ defaultConfig { dependencies { .... implementation 'com.segment.analytics.android:analytics:4.11.3' - implementation "com.github.1Flow-Inc:1flow-segment-tool:2023.09.14" + implementation "com.github.1Flow-Inc:segment-1flow-android:2023.09.16" } ``` From 19898bdef47e1446b076ebc514277a06deab7583 Mon Sep 17 00:00:00 2001 From: Spencer Attick <23665784+spencerattick@users.noreply.github.com> Date: Mon, 18 Sep 2023 11:32:01 -0400 Subject: [PATCH 26/70] fix typo --- src/connections/functions/insert-functions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/connections/functions/insert-functions.md b/src/connections/functions/insert-functions.md index 67b13cd5c3..bda1cd3e01 100644 --- a/src/connections/functions/insert-functions.md +++ b/src/connections/functions/insert-functions.md @@ -209,8 +209,8 @@ You can manually test your code from the functions editor: - Error messages display errors surfaced from your function. - Logs display any messages to console.log() from the function. -- > info "" -> The Event Tester won't make use of an Insert Function, show how an Insert Function impacts your data, or send data downstream through the Insert Function pipeline. +> warning "" +> The Event Tester won't make use of an Insert Function, show how an Insert Function impacts your data, or send data downstream through the Insert Function pipeline. The Event Tester is not impacted by an Insert Function at all. Please use the Function tester rather than the Event Tester to see how your Insert Function impacts your data. ## Save and deploy the destination insert function From ad73cc45adedad38674ad67ba0210991cc8cc235 Mon Sep 17 00:00:00 2001 From: Thomas Gilbert Date: Tue, 19 Sep 2023 09:23:45 -0400 Subject: [PATCH 27/70] adding new swift plugin docs for 1flow --- .../apple/destination-plugins/1flow-swift.md | 87 +++++++++++++++++++ .../mobile/apple/destination-plugins/index.md | 6 ++ 2 files changed, 93 insertions(+) create mode 100644 src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/1flow-swift.md diff --git a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/1flow-swift.md b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/1flow-swift.md new file mode 100644 index 0000000000..5acdedd559 --- /dev/null +++ b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/1flow-swift.md @@ -0,0 +1,87 @@ +--- +title: 1Flow Swift Plugin +--- + +[1Flow](https://1flow.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a leading in-app user survey and messaging platform for Mobile app and SaaS businesses. + +Using 1Flow, you can reach users _in-the-moment_ while they are interacting with your website or application, to collect highly contextual user insights that help you improve your product offering and customer experience. + +## Getting started + +1. From the Segment web app, click **Catalog**, then search for **1Flow Mobile Plugin**. +2. Click **Add Destination**. +4. Select an existing Source to connect to 1Flow Mobile Plugin. +5. Go to 1flow.ai -> Settings -> Project Settings, copy the 1Flow project key, and paste it into the Destination Settings in Segment. +6. Depending on the mobile source you’ve selected, include 1Flow's library by adding the following lines to your dependency configuration. + +## Adding the dependency + +### Through Xcode + +In the Xcode `File` menu, click `Add Packages`. You'll see a dialog where you can search for Swift packages. In the search field, enter the URL to this repository. +``` +https://github.com/1Flow-Inc/segment-1flow-ios.git +``` + + +You'll then have the option to pin to a version, or specific branch, as well as which project in your workspace to add it to. Once you've made your selections, click the `Add Package` button. + +### Through Package.swift + +Open your Package.swift file and add the following to the `dependencies` section: + +``` +.package( + name: "Segment", + url: "https://github.com/1Flow-Inc/segment-1flow-ios.git", + from: "1.0.0" + ), +``` + +## Using the Plugin in your App + +Open the file where you setup and configure the Analytics-Swift library. Add this plugin to the list of imports. + +``` +import Segment +import SegmentOneFlow // <-- Add this line +``` + +Just under your Analytics-Swift library setup, call `analytics.add(plugin: ...)` to add an instance of the plugin to the Analytics timeline. + +``` +let analytics = Analytics(configuration: Configuration(writeKey: "") + .flushAt(3) + .trackApplicationLifecycleEvents(true)) +analytics.add(plugin: OneFlowDestination()) +``` + +## Identify +If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: + +```swift +analytics.identify(userId: "peter@example.com", traits: [ + "name": "Peter Gibbons", + "email": "peter@example.com", + "mobile": 1234567890 +]) +``` +When you call identify method of segment, it will be equivalent to `logUser` of 1Flow. `userId` will be `userID` and `traits` will be `userDetails`. + +## Track +If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: + +```swift +analytics.track(name: "ButtonClicked") +``` +Any value passed in `name`, will be eventName and if you have passed any event property, then it will be event `parameters`. + +## Screen + +Send [Screen](/docs/connections/spec/screen) calls to record which mobile app screens users have viewed. For example: + +```swift +analytics.screen(title: "Home") +``` + +Segment sends Screen calls to 1Flow as a `screen_[name]` event (or `screen_view` if a screen name isn't provided). diff --git a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/index.md b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/index.md index ce0819ddac..fc2e7be486 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/index.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/index.md @@ -62,6 +62,12 @@ plugins: url: https://cdn.filepicker.io/api/file/zeGaFc7rSEerWyM7dmVQ mark: url: https://cdn.filepicker.io/api/file/A0pxB2RWTNiVs2VBYGhx + - name: 1Flow Mobile Plugin + url: connections/sources/catalog/libraries/mobile/apple/destination-plugins/1flow-swift/ + logo: + url: https://cdn-devcenter.segment.com/85468e64-4f93-45a0-a30e-20886b933529.svg + mark: + url: https://cdn-devcenter.segment.com/a026bddd-e174-4f41-9e56-4eac99d5e825.svg --- Analytics Swift uses its timeline/plugin architecture to support sending data to bundled SDKs when a Cloud Mode connection is not possible. Destination Plugins are similar to traditional Device Mode integrations available in Analytics-iOS in that Segment makes calls directly to the destination tool’s API from the device. However, Destination Plugins are more customizable, giving you the ability to control and enrich your data at a much more granular level on the device itself. From ac0701237ceb2401af9997d50b4ba6477c304d63 Mon Sep 17 00:00:00 2001 From: Thomas Gilbert <64277654+tcgilbert@users.noreply.github.com> Date: Tue, 19 Sep 2023 09:42:53 -0400 Subject: [PATCH 28/70] correct frontmatter --- src/connections/destinations/catalog/ambee-apis/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/connections/destinations/catalog/ambee-apis/index.md b/src/connections/destinations/catalog/ambee-apis/index.md index 750200f870..849d3d241a 100644 --- a/src/connections/destinations/catalog/ambee-apis/index.md +++ b/src/connections/destinations/catalog/ambee-apis/index.md @@ -1,8 +1,8 @@ --- -title: "Ambee" +title: "Ambee (Actions) Destination" hidden: true beta: true -id: +id: 647f2f7ce3b561ab931c2b77 --- {% include content/plan-grid.md name="actions" %} From e149dc881819f81b2c2e499f755f9c6c564ca7ad Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Tue, 19 Sep 2023 14:54:13 +0100 Subject: [PATCH 29/70] Updates --- .../website/shopify-littledata/index.md | 144 +++++++++--------- 1 file changed, 74 insertions(+), 70 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index f0ad97368e..0695a6f3cc 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -109,6 +109,7 @@ In the Littledata application you can choose which of the following fields you w - **Shopify customer ID** (default) - Recommended if you have a simple Shopify setup with minimal integrations. - **Hashed email** - The MD5 email hash is useful if you have other marketing platforms sending traffic where you know the email of the visitor (for example, email marketing like Bronto or Marketo), but not their Shopify customer ID. Littledata uses an unsalted MD5 hash (\`createHash\` method) to match your other sources. - **Email** - The email identifier is recommended when other platforms use the email and can't hash it, and you are comfortable with the privacy implications. +- **Shopify customer metafield** - If you have your own customer identifier, and can add it to the Shopify customer record as a metafield, you can send this to Segment. - **None** (no identifier) - Choose “none” if user identity is already handled by your Segment implementation and you only need the extra events powered by Littledata's Shopify source. For [Engage](/docs/engage/), Littledata also sends `shopify_customer_id` as an [externalID](/docs/unify/identity-resolution/externalids/) for advanced matching. @@ -119,27 +120,28 @@ For every event where there is an identifiable Shopify customer (from both the d The following traits are included with an Identify call: -| Property Name | Description | Property Type | -| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `accepts_marketing` | Whether the customer has accepted marketing | Boolean | -| `createdAt` | The date customer record was created | Date | -| `customerLifetimeValue` | The total spend of customer on the Shopify store | Double | -| `default_address.street` | The customer's default street address | String | -| `default_address.city` | The customer's city address | String | -| `default_address.postalCode` | The customer's ZIP / post code | String | -| `default_address.state` | The customer's state address | String | -| `default_adress.country` | The customer's country | String | -| `description` | The customer notes | String | -| `email` | The customer's email address | String | -| `firstName` | The customer's first name | String | -| `lastName` | The customer's last name | String | -| `marketingOptIn` | The `marketing_opt_in` field from [Shopify customer](https://shopify.dev/docs/admin-api/rest/reference/customers/customer) | String | -| `phone` | The customer's phone number | String | -| `purchaseCount` | The number of orders by this customer | Integer | -| `state` | The Shopify [customer state](https://shopify.dev/api/admin-graphql/2022-07/enums/customerstate){:target="\_blank"}. This can be `enabled`, `disabled`, `invited` to create an account, or customer `declined` | String | -| `tags` | The custom tags [applied to the customer](https://shopify.dev/docs/admin-api/rest/reference/customers/customer) | String | -| `userId` | Chosen user identifier, defaulting to Shopify Customer ID | Double | -| `verified_email` (v2) | Whether the customer has verified their email | Boolean | +| **Property Name** | **Description** | **Property Type** | +| -------------------------- | --------------------------------------------------------------------------------------------- | ----------------- | +| userId | Chosen user identifier, defaulting to Shopify Customer ID | Double | +| createdAt | Date customer record was created | Date | +| customerLifetimeValue | Total spend of customer on the Shopify store | Double | +| default_address.street | The customer's default street address | String | +| default.address.postalCode | The customer's ZIP / post code | String | +| default_address.state | The customer's state address | String | +| default_address.country | The customer's country | String | +| description | Customer notes | String | +| email | Customer's email address | String | +| firstName | Customer's first name | String | +| lastName | Customer's last name | String | +| email_consent_state | If the user has subscribed or not with e-mail | String, Null | +| email_opt_in_level | Level of user's opt in to notifications | String, Null | +| sms_consent_state | If the user has subscribed or not with sms | String, Null | +| sms_opt_in_level | Level of user's opt in to notifications | String, Null | +| phone | Customer's phone number | String | +| purchaseCount | Number of orders by this customer | Integer | +| state | Shopify customer state - enabled, disabled, invited to create an account or customer declined | String | +| tags | Custom tags applied to the customer | String | +| verified_email | Whether the customer has verified their email | Boolean | ## Support for Google Analytics destination @@ -173,34 +175,38 @@ Additional subscription lifecycle events through Littledata's [ReCharge connecti The list below outlines the properties included in most events. See the 'Track (eCommerce)' tab of the [event schema](https://docs.google.com/spreadsheets/d/1aljowRhMU9_7uGXmcipbP1Y14S4cOSdXGQA2Vx7BHko/edit){:target="\_blank"} for exactly which properties are sent with which events. -| Property | Description | Property Type | -| -------------------------------------- | --------------------------------------------------------------------------------------------- | ------------- | -| `affiliation` | A comma-seperated list of order tags. Untagged orders use `Shopify` | String | -| `cart_id` | The ID of the Shopify cart | String | -| `checkout_id` | The ID of the checkout session | String | -| `context.uip` | The user's IP address | String | -| `context['Google Analytics'].clientId` | The user's Google Analytics Client ID | String | -| `context['Google Analytics'].geoid` | The user's location | String | -| `coupon` | Comma-separated string of discount coupons used, if applicable | String | -| `currency` | The currency of the order | String | -| `discount` | The discounted amount | Float | -| `email` | Shopify email address, or email submitted on a storefront form | String | -| `order_id` | The ID of the order | String | -| `payment_method` | The payment method chosen for checkout | String | -| `presentment_currency` | The user's local currency | String | -| `presentment_total` | The order total in local currency | String | -| `products` | A list of all the product at that step of the funnel | Array | -| `revenue` | Product revenue (excluding discounts, shipping and tax) \* | Float | -| `sent_from` | A unique property to identify events sent by Littledata | String | -| `shipping_method` | The shipping method chosen for checkout | String | -| `shipping` | The shipping cost | Float | -| `source_name` | The source of the order or checkout (like `web`, `android`, `pos`) | String | -| `step` | The checkout [step number](https://help.littledata.io/posts/shopify-checkout-funnel-updates/) | Integer | -| `subscription_revenue` | The revenue associated with a [Subscription Event](#subscription-events) | Float | -| `subtotal` | Order total after discounts but before taxes and shipping | Float | -| `tax` | The amount of tax on the order | Float | -| `total` | The total value of the order | Float | -| `userId` | Chosen user identifier, defaulting to Shopify Customer ID | String | +| **Property** | **Description** | **Property Type** | +| --------------------------------------- | -------------------------------------------------------------------------------------- | ----------------- | +| `affiliation` | A comma-separated list of order tags. Untagged orders use `Shopify` | String | +| `cart_id` | The ID of the Shopify cart | String | +| `checkout_id` | The ID of the checkout session | String | +| `context\['Google Analytics'].clientId` | The user's Google Analytics Client ID | String | +| `context.ip` | The user's IP address | String | +| `coupon` | Comma-separated string of discount coupons used, if applicable | String | +| `currency` | The currency of the order | String | +| `discount` | The discounted amount | Float | +| `email` | Shopify email address (after checkout step 2), or email submitted on a storefront form | String | +| `lifetime_revenue_littledata` | Lifetime revenue of the customer in Shopify | String | +| `location_id` | Location ID of the Point of Sale | Integer | +| `order_id` | The ID of the order is by default the Shopify order name | String | +| `payment_gateway_littledata` | The payment gateway used by the customer | String | +| `payment_method` | The payment method chosen for checkout | String | +| `presentment_currency` | The user's local currency | String | +| `presentment_total` | The order total in local currency | String | +| `products` | A list of all the product at that step of the funnel | Array | +| `purchase_count_littledata` | Total purchase count for the customer | Integer | +| `revenue` | Product revenue (excluding discounts, shipping and tax) \* | Float | +| `sent_from` | Unique property to identify events sent by Littledata | String | +| `shipping` | Shipping cost | Float | +| `shipping_method` | Shipping method chosen for checkout | String | +| `shopify_customer_id_littledata` | Shopify’s identifier for the customer | Integer | +| `source_name` | The source of the order (e.g. `web`, `android`, `pos`) | String | +| `step` | Checkout step | Integer | +| `subscription_revenue` | The revenue associated with a Subscription Event | Float | +| `subtotal` | Total after discounts but before taxes and shipping | Float | +| `tax` | The amount of tax on the order | Float | +| `total` | Total value of the order | Float | +| `userId` | Chosen user identifier, defaulting to Shopify Customer ID | String | > note "" \*`revenue` is available only with the Order Completed event, and only if the store opts in through the Littledata application. Revenue is a reserved property in many Segment destinations. Opting in will override the `total` property sent to Google Analytics. @@ -208,27 +214,25 @@ The list below outlines the properties included in most events. See the 'Track ( Each item in the `products` array, or Product Viewed and Product Added events, will have the following properties -| Property | Description | Property Type | -| ---------------------- | ------------------------------------------------------------------ | ------------- | -| `brand` | The brand of the product (Shopify `vendor`) | String | -| `category` | The category of the product (defaults to `all`) | String | -| `compare_at_price` | The product price before any discount | String | -| `coupon` | Coupon code associated with the product | String | -| `currency` | The currency displayed to the user | String | -| `image_url` | The URL of the first product image | String | -| `list_id` | The ID of the product collection (for List Views and Clicks) | String | -| `position` | The product position in the collection (for List Views and Clicks) | Integer | -| `name` | The product name | String | -| `presentment_amount` | The product price as displayed to the user | String | -| `presentment_currency` | The currency displayed to the user | String | -| `price` | The product price at the time of the event, in the store currency | Float | -| `product_id` | The Shopify product ID | String | -| `quantity` | The quantity of products | Integer | -| `shopify_product_id` | Also Shopify product ID | String | -| `shopify_variant_id` | The Shopify variant ID | String | -| `sku` | The product SKU | String | -| `url` | The URL of the product page | String | -| `variant` | The product variant name | String | +| **Property** | **Description** | **Property Type** | +| -------------------- | ------------------------------------------------------------------ | ----------------- | +| `brand` | The brand of the product (Shopify vendor) | String | +| `category` | The category of the product (defaults to all) | String | +| `compare_at_price` | The product price before any discount | String | +| `coupon` | Coupon code associated with the product | String | +| `image_url` | The URL of the first product image | String | +| `list_id` | The ID of the product collection (for List Views and Clicks) | String | +| `list_position` | The product position in the collection (for List Views and Clicks) | Integer | +| `name` | Product name | String | +| `price` | The product price | Float | +| `product_id` | Shopify product ID | String | +| `quantity` | The quantity of this product | Integer | +| `product_properties` | Custom properties of purchased products | Array | +| `shopify_product_id` | Also Shopify product ID | String | +| `shopify_variant_id` | The Shopify variant ID | String | +| `sku` | The product SKU | String | +| `url` | The URL of the product page | String | +| `variant` | The product variant name | String | ## Import all orders From c2e9c6bfa708aa64da63076fce2f3cf20a66a42b Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Tue, 19 Sep 2023 15:03:16 +0100 Subject: [PATCH 30/70] Order properties --- .../website/shopify-littledata/index.md | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 0695a6f3cc..68f0230177 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -120,28 +120,28 @@ For every event where there is an identifiable Shopify customer (from both the d The following traits are included with an Identify call: -| **Property Name** | **Description** | **Property Type** | -| -------------------------- | --------------------------------------------------------------------------------------------- | ----------------- | -| userId | Chosen user identifier, defaulting to Shopify Customer ID | Double | -| createdAt | Date customer record was created | Date | -| customerLifetimeValue | Total spend of customer on the Shopify store | Double | -| default_address.street | The customer's default street address | String | -| default.address.postalCode | The customer's ZIP / post code | String | -| default_address.state | The customer's state address | String | -| default_address.country | The customer's country | String | -| description | Customer notes | String | -| email | Customer's email address | String | -| firstName | Customer's first name | String | -| lastName | Customer's last name | String | -| email_consent_state | If the user has subscribed or not with e-mail | String, Null | -| email_opt_in_level | Level of user's opt in to notifications | String, Null | -| sms_consent_state | If the user has subscribed or not with sms | String, Null | -| sms_opt_in_level | Level of user's opt in to notifications | String, Null | -| phone | Customer's phone number | String | -| purchaseCount | Number of orders by this customer | Integer | -| state | Shopify customer state - enabled, disabled, invited to create an account or customer declined | String | -| tags | Custom tags applied to the customer | String | -| verified_email | Whether the customer has verified their email | Boolean | +| **Property Name** | **Description** | **Property Type** | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| userId | Chosen user identifier, defaulting to Shopify Customer ID | Double | +| createdAt | Date customer record was created | Date | +| customerLifetimeValue | Total spend of customer on the Shopify store | Double | +| default_address.street | The customer's default street address | String | +| default.address.postalCode | The customer's ZIP / post code | String | +| default_address.state | The customer's state address | String | +| default_address.country | The customer's country | String | +| description | Customer notes | String | +| email | Customer's email address | String | +| email_consent_state | If the user has consented to email marketing (mapping to [EmailMarketingState](https://shopify.dev/docs/api/customer/unstable/enums/EmailMarketingState)) | String, Null | +| email_opt_in_level | Level of user's opt in email marketing (mapping to [MarketingOptInLevel](https://shopify.dev/docs/api/customer/unstable/enums/MarketingOptInLevel)) | String, Null | +| firstName | Customer's first name | String | +| lastName | Customer's last name | String | +| phone | Customer's phone number | String | +| purchaseCount | Number of orders by this customer | Integer | +| sms_consent_state | If the user has consented to SMS marketing (mapping to [SmsMarketingState](https://shopify.dev/docs/api/customer/unstable/enums/SmsMarketingState)) | String, Null | +| sms_opt_in_level | Level of user's opt in to SMS marketing (mapping to [MarketingOptInLevel](https://shopify.dev/docs/api/customer/unstable/enums/MarketingOptInLevel)) | String, Null | +| state | Shopify customer state - enabled, disabled, invited to create an account or customer declined | String | +| tags | Custom tags applied to the customer | String | +| verified_email | Whether the customer has verified their email | Boolean | ## Support for Google Analytics destination @@ -216,8 +216,8 @@ Each item in the `products` array, or Product Viewed and Product Added events, w | **Property** | **Description** | **Property Type** | | -------------------- | ------------------------------------------------------------------ | ----------------- | -| `brand` | The brand of the product (Shopify vendor) | String | -| `category` | The category of the product (defaults to all) | String | +| `brand` | The brand of the product (Shopify `vendor`) | String | +| `category` | The category of the product (defaults to `all`) | String | | `compare_at_price` | The product price before any discount | String | | `coupon` | Coupon code associated with the product | String | | `image_url` | The URL of the first product image | String | From 6ce2f03f34e602d1e78cbea2dee979369289376a Mon Sep 17 00:00:00 2001 From: Nick Campbell Date: Tue, 19 Sep 2023 15:10:31 +0100 Subject: [PATCH 31/70] Initial catalog information for Attio Action --- .../catalog/actions-attio/index.md | 175 ++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 src/connections/destinations/catalog/actions-attio/index.md diff --git a/src/connections/destinations/catalog/actions-attio/index.md b/src/connections/destinations/catalog/actions-attio/index.md new file mode 100644 index 0000000000..84527180e2 --- /dev/null +++ b/src/connections/destinations/catalog/actions-attio/index.md @@ -0,0 +1,175 @@ +--- +title: Attio (Actions) Destination +hide-boilerplate: true +--- + +{% include content/plan-grid.md name="actions" %} + +Powerful, flexible and data-driven, [Attio](https://attio.com) makes it easy to build the exact CRM that your business needs. + +This destination allows you to use your existing Segment events to create or update records in Attio, for example creating User objects from identify events. + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Search for **Attio (Actions)** and select it. +3. Click **Add destination**, then follow the setup instructions. +4. Click **Connect to (destination name)** to select the Attio Workspace you'd like to connect to. + + + +## Identify User + +Create or update a **Person** using the provided email address, then create or update a +related **User** using the same address. By default, this mapping runs for `identify` +events. + +*This mapping is a special form of [Assert Record](#assert-record), because it asserts +both a Person and User and links them together. If you only need to assert either a Person +or User, you should configure [Assert Record](#assert-record) instead.* + +In Attio, a **Person** is an object which represents a human. People have names, email +addresses, Twitter profiles, email and calendar interactions, etc. + +Meanwhile, a **User** is an object which represents how they exist in your product. +Users might have feature flags, permission levels, etc. + +> info "" +> To use the User standard object, you'll need to make sure it's activated first. Visit +> your [Workspace Settings > Objects](https://app.attio.com/_/settings/data/objects) page +> and click the "Activate" button next to the Users object. + +This mapping only makes one assumption about your data, which is that it includes an email +address property. You can specify additional attributes to be mapped on the **Edit +Mapping** page. + +For example, we could set some additional properties on the Person using these Mapping +Fields under "Additional Person attributes". The column on the left should contain +properties from your event, or custom text, and the column on the right should reference +attributes on that object type in Attio, represented by their slug. + +> info "" +> Every Attio attribute has both an ID and a slug, and you can use either to reference +> those attributes in this action. To find this value, on the object settings page, select +> the "Attributes" tab, locate your attribute, then click on the **︙** button and select +> "Copy slug". + +Here's an example configuration that sets the `description`, `name` and `company` +attributes on the Person object: + +| Select event variable | Enter key name | Notes | +|-----------------------------------------|----------------|--------------------------------------------------------------------| +| `traits.description` | description | | +| `traits.last_name`, `traits.first_name` | name | Person names must be formatted as `Last name(s), First name(s)` | +| `traits.domain` | company | A Company relationship can be populated using the Company's domain | + +You can also use the same approach to specify additional properties on the User object. +Please note that by default, the User object doesn't specify many attributes; the +expectation is that you'll add your own that make the most sense for your product. All +custom attributes can be specified here, please see [attribute types](#attribute-types) +below for more information. + +## Group Workspace + +Create or update a **Company** using the provided domain, then create or update a +**Workspace** using the provided name. By default, this mapping runs for `group` events. + +*This mapping is a special form of [Assert Record](#assert-record), because it asserts +both a Company and Workspace and links them together. If you only need to assert either a +Company or Workspace, you should configure [Assert Record](#assert-record) instead.* + +In Attio, a **Company** is an object which can represent any of your customers, suppliers, +partners or competitors. Companies have names and domains, as well as enriched properties +like ARR or category. + +Meanwhile, a **Workspace** is an object which represents how they might exist in your +product. Workspaces might have feature flags, billing configurations, customer support +representatives, etc. + +> info "" +> To use the Workspace standard object, you'll need to make sure it's activated first. Visit +> your [Workspace Settings > Objects](https://app.attio.com/_/settings/data/objects) page +> and click the "Activate" button next to the Workspaces object. + +This mapping makes the assumption that your data includes two properties: + + 1. A `domain` property to create or update a Company + 2. A `name` property, to create or update an associated Workspace + +You can specify additional attributes to be mapped on the **Edit Mapping** page. + +For example, we could set some additional properties on the Company using these Mapping +Fields under "Additional Company attributes". The column on the left should contain +properties from your event, or custom text, and the column on the right should reference +attributes on that object type in Attio, represented by their slug. For example: + +| Select event variable | Enter key name | +|-----------------------------------------|----------------| +| `traits.twitter_handle` | twitter | + +Similarly, you can also set some additional properties on the Workspace. All +custom attributes can be specified here, please see [attribute types](#attribute-types) +below for more information. + +## Assert Record + +Create or update a single type of Object, given a matching attribute name and value. For +example, you could assert that a Company exists using a given `domain` property. + +This mapping makes the assumption that your data includes the matching property. For the +following example, we'll assume you have domain and twitter properties, like so: + +```json +{ + "type": "identify", + "traits": { + "domain": "app.attio.com", + "twitter_handle": "@attio" + } +} +``` + +First, we'll need to set the "Attio Object" property - it should pre-populate with all of +the activated objects in your Attio instance. Then, we'll need to set the "Matching +Attribute" property. This is the slug for the attribute in Attio, and must also be present +in your "Attributes" mapping in the next form. In this example, we'll select "Company" as +the Attio Object, and "domains" as the Matching Attribute. + +We would then need to ensure the Attributes mapping is populated like so: + +| Select event variable | Enter key name | +|-----------------------------------------|----------------| +| `traits.domain` | domains | +| `traits.twitter_handle` | twitter | + +When this mapping runs, Attio will try to find an existing Company where one of the +domains matches the one you've provided here. If it finds it, it will update the `twitter` +attribute with the value `"@attio"`. If it doesn't find it, a new Company will be created +with both the domain and twitter handles above. + + +## Attribute types + +With the exception of location data, the Attio Action can write all other types of +attribute to Attio. Below is an example of the format that each attribute must be; please +note that you'll get validation failures if any of these are incorrect. To unset an +attribute, you can also pass `null` as the value. + +| `type` | Format | Example values | +|----------------------|-----------------------------------------------------------------------------------------|-------------------------------------------------------------| +| `actor-reference` | An email address of a workspace member | `"alice@attio.com"` | +| `checkbox` | Boolean | `true`, `false` | +| `currency` | Number with up to 4 decimal places | `99`, `29.9999` | +| `date` | YYYY-MM-DD | `"2023-09-28"` | +| `domain` | `{domain}.{tld}` | `"app.attio.com"`, `"www.example.com"` | +| `email` | A valid email address | `"person@example.com"` | +| `location` | *unsupported* | | +| `number` | Number, stored as a 64 bit float | `42.192`, `17` | +| `personal-name` | Last name(s), First name(s) *(note the comma in the middle)* | `"Bloggs, Joe"` | +| `phone-number` | [E.164 format](https://en.wikipedia.org/wiki/E.164), starting with `+...` | `"+15558675309"` | +| `pipeline` | A UUID or title representing the status | `"open"`, `"closed"` | +| `rating` | Integer from 0 to 5 | `0`, `5` | +| `record-reference` | To a person, an email. To a company, a domain. UUID of other entity always supported. | `"person@example.com"`, `"app.attio.com"`, `"0677efa..."` | +| `select` | A UUID or title representing the option | `"open"` | +| `text` | String | `"A piece of text"` | +| `timestamp` | ISO8601, e.g. YYYY-MM-DDTHH:MM:SS | `"2023-09-28 04:39:17.000"` | From b8ea721befb8642faeb6589bbf9995d4b0da2f63 Mon Sep 17 00:00:00 2001 From: Nick Campbell Date: Tue, 19 Sep 2023 16:17:08 +0100 Subject: [PATCH 32/70] Clarify wording of docs --- .../catalog/actions-attio/index.md | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/connections/destinations/catalog/actions-attio/index.md b/src/connections/destinations/catalog/actions-attio/index.md index 84527180e2..1917e501ad 100644 --- a/src/connections/destinations/catalog/actions-attio/index.md +++ b/src/connections/destinations/catalog/actions-attio/index.md @@ -5,9 +5,11 @@ hide-boilerplate: true {% include content/plan-grid.md name="actions" %} -Powerful, flexible and data-driven, [Attio](https://attio.com) makes it easy to build the exact CRM that your business needs. +Powerful, flexible and data-driven, [Attio](https://attio.com) makes it easy to build the +exact CRM that your business needs. -This destination allows you to use your existing Segment events to create or update records in Attio, for example creating User objects from identify events. +This destination allows you to use your existing Segment events to create or update +records in Attio, for example creating User records from identify events. ## Getting started @@ -28,20 +30,25 @@ events. both a Person and User and links them together. If you only need to assert either a Person or User, you should configure [Assert Record](#assert-record) instead.* -In Attio, a **Person** is an object which represents a human. People have names, email -addresses, Twitter profiles, email and calendar interactions, etc. +In Attio, a **Person** represents a human. People have names, email addresses, Twitter +profiles, email and calendar interactions, etc. -Meanwhile, a **User** is an object which represents how they exist in your product. -Users might have feature flags, permission levels, etc. +Meanwhile, a **User** is a user of your product. Users might have feature flags, +permission levels, etc. A Person can have multiple Users, for example if they exist in +different workspaces or have different sets of permissions, but are ultimately the same +Person. > info "" > To use the User standard object, you'll need to make sure it's activated first. Visit > your [Workspace Settings > Objects](https://app.attio.com/_/settings/data/objects) page > and click the "Activate" button next to the Users object. -This mapping only makes one assumption about your data, which is that it includes an email -address property. You can specify additional attributes to be mapped on the **Edit -Mapping** page. +This mapping makes the assumption that your Segment event includes two properties: + + 1. An `email_address` property, to create or update a Person + 2. A `id` property, to create or update an associated User + + You can specify additional attributes to be mapped on the **Edit Mapping** page. For example, we could set some additional properties on the Person using these Mapping Fields under "Additional Person attributes". The column on the left should contain @@ -78,23 +85,22 @@ Create or update a **Company** using the provided domain, then create or update both a Company and Workspace and links them together. If you only need to assert either a Company or Workspace, you should configure [Assert Record](#assert-record) instead.* -In Attio, a **Company** is an object which can represent any of your customers, suppliers, -partners or competitors. Companies have names and domains, as well as enriched properties -like ARR or category. +In Attio, a **Company** can have names and domains, as well as enriched properties like +ARR or category. -Meanwhile, a **Workspace** is an object which represents how they might exist in your -product. Workspaces might have feature flags, billing configurations, customer support -representatives, etc. +Meanwhile, a **Workspace** represents a group of Users in your product. Workspaces might +have feature flags, billing configurations, customer support representatives, etc. A +Company can have many Workspaces. > info "" > To use the Workspace standard object, you'll need to make sure it's activated first. Visit > your [Workspace Settings > Objects](https://app.attio.com/_/settings/data/objects) page > and click the "Activate" button next to the Workspaces object. -This mapping makes the assumption that your data includes two properties: +This mapping makes the assumption that your Segment event includes two properties: - 1. A `domain` property to create or update a Company - 2. A `name` property, to create or update an associated Workspace + 1. A `domain` property, to create or update a Company + 2. A `id` property, to create or update an associated Workspace You can specify additional attributes to be mapped on the **Edit Mapping** page. From 2e441905d819fc9763e1b0dce445a75b40acf332 Mon Sep 17 00:00:00 2001 From: giriraj Date: Tue, 19 Sep 2023 22:03:53 +0530 Subject: [PATCH 33/70] rename of folder --- .../destinations/catalog/{ambee-apis => actions-ambee}/index.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/connections/destinations/catalog/{ambee-apis => actions-ambee}/index.md (100%) diff --git a/src/connections/destinations/catalog/ambee-apis/index.md b/src/connections/destinations/catalog/actions-ambee/index.md similarity index 100% rename from src/connections/destinations/catalog/ambee-apis/index.md rename to src/connections/destinations/catalog/actions-ambee/index.md From 8afd1155624fa40b14c78591d237d602f588daaf Mon Sep 17 00:00:00 2001 From: nwolfe-xx Date: Tue, 19 Sep 2023 10:39:16 -0700 Subject: [PATCH 34/70] Update src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-gainsight-px-cloud/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md index c0d367770c..4d3c584a4f 100644 --- a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -7,6 +7,7 @@ id: 61f83101210c42a28a88d240 {% include content/plan-grid.md name="actions" %} [Gainsight PX](https://www.gainsight.com/product-experience/analytics/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} provides a personalized product experience platform to help companies acquire, retain, and grow customers by creating real-time, personalized engagements driven by product usage data. With Gainsight PX, companies can implement an effective product-led go-to-market strategy that will increase product adoption and customer lifetime value. + This destination is maintained by Gainsight PX. For any issues with the destination, [contact the Gainsight PX Support team](mailto:pxsupport@gainsight.com). > **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/actions-gainsight-px-cloud) Gainsight PX Cloud Segment destination. There's also a page about the [non-Actions Gainsight PX Cloud destination](/docs/connections/destinations/catalog/gainsight-px-cloud-server). Both of these destinations receive data from Segment. From 82b79e1fb29c3e3fca764f00527df83f95b7a9fb Mon Sep 17 00:00:00 2001 From: rchinn-segment Date: Tue, 19 Sep 2023 12:01:00 -0700 Subject: [PATCH 35/70] A few style edits --- .../mobile/apple/destination-plugins/1flow-swift.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/1flow-swift.md b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/1flow-swift.md index 5acdedd559..8932c44aea 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/1flow-swift.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/1flow-swift.md @@ -4,14 +4,14 @@ title: 1Flow Swift Plugin [1Flow](https://1flow.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a leading in-app user survey and messaging platform for Mobile app and SaaS businesses. -Using 1Flow, you can reach users _in-the-moment_ while they are interacting with your website or application, to collect highly contextual user insights that help you improve your product offering and customer experience. +Using 1Flow, you can reach users _in-the-moment_ while they are interacting with your website or application to collect highly contextual user insights that help you improve your product offering and customer experience. ## Getting started 1. From the Segment web app, click **Catalog**, then search for **1Flow Mobile Plugin**. 2. Click **Add Destination**. 4. Select an existing Source to connect to 1Flow Mobile Plugin. -5. Go to 1flow.ai -> Settings -> Project Settings, copy the 1Flow project key, and paste it into the Destination Settings in Segment. +5. Go to **1flow.ai > Settings > Project Settings**, copy the 1Flow project key, and paste it into the Destination Settings in Segment. 6. Depending on the mobile source you’ve selected, include 1Flow's library by adding the following lines to your dependency configuration. ## Adding the dependency @@ -24,7 +24,7 @@ https://github.com/1Flow-Inc/segment-1flow-ios.git ``` -You'll then have the option to pin to a version, or specific branch, as well as which project in your workspace to add it to. Once you've made your selections, click the `Add Package` button. +You'll then have the option to pin to a version, or specific branch, as well as which project in your workspace to add it to. Once you've made your selections, click **Add Package**. ### Through Package.swift @@ -38,9 +38,9 @@ Open your Package.swift file and add the following to the `dependencies` section ), ``` -## Using the Plugin in your App +## Using the Plugin in your app -Open the file where you setup and configure the Analytics-Swift library. Add this plugin to the list of imports. +Open the file where you set up and configure the Analytics-Swift library. Add this plugin to the list of imports. ``` import Segment @@ -66,7 +66,7 @@ analytics.identify(userId: "peter@example.com", traits: [ "mobile": 1234567890 ]) ``` -When you call identify method of segment, it will be equivalent to `logUser` of 1Flow. `userId` will be `userID` and `traits` will be `userDetails`. +The Segment identify method is equivalent to `logUser` of 1Flow. `userId` will be `userID` and `traits` will be `userDetails`. ## Track If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: From 860fb3f94ae6a7adef8ddd938f58f7146fb81455 Mon Sep 17 00:00:00 2001 From: rchinn-segment <93161299+rchinn-segment@users.noreply.github.com> Date: Tue, 19 Sep 2023 12:21:23 -0700 Subject: [PATCH 36/70] Update src/connections/destinations/catalog/actions-ambee/index.md --- src/connections/destinations/catalog/actions-ambee/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-ambee/index.md b/src/connections/destinations/catalog/actions-ambee/index.md index 849d3d241a..e38c7d54da 100644 --- a/src/connections/destinations/catalog/actions-ambee/index.md +++ b/src/connections/destinations/catalog/actions-ambee/index.md @@ -104,7 +104,7 @@ ad content based on the user's geolocation, for example: - Promote OTC medicines to allergy sufferers -The risk levels below are recommended by NAB to understand the risks +NAB recommends the risk levels below to understand the risks they are exposed to, and it helps them take preventative measures to reduce their exposure to pollen. Ambee uses the NAB-compliant index to provide accurate insights. If you are subscribed to **pollen**, you can From 0e4a86c0967a44e14d46c8ff09220941c8cf33e0 Mon Sep 17 00:00:00 2001 From: rchinn-segment <93161299+rchinn-segment@users.noreply.github.com> Date: Tue, 19 Sep 2023 12:21:29 -0700 Subject: [PATCH 37/70] Update src/connections/destinations/catalog/actions-ambee/index.md --- src/connections/destinations/catalog/actions-ambee/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-ambee/index.md b/src/connections/destinations/catalog/actions-ambee/index.md index e38c7d54da..5841f07542 100644 --- a/src/connections/destinations/catalog/actions-ambee/index.md +++ b/src/connections/destinations/catalog/actions-ambee/index.md @@ -66,7 +66,7 @@ by pasting your API key under **the API Key section** in **Mapping**. ### Ambee Air Quality Subscription Ambee's air quality subscription helps you personalize and position your -messaging via emails, SMS, and push notifications to improve user +messaging with emails, SMS, and push notifications to improve user engagement on your website based on air quality triggers for locations across the world. You can also retarget messaging based on your user's geo-location, for example: From 13181a05ee6939813e8166f71e74e12bf1584712 Mon Sep 17 00:00:00 2001 From: rchinn-segment <93161299+rchinn-segment@users.noreply.github.com> Date: Tue, 19 Sep 2023 12:21:35 -0700 Subject: [PATCH 38/70] Update src/connections/destinations/catalog/actions-ambee/index.md --- src/connections/destinations/catalog/actions-ambee/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-ambee/index.md b/src/connections/destinations/catalog/actions-ambee/index.md index 5841f07542..d7cd328e19 100644 --- a/src/connections/destinations/catalog/actions-ambee/index.md +++ b/src/connections/destinations/catalog/actions-ambee/index.md @@ -105,7 +105,7 @@ ad content based on the user's geolocation, for example: - Promote OTC medicines to allergy sufferers NAB recommends the risk levels below to understand the risks -they are exposed to, and it helps them take preventative measures to +users are exposed to, and help them take preventative measures to reduce their exposure to pollen. Ambee uses the NAB-compliant index to provide accurate insights. If you are subscribed to **pollen**, you can select the risk levels for pollen from the drop-down box under the From 69bb7e52a189ba8f50f9dc6bcbe056445d32b5fe Mon Sep 17 00:00:00 2001 From: rchinn-segment <93161299+rchinn-segment@users.noreply.github.com> Date: Tue, 19 Sep 2023 12:21:40 -0700 Subject: [PATCH 39/70] Update src/connections/destinations/catalog/actions-ambee/index.md --- src/connections/destinations/catalog/actions-ambee/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-ambee/index.md b/src/connections/destinations/catalog/actions-ambee/index.md index d7cd328e19..565455d57c 100644 --- a/src/connections/destinations/catalog/actions-ambee/index.md +++ b/src/connections/destinations/catalog/actions-ambee/index.md @@ -106,7 +106,7 @@ ad content based on the user's geolocation, for example: NAB recommends the risk levels below to understand the risks users are exposed to, and help them take preventative measures to -reduce their exposure to pollen. Ambee uses the NAB-compliant index to +reduce exposure to pollen. Ambee uses the NAB-compliant index to provide accurate insights. If you are subscribed to **pollen**, you can select the risk levels for pollen from the drop-down box under the **pollen** section. From e198149572b60b03bd014b1ef0a55bfec61ce9e1 Mon Sep 17 00:00:00 2001 From: Thomas Gilbert Date: Tue, 19 Sep 2023 15:44:36 -0400 Subject: [PATCH 40/70] adding use case on behalf of braze --- .../destinations/catalog/actions-braze-cohorts/index.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/connections/destinations/catalog/actions-braze-cohorts/index.md b/src/connections/destinations/catalog/actions-braze-cohorts/index.md index 6fb84cd6a6..d3199b919b 100644 --- a/src/connections/destinations/catalog/actions-braze-cohorts/index.md +++ b/src/connections/destinations/catalog/actions-braze-cohorts/index.md @@ -53,3 +53,11 @@ If you are creating multiple mappings in one Braze Cohorts destination, Segment > A user can only be added to a cohort if the user already exists in Braze. This means that the Braze Cohorts destination should be used in parallel with the [Braze Cloud Mode (Actions) destination](/docs/connections/destinations/catalog/braze-cloud-mode-actions/) or the [Braze Web Mode (Actions) destination](/docs/connections/destinations/catalog/braze-web-device-mode-actions/), both of which can create users in Braze. {% include components/actions-fields.html settings="true"%} + +### Supplementing Audience Payloads + +Event payloads sent via Computed Traits and Audiences will only contain the computed trait/audience key in question, in addition to user identities userId/anonymousId and email if present: https://segment.com/docs/engage/using-engage-data/#event-destinations. If you need supplemental fields from user profiles to map to Braze consider using an Insert Function + Engage Profile API to do so. Essentially, using the Profile API, you can pull the traits for a user from your Engage space within your insert function code, before the event hits the destination. You can then use these traits to then enrich the event payload that is sent to the destination. + +When dealing with event payloads transmitted through Computed Traits and Audiences, it's important to note that these payloads typically include only the specific computed trait or audience key in question in addition to user identities such as `userId` and `anonymousId`, as well as `email` if available, [for more information, see here](/docs/engage/using-engage-data/#event-destinations). + +If your requirements involve including additional fields from user profiles into your mappings, you can achieve this by leveraging an [Insert Function](/docs/connections/functions/insert-functions/) in conjunction with the [Engage Profile API](docs/unify/profile-api/). With the Profile API, you can retrieve the traits associated with a user from your Engage space within your insert function code, all before the event reaches the Braze Cohorts destination. \ No newline at end of file From 4d663047b36ff321883a8c29d99e6c2e6640d459 Mon Sep 17 00:00:00 2001 From: rchinn-segment <93161299+rchinn-segment@users.noreply.github.com> Date: Tue, 19 Sep 2023 15:00:16 -0700 Subject: [PATCH 41/70] edits --- src/connections/reverse-etl/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/reverse-etl/index.md b/src/connections/reverse-etl/index.md index 4f277af1c3..4bda199f71 100644 --- a/src/connections/reverse-etl/index.md +++ b/src/connections/reverse-etl/index.md @@ -97,7 +97,7 @@ To add your first destination: After you’ve added a destination, you can create mappings from your warehouse to the destination. Mappings enable you to map the data you extract from your warehouse to the fields in your destination. > info "" -> When adding new mappings to an existing model, only the changes that have transpired since the last sync will be synchronized, not the entire dataset. For a comprehensive data synchronization, we advise you to first recreate the model, followed by establishing a one-to-one mapping with the new model. This approach ensures that all data synchronizes effectively. +> When you add new mappings to an existing model, Segment only syncs changes that have transpired since the last sync, not the entire dataset. For a comprehensive data synchronization, Segment recommends that you first recreate the model, then establish a one-to-one mapping with the new model. This ensures that all data syncs effectively. To create a mapping: 1. Navigate to **Conections > Destinations** and select the **Reverse ETL** tab. From 16e693a7901d23519d2dc9f26d54a2c6d6fd950a Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Wed, 20 Sep 2023 08:23:08 +0100 Subject: [PATCH 42/70] Update src/connections/sources/catalog/libraries/website/shopify-littledata/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../catalog/libraries/website/shopify-littledata/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 68f0230177..c88ce9b81d 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -120,7 +120,7 @@ For every event where there is an identifiable Shopify customer (from both the d The following traits are included with an Identify call: -| **Property Name** | **Description** | **Property Type** | +| Property Name | Description | Property Type | | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | | userId | Chosen user identifier, defaulting to Shopify Customer ID | Double | | createdAt | Date customer record was created | Date | From d1f4ff68b37f8124ba59f903382607a798563f85 Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Wed, 20 Sep 2023 08:23:15 +0100 Subject: [PATCH 43/70] Update src/connections/sources/catalog/libraries/website/shopify-littledata/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../catalog/libraries/website/shopify-littledata/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index c88ce9b81d..0400c6024a 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -214,7 +214,7 @@ The list below outlines the properties included in most events. See the 'Track ( Each item in the `products` array, or Product Viewed and Product Added events, will have the following properties -| **Property** | **Description** | **Property Type** | +| Property | Description | Property Type | | -------------------- | ------------------------------------------------------------------ | ----------------- | | `brand` | The brand of the product (Shopify `vendor`) | String | | `category` | The category of the product (defaults to `all`) | String | From 2df83f49a2de5634f1cd11a4fba4a2dc824ac6b4 Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Wed, 20 Sep 2023 08:25:03 +0100 Subject: [PATCH 44/70] Update src/connections/sources/catalog/libraries/website/shopify-littledata/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../catalog/libraries/website/shopify-littledata/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 0400c6024a..2bb90c779b 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -122,7 +122,7 @@ The following traits are included with an Identify call: | Property Name | Description | Property Type | | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | -| userId | Chosen user identifier, defaulting to Shopify Customer ID | Double | +| userId | The chosen user identifier. This defaults to the Shopify Customer ID. | Double | | createdAt | Date customer record was created | Date | | customerLifetimeValue | Total spend of customer on the Shopify store | Double | | default_address.street | The customer's default street address | String | From dfb3910fa6b769fd2c077ef3118f5856d7880a57 Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Wed, 20 Sep 2023 08:25:19 +0100 Subject: [PATCH 45/70] Update src/connections/sources/catalog/libraries/website/shopify-littledata/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../website/shopify-littledata/index.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 2bb90c779b..59ef2f6823 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -216,23 +216,23 @@ Each item in the `products` array, or Product Viewed and Product Added events, w | Property | Description | Property Type | | -------------------- | ------------------------------------------------------------------ | ----------------- | -| `brand` | The brand of the product (Shopify `vendor`) | String | -| `category` | The category of the product (defaults to `all`) | String | -| `compare_at_price` | The product price before any discount | String | -| `coupon` | Coupon code associated with the product | String | -| `image_url` | The URL of the first product image | String | -| `list_id` | The ID of the product collection (for List Views and Clicks) | String | -| `list_position` | The product position in the collection (for List Views and Clicks) | Integer | -| `name` | Product name | String | -| `price` | The product price | Float | -| `product_id` | Shopify product ID | String | -| `quantity` | The quantity of this product | Integer | -| `product_properties` | Custom properties of purchased products | Array | -| `shopify_product_id` | Also Shopify product ID | String | -| `shopify_variant_id` | The Shopify variant ID | String | -| `sku` | The product SKU | String | -| `url` | The URL of the product page | String | -| `variant` | The product variant name | String | +| `brand` | The brand of the product (Shopify `vendor`). | String | +| `category` | The category of the product (defaults to `all`). | String | +| `compare_at_price` | The product price before any discount. | String | +| `coupon` | Coupon code associated with the product. | String | +| `image_url` | The URL of the first product image. | String | +| `list_id` | The ID of the product collection (for List Views and Clicks). | String | +| `list_position` | The product position in the collection (for List Views and Clicks). | Integer | +| `name` | Product name. | String | +| `price` | The product price. | Float | +| `product_id` | Shopify product ID. | String | +| `quantity` | The quantity of this product. | Integer | +| `product_properties` | Custom properties of purchased products. | Array | +| `shopify_product_id` | Also Shopify product ID. | String | +| `shopify_variant_id` | The Shopify variant ID. | String | +| `sku` | The product SKU. | String | +| `url` | The URL of the product page. | String | +| `variant` | The product variant name. | String | ## Import all orders From dbc170eae6c09d24800f90b1e7052f0a3f65a153 Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Wed, 20 Sep 2023 08:25:33 +0100 Subject: [PATCH 46/70] Update src/connections/sources/catalog/libraries/website/shopify-littledata/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../catalog/libraries/website/shopify-littledata/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 59ef2f6823..d75b6e8504 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -208,7 +208,7 @@ The list below outlines the properties included in most events. See the 'Track ( | `total` | Total value of the order | Float | | `userId` | Chosen user identifier, defaulting to Shopify Customer ID | String | -> note "" \*`revenue` is available only with the Order Completed event, and only if the store opts in through the Littledata application. Revenue is a reserved property in many Segment destinations. Opting in will override the `total` property sent to Google Analytics. +> note "" \*`revenue` is available only with the Order Completed event, and only if the store opts in through the Littledata application. Revenue is a reserved property in many Segment destinations. Opting in overrides the `total` property sent to Google Analytics. ## Product properties From f80c6f6f78b36383e104ec947bdd404d66aba03c Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Wed, 20 Sep 2023 08:28:50 +0100 Subject: [PATCH 47/70] Update src/connections/sources/catalog/libraries/website/shopify-littledata/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../catalog/libraries/website/shopify-littledata/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index d75b6e8504..89dabf3d81 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -175,7 +175,7 @@ Additional subscription lifecycle events through Littledata's [ReCharge connecti The list below outlines the properties included in most events. See the 'Track (eCommerce)' tab of the [event schema](https://docs.google.com/spreadsheets/d/1aljowRhMU9_7uGXmcipbP1Y14S4cOSdXGQA2Vx7BHko/edit){:target="\_blank"} for exactly which properties are sent with which events. -| **Property** | **Description** | **Property Type** | +| Property | Description | Property Type | | --------------------------------------- | -------------------------------------------------------------------------------------- | ----------------- | | `affiliation` | A comma-separated list of order tags. Untagged orders use `Shopify` | String | | `cart_id` | The ID of the Shopify cart | String | From eaf504136bd00a8282ffdfff03d24bd2645d4c6b Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Wed, 20 Sep 2023 08:28:58 +0100 Subject: [PATCH 48/70] Update src/connections/sources/catalog/libraries/website/shopify-littledata/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../catalog/libraries/website/shopify-littledata/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 89dabf3d81..7120db5917 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -123,7 +123,7 @@ The following traits are included with an Identify call: | Property Name | Description | Property Type | | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | | userId | The chosen user identifier. This defaults to the Shopify Customer ID. | Double | -| createdAt | Date customer record was created | Date | +| createdAt | The date the customer record was created. | Date | | customerLifetimeValue | Total spend of customer on the Shopify store | Double | | default_address.street | The customer's default street address | String | | default.address.postalCode | The customer's ZIP / post code | String | From 07259e4fcd8902a1c84422a74114b63c3d062fc7 Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Wed, 20 Sep 2023 08:31:19 +0100 Subject: [PATCH 49/70] Update src/connections/sources/catalog/libraries/website/shopify-littledata/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../libraries/website/shopify-littledata/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 7120db5917..a38ef49d74 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -136,12 +136,12 @@ The following traits are included with an Identify call: | firstName | Customer's first name | String | | lastName | Customer's last name | String | | phone | Customer's phone number | String | -| purchaseCount | Number of orders by this customer | Integer | +| purchaseCount | The number of orders by the customer. | Integer | | sms_consent_state | If the user has consented to SMS marketing (mapping to [SmsMarketingState](https://shopify.dev/docs/api/customer/unstable/enums/SmsMarketingState)) | String, Null | -| sms_opt_in_level | Level of user's opt in to SMS marketing (mapping to [MarketingOptInLevel](https://shopify.dev/docs/api/customer/unstable/enums/MarketingOptInLevel)) | String, Null | -| state | Shopify customer state - enabled, disabled, invited to create an account or customer declined | String | -| tags | Custom tags applied to the customer | String | -| verified_email | Whether the customer has verified their email | Boolean | +| sms_opt_in_level | The level of the user's opt in to SMS marketing (mapping to [MarketingOptInLevel](https://shopify.dev/docs/api/customer/unstable/enums/MarketingOptInLevel)) | String, Null | +| state | The Shopify customer state - enabled, disabled, invited to create an account or customer declined. | String | +| tags | The custom tags applied to the customer. | String | +| verified_email | Whether the customer has verified their email. | Boolean | ## Support for Google Analytics destination From 95639154579e9af26c9e77bcfc716a35d23b926f Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Wed, 20 Sep 2023 08:31:30 +0100 Subject: [PATCH 50/70] Update src/connections/sources/catalog/libraries/website/shopify-littledata/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../website/shopify-littledata/index.md | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index a38ef49d74..32d2ff68b5 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -177,27 +177,27 @@ The list below outlines the properties included in most events. See the 'Track ( | Property | Description | Property Type | | --------------------------------------- | -------------------------------------------------------------------------------------- | ----------------- | -| `affiliation` | A comma-separated list of order tags. Untagged orders use `Shopify` | String | -| `cart_id` | The ID of the Shopify cart | String | -| `checkout_id` | The ID of the checkout session | String | -| `context\['Google Analytics'].clientId` | The user's Google Analytics Client ID | String | -| `context.ip` | The user's IP address | String | -| `coupon` | Comma-separated string of discount coupons used, if applicable | String | -| `currency` | The currency of the order | String | -| `discount` | The discounted amount | Float | -| `email` | Shopify email address (after checkout step 2), or email submitted on a storefront form | String | -| `lifetime_revenue_littledata` | Lifetime revenue of the customer in Shopify | String | -| `location_id` | Location ID of the Point of Sale | Integer | -| `order_id` | The ID of the order is by default the Shopify order name | String | -| `payment_gateway_littledata` | The payment gateway used by the customer | String | -| `payment_method` | The payment method chosen for checkout | String | -| `presentment_currency` | The user's local currency | String | -| `presentment_total` | The order total in local currency | String | -| `products` | A list of all the product at that step of the funnel | Array | -| `purchase_count_littledata` | Total purchase count for the customer | Integer | -| `revenue` | Product revenue (excluding discounts, shipping and tax) \* | Float | -| `sent_from` | Unique property to identify events sent by Littledata | String | -| `shipping` | Shipping cost | Float | +| `affiliation` | A comma-separated list of order tags. Untagged orders use `Shopify`. | String | +| `cart_id` | The ID of the Shopify cart. | String | +| `checkout_id` | The ID of the checkout session. | String | +| `context\['Google Analytics'].clientId` | The user's Google Analytics Client ID. | String | +| `context.ip` | The user's IP address. | String | +| `coupon` | A comma-separated string of discount coupons used, if applicable. | String | +| `currency` | The currency of the order. | String | +| `discount` | The discounted amount. | Float | +| `email` | The Shopify email address (after checkout step 2), or email submitted on a storefront form. | String | +| `lifetime_revenue_littledata` | The lifetime revenue of the customer in Shopify. | String | +| `location_id` | The location ID of the Point of Sale. | Integer | +| `order_id` | The ID of the order is by default the Shopify order name. | String | +| `payment_gateway_littledata` | The payment gateway used by the customer. | String | +| `payment_method` | The payment method chosen for checkout. | String | +| `presentment_currency` | The user's local currency. | String | +| `presentment_total` | The order total in local currency. | String | +| `products` | A list of all the products at that step of the funnel. | Array | +| `purchase_count_littledata` | The total purchase count for the customer. | Integer | +| `revenue` | The product revenue (excluding discounts, shipping and tax) \* | Float | +| `sent_from` | The unique property to identify events sent by Littledata. | String | +| `shipping` | The shipping cost. | Float | | `shipping_method` | Shipping method chosen for checkout | String | | `shopify_customer_id_littledata` | Shopify’s identifier for the customer | Integer | | `source_name` | The source of the order (e.g. `web`, `android`, `pos`) | String | From 7521abd1f0af495a057d50a93cd3b4cd0b9c2925 Mon Sep 17 00:00:00 2001 From: Edward Upton Date: Wed, 20 Sep 2023 08:31:41 +0100 Subject: [PATCH 51/70] Update src/connections/sources/catalog/libraries/website/shopify-littledata/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../website/shopify-littledata/index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 32d2ff68b5..5851e929e4 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -198,14 +198,14 @@ The list below outlines the properties included in most events. See the 'Track ( | `revenue` | The product revenue (excluding discounts, shipping and tax) \* | Float | | `sent_from` | The unique property to identify events sent by Littledata. | String | | `shipping` | The shipping cost. | Float | -| `shipping_method` | Shipping method chosen for checkout | String | -| `shopify_customer_id_littledata` | Shopify’s identifier for the customer | Integer | -| `source_name` | The source of the order (e.g. `web`, `android`, `pos`) | String | -| `step` | Checkout step | Integer | -| `subscription_revenue` | The revenue associated with a Subscription Event | Float | -| `subtotal` | Total after discounts but before taxes and shipping | Float | -| `tax` | The amount of tax on the order | Float | -| `total` | Total value of the order | Float | +| `shipping_method` | The shipping method chosen for checkout. | String | +| `shopify_customer_id_littledata` | Shopify’s identifier for the customer. | Integer | +| `source_name` | The source of the order (e.g. `web`, `android`, `pos`). | String | +| `step` | The checkout step. | Integer | +| `subscription_revenue` | The revenue associated with a Subscription Event. | Float | +| `subtotal` | The total after discounts but before taxes and shipping. | Float | +| `tax` | The amount of tax on the order. | Float | +| `total` | The total value of the order. | Float | | `userId` | Chosen user identifier, defaulting to Shopify Customer ID | String | > note "" \*`revenue` is available only with the Order Completed event, and only if the store opts in through the Littledata application. Revenue is a reserved property in many Segment destinations. Opting in overrides the `total` property sent to Google Analytics. From 78dff11fda8904c25f870626a3ad67f3470d0602 Mon Sep 17 00:00:00 2001 From: Nick Campbell <661795+nickcampbell18@users.noreply.github.com> Date: Wed, 20 Sep 2023 09:26:36 +0100 Subject: [PATCH 52/70] Add YAML frontmatter, use "you" instead of "we" Co-authored-by: forstisabella <92472883+forstisabella@users.noreply.github.com> --- .../catalog/actions-attio/index.md | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/connections/destinations/catalog/actions-attio/index.md b/src/connections/destinations/catalog/actions-attio/index.md index 1917e501ad..23f7cb37ba 100644 --- a/src/connections/destinations/catalog/actions-attio/index.md +++ b/src/connections/destinations/catalog/actions-attio/index.md @@ -1,15 +1,18 @@ --- title: Attio (Actions) Destination hide-boilerplate: true +id: 64c031541451bb784943f809 +beta: true +hidden: true --- {% include content/plan-grid.md name="actions" %} -Powerful, flexible and data-driven, [Attio](https://attio.com) makes it easy to build the +Powerful, flexible and data-driven, [Attio](https://attio.com){:target="_blank”} makes it easy to build the exact CRM that your business needs. This destination allows you to use your existing Segment events to create or update -records in Attio, for example creating User records from identify events. +records in Attio, for example creating Attio User records from Segment Identify events. ## Getting started @@ -40,7 +43,7 @@ Person. > info "" > To use the User standard object, you'll need to make sure it's activated first. Visit -> your [Workspace Settings > Objects](https://app.attio.com/_/settings/data/objects) page +> your [Workspace Settings > Objects](https://app.attio.com/_/settings/data/objects){:target="_blank”} page > and click the "Activate" button next to the Users object. This mapping makes the assumption that your Segment event includes two properties: @@ -50,7 +53,7 @@ This mapping makes the assumption that your Segment event includes two propertie You can specify additional attributes to be mapped on the **Edit Mapping** page. -For example, we could set some additional properties on the Person using these Mapping +For example, you could set some additional properties on the Person using these Mapping Fields under "Additional Person attributes". The column on the left should contain properties from your event, or custom text, and the column on the right should reference attributes on that object type in Attio, represented by their slug. @@ -104,7 +107,7 @@ This mapping makes the assumption that your Segment event includes two propertie You can specify additional attributes to be mapped on the **Edit Mapping** page. -For example, we could set some additional properties on the Company using these Mapping +For example, you could set some additional properties on the Company using these Mapping Fields under "Additional Company attributes". The column on the left should contain properties from your event, or custom text, and the column on the right should reference attributes on that object type in Attio, represented by their slug. For example: @@ -123,7 +126,7 @@ Create or update a single type of Object, given a matching attribute name and va example, you could assert that a Company exists using a given `domain` property. This mapping makes the assumption that your data includes the matching property. For the -following example, we'll assume you have domain and twitter properties, like so: +following example, assume you have domain and twitter properties, like so: ```json { @@ -135,13 +138,13 @@ following example, we'll assume you have domain and twitter properties, like so: } ``` -First, we'll need to set the "Attio Object" property - it should pre-populate with all of -the activated objects in your Attio instance. Then, we'll need to set the "Matching +First, you'll need to set the "Attio Object" property - it should pre-populate with all of +the activated objects in your Attio instance. Then, you'll need to set the "Matching Attribute" property. This is the slug for the attribute in Attio, and must also be present -in your "Attributes" mapping in the next form. In this example, we'll select "Company" as +in your "Attributes" mapping in the next form. In this example, you'll select "Company" as the Attio Object, and "domains" as the Matching Attribute. -We would then need to ensure the Attributes mapping is populated like so: +You would then need to ensure the Attributes mapping is populated like so: | Select event variable | Enter key name | |-----------------------------------------|----------------| From bf79dcb6870647b547f9816f166807cc086661d0 Mon Sep 17 00:00:00 2001 From: Thomas Gilbert <64277654+tcgilbert@users.noreply.github.com> Date: Wed, 20 Sep 2023 09:56:01 -0400 Subject: [PATCH 53/70] add section on device id --- .../destinations/catalog/actions-braze-cohorts/index.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-braze-cohorts/index.md b/src/connections/destinations/catalog/actions-braze-cohorts/index.md index d3199b919b..e32fbc0f07 100644 --- a/src/connections/destinations/catalog/actions-braze-cohorts/index.md +++ b/src/connections/destinations/catalog/actions-braze-cohorts/index.md @@ -60,4 +60,11 @@ Event payloads sent via Computed Traits and Audiences will only contain the comp When dealing with event payloads transmitted through Computed Traits and Audiences, it's important to note that these payloads typically include only the specific computed trait or audience key in question in addition to user identities such as `userId` and `anonymousId`, as well as `email` if available, [for more information, see here](/docs/engage/using-engage-data/#event-destinations). -If your requirements involve including additional fields from user profiles into your mappings, you can achieve this by leveraging an [Insert Function](/docs/connections/functions/insert-functions/) in conjunction with the [Engage Profile API](docs/unify/profile-api/). With the Profile API, you can retrieve the traits associated with a user from your Engage space within your insert function code, all before the event reaches the Braze Cohorts destination. \ No newline at end of file +If your requirements involve including additional fields from user profiles into your mappings, you can achieve this by leveraging an [Insert Function](/docs/connections/functions/insert-functions/) in conjunction with the [Engage Profile API](docs/unify/profile-api/). With the Profile API, you can retrieve the traits associated with a user from your Engage space within your insert function code, all before the event reaches the Braze Cohorts destination. + +### Braze Device ID + +If you would like to use the `Device ID` mapping for the Cohort Destination you will need to ensure you have captured the Braze device_id which is not the same as the Segment device_id. Braze has some methods (linked below) that customers can use to capture the Braze device_id for use in the above workaround: +- [Swift method](https://braze-inc.github.io/braze-swift-sdk/documentation/brazekit/braze/deviceid/) +- [Android method](https://braze-inc.github.io/braze-android-sdk/kdoc/braze-android-sdk/com.braze/-i-braze/device-id.html) +- [Web method](https://js.appboycdn.com/web-sdk/latest/doc/modules/braze.html#getdeviceid) From 158d41ec1e7d051b88f909f87aafc01dcdb1012f Mon Sep 17 00:00:00 2001 From: Thomas Gilbert <64277654+tcgilbert@users.noreply.github.com> Date: Wed, 20 Sep 2023 09:57:17 -0400 Subject: [PATCH 54/70] add coma --- .../destinations/catalog/actions-braze-cohorts/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-braze-cohorts/index.md b/src/connections/destinations/catalog/actions-braze-cohorts/index.md index e32fbc0f07..0eab5051b0 100644 --- a/src/connections/destinations/catalog/actions-braze-cohorts/index.md +++ b/src/connections/destinations/catalog/actions-braze-cohorts/index.md @@ -64,7 +64,7 @@ If your requirements involve including additional fields from user profiles into ### Braze Device ID -If you would like to use the `Device ID` mapping for the Cohort Destination you will need to ensure you have captured the Braze device_id which is not the same as the Segment device_id. Braze has some methods (linked below) that customers can use to capture the Braze device_id for use in the above workaround: +If you would like to use the `Device ID` mapping for the Cohort Destination you will need to ensure you have captured the Braze device_id, which is not the same as the Segment device_id. Braze has some methods (linked below) that customers can use to capture the Braze device_id for use in the above workaround: - [Swift method](https://braze-inc.github.io/braze-swift-sdk/documentation/brazekit/braze/deviceid/) - [Android method](https://braze-inc.github.io/braze-android-sdk/kdoc/braze-android-sdk/com.braze/-i-braze/device-id.html) - [Web method](https://js.appboycdn.com/web-sdk/latest/doc/modules/braze.html#getdeviceid) From d5df4495b4982bbbab2003df932c52c314b94eb8 Mon Sep 17 00:00:00 2001 From: Thomas Gilbert Date: Wed, 20 Sep 2023 10:02:20 -0400 Subject: [PATCH 55/70] remove redundant section --- templates/partners/source.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/templates/partners/source.md b/templates/partners/source.md index 792c6ed159..e8f8f6b1f0 100644 --- a/templates/partners/source.md +++ b/templates/partners/source.md @@ -39,10 +39,6 @@ This is an [Event Cloud Source](/docs/sources/#event-cloud-sources) which can no This source is maintained by . For any issues with the source, [contact their Support team](mailto:support@.com). -> (delete after reading) Update your company name (x2) and support email address. - -_**NOTE:** The Source is currently in beta, which means that they are still actively developing the source. If you are interested in joining their beta program or have any feedback to help improve the Source and its documentation, [let the team know](mailto:support@.com)._ - ## Getting started > (delete after reading) Include clear, succinct steps including hyperlinks to where customers can locate the place in your app to enter their Segment writekey. From 8eca47fe940c9438e82ecf67651a04304f5256eb Mon Sep 17 00:00:00 2001 From: Rohan Moradiya Date: Wed, 20 Sep 2023 23:48:17 +0530 Subject: [PATCH 56/70] rename directory name to 1flow-mobile-plugin --- .../catalog/{test-flow => 1flow-mobile-plugin}/index.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/connections/destinations/catalog/{test-flow => 1flow-mobile-plugin}/index.md (100%) diff --git a/src/connections/destinations/catalog/test-flow/index.md b/src/connections/destinations/catalog/1flow-mobile-plugin/index.md similarity index 100% rename from src/connections/destinations/catalog/test-flow/index.md rename to src/connections/destinations/catalog/1flow-mobile-plugin/index.md From 1dde2096ac3c2346708a075a0d989e1976c33b8d Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 20 Sep 2023 16:07:06 -0400 Subject: [PATCH 57/70] Update hipaa-eligible-segment.md --- src/privacy/hipaa-eligible-segment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/hipaa-eligible-segment.md b/src/privacy/hipaa-eligible-segment.md index 3355ab63db..f232a1861f 100644 --- a/src/privacy/hipaa-eligible-segment.md +++ b/src/privacy/hipaa-eligible-segment.md @@ -35,7 +35,7 @@ These logs can be provided upon request. For specific requests, please reach out ## Data encryption -Segment encrypts the data in select fields [marked as yellow in the Privacy Portal](/docs/privacy/portal/#default-pii-matchers) before sending them to event stream, cloud mode destinations, further supporting HIPAA compliance in your destinations. +Segment encrypts the data in select fields [marked as yellow in the Privacy Portal](/docs/privacy/portal/#default-pii-matchers) using a RSAES OAEP SHA 256 algorithm before sending them to event stream, cloud mode destinations, further supporting HIPAA compliance in your destinations. > info "Data encryption is currently in public beta" > Data encryption only supports event-stream, cloud-mode destinations. Only data fields in `context`, `traits`, and `property` objects can be encrypted. From 52c272925826f1c31f1d10e9eb2ee7da9366a2f3 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 20 Sep 2023 16:24:03 -0400 Subject: [PATCH 58/70] fixed phrasing [netlify-build] --- src/privacy/hipaa-eligible-segment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/hipaa-eligible-segment.md b/src/privacy/hipaa-eligible-segment.md index f232a1861f..257edfa05f 100644 --- a/src/privacy/hipaa-eligible-segment.md +++ b/src/privacy/hipaa-eligible-segment.md @@ -35,7 +35,7 @@ These logs can be provided upon request. For specific requests, please reach out ## Data encryption -Segment encrypts the data in select fields [marked as yellow in the Privacy Portal](/docs/privacy/portal/#default-pii-matchers) using a RSAES OAEP SHA 256 algorithm before sending them to event stream, cloud mode destinations, further supporting HIPAA compliance in your destinations. +Segment encrypts the data in select fields [marked as yellow in the Privacy Portal](/docs/privacy/portal/#default-pii-matchers) before sending them to event stream, cloud mode destinations, further supporting HIPAA compliance in your destinations. Segment's public and private key pairs are generated using a a RSAES OAEP SHA 256 algorithm. > info "Data encryption is currently in public beta" > Data encryption only supports event-stream, cloud-mode destinations. Only data fields in `context`, `traits`, and `property` objects can be encrypted. From 6bef005020e0d9f8c777e2d62cf43bc5860ca8a1 Mon Sep 17 00:00:00 2001 From: stayseesong <83784848+stayseesong@users.noreply.github.com> Date: Wed, 20 Sep 2023 14:44:26 -0700 Subject: [PATCH 59/70] Apply suggestions from code review --- .../website/shopify-littledata/index.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 5851e929e4..09c8bd9ab2 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -124,18 +124,18 @@ The following traits are included with an Identify call: | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | | userId | The chosen user identifier. This defaults to the Shopify Customer ID. | Double | | createdAt | The date the customer record was created. | Date | -| customerLifetimeValue | Total spend of customer on the Shopify store | Double | -| default_address.street | The customer's default street address | String | -| default.address.postalCode | The customer's ZIP / post code | String | -| default_address.state | The customer's state address | String | -| default_address.country | The customer's country | String | -| description | Customer notes | String | -| email | Customer's email address | String | +| customerLifetimeValue | The total spend of the customer on the Shopify store. | Double | +| default_address.street | The customer's default street address. | String | +| default.address.postalCode | The customer's ZIP or postal code. | String | +| default_address.state | The customer's state address. | String | +| default_address.country | The customer's country. | String | +| description | The customer's notes. | String | +| email | The customer's email address. | String | | email_consent_state | If the user has consented to email marketing (mapping to [EmailMarketingState](https://shopify.dev/docs/api/customer/unstable/enums/EmailMarketingState)) | String, Null | | email_opt_in_level | Level of user's opt in email marketing (mapping to [MarketingOptInLevel](https://shopify.dev/docs/api/customer/unstable/enums/MarketingOptInLevel)) | String, Null | -| firstName | Customer's first name | String | -| lastName | Customer's last name | String | -| phone | Customer's phone number | String | +| firstName | The customer's first name. | String | +| lastName | The customer's last name. | String | +| phone | The customer's phone number. | String | | purchaseCount | The number of orders by the customer. | Integer | | sms_consent_state | If the user has consented to SMS marketing (mapping to [SmsMarketingState](https://shopify.dev/docs/api/customer/unstable/enums/SmsMarketingState)) | String, Null | | sms_opt_in_level | The level of the user's opt in to SMS marketing (mapping to [MarketingOptInLevel](https://shopify.dev/docs/api/customer/unstable/enums/MarketingOptInLevel)) | String, Null | From 02f690b2662ddedf839d04175bf01b1e21772a22 Mon Sep 17 00:00:00 2001 From: stayseesong <83784848+stayseesong@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:35:35 -0700 Subject: [PATCH 60/70] Apply suggestions from code review --- .../libraries/website/shopify-littledata/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md index 09c8bd9ab2..d0c173084f 100644 --- a/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md +++ b/src/connections/sources/catalog/libraries/website/shopify-littledata/index.md @@ -78,7 +78,7 @@ Below is a table of events that **Shopify by Littledata** sends to Segment throu You can _opt out_ of device-mode pageviews or events by setting `disableClientSideEvents: true` or `disablePageviews: true` in the `LittledataLayer` settings. -The source also respects [GDPR-compliant cookie](https://blog.littledata.io/2021/06/18/shopify-cookie-banner-gdpr-compliance/) consent through Shopify's cookie banner, or popular consent management platforms such as [OneTrust](https://help.littledata.io/help/integrating-onetrust-with-shopify/) and [TrustArc](https://help.littledata.io/posts/integrating-trustarc-with-shopify/). +The source also respects [GDPR-compliant cookie](https://blog.littledata.io/2021/06/18/shopify-cookie-banner-gdpr-compliance/){:target="_blank"} consent through Shopify's cookie banner, or popular consent management platforms such as [OneTrust](https://help.littledata.io/help/integrating-onetrust-with-shopify/){:target="_blank"} and [TrustArc](https://help.littledata.io/posts/integrating-trustarc-with-shopify/){:target="_blank"}. ## Cloud-mode events @@ -131,14 +131,14 @@ The following traits are included with an Identify call: | default_address.country | The customer's country. | String | | description | The customer's notes. | String | | email | The customer's email address. | String | -| email_consent_state | If the user has consented to email marketing (mapping to [EmailMarketingState](https://shopify.dev/docs/api/customer/unstable/enums/EmailMarketingState)) | String, Null | -| email_opt_in_level | Level of user's opt in email marketing (mapping to [MarketingOptInLevel](https://shopify.dev/docs/api/customer/unstable/enums/MarketingOptInLevel)) | String, Null | +| email_consent_state | If the user has consented to email marketing (mapping to [EmailMarketingState](https://shopify.dev/docs/api/customer/unstable/enums/EmailMarketingState){:target="_blank"}) | String, Null | +| email_opt_in_level | Level of user's opt in email marketing (mapping to [MarketingOptInLevel](https://shopify.dev/docs/api/customer/unstable/enums/MarketingOptInLevel){:target="_blank"}) | String, Null | | firstName | The customer's first name. | String | | lastName | The customer's last name. | String | | phone | The customer's phone number. | String | | purchaseCount | The number of orders by the customer. | Integer | -| sms_consent_state | If the user has consented to SMS marketing (mapping to [SmsMarketingState](https://shopify.dev/docs/api/customer/unstable/enums/SmsMarketingState)) | String, Null | -| sms_opt_in_level | The level of the user's opt in to SMS marketing (mapping to [MarketingOptInLevel](https://shopify.dev/docs/api/customer/unstable/enums/MarketingOptInLevel)) | String, Null | +| sms_consent_state | If the user has consented to SMS marketing (mapping to [SmsMarketingState](https://shopify.dev/docs/api/customer/unstable/enums/SmsMarketingState){:target="_blank"}) | String, Null | +| sms_opt_in_level | The level of the user's opt in to SMS marketing (mapping to [MarketingOptInLevel](https://shopify.dev/docs/api/customer/unstable/enums/MarketingOptInLevel){:target="_blank"}) | String, Null | | state | The Shopify customer state - enabled, disabled, invited to create an account or customer declined. | String | | tags | The custom tags applied to the customer. | String | | verified_email | Whether the customer has verified their email. | Boolean | From bf64b59ca3f484a6a0ced856303ef84fac70c4fd Mon Sep 17 00:00:00 2001 From: pwseg Date: Wed, 20 Sep 2023 20:51:40 -0500 Subject: [PATCH 61/70] Add Okta/SAML integration steps DOC-715 --- .../iam/images/active_connections.png | Bin 0 -> 35293 bytes src/segment-app/iam/images/okta_sso.png | Bin 0 -> 38280 bytes src/segment-app/iam/sso.md | 104 +++++++++++++----- 3 files changed, 76 insertions(+), 28 deletions(-) create mode 100644 src/segment-app/iam/images/active_connections.png create mode 100644 src/segment-app/iam/images/okta_sso.png diff --git a/src/segment-app/iam/images/active_connections.png b/src/segment-app/iam/images/active_connections.png new file mode 100644 index 0000000000000000000000000000000000000000..b2f60f2d9233b9df15abb21fd0c9aad655b4d2ee GIT binary patch literal 35293 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 KxJ>Y^@Bac9V15_? literal 0 HcmV?d00001 diff --git a/src/segment-app/iam/images/okta_sso.png b/src/segment-app/iam/images/okta_sso.png new file mode 100644 index 0000000000000000000000000000000000000000..015e3685926269419ae41659638336fabbc6e512 GIT binary patch literal 38280 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 literal 0 HcmV?d00001 diff --git a/src/segment-app/iam/sso.md b/src/segment-app/iam/sso.md index a227cb73a7..65c8034dc3 100644 --- a/src/segment-app/iam/sso.md +++ b/src/segment-app/iam/sso.md @@ -5,9 +5,9 @@ plan: sso Segment supports Single Sign On for Business Tier accounts. You can use any SAML-based Identity Provider (IdP), for example Okta, Bitium, OneLogin, or Centrify, or use GSuite to serve as your identity provider, delegating access to the application based on rules you create in your central identity management solution. -With SSO, you have centralized control over your users' ability to authenticate or not in your IdP, and can also enforce rules like two-factor authentication or password rotation at the IdP level. +With SSO, you have centralized control over your users' ability to authenticate or not in your IdP. You can also enforce rules like two-factor authentication or password rotation at the IdP level. -You can configure as many IdP connections to your workspace as needed to support IdP-initiated authentication. This allows seamless migration from one system to a new one, for example if your organization switches IdP vendors or switches from GSuite to a dedicated SAML IdP like Okta or OneLogin. +You can configure as many IdP connections to your workspace as needed to support IdP-initiated authentication. This allows seamless migration from one system to a new one, if, for example, your organization switches IdP vendors or switches from GSuite to a dedicated SAML IdP like Okta or OneLogin. To enable SSO-based login from the Segment login page (app.segment.com/login), you must first verify that you own the domain, and connect it to your organization's Segment account. Once you have done that, SSO users from your domain can use the Segment login page to access your default Segment workspace. @@ -15,9 +15,11 @@ The Segment login page can only be connected to one workspace. To use your IdP w ## Set up — SAML -Segment's SSO configuration is entirely self-service; we don't require any back and forth with our team in order to test and enable the feature on your workspace. Additionally, we have prebuilt connections with [Okta](https://www.okta.com/integrations/segment/), [OneLogin](https://www.onelogin.com), and [Azure AD](https://docs.microsoft.com/en-us/azure/active-directory/saas-apps/segment-tutorial) which can help you get setup faster. However, we are here to help! don't hesitate to [get in touch](https://segment.com/help/contact/) if you run into any questions or issues. +Segment's SSO configuration is entirely self-service. Additionally, Segment has prebuilt connections with [Okta](https://www.okta.com/integrations/segment/){:target="_blank"} +, [OneLogin](https://www.onelogin.com){:target="_blank"}, and [Azure AD](https://docs.microsoft.com/en-us/azure/active-directory/saas-apps/segment-tutorial){:target="_blank"} + which can help you get set up faster. [Reach out to support](https://segment.com/help/contact/) if you run into any questions or issues. -To get started, go to your workspace settings and choose the "Connections" tab under "Authentication" and click "Add New Connection." Follow the steps to create a SAML connection. +To get started, go to your workspace settings and navigate to **Authentication > Connections > Add new Connection**. Follow the steps to create a SAML connection. ![Screenshot of the Segment Authentication settings page, with the Connections tab selected.](images/asset_JR9CRr6f.png) @@ -29,7 +31,7 @@ Segment officially supports apps for Okta, Azure AD, and OneLogin. Next, find Se If you're using a different IdP, you must create a custom SAML-based application. -Your provider will ask you for a few things from Segment, which we provide in the set up flow: +Your provider will ask you for a few things from Segment, which Segment provides in the setup flow: ![Screenshot of the Segment Configure Identity Provider screen, with an SSO URL, Audience URL, and attribute statements entered into the respective fields.](images/asset_RRAJ92MY.png) @@ -39,11 +41,11 @@ Your provider will ask you for a few things from Segment, which we provide in th - Different IdPs have different names for the Audience URL. Some call it "Audience URI", some call it "Entity ID", some call it "Service Provider Entity ID." It's likely there are only two required fields without correct defaults, and they correspond to the `SSO URL` and `Audience URL` values above. -- In all IdPs we've worked with, the default `NameID` option is the correct one. Make sure it's using the `emailAddress` schema. +- In all IdPs Segment works with, the default `NameID` option is the correct one. Make sure it's using the `emailAddress` schema. -- In all IdPs we've worked with, the default connection encryption options are the correct ones. (Signed Response & Assertion Signature with SHA256, Unencrypted Assertions). +- In all IdPs Segment works with, the default connection encryption options are the correct ones. (Signed Response & Assertion Signature with SHA256, Unencrypted Assertions). -- Different IdPs store records of your employees differently. The only attribute mapping we require is to make sure you're sending `email` . In Okta this is at `user.email`. In Duo this is `mail`. +- Different IdPs store records of your employees differently. The only attribute mapping Segment requires is to make sure you're sending `email` . In Okta this is at `user.email`. In Duo this is `mail`. - Make sure you've enabled "send all attributes" (not just NameID) if applicable for your IdP. @@ -59,27 +61,27 @@ Your IdP provides a URL and x.509 certificate. Copy them into their respective f Then, click "Configure Connection." -You're all set! +You're all set. ## Test your connection with IdP-initiated SSO. Back at the connections page, make sure your connection is enabled with the switch on the right. -![Screenshot of the Segment Connections page, with one connection currently active.](images/asset_SNxN4JhO.png) +![Screenshot of the Segment Connections page, with one connection currently active.](images/active_connections.png) You can now test using IdP-initiated SSO (by clicking login to Segment from within your IdP) is working correctly. If not, double check the IdP configuration gotchas section above. ## Require SSO. -For most customers we recommend requiring SSO for all users. If you do not require SSO, users can still log in with a username and password. If some members cannot log in using SSO, Segment also supports SSO exceptions. +For most customers, Segment recommends requiring SSO for all users. If you do not require SSO, users can still log in with a username and password. If some members cannot log in using SSO, Segment also supports SSO exceptions. These options are off by default, but configurable on the "Advanced Settings" page. ![Screenshot of the Advanced Settings page in the Authentication settings tab.](images/asset_require_sso.png) -## Set up — GSuite +## Setup — GSuite -GSuite configuration is incredibly simple with Segment. To get started, go to your workspace settings and choose the "Connections" tab under "Authentication" and click "Add New Connection." Follow the steps to create a "Google Apps For Work" connection. +To configure GSuite for use with Segment, go to your workspace settings and choose the "Connections" tab under "Authentication" and click "Add New Connection." Follow the steps to create a "Google Apps For Work" connection. You simply enter your domain (or, if you've verified it already, choose it from the dropdown) and then click the resulting link to authorize the connection. @@ -91,10 +93,10 @@ In order to enable this, you'll need to verify your domain with Segment. To do t ![Screenshot of the Domains page under the Authentication section of the Workspace Settings.](images/asset_MSaDZk2f.png) -Enter your domain and click "Add Domain." When you click verify, you're given two options to verify your domain, either using a meta tag to add to your `/index.html` at the root, or a DNS text record that you can add through your DNS provider. Once you do so and click verify, you're ready to go! +Enter your domain and click "Add Domain." When you click verify, you're given two options to verify your domain, either using a meta tag to add to your `/index.html` at the root, or a DNS text record that you can add through your DNS provider. Once you do so and click verify, you're ready to go. > note "" -> **Note**: domain tokens expire 14 days after they are verified. +> Domain tokens expire 14 days after they are verified. ## Configuring SSO to access multiple workspaces To configure SSO for multiple workspaces, your admin must configure access to each workspace as a separate app in your identity provider. You are unable to use verified domain(s) across multiple workspaces and will encounter the following error if you add a domain that is already verified in another workspace: @@ -109,28 +111,74 @@ Two limitations do exist when multiple workspaces are configured to SSO access: - Users will only be able to log in to the domain-verified workspace on Segment’s login page. - Users must switch workspaces using IdP-initiated SSO, as they are unable to switch directly using the Segment UI. -## SSO Frequently Asked Questions +## Okta setup -##### Do you support automatic user provisioning? +The Okta/Segment SAML integration supports the following features: -Segment supports "just in time" user permissioning; new users who authenticate using your IdP are automatically created in Segment as minimal-access (read-only) members. If the user already exists in Segment then Segment associates the IdP-identity with the existing Segment user account. +- IdP-initiated SSO +- SP-initiated SSO +- JIT (Just-in-time) provisioning -Segment also supports user provisioning and role mapping [using SCIM](/docs/segment-app/iam/scim/). +For more information on these features, visit the [Okta Glossary](https://help.okta.com/en-us/content/topics/reference/glossary.htm){:target="_blank"}. -##### Do you support automatic user de-provisioning? +### Configuration steps -Yes, users can be automatically de-provisioned [if you use SCIM](/docs/segment-app/iam/scim/). +To set up the Okta/Segment SAML integration, you'll first carry out several steps in Segment, then finish in Okta. -##### Will my users lose access to their other workspaces when I enable SSO? +#### Segment steps -Segment allows users to own their own workspaces. While your IdP authentication will ensure that any non-owners must have logged in with SSO to access _your workspace_, they can still log into Segment with username and password to access their own workspaces. +Follow these steps in Segment to set up the Okta/Segment SAML integration: + +1. Log in to Segment as an administrator. +2. Navigate to **Settings > Authentication > Connections**, then click **Add new Connection**. +3. Select **SAML 2.0**, then click **Select Connection**. +4. On the **Configure IDP** page, copy your Customer ID, which you'll find after `?connection=` in the **Single Sign-on URL** field. You'll need this ID for a later step. + - For example, if your Single Sign-On URL is `https://acme.domen.com/login/callback?connection=a1b2c3d4`, your Customer ID is `a1b2c3d4`. +5. Click **Next**. +6. On the **Configure Connection** page, enter your SAML 2.0 Endpoint and Public Certificate. You can generate both in your Okta Admin Dashboard. After you've entered both, click **Next**. +7. (Optional:) Enter your domain, click **Add Domain**, then click **Verify**. + - When you click verify, Segment gives you two options to verify your domain: using a meta tag to add to your `/index.html` file at the root, or a DNS TXT record that you can add through your DNS provider. Domain tokens expire 14 days after they are verified. + - **Carry out Step 7 only if you want to enable SP-initiated flow**, otherwise click **Skip**. +8. Return to **Settings > Authentication > Connections** and toggle the **Active** switch to enable your SAML configuration. + +![Toggling the Active switch in the Segment app's Authentication Connections page](images/active_connections.png) + +#### Okta steps + +Finish setting up the Okta/Segment SAML integration by carrying out these steps in Okta: + +1. In Okta, select the **Sign On** tab for the Segment SAML app, then click **Edit**. +2. Enter the Customer ID you copied in Step 4 of the Segment steps. +3. For **Application username format**, select **Email**. +4. Click **Save**. -##### Can I still invite people outside the organization? +![Settings in the Okta SSO tab](images/okta_sso.png) -Workspace owners can invite additional owners with any domain using the traditional invite mechanism. +You've now completed setup. For SP-initiated SSO, follow these steps: -If the workspace is configured to require SSO, and the user is not on your IdP, you can add an Exemption under **Workspace Settings > Authentication > Advanced Settings**. +1. Go to `https://app.segment.com`. +2. Enter your email, select **Single Sign-On**, then click **Log In**. + + +## SSO Frequently Asked Questions + +{% faq %} +{% faqitem Do you support automatic user provisioning? %} +Segment supports "just in time" user permissioning; new users who authenticate using your IdP are automatically created in Segment as minimal-access (read-only) members. If the user already exists in Segment then Segment associates the IdP-identity with the existing Segment user account. Segment also supports user provisioning and role mapping [using SCIM](/docs/segment-app/iam/scim/).{% endfaqitem %} + +{% faqitem Do you support automatic user de-provisioning? %} +Yes, users can be automatically de-provisioned [if you use SCIM](/docs/segment-app/iam/scim/). +{% endfaqitem %} + +{% faqitem Will my users lose access to their other workspaces when I enable SSO? %} +Segment allows users to own their own workspaces. While your IdP authentication will ensure that any non-owners must have logged in with SSO to access _your workspace_, they can still log into Segment with username and password to access their own workspaces. +{% endfaqitem %} -##### How do I configure SSO to access multiple workspaces? +{% faqitem Can I still invite people outside the organization? %} +Workspace owners can invite additional owners with any domain using the traditional invite mechanism. If the workspace is configured to require SSO, and the user is not on your IdP, you can add an Exemption under **Workspace Settings > Authentication > Advanced Settings**. +{% endfaqitem %} -If you would like to use SSO for multiple workspaces, your admin must configure access to each workspace as a separate app in your identity provider. +{% faqitem How do I configure SSO to access multiple workspaces? %} +To use SSO for multiple workspaces, your admin must configure access to each workspace as a separate app in your identity provider. +{% endfaqitem %} +{% endfaq %} \ No newline at end of file From b8c432bf145750a39b0ce395e86a4ab277757f07 Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Wed, 20 Sep 2023 21:00:25 -0500 Subject: [PATCH 62/70] Small update --- src/connections/functions/insert-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/functions/insert-functions.md b/src/connections/functions/insert-functions.md index bda1cd3e01..5b66e418a0 100644 --- a/src/connections/functions/insert-functions.md +++ b/src/connections/functions/insert-functions.md @@ -210,7 +210,7 @@ You can manually test your code from the functions editor: - Logs display any messages to console.log() from the function. > warning "" -> The Event Tester won't make use of an Insert Function, show how an Insert Function impacts your data, or send data downstream through the Insert Function pipeline. The Event Tester is not impacted by an Insert Function at all. Please use the Function tester rather than the Event Tester to see how your Insert Function impacts your data. +> The Event Tester won't make use of an Insert Function, show how an Insert Function impacts your data, or send data downstream through the Insert Function pipeline. The Event Tester is not impacted by an Insert Function at all. Use the Function tester rather than the Event Tester to see how your Insert Function impacts your data. ## Save and deploy the destination insert function From 1bd9b22716d37fcebaebfa044ee715cd9794740a Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 21 Sep 2023 11:04:20 -0400 Subject: [PATCH 63/70] Update src/privacy/hipaa-eligible-segment.md Co-authored-by: pwseg <86626706+pwseg@users.noreply.github.com> --- src/privacy/hipaa-eligible-segment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/hipaa-eligible-segment.md b/src/privacy/hipaa-eligible-segment.md index 257edfa05f..10a279bf19 100644 --- a/src/privacy/hipaa-eligible-segment.md +++ b/src/privacy/hipaa-eligible-segment.md @@ -35,7 +35,7 @@ These logs can be provided upon request. For specific requests, please reach out ## Data encryption -Segment encrypts the data in select fields [marked as yellow in the Privacy Portal](/docs/privacy/portal/#default-pii-matchers) before sending them to event stream, cloud mode destinations, further supporting HIPAA compliance in your destinations. Segment's public and private key pairs are generated using a a RSAES OAEP SHA 256 algorithm. +Segment encrypts the data in select fields [marked as yellow in the Privacy Portal](/docs/privacy/portal/#default-pii-matchers) before sending them to event stream, cloud mode destinations, further supporting HIPAA compliance in your destinations. Segment's public and private key pairs are generated using a RSAES OAEP SHA 256 algorithm. > info "Data encryption is currently in public beta" > Data encryption only supports event-stream, cloud-mode destinations. Only data fields in `context`, `traits`, and `property` objects can be encrypted. From 8c39a14b8eaa8cfac0512817a8a0879023d3d143 Mon Sep 17 00:00:00 2001 From: stayseesong <83784848+stayseesong@users.noreply.github.com> Date: Thu, 21 Sep 2023 09:08:50 -0700 Subject: [PATCH 64/70] add id --- src/connections/destinations/catalog/actions-rupt/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/connections/destinations/catalog/actions-rupt/index.md b/src/connections/destinations/catalog/actions-rupt/index.md index 12a2af501b..6fea9c9a68 100644 --- a/src/connections/destinations/catalog/actions-rupt/index.md +++ b/src/connections/destinations/catalog/actions-rupt/index.md @@ -2,6 +2,9 @@ title: Rupt (Actions) Destination hide-boilerplate: true hide-dossier: true +hidden: true +beta: true +id: 6501a5225aa338d11164cc0f --- {% include content/plan-grid.md name="actions" %} From 7714b8a103e601f5138ff7c1fcceb28c938371d7 Mon Sep 17 00:00:00 2001 From: stayseesong <83784848+stayseesong@users.noreply.github.com> Date: Thu, 21 Sep 2023 09:13:03 -0700 Subject: [PATCH 65/70] Update src/connections/destinations/catalog/actions-rupt/index.md Co-authored-by: forstisabella <92472883+forstisabella@users.noreply.github.com> --- src/connections/destinations/catalog/actions-rupt/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-rupt/index.md b/src/connections/destinations/catalog/actions-rupt/index.md index 6fea9c9a68..c1cc22ad55 100644 --- a/src/connections/destinations/catalog/actions-rupt/index.md +++ b/src/connections/destinations/catalog/actions-rupt/index.md @@ -17,7 +17,7 @@ id: 6501a5225aa338d11164cc0f Rupt (Actions) provides the following benefits: -- **Account sharing detection**. Find out exactly which accounts are being shared and how many people are sharing them.. +- **Account sharing detection**. Find out exactly which accounts are being shared and how many people are sharing them. - **Convert & monetize account sharers**. Prebuilt UI to convert account sharers into paying customers. - **Track account sharing revenue**. Track revenue from account sharing conversions. From 8a03ddbbb335afe0556a278cc2749b14d559a43d Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 21 Sep 2023 12:38:07 -0400 Subject: [PATCH 66/70] [netlify-build] --- src/privacy/hipaa-eligible-segment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privacy/hipaa-eligible-segment.md b/src/privacy/hipaa-eligible-segment.md index 10a279bf19..353aa9e152 100644 --- a/src/privacy/hipaa-eligible-segment.md +++ b/src/privacy/hipaa-eligible-segment.md @@ -35,7 +35,7 @@ These logs can be provided upon request. For specific requests, please reach out ## Data encryption -Segment encrypts the data in select fields [marked as yellow in the Privacy Portal](/docs/privacy/portal/#default-pii-matchers) before sending them to event stream, cloud mode destinations, further supporting HIPAA compliance in your destinations. Segment's public and private key pairs are generated using a RSAES OAEP SHA 256 algorithm. +Segment encrypts the data in select fields [marked as yellow in the Privacy Portal](/docs/privacy/portal/#default-pii-matchers) before sending them to event stream, cloud mode destinations, further supporting HIPAA compliance in your destinations. Segment encrypts data using a RSAES OAEP SHA 256 algorithm. > info "Data encryption is currently in public beta" > Data encryption only supports event-stream, cloud-mode destinations. Only data fields in `context`, `traits`, and `property` objects can be encrypted. From d9685d14af34c0edf5236355bebbd0dab5b109d3 Mon Sep 17 00:00:00 2001 From: pwseg Date: Thu, 21 Sep 2023 11:45:06 -0500 Subject: [PATCH 67/70] Make Catalog 20230921 --- src/_data/catalog/destination_categories.yml | 2 +- src/_data/catalog/destinations.yml | 390 +++++++++++++++++- src/_data/catalog/destinations_private.yml | 2 +- src/_data/catalog/source_categories.yml | 2 +- src/_data/catalog/sources.yml | 2 +- .../destinations/catalog/koala/index.md | 6 + 6 files changed, 388 insertions(+), 16 deletions(-) create mode 100644 src/connections/destinations/catalog/koala/index.md diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index f40bc65413..3c7f10801e 100644 --- a/src/_data/catalog/destination_categories.yml +++ b/src/_data/catalog/destination_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination categories last updated 2023-09-19 +# destination categories last updated 2023-09-21 items: - display_name: A/B Testing slug: a-b-testing diff --git a/src/_data/catalog/destinations.yml b/src/_data/catalog/destinations.yml index 82d66c0f8e..974a14456b 100644 --- a/src/_data/catalog/destinations.yml +++ b/src/_data/catalog/destinations.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2023-09-19 +# destination data last updated 2023-09-21 items: - id: 637e8d185e2dec264895ea89 display_name: 1Flow @@ -47680,7 +47680,7 @@ items: display_name: Koala name: Koala slug: koala - hidden: false + hidden: true endpoints: - US regions: @@ -67690,6 +67690,205 @@ items: required: true label: Endpoint Region actions: + - id: bJDm8aeYaQaGLVGtnRa28W + name: Send Subscriptions + slug: sendSubscription + description: >- + Send an identify call to Segment’s tracking API. This is used to get user + channel subscription data into Engage. + platform: CLOUD + hidden: false + defaultTrigger: type = "identify" + fields: + - id: wZzJXa6qX5cDzpJJnPgqzB + sortOrder: 0 + fieldKey: engage_space + label: Profile Space + type: STRING + description: >- + The Profile Space to use for creating a record. *Note: This field shows + list of internal sources associated with the Profile Space. Changes made + to the Profile Space name in **Settings** will not reflect in this list + unless the source associated with the Profile Space is renamed + explicitly.* + placeholder: '' + required: true + multiple: false + choices: null + dynamic: true + allowNull: false + - id: 6BUdYs6X1wfJNUBbPh2VHU + sortOrder: 1 + fieldKey: user_id + label: User ID + type: STRING + description: >- + Unique identifier for the user in your database. A userId or an + anonymousId is required. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: a1Js2rZPWUUPU4b7EuhCSY + sortOrder: 2 + fieldKey: anonymous_id + label: Anonymous ID + type: STRING + description: >- + A pseudo-unique substitute for a User ID, for cases when you don’t have + an absolutely unique identifier. A userId or an anonymousId is required. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3Mjr83DumsV67uj4STrPhp + sortOrder: 3 + fieldKey: email + label: Email + type: STRING + description: Email of the user + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ejumfyvNSgnXtWTtqpuqiL + sortOrder: 4 + fieldKey: email_subscription_status + label: Email Subscription Status + type: STRING + description: >- + Global status of the email subscription. True is subscribed, false is + unsubscribed and null|undefined is did-not-subscribe. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: 4TvBZmvyZjuKGGXD9gM5Z8 + sortOrder: 5 + fieldKey: subscription_groups + label: Subscription Groups + type: OBJECT + description: >- + Subscription status for the groups. Object containing group names as + keys and statuses as values + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 6dce6a7mkDuxuMcY6x31z7 + sortOrder: 6 + fieldKey: phone + label: Phone + type: STRING + description: Phone number of the user + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iKeM5BtFt242TxgApCovdi + sortOrder: 7 + fieldKey: sms_subscription_status + label: SMS Subscription Status + type: STRING + description: >- + Global status of the SMS subscription. True is subscribed, false is + unsubscribed and null|undefined is did-not-subscribe. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: ooon5UMVtPjbU4swmaYWqG + sortOrder: 8 + fieldKey: whatsapp_subscription_status + label: WhatsApp Subscription Status + type: STRING + description: >- + Global status of the WhatsApp subscription. True is subscribed, false is + unsubscribed and null is did-not-subscribe. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: iAGXYAj8BVMA7gqmTwzqTB + sortOrder: 9 + fieldKey: android_push_token + label: Android Push Token + type: STRING + description: Android Push Token of the user + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vXtdAj7cbeZ6PMiyXpkWHU + sortOrder: 10 + fieldKey: android_push_subscription_status + label: Android Push Subscription Status + type: STRING + description: >- + Global status of the android push subscription. True is subscribed, + false is unsubscribed and null is did-not-subscribe. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: eRZiGuGdT5BdUH7eZZABnp + sortOrder: 11 + fieldKey: ios_push_token + label: Ios Push Token + type: STRING + description: Ios Push Token of the user + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4TERJS7z1bCHF5botghJ1c + sortOrder: 12 + fieldKey: ios_push_subscription_status + label: Ios Push Subscription Status + type: STRING + description: >- + Global status of the ios push subscription. True is subscribed, false is + unsubscribed and null is did-not-subscribe. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: qTmaVM5RS1CxYThVy6Vn1U + sortOrder: 13 + fieldKey: traits + label: Traits + type: OBJECT + description: Free-form dictionary of traits that describe the user or group of users. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false - id: vm2tNA5U1zxUusQkdC4D7Z name: Send Identify slug: sendIdentify @@ -67700,7 +67899,7 @@ items: hidden: false defaultTrigger: type = "identify" fields: - - id: v8pSdvz3kwFkCXK8qG8goj + - id: iSjK4BRm2hJtmsMeqLb8GW sortOrder: 0 fieldKey: engage_space label: Profile Space @@ -67717,7 +67916,7 @@ items: choices: null dynamic: true allowNull: false - - id: rqqFU8D93eDbg5fAaRDUr5 + - id: 2TKBVK5vzwdAfYXTwnJJyR sortOrder: 1 fieldKey: user_id label: User ID @@ -67731,7 +67930,7 @@ items: choices: null dynamic: false allowNull: false - - id: jcsDCMLqHv8HpoXamjd9gg + - id: spir9FW9ULwfZETzQZWd8m sortOrder: 2 fieldKey: anonymous_id label: Anonymous ID @@ -67745,7 +67944,7 @@ items: choices: null dynamic: false allowNull: false - - id: mE51bAhBcZDHi163XpYfdy + - id: uQe5pgxyPKEfCRU6YkM7iE sortOrder: 3 fieldKey: group_id label: Group ID @@ -67757,7 +67956,7 @@ items: choices: null dynamic: false allowNull: false - - id: cKwg6HPJ3UF2t1hpTD273D + - id: khR8TEaCwrZW6kFtH8vrNw sortOrder: 4 fieldKey: traits label: Traits @@ -67779,7 +67978,7 @@ items: hidden: false defaultTrigger: type = "group" fields: - - id: c4AfCyGxVeZiC3xLMEzLEt + - id: oxogrMxDQ7PCv4HX5zCg1L sortOrder: 0 fieldKey: engage_space label: Profile Space @@ -67796,7 +67995,7 @@ items: choices: null dynamic: true allowNull: false - - id: r7wL2rucrRoCA8FN85GHHx + - id: eRbb8ocW9c2TZpjY6S9q4E sortOrder: 1 fieldKey: user_id label: User ID @@ -67810,7 +68009,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6fQZa98k99SmQ5jLqJoYns + - id: ozMsfu5V7rHZgzYfep4Cgi sortOrder: 2 fieldKey: anonymous_id label: Anonymous ID @@ -67824,7 +68023,7 @@ items: choices: null dynamic: false allowNull: false - - id: dCBJaJh6DVK4XbUnRt4n5r + - id: k1seHag8ruQD64JWPaLDUo sortOrder: 3 fieldKey: group_id label: Group ID @@ -67836,7 +68035,7 @@ items: choices: null dynamic: false allowNull: false - - id: vzN2FB2WmqgTXKmeNqEKox + - id: kEKbdb2siaN4X7837SxfM1 sortOrder: 4 fieldKey: traits label: Traits @@ -80499,6 +80698,173 @@ items: timestamp: '@path': $.timestamp trigger: type = "page" +- id: 637c192eba61b944e08ee158 + display_name: VWO Web Mode (Actions) + name: VWO Web Mode (Actions) + slug: actions-vwo-web + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/actions-vwo-web + previous_names: + - VWO Web Mode (Actions) + website: https://vwo.com + status: PUBLIC_BETA + categories: + - A/B Testing + - Heatmaps & Recordings + logo: + url: https://cdn.filepicker.io/api/file/o9X4IJO1RDegnGVmfje0 + mark: + url: https://cdn.filepicker.io/api/file/L6U6f3KrRoScOQbUDMKj + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: false + warehouse: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: false + settings: + - name: addSmartcode + type: boolean + defaultValue: true + description: >- + When enabled, Segment will load the VWO SmartCode onto the webpage. When + disabled, you will have to manually add SmartCode to your webpage. The + setting is enabled by default, however we recommended manually adding + SmartCode to the webpage to avoid flicker issues. + required: true + label: Add Asynchronous SmartCode + - name: libraryTolerance + type: number + defaultValue: 2500 + description: >- + The maximum amount of time (in milliseconds) to wait for VWO’s full + library to be downloaded before simply displaying your original page. + required: true + label: Library Tolerance + - name: settingsTolerance + type: number + defaultValue: 2000 + description: >- + The maximum amount of time (in milliseconds) to wait for test settings + before VWO will simply display your original page. + required: true + label: Settings Tolerance + - name: useExistingJquery + type: boolean + defaultValue: false + description: >- + If your page already includes JQuery, you can set this to “true”. + Otherwise, VWO will include JQuery onto the page for you. VWO needs JQuery + on the page to function correctly. + required: true + label: Use Existing JQuery + - name: vwoAccountId + type: number + defaultValue: 0 + description: Your VWO account ID, used for fetching your VWO async smart code. + required: true + label: VWO Account ID + actions: + - id: 6uTbf9uHvZBJ3YnMmFHWtZ + name: Track Event + slug: trackEvent + description: Sends Segment's track event to VWO + platform: WEB + hidden: false + defaultTrigger: type = "track" + fields: + - id: hzBAt7fLBa1T8w7FPnHi3u + sortOrder: 0 + fieldKey: eventName + label: Name + type: STRING + description: Name of the event. + placeholder: '' + defaultValue: + '@path': $.event + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 8CtRUGGPR1q72MhoDUmgtm + sortOrder: 1 + fieldKey: properties + label: Properties + type: OBJECT + description: >- + JSON object containing additional properties that will be associated + with the event. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tR1J9N9e3vk4XtqGjUfTSm + name: Identify User + slug: identifyUser + description: Sends Segment's user traits to VWO + platform: WEB + hidden: false + defaultTrigger: type = "identify" + fields: + - id: i6zvqJT4uQxFiwYEUHDGj1 + sortOrder: 0 + fieldKey: attributes + label: Attributes + type: OBJECT + description: >- + JSON object containing additional attributes that will be associated + with the user. + placeholder: '' + defaultValue: + '@path': $.traits + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: 6uTbf9uHvZBJ3YnMmFHWtZ + name: Track Event + fields: + eventName: + '@path': $.event + properties: + '@path': $.properties + trigger: type = "track" + - actionId: tR1J9N9e3vk4XtqGjUfTSm + name: Identify User + fields: + attributes: + '@path': $.traits + trigger: type = "identify" - id: 5d25d6e0885427000195bf80 display_name: WalkMe name: WalkMe diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml index 95719e7cdd..b5117f47d5 100644 --- a/src/_data/catalog/destinations_private.yml +++ b/src/_data/catalog/destinations_private.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2023-09-19 +# destination data last updated 2023-09-21 items: - id: 54521fd725e721e32a72eec6 display_name: Intercom diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml index 46613a9cdc..49db3d03ee 100644 --- a/src/_data/catalog/source_categories.yml +++ b/src/_data/catalog/source_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# source categories last updated 2023-09-19 +# source categories last updated 2023-09-21 items: - display_name: A/B Testing slug: a-b-testing diff --git a/src/_data/catalog/sources.yml b/src/_data/catalog/sources.yml index fb203a7b71..34f5ab1600 100644 --- a/src/_data/catalog/sources.yml +++ b/src/_data/catalog/sources.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# sources last updated 2023-09-19 +# sources last updated 2023-09-21 items: - id: 8HWbgPTt3k display_name: .NET diff --git a/src/connections/destinations/catalog/koala/index.md b/src/connections/destinations/catalog/koala/index.md new file mode 100644 index 0000000000..97c064a249 --- /dev/null +++ b/src/connections/destinations/catalog/koala/index.md @@ -0,0 +1,6 @@ +--- +title: 'Koala Destination' +hidden: true +id: 6230c835c0d6535357ee950d +published: false +--- From 73a5b508a49e2ff96268ab7421a9433c7239e273 Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Thu, 21 Sep 2023 11:51:19 -0500 Subject: [PATCH 68/70] Update src/segment-app/iam/sso.md Co-authored-by: rchinn-segment <93161299+rchinn-segment@users.noreply.github.com> --- src/segment-app/iam/sso.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/segment-app/iam/sso.md b/src/segment-app/iam/sso.md index 65c8034dc3..23830ebeb3 100644 --- a/src/segment-app/iam/sso.md +++ b/src/segment-app/iam/sso.md @@ -171,7 +171,7 @@ Yes, users can be automatically de-provisioned [if you use SCIM](/docs/segment-a {% endfaqitem %} {% faqitem Will my users lose access to their other workspaces when I enable SSO? %} -Segment allows users to own their own workspaces. While your IdP authentication will ensure that any non-owners must have logged in with SSO to access _your workspace_, they can still log into Segment with username and password to access their own workspaces. +Segment allows users to own their own workspaces. While your IdP authentication will ensure that any non-owners must have logged in with SSO to access _your workspace_, they can still log into Segment with a username and password to access their own workspaces. {% endfaqitem %} {% faqitem Can I still invite people outside the organization? %} From 5a3b0f270261c96583c3ecdc7b2e1a6d18daf4da Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Thu, 21 Sep 2023 11:51:29 -0500 Subject: [PATCH 69/70] Update src/segment-app/iam/sso.md Co-authored-by: rchinn-segment <93161299+rchinn-segment@users.noreply.github.com> --- src/segment-app/iam/sso.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/segment-app/iam/sso.md b/src/segment-app/iam/sso.md index 23830ebeb3..b16ce84da1 100644 --- a/src/segment-app/iam/sso.md +++ b/src/segment-app/iam/sso.md @@ -17,7 +17,7 @@ The Segment login page can only be connected to one workspace. To use your IdP w Segment's SSO configuration is entirely self-service. Additionally, Segment has prebuilt connections with [Okta](https://www.okta.com/integrations/segment/){:target="_blank"} , [OneLogin](https://www.onelogin.com){:target="_blank"}, and [Azure AD](https://docs.microsoft.com/en-us/azure/active-directory/saas-apps/segment-tutorial){:target="_blank"} - which can help you get set up faster. [Reach out to support](https://segment.com/help/contact/) if you run into any questions or issues. + which can help you get set up faster. [Reach out to support](https://segment.com/help/contact/){:target="_blank"} if you run into any questions or issues. To get started, go to your workspace settings and navigate to **Authentication > Connections > Add new Connection**. Follow the steps to create a SAML connection. From 1e75edbda1a1ac7b60874f93650e62350614513b Mon Sep 17 00:00:00 2001 From: pwseg <86626706+pwseg@users.noreply.github.com> Date: Thu, 21 Sep 2023 11:59:09 -0500 Subject: [PATCH 70/70] Minor cleanup --- .../destinations/catalog/actions-braze-cohorts/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/connections/destinations/catalog/actions-braze-cohorts/index.md b/src/connections/destinations/catalog/actions-braze-cohorts/index.md index 0eab5051b0..21b46b7286 100644 --- a/src/connections/destinations/catalog/actions-braze-cohorts/index.md +++ b/src/connections/destinations/catalog/actions-braze-cohorts/index.md @@ -54,13 +54,13 @@ If you are creating multiple mappings in one Braze Cohorts destination, Segment {% include components/actions-fields.html settings="true"%} -### Supplementing Audience Payloads +### Supplementing audience payloads -Event payloads sent via Computed Traits and Audiences will only contain the computed trait/audience key in question, in addition to user identities userId/anonymousId and email if present: https://segment.com/docs/engage/using-engage-data/#event-destinations. If you need supplemental fields from user profiles to map to Braze consider using an Insert Function + Engage Profile API to do so. Essentially, using the Profile API, you can pull the traits for a user from your Engage space within your insert function code, before the event hits the destination. You can then use these traits to then enrich the event payload that is sent to the destination. +Event payloads sent using Computed Traits and Audiences will only contain the computed trait or audience key in question, in addition to the user identities `userId`, `anonymousId` and `email`. If you need supplemental fields from user profiles to map to Braze, consider using an Insert Function with the Engage Profile API. Using the Profile API, you can pull a user's traits from your Engage space within your insert function code before the event hits the destination. You can then use these traits to enrich the event payload sent to the destination. -When dealing with event payloads transmitted through Computed Traits and Audiences, it's important to note that these payloads typically include only the specific computed trait or audience key in question in addition to user identities such as `userId` and `anonymousId`, as well as `email` if available, [for more information, see here](/docs/engage/using-engage-data/#event-destinations). +When dealing with event payloads transmitted through Computed Traits and Audiences, keep in mind that these payloads typically include only the specific computed trait or audience key in question in addition to user identities such as `userId` and `anonymousId`, as well as `email` if available. View [event destinations](/docs/engage/using-engage-data/#event-destinations) for more information. -If your requirements involve including additional fields from user profiles into your mappings, you can achieve this by leveraging an [Insert Function](/docs/connections/functions/insert-functions/) in conjunction with the [Engage Profile API](docs/unify/profile-api/). With the Profile API, you can retrieve the traits associated with a user from your Engage space within your insert function code, all before the event reaches the Braze Cohorts destination. +If you need to include additional fields from user profiles into your mappings, you can achieve this by using an [insert function](/docs/connections/functions/insert-functions/) with the [Engage Profile API](/docs/unify/profile-api/). With the Profile API, you can retrieve the traits associated with a user from your Engage space within your insert function code, all before the event reaches the Braze Cohorts destination. ### Braze Device ID