From 3a83254213455dd237ba8d02d9b9a9e7d14b3c6a Mon Sep 17 00:00:00 2001 From: Courtney Garcia <97773072+courtneyga@users.noreply.github.com> Date: Wed, 17 Apr 2024 10:56:22 -0500 Subject: [PATCH 01/35] Update insert-functions.md --- src/connections/functions/insert-functions.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/connections/functions/insert-functions.md b/src/connections/functions/insert-functions.md index c82cda282f..24f79e556b 100644 --- a/src/connections/functions/insert-functions.md +++ b/src/connections/functions/insert-functions.md @@ -47,6 +47,9 @@ Use this page to edit and manage insert functions in your workspace. You can also use this page to [enable destination insert functions](#enable-the-insert-function) in your workspace. +> warning "Storage Destination Limit" +> Currently, you are not able to connect a Storage Destination to an Insert Function. + ## Code the destination insert function Segment invokes a separate part of the function (called a "handler") for each event type that you send to your destination insert function. From 8e266a3788aaab539d51a22e420e0e2707c63056 Mon Sep 17 00:00:00 2001 From: Ashton Huxtable <78318468+ashton-huxtable@users.noreply.github.com> Date: Tue, 30 Apr 2024 21:05:28 -0600 Subject: [PATCH 02/35] Update to reflect support of email as identifier --- .../destinations/catalog/braze-cloud-mode-actions/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/braze-cloud-mode-actions/index.md b/src/connections/destinations/catalog/braze-cloud-mode-actions/index.md index 0cd30764e2..f6cafe0e26 100644 --- a/src/connections/destinations/catalog/braze-cloud-mode-actions/index.md +++ b/src/connections/destinations/catalog/braze-cloud-mode-actions/index.md @@ -34,7 +34,7 @@ Braze Cloud Mode (Actions) provides the following benefit over Braze Classic: - **REST Endpoint**: Your Braze REST Endpoint. For more information, see [API Overview](https://www.braze.com/docs/api/basics/){:target="_blank"} in the Braze documentation. > info "" -> Braze requires that you include a `userId` or `braze_id` for all calls made in cloud-mode. Segment sends a `braze_id` if the `userId` is missing. When you use a device-mode connection, Braze automatically tracks anonymous activity using the `braze_id` if a `userId` is missing. +> Braze now supports sending `email` as an identifier. Braze requires that you include `userId`, `braze_id`, or `email` for all calls made in cloud-mode. Segment sends a `braze_id` if the `userId` is missing. When you use a device-mode connection, Braze automatically tracks anonymous activity using the `braze_id` if a `userId` is missing. {% include components/actions-fields.html settings="true"%} From 9df0ae0c146e2df04c5a3d2f68e3c0c81fc99e43 Mon Sep 17 00:00:00 2001 From: Jazma Foskin <82051355+jfoskin@users.noreply.github.com> Date: Fri, 31 May 2024 15:42:50 -0400 Subject: [PATCH 03/35] Schema validated against version 1 of Tracking Plan faq.md --- src/protocols/faq.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/protocols/faq.md b/src/protocols/faq.md index 314f620723..74f1c53a26 100644 --- a/src/protocols/faq.md +++ b/src/protocols/faq.md @@ -154,6 +154,11 @@ Segment's [Schema Controls](docs/connections/sources/schema/destination-data-con 2. **Standard Schema Controls/"JSON Schema Violations"**: Segment checks the names and evaluates the values of properties/traits. This is useful if you've specified a pattern or a list of acceptable values in the [JSON schema](/docs/protocols/tracking-plan/create/#edit-underlying-json-schema) for each Track event listed in the Tracking Plan. 3. **Advanced Blocking Controls/"Common JSON Schema Violations"**: Segment evaluates incoming events thoroughly, including event names, context field names and values, and the names and values of properties/traits, against the [Common JSON schema](/docs/protocols/tracking-plan/create/#common-json-schema) in your Tracking Plan. + +### Why am I still seeing unplanned properties within the source Schema, when the properties have been added to newer versions of the Tracking Plan? + +The schema will only validate events against the oldest event version that exists in the tracking plan, so if you have version 1 and version 2, the schema page will only check the tracking plan against version 1. + ### Do blocked and discarded events count towards my MTU counts? Blocking events within a [Source Schema](/docs/connections/sources/schema/) or [Tracking Plan](/docs/protocols/tracking-plan/create/) excludes them from API call and MTU calculations, as the events are discarded before they reach the pipeline that Segment uses for calculations. From 64631538c5bb08a70ed00591ee1a4d40dba60486 Mon Sep 17 00:00:00 2001 From: Alan Charles <50601149+alanjcharles@users.noreply.github.com> Date: Tue, 17 Sep 2024 11:22:50 -0400 Subject: [PATCH 04/35] add web setup guide to auto-inst [netlify-build] --- Gemfile.lock | 15 ++- src/connections/auto-instrumentation/index.md | 46 +++++++- .../{setup.md => kotlin-setup.md} | 58 +--------- .../auto-instrumentation/swift-setup.md | 92 +++++++++++++++ .../auto-instrumentation/web-setup.md | 109 ++++++++++++++++++ 5 files changed, 258 insertions(+), 62 deletions(-) rename src/connections/auto-instrumentation/{setup.md => kotlin-setup.md} (69%) create mode 100644 src/connections/auto-instrumentation/swift-setup.md create mode 100644 src/connections/auto-instrumentation/web-setup.md diff --git a/Gemfile.lock b/Gemfile.lock index 8f5e6c086c..ba53330b9f 100755 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -45,6 +45,7 @@ GEM ffi (1.15.5) filesize (0.2.0) forwardable-extended (2.6.0) + google-protobuf (3.23.2-arm64-darwin) google-protobuf (3.23.2-x86_64-darwin) http_parser.rb (0.8.0) httpclient (2.8.3) @@ -87,7 +88,9 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.4.0) - nokogiri (1.15.2-x86_64-darwin) + nokogiri (1.13.10-arm64-darwin) + racc (~> 1.4) + nokogiri (1.13.10-x86_64-darwin) racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) @@ -101,10 +104,12 @@ GEM rb-inotify (0.10.1) ffi (~> 1.0) rexml (3.2.5) - rouge (4.1.2) + rouge (3.30.0) ruby2_keywords (0.0.5) safe_yaml (1.0.5) - sass-embedded (1.62.1-x86_64-darwin) + sass-embedded (1.58.3-arm64-darwin) + google-protobuf (~> 3.21) + sass-embedded (1.58.3-x86_64-darwin) google-protobuf (~> 3.21) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -119,7 +124,7 @@ GEM webrick (1.8.1) PLATFORMS - ruby + arm64-darwin-23 x86_64-darwin-19 x86_64-darwin-20 @@ -141,4 +146,4 @@ DEPENDENCIES wdm (~> 0.1.0) BUNDLED WITH - 2.2.18 + 2.4.5 diff --git a/src/connections/auto-instrumentation/index.md b/src/connections/auto-instrumentation/index.md index e90e23bb9e..01259e427d 100644 --- a/src/connections/auto-instrumentation/index.md +++ b/src/connections/auto-instrumentation/index.md @@ -1,6 +1,25 @@ --- title: Auto-Instrumentation hidden: true +sources: + - name: Android + url: /connections/auto-instrumentation/kotlin-setup/ + logo: + url: https://cdn.filepicker.io/api/file/9BoiIqVRFmsAuBbMMy9D + mark: + url: https://cdn.filepicker.io/api/file/9BoiIqVRFmsAuBbMMy9D + - name: Apple + url: /connections/auto-instrumentation/swift-setup/ + logo: + url: https://cdn.filepicker.io/api/file/qWgSP5cpS7eeW2voq13u + mark: + url: https://cdn.filepicker.io/api/file/qWgSP5cpS7eeW2voq13u + - name: Web + url: /connections/auto-instrumentation/web-setup/ + logo: + url: https://cdn.filepicker.io/api/file/aRgo4XJQZausZxD4gZQq + mark: + url: https://cdn.filepicker.io/api/file/aRgo4XJQZausZxD4gZQq --- Auto-Instrumentation simplifies tracking in your websites and apps by eliminating the need for a traditional Segment instrumentation. @@ -29,10 +48,35 @@ Some Auto-Instrumentation advantages include: ## How it works -After you [integrate the Analytics SDK and Signals SDK into your application](/docs/connections/auto-instrumentation/setup/), Segment begins to passively monitor user activity like button clicks, page navigation, and network data. Segment captures these events as "signals" and sends them to your Auto-Instrumentation source in real time. +Once you integrate the Analytics SDK and Signals SDK into your website or application, Segment begins to passively monitor user activity like button clicks, page navigation, and network data. Segment captures these events as "signals" and sends them to your Auto-Instrumentation source in real time. In Segment, the Auto-Instrumentation source lets you view raw signals. You can then [use this data to create detailed analytics events](/docs/connections/auto-instrumentation/configuration/) based on those signals, enriching your insights into user behavior and applicatino performance. +## Setup Guides + +
+
+
+ {% assign category = "source" %} + {% assign resources = page.sources %} + {% for resource in resources %} + + {% endfor %} +
+
+
+ ## Privacy Auto-Instrumentation removes personally identifiable information (PII) from breadcrumbs before they get sent to Segment. No user data is visible to Segment. diff --git a/src/connections/auto-instrumentation/setup.md b/src/connections/auto-instrumentation/kotlin-setup.md similarity index 69% rename from src/connections/auto-instrumentation/setup.md rename to src/connections/auto-instrumentation/kotlin-setup.md index 841aefc31a..09b6e62c5e 100644 --- a/src/connections/auto-instrumentation/setup.md +++ b/src/connections/auto-instrumentation/kotlin-setup.md @@ -3,7 +3,7 @@ title: Auto-Instrumentation Setup hidden: true --- -This guide outlines the steps required to set up the Signals SDK in your applications using Swift or Kotlin. +This guide outlines the steps required to set up the Signals SDK in your Android OS applications using Kotlin. You'll learn how to add Auto-Instrumentation sources, integrate dependencies, and ensure that your setup captures and processes data as intended. @@ -25,61 +25,7 @@ You'll first need to add a source and copy its write key: ## Step 2: Add dependencies and initialization code -Next, you'll need to add the Signals SDKs to your Swift and Kotlin development environments. - -### Swift - -Follow these steps to integrate the Signals SDK into your Swift application: - -1. Use Swift Package Manager to add the Signals SDK from the following repository: - - ```zsh - https://github.com/segmentio/Signals-swift.git - ``` - -2. Add the initialization code: - - ```swift - // Configure Analytics with your settings - {... ....} - - // Set up the Signals SDK configuration - let config = Signals.Configuration( - writeKey: "", // Replace with the write key you previously copied - maximumBufferSize: 100, - useSwiftUIAutoSignal: true, - useNetworkAutoSignal: true - ) - - // Locate and set the fallback JavaScript file for edge functions - let fallbackURL = Bundle.main.url(forResource: "MyEdgeFunctions", withExtension: "js") - - // Apply the configuration and add the Signals plugin - Signals.shared.useConfiguration(config) - Analytics.main.add(plugin: LivePlugins(fallbackFileURL: fallbackURL)) - Analytics.main.add(plugin: Signals.shared) - ``` - -Verify that you replaced `` with the actual write key you copied in Step 1. - -#### SwiftUI projects - -If your app is written in SwiftUI, you'll need to add a `TypeAlias.swift` file to your project that captures interaction and navigation Signals, like in this example: - -```swift -import Foundation -import Signals - -typealias Button = SignalButton -typealias NavigationStack = SignalNavigationStack -typealias NavigationLink = SignalNavigationLink -typealias TextField = SignalTextField -typealias SecureField = SignalSecureField -``` - -### Kotlin - -Follow these steps to integrate the Signals SDK into your Kotlin application: +Next, you'll need to add the Signals SDKs to your Kotlin application. 1. Update your module’s Gradle build file to add the right dependencies: diff --git a/src/connections/auto-instrumentation/swift-setup.md b/src/connections/auto-instrumentation/swift-setup.md new file mode 100644 index 0000000000..972681c683 --- /dev/null +++ b/src/connections/auto-instrumentation/swift-setup.md @@ -0,0 +1,92 @@ +--- +title: Auto-Instrumentation Setup +hidden: true +--- + +This guide outlines the steps required to set up the Signals SDK in your Apple OS applications using Swift. + +You'll learn how to add Auto-Instrumentation sources, integrate dependencies, and ensure that your setup captures and processes data as intended. + +> info "Auto-Instrumentation Pilot" +> Auto-Instrumentation is currently in pilot and is governed by Segment's [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank"}. Segment doesn't recommend Auto-Instrumentation for use in a production environment, as Segment is actively iterating on and improving the user experience. + +> success "Enable Auto-Instrumentation" +> To enable Auto-Instrumentation in your Segment workspace, reach out to your dedicated account manager. + +## Step 1: Add a source and get its write key + +You'll first need to add a source and copy its write key: + +1. In your Segment workspace, navigate to **Connections > Auto-Instrumentation** and click **Add source**. +2. Select a source, give the source a name, and click **Save**. +3. Return to **Connections > Sources** to view your sources. +4. In the **My sources** table, find and click the new source you just set up. +5. In the **Initialize the Client** section, look for and copy the `writeKey` displayed in the code block. + +## Step 2: Add dependencies and initialization code + +Next, you'll need to add the Signals SDKs to your Swift applicatiion. + +1. Use Swift Package Manager to add the Signals SDK from the following repository: + + ```zsh + https://github.com/segmentio/Signals-swift.git + ``` + +2. Add the initialization code: + + ```swift + // Configure Analytics with your settings + {... ....} + + // Set up the Signals SDK configuration + let config = Signals.Configuration( + writeKey: "", // Replace with the write key you previously copied + maximumBufferSize: 100, + useSwiftUIAutoSignal: true, + useNetworkAutoSignal: true + ) + + // Locate and set the fallback JavaScript file for edge functions + let fallbackURL = Bundle.main.url(forResource: "MyEdgeFunctions", withExtension: "js") + + // Apply the configuration and add the Signals plugin + Signals.shared.useConfiguration(config) + Analytics.main.add(plugin: LivePlugins(fallbackFileURL: fallbackURL)) + Analytics.main.add(plugin: Signals.shared) + ``` + +Verify that you replaced `` with the actual write key you copied in Step 1. + +#### SwiftUI projects + +If your app is written in SwiftUI, you'll need to add a `TypeAlias.swift` file to your project that captures interaction and navigation Signals, like in this example: + +```swift +import Foundation +import Signals + +typealias Button = SignalButton +typealias NavigationStack = SignalNavigationStack +typealias NavigationLink = SignalNavigationLink +typealias TextField = SignalTextField +typealias SecureField = SignalSecureField +``` +## Step 3: Verify and deploy events + +Next, you'll need to verify signal emission and [create rules](/docs/connections/auto-instrumentation/configuration/#example-rule-implementations) to convert those signals into events: + +1. In your Segment workspace, return to **Connections > Auto-Instrumentation** and click on the new source you created. +2. Verify that signals appear as expected on the dashboard. + + ![Signals successfully appearing in the Segment UI](images/autoinstrumentation_signals.png "Signals successfully appearing in the Segment UI") + +3. Click **Create Rules**. +4. In the Rules Editor, add a rule that converts signal data into an event. +5. Click **Preview**, then click **Save & Deploy**. + +Segment displays `Rule updated successfully` to verify that it saved your rule. + +## Next steps + +This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers examples rules. diff --git a/src/connections/auto-instrumentation/web-setup.md b/src/connections/auto-instrumentation/web-setup.md new file mode 100644 index 0000000000..b2329f78e0 --- /dev/null +++ b/src/connections/auto-instrumentation/web-setup.md @@ -0,0 +1,109 @@ +--- +title: Auto-Instrumentation Setup +hidden: true +--- + +This guide outlines the steps required to set up the Signals SDK in your JavaScript website. + +You'll learn how to add Auto-Instrumentation sources, integrate dependencies, and ensure that your setup captures and processes data as intended. + +> info "Auto-Instrumentation Pilot" +> Auto-Instrumentation is currently in pilot and is governed by Segment's [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank"}. Segment doesn't recommend Auto-Instrumentation for use in a production environment, as Segment is actively iterating on and improving the user experience. + +> success "Enable Auto-Instrumentation" +> To enable Auto-Instrumentation in your Segment workspace, reach out to your dedicated account manager. + +## Step 1: Add a source and get its write key + +You'll first need to add a source and copy its write key: + +1. In your Segment workspace, navigate to **Connections > Auto-Instrumentation** and click **Add source**. +2. Select a source, give the source a name, and click **Save**. +3. Return to **Connections > Sources** to view your sources. +4. In the **My sources** table, find and click the new source you just set up. +5. In the **Initialize the Client** section, look for and copy the `writeKey` displayed in the code block. + +## Step 2: Add dependencies and initialization code + +Next, you'll need to add the Signals SDKs to your web environment. + +Follow these steps to integrate the Signals SDK into your website: + +1. Add the Signals SDK to your project: + +```bash + # npm + npm install @segment/analytics-signals + # yarn + yarn add @segment/analytics-signals + # pnpm + pnpm install @segment/analytics-signals +``` + +2. Add the initialization code: + +```ts +// analytics.js/ts +import { AnalyticsBrowser } from '@segment/analytics-next' +import { SignalsPlugin } from '@segment/analytics-signals' + +const analytics = new AnalyticsBrowser() +const signalsPlugin = new SignalsPlugin() +analytics.register(signalsPlugin) + +analytics.load({ + writeKey: '' +}) +``` + +Verify that you replaced `` with the actual write key you copied in Step 1. + +4. Build and run your app. + +## Step 3: Verify and deploy events + +Next, you'll need to verify signal emission and [create rules](/docs/connections/auto-instrumentation/configuration/#example-rule-implementations) to convert those signals into events: + +1. In your Segment workspace, return to **Connections > Auto-Instrumentation** and click on the new source you created. +2. Verify that signals appear as expected on the dashboard. + + ![Signals successfully appearing in the Segment UI](images/autoinstrumentation_signals.png "Signals successfully appearing in the Segment UI") + +3. Click **Create Rules**. +4. In the Rules Editor, add a rule that converts signal data into an event. +5. Click **Preview**, then click **Save & Deploy**. + +Segment displays `Rule updated successfully` to verify that it saved your rule. + +### Debugging +#### Enable debug mode +Values sent to the signals API are redacted by default. +This adds a local storage key. To disable redaction, add a magic query string: +``` +https://my-website.com?segment_signals_debug=true +``` +You can *turn off debugging* by doing: +``` +https://my-website.com?segment_signals_debug=false +``` + +### Advanced + +#### Listening to signals +```ts +const signalsPlugin = new SignalsPlugin() +signalsPlugin.onSignal((signal) => console.log(signal)) +``` + +### Emitting Signals +```ts +const signalsPlugin = new SignalsPlugin() +signalsPlugin.addSignal({ + type: 'userDefined', + data: { foo: 'bar' } +}) +``` + +## Next steps + +This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers examples rules. From 0854956e72a11eab90c62aef3873e617d7723ff4 Mon Sep 17 00:00:00 2001 From: Alan Charles <50601149+alanjcharles@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:13:08 -0400 Subject: [PATCH 05/35] add config options to each setup guide [netlify-build] --- .../auto-instrumentation/configuration.md | 36 ++----------------- .../auto-instrumentation/kotlin-setup.md | 17 ++++++++- .../auto-instrumentation/swift-setup.md | 22 +++++++++++- .../auto-instrumentation/web-setup.md | 21 ++++++++++- 4 files changed, 60 insertions(+), 36 deletions(-) diff --git a/src/connections/auto-instrumentation/configuration.md b/src/connections/auto-instrumentation/configuration.md index b7ed3975c7..d7fe863e81 100644 --- a/src/connections/auto-instrumentation/configuration.md +++ b/src/connections/auto-instrumentation/configuration.md @@ -3,48 +3,18 @@ title: Generate Events from Signals hidden: true --- -This guide is a reference to configuring, generating, and using signals in the Signals SDK with Auto-Instrumentation. On this page, you'll find details on: +This guide details how to use signals, and their associated data, generated in one of the Signals SDKs with the Auto-Instrumentation dashboard in your Segment workspace. On this page, you'll find details on: -- Setting up and managing signal types in the Signals SDK - Creating custom rules to capture and translate signals into actionable analytics events - Example rules that you can use as a basis for further customization -This guide assumes that you've already added the Signals SDK to your application. If you haven't yet, see the [Auto-Instrumentation Setup](/docs/connections/auto-instrumentation/setup/) guide for initial setup. +This guide assumes that you've already added the Signals SDK to your application. If you haven't yet, see the [Auto-Instrumentation Setup](/docs/connections/auto-instrumentation/) guide for initial setup. > info "Auto-Instrumentation Pilot" > Auto-Instrumentation is currently in pilot and is governed by Segment's [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank"}. Segment doesn't recommend Auto-Instrumentation for use in a production environment, as Segment is actively iterating on and improving the user experience. > success "Enable Auto-Instrumentation" -> To enable Auto-Instrumentation in your Segment workspace, reach out to your dedicated account manager. - -## Signals configuration - -Using the Signals Configuration object, you can control the destination, frequency, and types of signals that Segment automatically tracks within your application. The following tables detail the configuration options for both Signals-Swift and Signals-Kotlin. - -### Signals-Swift - -| `Option` | Required | Value | Description | -| ---------------------- | -------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `writeKey` | Yes | String | Source write key | -| `maximumBufferSize` | No | Integer | The number of signals to be kept for JavaScript inspection. This buffer is first-in, first-out. Default is `1000`. | -| `relayCount` | No | Integer | Relays signals to Segment every Xth event. Default is `20`. | -| `relayInterval` | No | TimeInterval | Relays signals to segment every X seconds. Default is `60`. | -| `broadcasters` | No | `SignalBroadcaster` | An array of broadcasters. These objects forward signal data to their destinations, like `WebhookBroadcaster` or `DebugBroadcaster` writing to the developer console. Default is `SegmentBroadcaster`. | -| `useUIKitAutoSignal` | No | Bool | Tracks UIKit component interactions automatically. Default is `false`. | -| `useSwiftUIAutoSignal` | No | Bool | Tracks SwiftUI component interactions automatically. Default is `false`. | -| `useNetworkAutoSignal` | No | Bool | Tracks network events automatically. Default is `false`. | -| `allowedNetworkHosts` | No | Array | An array of allowed network hosts. | -| `blockedNetworkHosts` | No | Array | An array of blocked network hosts. | - - -### Signals-Kotlin - -| `Option` | Required | Value | Description | -| ------------------- | -------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `writeKey` | Yes | String | Source write key | -| `maximumBufferSize` | No | Integer | The number of signals to be kept for JavaScript inspection. This buffer is first-in, first-out. Default is `1000`. | -| `broadcastInterval` | No | Integer | Broadcasts signals to Segment every X event. Default is `60`. | -| `broadcasters` | No | `List` | An array of broadcasters. These objects forward signal data to their destinations, like `WebhookBroadcaster` or `DebugBroadcaster` writing to the developer console. Default is `SegmentBroadcaster`. | +> To enable Auto-Instrumentation in your Segment workspace, reach out to your dedicated account manager. ## Converting signals to events diff --git a/src/connections/auto-instrumentation/kotlin-setup.md b/src/connections/auto-instrumentation/kotlin-setup.md index 09b6e62c5e..cc6b3114e1 100644 --- a/src/connections/auto-instrumentation/kotlin-setup.md +++ b/src/connections/auto-instrumentation/kotlin-setup.md @@ -44,7 +44,10 @@ Next, you'll need to add the Signals SDKs to your Kotlin application. } ``` -2. Add the following code to your application to initialize the Signals SDK: +2. Add the initialization code and configuration options: + +> success "" +> see [configuration options](#configuration-options) for a complete list. ```kotlin // Configure Analytics with your settings @@ -89,6 +92,18 @@ Next, you'll need to verify signal emission and [create rules](/docs/connections Segment displays `Rule updated successfully` to verify that it saved your rule. +## Configuration Options + +Using the Signals Configuration object, you can control the destination, frequency, and types of signals that Segment automatically tracks within your application. The following table details the configuration options for Signals-Kotlin. + +| `Option` | Required | Value | Description | +| ------------------- | -------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `writeKey` | Yes | String | Source write key | +| `maximumBufferSize` | No | Integer | The number of signals to be kept for JavaScript inspection. This buffer is first-in, first-out. Default is `1000`. | +| `broadcastInterval` | No | Integer | Broadcasts signals to Segment every X event. Default is `60`. | +| `broadcasters` | No | `List` | An array of broadcasters. These objects forward signal data to their destinations, like `WebhookBroadcaster` or `DebugBroadcaster` writing to the developer console. Default is `SegmentBroadcaster`. | + + ## Next steps This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers examples rules. diff --git a/src/connections/auto-instrumentation/swift-setup.md b/src/connections/auto-instrumentation/swift-setup.md index 972681c683..b693722ea7 100644 --- a/src/connections/auto-instrumentation/swift-setup.md +++ b/src/connections/auto-instrumentation/swift-setup.md @@ -33,7 +33,10 @@ Next, you'll need to add the Signals SDKs to your Swift applicatiion. https://github.com/segmentio/Signals-swift.git ``` -2. Add the initialization code: +2. Add the initialization code and configuration options: + +> success "" +> see [configuration options](#configuration-options) for a complete list. ```swift // Configure Analytics with your settings @@ -87,6 +90,23 @@ Next, you'll need to verify signal emission and [create rules](/docs/connections Segment displays `Rule updated successfully` to verify that it saved your rule. +## Configuration Options + +Using the Signals Configuration object, you can control the destination, frequency, and types of signals that Segment automatically tracks within your application. The following table details the configuration options for Signals-Swift. + +| `Option` | Required | Value | Description | +| ---------------------- | -------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `writeKey` | Yes | String | Source write key | +| `maximumBufferSize` | No | Integer | The number of signals to be kept for JavaScript inspection. This buffer is first-in, first-out. Default is `1000`. | +| `relayCount` | No | Integer | Relays signals to Segment every Xth event. Default is `20`. | +| `relayInterval` | No | TimeInterval | Relays signals to segment every X seconds. Default is `60`. | +| `broadcasters` | No | `SignalBroadcaster` | An array of broadcasters. These objects forward signal data to their destinations, like `WebhookBroadcaster` or `DebugBroadcaster` writing to the developer console. Default is `SegmentBroadcaster`. | +| `useUIKitAutoSignal` | No | Bool | Tracks UIKit component interactions automatically. Default is `false`. | +| `useSwiftUIAutoSignal` | No | Bool | Tracks SwiftUI component interactions automatically. Default is `false`. | +| `useNetworkAutoSignal` | No | Bool | Tracks network events automatically. Default is `false`. | +| `allowedNetworkHosts` | No | Array | An array of allowed network hosts. | +| `blockedNetworkHosts` | No | Array | An array of blocked network hosts. + ## Next steps This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers examples rules. diff --git a/src/connections/auto-instrumentation/web-setup.md b/src/connections/auto-instrumentation/web-setup.md index b2329f78e0..7e39c40358 100644 --- a/src/connections/auto-instrumentation/web-setup.md +++ b/src/connections/auto-instrumentation/web-setup.md @@ -40,7 +40,10 @@ Follow these steps to integrate the Signals SDK into your website: pnpm install @segment/analytics-signals ``` -2. Add the initialization code: +2. Add the initialization code and configuration options: + +> success "" +> see [configuration options](#configuration-options) for a complete list. ```ts // analytics.js/ts @@ -104,6 +107,22 @@ signalsPlugin.addSignal({ }) ``` +## Configuration Options + +Using the Signals Configuration object, you can control the destination, frequency, and types of signals that Segment automatically tracks within your application. The following table details the configuration options for Signals-Kotlin. + +| `Option` | Required | Value | Description | +| ------------------- | -------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `writeKey` | Yes | string | Source write key | +| `maxBufferSize` | No | number | The number of signals to be kept for JavaScript inspection. This buffer is first-in, first-out. Default is `1000`. | +| `processSignal` | No | string | Override the default signal processing function from the edge function. If this is set, the edge function will not be used. +| `enableDebugLogging` | No | boolean | Enable debug logs. +| `disableSignalRedaction` | No | boolean | Disable default Signal data redaction. +| `apiHost` | No | string | Override the default signals API host. Default is `signals.segment.io/v1`. +| `functionHost` | No | string | Override the default edge host. Default is `cdn.edgefn.segment.com` +| `flushAt` | No | number | How many signals to flush at once when sending to the signals API. Default is `5` . | +| `flushInterval` | No | number | How many ms to wait before flushing signals to the API. The default is `2000`. | + ## Next steps This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers examples rules. From 5fa0154fd595ca6cbedc9b6a043865db9e3f5f2d Mon Sep 17 00:00:00 2001 From: AnnieZhao17 Date: Mon, 23 Sep 2024 12:39:44 -0700 Subject: [PATCH 06/35] Update postgres and redshift instructions for clarity --- src/connections/aws-privatelink.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md index 851f5470b8..4cbcd6e687 100644 --- a/src/connections/aws-privatelink.md +++ b/src/connections/aws-privatelink.md @@ -43,10 +43,10 @@ If any updates are made to the Availability Zones (AZs) enabled for your NLB, pl ### Configure PrivateLink for RDS Postgres 1. Create a Network Load Balancer VPC endpoint service using the instructions in the [Create a service powered by AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-endpoint-service.html){:target="_blank”} documentation. -2. Reach out to your Customer Success Manager (CSM) for more details about Segment's AWS principal. +2. Reach out to your Customer Success Manager (CSM) for details about Segment's AWS principal. 3. Add the Segment AWS principal as an “Allowed Principal” to consume the Network Load Balancer VPC endpoint service you created in step 1. -4. Reach out to your CSM and provide them with the Service name for the service that you created above. Segment's engineering team provisions a VPC endpoint for the service in the Segment Edge VPC. -5. After creating the VPC endpoint, Segment provides you with private DNS so you can update the **Host** in your Segment app settings or create a new Postgres integration.
The following RDS Postgres integrations support PrivateLink: +4. Reach out to your CSM and provide them with the Service Name for the service that you created above. Segment's engineering team provisions a VPC endpoint for the service in the Segment Edge VPC. +5. Segment provides you with the VPC endpoint's private DNS name. Use the DNS name as the **Host** setting to update or create new Postgres integrations in the Segment app.
The following RDS Postgres integrations support PrivateLink: - [RDS Postgres storage destination](/docs/connections/storage/catalog/postgres/) - [RDS Postgres Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup/) @@ -61,8 +61,8 @@ If any updates are made to the Availability Zones (AZs) enabled for your NLB, pl Implement Segment's PrivateLink integration by taking the following steps: 1. Let your Customer Success Manager (CSM) know that you're interested in PrivateLink. They will share information with you about Segment’s Edge account and VPC. 2. After you receive the Edge account ID and VPC ID, [grant cluster access to Segment's Edge account and VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc-console-grantor.html){:target="_blank”}. -3. Reach back out to your CSM and provide them with the Cluster identifier for your cluster and your AWS account ID. -4. Segment creates a Redshift managed VPC endpoint within the Segment Redshift subnet on your behalf, which creates a PrivateLink Endpoint URL. Segment then provides you with the internal PrivateLink Endpoint URL. -5. After Segment provides you with the URL, use it to update or create new Redshift integrations. The following integrations support PrivateLink: +3. Reach back out to your CSM and provide them with the Cluster Identifier for your cluster and your AWS account ID. +4. Segment's engineering team creates a Redshift managed VPC endpoint within the Segment Redshift subnet on your behalf, which creates a PrivateLink Endpoint URL. Segment then provides you with the internal PrivateLink Endpoint URL. +5. Use the provided PrivateLink Endpoint URL as the **Hostname** setting to update or create new Redshift integrations in the Segment app. The following integrations support PrivateLink: - [Redshift storage destination](/docs/connections/storage/catalog/redshift/) - [Redshift Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/) From cfba11de313e035fe22844f86d06b77894a995f1 Mon Sep 17 00:00:00 2001 From: AnnieZhao17 Date: Mon, 23 Sep 2024 12:47:30 -0700 Subject: [PATCH 07/35] [netlify-build] From bcf2f32382daaba561b77102cfa2a325dab05cee Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Mon, 23 Sep 2024 16:29:06 -0400 Subject: [PATCH 08/35] init model/mapping alerting sections --- src/connections/reverse-etl/manage-retl.md | 52 ++++++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/src/connections/reverse-etl/manage-retl.md b/src/connections/reverse-etl/manage-retl.md index b03b681ad5..c0235c81a3 100644 --- a/src/connections/reverse-etl/manage-retl.md +++ b/src/connections/reverse-etl/manage-retl.md @@ -53,9 +53,17 @@ To reset a sync: You can choose to replay syncs. To replay a specific sync, contact [friends@segment.com](mailto:friends@segment.com). Keep in mind that triggering a replay resyncs all records for a given sync. ## Alerting -You can opt in to receive email, Slack, and in-app alerts about Reverse ETL sync failures and partial successes. +You can opt in to receive email, Slack, and in-app alerts about Reverse ETL sync failures, spikes in data ingested from your model, and fluctuations in the volume of events successfully delivered from your mapping. -To subscribe to alerts: + + +The notification channels that you select for one alert will apply to all alerts in your workspace. + +> success "" +> If you opted to receive notifications by email, you can click **View active email addresses** to see the email addresses that are currently signed up to receive notifications. + +### Failed or partially successful syncs +To subscribe to alerts for a failed or partially successful sync: 1. Navigate to **Settings > User Preferences**. 2. Select **Reverse ETL** in the **Activity Notifications** section. 3. Click the Reverse ETL sync status that you'd like to receive notifications for. You can select one or more of the following sync statuses: @@ -67,5 +75,41 @@ To subscribe to alerts: - **Enable in-app notifications**: Select this option to see an in-app notification. 5. Click **Create alert**. -> success "" -> If you opted to receive notifications by email, you can click **View active email addresses** to see the email addresses that are currently signed up to receive notifications. +### Model-level volume spike alerts + +You can create an alert that notifies you when the volume of events received by your source in the last 24 hours changes beyond a set percentage. For example, if you set a change percentage of 4% and your source received 100 events over the first 24 hours, Segment would notify you the following day if your source ingested fewer than 96 or more than 104 events. + +To receive a volume spike alert in a Slack channel, you must first create a Slack webhook. For more information about Slack webhooks, see the [Sending messages using incoming webhooks](https://api.slack.com/messaging/webhooks){:target="_blank”} documentation. + +1. Navigate to the model you'd like to create an alert for and select the **Alerts** tab. +2. Click **Create alert**. +3. Set a *change in event volume* percentage, or the percentage of change in event volume from your source that would prompt an alert. +4. Select one or more of the following notification channels: + - **Email**: Select this channel to receive emailed alerts at the email address that you use to sign in to Segment. + - **Slack notification**: Enter a Webhook URL and a Slack channel name to receive alerts in a Slack channel. + - **In-app notifications**: Select this to receive notifications in the Segment app. To view your notifications, select the bell next to your user icon in the Segment app. +5. Toggle the **Enable alert** setting on and click **Create**. + +To edit or disable your alert, navigate to your model's Alerts tab and select the Actions menu. + + + +### Mapping-level successful delivery rate fluctuations + +You can create an alert that notifies you when the volume of events successfully received by your mapping in the last 24 hours falls below a percentage you set. For example, if you set a percentage of 99%, Segment notifies you if your destination had a successful delivery rate of 98% or below. + +To receive a successful delivery rate fluctuation alert in a Slack channel, you must first create a Slack webhook. For more information about Slack webhooks, see Slack's [Sending messages using incoming webhooks](https://api.slack.com/messaging/webhooks){:target="_blank”} documentation. + +To subscribe to alerts for successful delivery fluctuations at the mapping level: +1. Navigate to your intended mapping and select the **Alerts** tab. +2. Click **Create alert**. +3. Set an *alert threshold*, or the percentage of successfully delivered events that would prompt an alert. +4. Select one or more of the following notification channels: + - **Email**: Select this channel to receive emailed alerts at the email address that you use to sign in to Segment. + - **Slack notification**: Enter a Webhook URL and a Slack channel name to receive alerts in a Slack channel. + - **In-app notifications**: Select this to receive notifications in the Segment app. To view your notifications, select the bell next to your user icon in the Segment app. +5. Toggle the **Enable alert** setting on and click **Create**. + +To edit or disable your alert, navigate to your mapping's Alerts tab and select the Actions menu. + + From 1026bc99db9748c1ea6881737e11276f254224c8 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 24 Sep 2024 09:25:52 -0400 Subject: [PATCH 09/35] Update manage-retl.md --- src/connections/reverse-etl/manage-retl.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/connections/reverse-etl/manage-retl.md b/src/connections/reverse-etl/manage-retl.md index c0235c81a3..5e739a9f8d 100644 --- a/src/connections/reverse-etl/manage-retl.md +++ b/src/connections/reverse-etl/manage-retl.md @@ -59,9 +59,6 @@ You can opt in to receive email, Slack, and in-app alerts about Reverse ETL sync The notification channels that you select for one alert will apply to all alerts in your workspace. -> success "" -> If you opted to receive notifications by email, you can click **View active email addresses** to see the email addresses that are currently signed up to receive notifications. - ### Failed or partially successful syncs To subscribe to alerts for a failed or partially successful sync: 1. Navigate to **Settings > User Preferences**. @@ -75,6 +72,9 @@ To subscribe to alerts for a failed or partially successful sync: - **Enable in-app notifications**: Select this option to see an in-app notification. 5. Click **Create alert**. +> success "" +> If you opted to receive notifications by email, you can click **View active email addresses** to see the email addresses that are currently signed up to receive notifications. + ### Model-level volume spike alerts You can create an alert that notifies you when the volume of events received by your source in the last 24 hours changes beyond a set percentage. For example, if you set a change percentage of 4% and your source received 100 events over the first 24 hours, Segment would notify you the following day if your source ingested fewer than 96 or more than 104 events. From 2af318fcf3acd7e39c2ad5924c8ae43ffa36929f Mon Sep 17 00:00:00 2001 From: AnnieZhao17 Date: Tue, 24 Sep 2024 15:20:36 -0700 Subject: [PATCH 10/35] Add Snowflake instructions [netlify-build] --- src/connections/aws-privatelink.md | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md index 4cbcd6e687..f9c6331e2d 100644 --- a/src/connections/aws-privatelink.md +++ b/src/connections/aws-privatelink.md @@ -7,7 +7,7 @@ title: Amazon Web Services PrivateLink > info "" > Segment's PrivateLink integration is currently in private beta and is governed by Segment’s [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank”}. Only warehouses located in regions `us-east-1`, `us-west-2`, or `eu-west-1` are eligible for PrivateLink. You might incur additional networking costs while using AWS PrivateLink. -During the Private Beta, you can set up AWS PrivateLink for [Databricks](#databricks), [RDS Postgres](#rds-postgres), and [Redshift](#redshift). +During the Private Beta, you can set up AWS PrivateLink for [Databricks](#databricks), [RDS Postgres](#rds-postgres), [Redshift](#redshift), and [Snowflake](#snowflake). ## Databricks @@ -22,7 +22,7 @@ Before you can configure AWS PrivateLink for Databricks, complete the following - Configure a [security group](https://docs.databricks.com/en/security/network/classic/customer-managed-vpc.html#security-groups){:target="_blank”} with bidirectional access to 0.0.0.0/0 and ports 443, 3306, 6666, 2443, and 8443-8451. ### Configure PrivateLink for Databricks -To configure PrivateLink for Databricks: +To implement Segment's PrivateLink integration for Databricks: 1. Follow the instructions in Databricks' [Enable private connectivity using AWS PrivateLink](https://docs.databricks.com/en/security/network/classic/privatelink.html){:target="_blank”} documentation. You must create a [back-end](https://docs.databricks.com/en/security/network/classic/privatelink.html#private-connectivity-overview){:target="_blank”} connection to integrate with Segment's front-end connection. 2. After you've configured a back-end connection for Databricks, request access to Segment's PrivateLink integration by reaching out to your Customer Success Manager (CSM). 3. Your CSM sets up a call with Segment R&D to continue the onboarding process. @@ -34,7 +34,7 @@ The following Databricks integrations support PrivateLink: ## RDS Postgres ### Prerequisites -Before you can configure AWS PrivateLink for RDS Postgres, complete the following prerequisites in your Databricks workspace: +Before you can configure AWS PrivateLink for RDS Postgres, complete the following prerequisites: - **Set up a Network Load Balancer (NLB) to route traffic to your Postgres database**: Segment recommends creating a NLB that has target group IP address synchronization, using a solution like AWS Lambda. If any updates are made to the Availability Zones (AZs) enabled for your NLB, please let your CSM know so that Segment can update the AZs of your VPC endpoint. - **Configure your NLB with one of the following settings**: @@ -42,6 +42,7 @@ If any updates are made to the Availability Zones (AZs) enabled for your NLB, pl - If you must enforce inbound rules on PrivateLink traffic, add an inbound rule that allows traffic belonging to Segment's PrivateLink/Edge CIDR: `10.0.0.0/8` ### Configure PrivateLink for RDS Postgres +To implement Segment's PrivateLink integration for RDS Postgres: 1. Create a Network Load Balancer VPC endpoint service using the instructions in the [Create a service powered by AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-endpoint-service.html){:target="_blank”} documentation. 2. Reach out to your Customer Success Manager (CSM) for details about Segment's AWS principal. 3. Add the Segment AWS principal as an “Allowed Principal” to consume the Network Load Balancer VPC endpoint service you created in step 1. @@ -58,7 +59,7 @@ If any updates are made to the Availability Zones (AZs) enabled for your NLB, pl - **Your cluster is using a port within the ranges 5431-5455 or 8191-8215**: Clusters with cluster relocation enabled [might encounter an error if updated to include a port outside of this range](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html#:~:text=You%20can%20change%20to%20another%20port%20from%20the%20port%20range%20of%205431%2D5455%20or%208191%2D8215.%20(Don%27t%20change%20to%20a%20port%20outside%20the%20ranges.%20It%20results%20in%20an%20error.)){:target="_blank”}. ### Configure PrivateLink for Redshift -Implement Segment's PrivateLink integration by taking the following steps: +To implement Segment's PrivateLink integration for Redshift: 1. Let your Customer Success Manager (CSM) know that you're interested in PrivateLink. They will share information with you about Segment’s Edge account and VPC. 2. After you receive the Edge account ID and VPC ID, [grant cluster access to Segment's Edge account and VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc-console-grantor.html){:target="_blank”}. 3. Reach back out to your CSM and provide them with the Cluster Identifier for your cluster and your AWS account ID. @@ -66,3 +67,21 @@ Implement Segment's PrivateLink integration by taking the following steps: 5. Use the provided PrivateLink Endpoint URL as the **Hostname** setting to update or create new Redshift integrations in the Segment app. The following integrations support PrivateLink: - [Redshift storage destination](/docs/connections/storage/catalog/redshift/) - [Redshift Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/) + +## Snowflake + +### Prerequisites +Before you can configure AWS PrivateLink for Snowflake, complete the following prerequisites: +- Your Snowflake account must be on the Business Critical [Edition](https://docs.snowflake.com/en/user-guide/intro-editions){:target="_blank”} or higher. +- Your Snowflake account is hosted on the Amazon Web Services (AWS) [cloud platform](https://docs.snowflake.com/en/user-guide/intro-cloud-platforms){:target="_blank”}. + +### Configure PrivateLink for Snowflake +To implement Segment's PrivateLink integration for Snowflake: +1. Follow Snowflake's PrivateLink documentation to [enable AWS PrivateLink](https://docs.snowflake.com/en/user-guide/admin-security-privatelink#enabling-aws-privatelink){:target="_blank”} for your Snowflake account. +2. Let your Customer Success Manager (CSM) know that you're interested in PrivateLink. They will provide you with Segment’s AWS Edge account ID. +3. Create a Snowflake Support Case to authorize PrivateLink connections from Segment's AWS account ID as a third party vendor to your Snowflake account. +4. After Snowflake support authorizes Segment, call the [SYSTEM$GET_PRIVATELINK_CONFIG](https://docs.snowflake.com/en/sql-reference/functions/system_get_privatelink_config) function while using the Snowflake ACCOUNTADMIN role. Reach back out to your Segment CSM and provide them with the **privatelink-vpce-id** and **privatelink-account-url** values from the function output. Note down for yourself the **privatelink-account-name** value. +5. Segment's engineering team creates a VPC endpoint on your behalf. Segment also creates a CNAME record to reroute Segment traffic to use your VPC endpoint. This ensures that Segment connections to your **privatelink-account-name** are made over PrivateLink. +6. Your CSM notifies you that the setup on Segment's side is complete. Use your **privatelink-account-name** as the **Account** setting to update or create new Snowflake integrations in the Segment app. The following integrations support PrivateLink: + - [Snowflake storage destination](/docs/connections/storage/catalog/snowflake/) + - [Snowflake Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/snowflake-setup/) From 2a3c2fdf6e6ec45864a74f3e73183c228cd1dde5 Mon Sep 17 00:00:00 2001 From: AnnieZhao17 Date: Tue, 24 Sep 2024 17:27:06 -0700 Subject: [PATCH 11/35] Update Databricks instructions [netlify-build] --- src/connections/aws-privatelink.md | 48 ++++++++++++++++++------------ 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md index f9c6331e2d..2736f47332 100644 --- a/src/connections/aws-privatelink.md +++ b/src/connections/aws-privatelink.md @@ -11,6 +11,10 @@ During the Private Beta, you can set up AWS PrivateLink for [Databricks](#databr ## Databricks +The following Databricks integrations support PrivateLink: +- [Databricks storage destination](/docs/connections/storage/catalog/databricks/) +- [Databricks Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/databricks-setup/) + > info "Segment recommends reviewing the Databricks documentation before attempting AWS PrivateLink setup" > The setup required to configure the Databricks PrivateLink integration requires front-end and back-end PrivateLink configuration. Review the [Databricks documentation on AWS PrivateLink](https://docs.databricks.com/en/security/network/classic/privatelink.html){:target="_blank”} to ensure you have everything required to set up this configuration before continuing. @@ -24,15 +28,19 @@ Before you can configure AWS PrivateLink for Databricks, complete the following ### Configure PrivateLink for Databricks To implement Segment's PrivateLink integration for Databricks: 1. Follow the instructions in Databricks' [Enable private connectivity using AWS PrivateLink](https://docs.databricks.com/en/security/network/classic/privatelink.html){:target="_blank”} documentation. You must create a [back-end](https://docs.databricks.com/en/security/network/classic/privatelink.html#private-connectivity-overview){:target="_blank”} connection to integrate with Segment's front-end connection. -2. After you've configured a back-end connection for Databricks, request access to Segment's PrivateLink integration by reaching out to your Customer Success Manager (CSM). -3. Your CSM sets up a call with Segment R&D to continue the onboarding process. - -The following Databricks integrations support PrivateLink: - - [Databricks storage destination](/docs/connections/storage/catalog/databricks/) - - [Databricks Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/databricks-setup/) +2. After you've configured a back-end connection for Databricks, let your Customer Success Manager (CSM) know that you're interested in PrivateLink. +3. Segment's engineering team creates a custom VPC endpoint on your behalf. Segment then provides you with the VPC endpoint's ID. +4. Follow the instructions in Databricks' [Register PrivateLink objects](https://docs.databricks.com/en/security/network/classic/privatelink.html#step-3-register-privatelink-objects){:target="_blank”} documentation. It'll instruct you to register the VPC endpoint in your Databricks account and to create or update your Private Access Setting to include the VPC endpoint. +5. Configure your Databricks workspace to [use the Private Access Setting object](https://docs.databricks.com/en/security/network/classic/privatelink.html#step-4-create-or-update-your-workspace-with-privatelink-objects) from the previous step. +6. Reach back out to your CSM and provide them with your Databricks Workspace URL. Segment configures their internal DNS to reroute Segment traffic for your Databricks workspace to your VPC endpoint. +7. Your CSM notifies you that Segment's PrivateLink integration is complete. If you have any existing Segment Databricks integrations that use your Databricks workspace URL, they now use PrivateLink. You can also create new Databricks integrations in the Segment app. All newly created integrations using your Databricks workspace URL will automatically use PrivateLink. ## RDS Postgres +The following RDS Postgres integrations support PrivateLink: +- [RDS Postgres storage destination](/docs/connections/storage/catalog/postgres/) +- [RDS Postgres Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup/) + ### Prerequisites Before you can configure AWS PrivateLink for RDS Postgres, complete the following prerequisites: - **Set up a Network Load Balancer (NLB) to route traffic to your Postgres database**: Segment recommends creating a NLB that has target group IP address synchronization, using a solution like AWS Lambda. @@ -44,15 +52,17 @@ If any updates are made to the Availability Zones (AZs) enabled for your NLB, pl ### Configure PrivateLink for RDS Postgres To implement Segment's PrivateLink integration for RDS Postgres: 1. Create a Network Load Balancer VPC endpoint service using the instructions in the [Create a service powered by AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-endpoint-service.html){:target="_blank”} documentation. -2. Reach out to your Customer Success Manager (CSM) for details about Segment's AWS principal. +2. Let your Customer Success Manager (CSM) know that you're interested in PrivateLink. They will share information with you about Segment's AWS principal. 3. Add the Segment AWS principal as an “Allowed Principal” to consume the Network Load Balancer VPC endpoint service you created in step 1. 4. Reach out to your CSM and provide them with the Service Name for the service that you created above. Segment's engineering team provisions a VPC endpoint for the service in the Segment Edge VPC. -5. Segment provides you with the VPC endpoint's private DNS name. Use the DNS name as the **Host** setting to update or create new Postgres integrations in the Segment app.
The following RDS Postgres integrations support PrivateLink: - - [RDS Postgres storage destination](/docs/connections/storage/catalog/postgres/) - - [RDS Postgres Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup/) +5. Segment provides you with the VPC endpoint's private DNS name. Use the DNS name as the **Host** setting to update or create new Postgres integrations in the Segment app. ## Redshift +The following Redshift integrations support PrivateLink: +- [Redshift storage destination](/docs/connections/storage/catalog/redshift/) +- [Redshift Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/) + ### Prerequisites - **You're using the RA3 node type**: To access Segment's PrivateLink integration, use an RA3 instance. - **You've enabled cluster relocation**: Cluster relocation migrates your cluster behind a proxy and keeps the cluster endpoint unchanged, even if your cluster needs to be migrated to a new Availability Zone. A consistent cluster endpoint makes it possible for Segment's Edge account and VPC to remain connected to your cluster. To enable cluster relocation, follow the instructions in the AWS [Relocating your cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html){:target="_blank”} documentation. @@ -64,16 +74,18 @@ To implement Segment's PrivateLink integration for Redshift: 2. After you receive the Edge account ID and VPC ID, [grant cluster access to Segment's Edge account and VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc-console-grantor.html){:target="_blank”}. 3. Reach back out to your CSM and provide them with the Cluster Identifier for your cluster and your AWS account ID. 4. Segment's engineering team creates a Redshift managed VPC endpoint within the Segment Redshift subnet on your behalf, which creates a PrivateLink Endpoint URL. Segment then provides you with the internal PrivateLink Endpoint URL. -5. Use the provided PrivateLink Endpoint URL as the **Hostname** setting to update or create new Redshift integrations in the Segment app. The following integrations support PrivateLink: - - [Redshift storage destination](/docs/connections/storage/catalog/redshift/) - - [Redshift Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/) +5. Use the provided PrivateLink Endpoint URL as the **Hostname** setting to update or create new Redshift integrations in the Segment app. ## Snowflake +The following Snowflake integrations support PrivateLink: +- [Snowflake storage destination](/docs/connections/storage/catalog/snowflake/) +- [Snowflake Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/snowflake-setup/) + ### Prerequisites Before you can configure AWS PrivateLink for Snowflake, complete the following prerequisites: -- Your Snowflake account must be on the Business Critical [Edition](https://docs.snowflake.com/en/user-guide/intro-editions){:target="_blank”} or higher. -- Your Snowflake account is hosted on the Amazon Web Services (AWS) [cloud platform](https://docs.snowflake.com/en/user-guide/intro-cloud-platforms){:target="_blank”}. +- Your Snowflake account is on the Business Critical [Edition](https://docs.snowflake.com/en/user-guide/intro-editions){:target="_blank”} or higher. +- Your Snowflake account is hosted on the [AWS cloud platform](https://docs.snowflake.com/en/user-guide/intro-cloud-platforms){:target="_blank”}. ### Configure PrivateLink for Snowflake To implement Segment's PrivateLink integration for Snowflake: @@ -81,7 +93,5 @@ To implement Segment's PrivateLink integration for Snowflake: 2. Let your Customer Success Manager (CSM) know that you're interested in PrivateLink. They will provide you with Segment’s AWS Edge account ID. 3. Create a Snowflake Support Case to authorize PrivateLink connections from Segment's AWS account ID as a third party vendor to your Snowflake account. 4. After Snowflake support authorizes Segment, call the [SYSTEM$GET_PRIVATELINK_CONFIG](https://docs.snowflake.com/en/sql-reference/functions/system_get_privatelink_config) function while using the Snowflake ACCOUNTADMIN role. Reach back out to your Segment CSM and provide them with the **privatelink-vpce-id** and **privatelink-account-url** values from the function output. Note down for yourself the **privatelink-account-name** value. -5. Segment's engineering team creates a VPC endpoint on your behalf. Segment also creates a CNAME record to reroute Segment traffic to use your VPC endpoint. This ensures that Segment connections to your **privatelink-account-name** are made over PrivateLink. -6. Your CSM notifies you that the setup on Segment's side is complete. Use your **privatelink-account-name** as the **Account** setting to update or create new Snowflake integrations in the Segment app. The following integrations support PrivateLink: - - [Snowflake storage destination](/docs/connections/storage/catalog/snowflake/) - - [Snowflake Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/snowflake-setup/) +5. Segment's engineering team creates a custom VPC endpoint on your behalf. Segment also creates a CNAME record to reroute Segment traffic to use your VPC endpoint. This ensures that Segment connections to your **privatelink-account-name** are made over PrivateLink. +6. Your CSM notifies you that the setup on Segment's side is complete. Use your **privatelink-account-name** as the **Account** setting to update or create new Snowflake integrations in the Segment app. From 093eb22d9482af687692400e5ebe3dc393ce84d4 Mon Sep 17 00:00:00 2001 From: AnnieZhao17 Date: Tue, 24 Sep 2024 17:44:00 -0700 Subject: [PATCH 12/35] Minor adjustment [netlify-build] --- src/connections/aws-privatelink.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md index 2736f47332..da6fce65b9 100644 --- a/src/connections/aws-privatelink.md +++ b/src/connections/aws-privatelink.md @@ -33,7 +33,7 @@ To implement Segment's PrivateLink integration for Databricks: 4. Follow the instructions in Databricks' [Register PrivateLink objects](https://docs.databricks.com/en/security/network/classic/privatelink.html#step-3-register-privatelink-objects){:target="_blank”} documentation. It'll instruct you to register the VPC endpoint in your Databricks account and to create or update your Private Access Setting to include the VPC endpoint. 5. Configure your Databricks workspace to [use the Private Access Setting object](https://docs.databricks.com/en/security/network/classic/privatelink.html#step-4-create-or-update-your-workspace-with-privatelink-objects) from the previous step. 6. Reach back out to your CSM and provide them with your Databricks Workspace URL. Segment configures their internal DNS to reroute Segment traffic for your Databricks workspace to your VPC endpoint. -7. Your CSM notifies you that Segment's PrivateLink integration is complete. If you have any existing Segment Databricks integrations that use your Databricks workspace URL, they now use PrivateLink. You can also create new Databricks integrations in the Segment app. All newly created integrations using your Databricks workspace URL will automatically use PrivateLink. +7. Your CSM notifies you that Segment's PrivateLink integration is complete. If you have any existing Segment Databricks integrations that use your Databricks workspace URL, they now automatically use PrivateLink. You can also create new Databricks integrations in the Segment app. All newly created integrations using your Databricks workspace URL will automatically use PrivateLink. ## RDS Postgres @@ -64,6 +64,7 @@ The following Redshift integrations support PrivateLink: - [Redshift Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/) ### Prerequisites +Before you can configure AWS PrivateLink for Redshift, complete the following prerequisites: - **You're using the RA3 node type**: To access Segment's PrivateLink integration, use an RA3 instance. - **You've enabled cluster relocation**: Cluster relocation migrates your cluster behind a proxy and keeps the cluster endpoint unchanged, even if your cluster needs to be migrated to a new Availability Zone. A consistent cluster endpoint makes it possible for Segment's Edge account and VPC to remain connected to your cluster. To enable cluster relocation, follow the instructions in the AWS [Relocating your cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html){:target="_blank”} documentation. - **Your cluster is using a port within the ranges 5431-5455 or 8191-8215**: Clusters with cluster relocation enabled [might encounter an error if updated to include a port outside of this range](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html#:~:text=You%20can%20change%20to%20another%20port%20from%20the%20port%20range%20of%205431%2D5455%20or%208191%2D8215.%20(Don%27t%20change%20to%20a%20port%20outside%20the%20ranges.%20It%20results%20in%20an%20error.)){:target="_blank”}. From fea718fe8aec906175146e8f6a8e2df6df055abf Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 26 Sep 2024 09:42:06 -0400 Subject: [PATCH 13/35] [netlify-build] --- src/connections/reverse-etl/manage-retl.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/connections/reverse-etl/manage-retl.md b/src/connections/reverse-etl/manage-retl.md index 5e739a9f8d..d03eef2d37 100644 --- a/src/connections/reverse-etl/manage-retl.md +++ b/src/connections/reverse-etl/manage-retl.md @@ -55,8 +55,6 @@ You can choose to replay syncs. To replay a specific sync, contact [friends@segm ## Alerting You can opt in to receive email, Slack, and in-app alerts about Reverse ETL sync failures, spikes in data ingested from your model, and fluctuations in the volume of events successfully delivered from your mapping. - - The notification channels that you select for one alert will apply to all alerts in your workspace. ### Failed or partially successful syncs @@ -83,16 +81,14 @@ To receive a volume spike alert in a Slack channel, you must first create a Slac 1. Navigate to the model you'd like to create an alert for and select the **Alerts** tab. 2. Click **Create alert**. -3. Set a *change in event volume* percentage, or the percentage of change in event volume from your source that would prompt an alert. +3. Set a *change in event volume* percentage, or the percentage of change in event volume from your source that would prompt an alert. 4. Select one or more of the following notification channels: - **Email**: Select this channel to receive emailed alerts at the email address that you use to sign in to Segment. - **Slack notification**: Enter a Webhook URL and a Slack channel name to receive alerts in a Slack channel. - **In-app notifications**: Select this to receive notifications in the Segment app. To view your notifications, select the bell next to your user icon in the Segment app. 5. Toggle the **Enable alert** setting on and click **Create**. -To edit or disable your alert, navigate to your model's Alerts tab and select the Actions menu. - - +To edit or disable your alert, navigate to your model's Alerts tab and select the Actions menu for the model you'd like to edit. ### Mapping-level successful delivery rate fluctuations @@ -110,6 +106,6 @@ To subscribe to alerts for successful delivery fluctuations at the mapping level - **In-app notifications**: Select this to receive notifications in the Segment app. To view your notifications, select the bell next to your user icon in the Segment app. 5. Toggle the **Enable alert** setting on and click **Create**. -To edit or disable your alert, navigate to your mapping's Alerts tab and select the Actions menu. +To edit or disable your alert, navigate to your mapping's Alerts tab and select the Actions menu for the alert you'd like to edit. From bdd7b6e972aa2ad6451d2cf8953aa7d86a0bb9ef Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 26 Sep 2024 09:42:59 -0400 Subject: [PATCH 14/35] rm note --- src/connections/reverse-etl/manage-retl.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/connections/reverse-etl/manage-retl.md b/src/connections/reverse-etl/manage-retl.md index d03eef2d37..0eced3730e 100644 --- a/src/connections/reverse-etl/manage-retl.md +++ b/src/connections/reverse-etl/manage-retl.md @@ -107,5 +107,3 @@ To subscribe to alerts for successful delivery fluctuations at the mapping level 5. Toggle the **Enable alert** setting on and click **Create**. To edit or disable your alert, navigate to your mapping's Alerts tab and select the Actions menu for the alert you'd like to edit. - - From b5f48d2072de583b1fb45e8900a6ff9b01c2e0c9 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:57:40 -0400 Subject: [PATCH 15/35] add actions v2 section to salesforce actions docs --- .../catalog/actions-salesforce/index.md | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/connections/destinations/catalog/actions-salesforce/index.md b/src/connections/destinations/catalog/actions-salesforce/index.md index ae3e9b4ff0..6f2476d05a 100644 --- a/src/connections/destinations/catalog/actions-salesforce/index.md +++ b/src/connections/destinations/catalog/actions-salesforce/index.md @@ -42,6 +42,33 @@ Before you connect Segment to Salesforce, please ensure you have a Salesforce ac > _For additional information on these limitations, see the Salesforce [Manage OAuth-Enabled Connected Apps Access to Your Data](https://help.salesforce.com/s/articleView?id=sf.remoteaccess_request_manage.htm&type=5#:~:text=Each%20connected%20app%20allows%20five%20unique%20approvals%20per%20user.){:target="_blank”} documentation._ +## Actions v2 + +Segment created new Actions v2 to provide you with additional access to features. Segment's Actions v2 support the following features: + - **Sync modes**: Control how Segment updates Salesforce by selecting a [sync mode](#sync-modes), or a strategy for updating your downstream data. + - **Dynamic dropdowns**: When creating or updating a mapping in the Segment app, the dropdown auto-populates all of the available properties directly from Salesforce. + - **Create and modify data**: Use Sync modes to create objects in your downstream destination without having to leave the Segment app. + +> warning "" +> You might need to reauthorize your Salesforce account to use all of the features associated with Actions v2. + +The following Actions support the Actions v2 functionality: + - [Account v2](#account-v2) + - [Custom Object v2](#custom-object-v2) + - [Case v2](#case-v2) + - [Opportunity v2](#opportunity-v2) + - [Lead v2](#lead-v2) + - [Contact v2](#contact-v2) + +### Sync modes +Sync modes allow users to define how Segment should update the data in your destination. + +Available sync modes for the Salesforce (Actions) destination include: +- **Add**: Add a new record when the specified identifier doesn't exist. If it does exist, Segment skips the record. +- **Update**: Update a record if a match with the specified identifier is found. Segment does nothing if the record doesn't exist. +- **Upsert**: If a record with the specified identifier is found, it is updated. If not, Segment creates a new record +- **Delete**: Remove the record associated with a specified identifier. Not available when using batching. + {% include components/actions-fields.html %} ## Configuration options From f40d412989e03101755d1b7e9c58935816cb77c9 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:59:30 -0400 Subject: [PATCH 16/35] [netlify-build] --- src/connections/destinations/catalog/actions-salesforce/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/connections/destinations/catalog/actions-salesforce/index.md b/src/connections/destinations/catalog/actions-salesforce/index.md index 6f2476d05a..783e87c506 100644 --- a/src/connections/destinations/catalog/actions-salesforce/index.md +++ b/src/connections/destinations/catalog/actions-salesforce/index.md @@ -201,3 +201,4 @@ For "Bulk Upsert External ID", see [Salesforce’s help documentation](https://h > warning "" > The field mapped to Bulk Upsert External Id should **not** be included in the Other Fields mapping. Including it as a custom field will cause an error in Salesforce. Although the Bulk API may return successful responses, the [Bulk Data Load Jobs](https://help.salesforce.com/s/articleView?id=sf.monitoring_async_api_jobs.htm&type=5) page in Salesforce will display error messages for failed operations. + From 6e205b7198b98810558611306b0ceebe626e940f Mon Sep 17 00:00:00 2001 From: AnnieZhao17 Date: Thu, 26 Sep 2024 11:48:51 -0700 Subject: [PATCH 17/35] Wording changes from PR reviews [netlify-build] --- src/connections/aws-privatelink.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md index da6fce65b9..ff90ab189b 100644 --- a/src/connections/aws-privatelink.md +++ b/src/connections/aws-privatelink.md @@ -19,21 +19,21 @@ The following Databricks integrations support PrivateLink: > The setup required to configure the Databricks PrivateLink integration requires front-end and back-end PrivateLink configuration. Review the [Databricks documentation on AWS PrivateLink](https://docs.databricks.com/en/security/network/classic/privatelink.html){:target="_blank”} to ensure you have everything required to set up this configuration before continuing. ### Prerequisites -Before you can configure AWS PrivateLink for Databricks, complete the following prerequisites in your Databricks workspace: +Before you can implement AWS PrivateLink for Databricks, complete the following prerequisites in your Databricks workspace: - Databricks account must be on the [Enterprise pricing tier](https://www.databricks.com/product/pricing/platform-addons){:target="_blank”} and use the [E2 version](https://docs.databricks.com/en/archive/aws/end-of-life-legacy-workspaces.html#e2-architecture){:target="_blank”} of the platform. - Databricks workspace must use a [Customer-managed VPC](https://docs.databricks.com/en/security/network/classic/customer-managed-vpc.html){:target="_blank”} and [Secure cluster connectivity](https://docs.databricks.com/en/security/network/classic/secure-cluster-connectivity.html){:target="_blank”}. - Configure your [VPC](https://docs.databricks.com/en/security/network/classic/customer-managed-vpc.html){:target="_blank”} with DNS hostnames and DNS resolution - Configure a [security group](https://docs.databricks.com/en/security/network/classic/customer-managed-vpc.html#security-groups){:target="_blank”} with bidirectional access to 0.0.0.0/0 and ports 443, 3306, 6666, 2443, and 8443-8451. -### Configure PrivateLink for Databricks +### Implement PrivateLink for Databricks To implement Segment's PrivateLink integration for Databricks: 1. Follow the instructions in Databricks' [Enable private connectivity using AWS PrivateLink](https://docs.databricks.com/en/security/network/classic/privatelink.html){:target="_blank”} documentation. You must create a [back-end](https://docs.databricks.com/en/security/network/classic/privatelink.html#private-connectivity-overview){:target="_blank”} connection to integrate with Segment's front-end connection. 2. After you've configured a back-end connection for Databricks, let your Customer Success Manager (CSM) know that you're interested in PrivateLink. 3. Segment's engineering team creates a custom VPC endpoint on your behalf. Segment then provides you with the VPC endpoint's ID. -4. Follow the instructions in Databricks' [Register PrivateLink objects](https://docs.databricks.com/en/security/network/classic/privatelink.html#step-3-register-privatelink-objects){:target="_blank”} documentation. It'll instruct you to register the VPC endpoint in your Databricks account and to create or update your Private Access Setting to include the VPC endpoint. -5. Configure your Databricks workspace to [use the Private Access Setting object](https://docs.databricks.com/en/security/network/classic/privatelink.html#step-4-create-or-update-your-workspace-with-privatelink-objects) from the previous step. +4. Register the VPC endpoint in your Databricks account and create or update your Private Access Setting to include the VPC endpoint. For more information, see Databricks' [Register PrivateLink objects](https://docs.databricks.com/en/security/network/classic/privatelink.html#step-3-register-privatelink-objects){:target="_blank”} documentation. +5. Configure your Databricks workspace to [use the Private Access Setting object](https://docs.databricks.com/en/security/network/classic/privatelink.html#step-4-create-or-update-your-workspace-with-privatelink-objects){:target="_blank”} from the previous step. 6. Reach back out to your CSM and provide them with your Databricks Workspace URL. Segment configures their internal DNS to reroute Segment traffic for your Databricks workspace to your VPC endpoint. -7. Your CSM notifies you that Segment's PrivateLink integration is complete. If you have any existing Segment Databricks integrations that use your Databricks workspace URL, they now automatically use PrivateLink. You can also create new Databricks integrations in the Segment app. All newly created integrations using your Databricks workspace URL will automatically use PrivateLink. +7. Your CSM notifies you that Segment's PrivateLink integration is complete. If you have any existing Segment Databricks integrations that use your Databricks workspace URL, they now automatically use PrivateLink. Any new Databricks integrations created in the Segment app using your Databricks workspace URL will also automatically use PrivateLink. ## RDS Postgres @@ -42,14 +42,14 @@ The following RDS Postgres integrations support PrivateLink: - [RDS Postgres Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup/) ### Prerequisites -Before you can configure AWS PrivateLink for RDS Postgres, complete the following prerequisites: +Before you can implement AWS PrivateLink for RDS Postgres, complete the following prerequisites: - **Set up a Network Load Balancer (NLB) to route traffic to your Postgres database**: Segment recommends creating a NLB that has target group IP address synchronization, using a solution like AWS Lambda. If any updates are made to the Availability Zones (AZs) enabled for your NLB, please let your CSM know so that Segment can update the AZs of your VPC endpoint. - **Configure your NLB with one of the following settings**: - Disable the **Enforce inbound rules on PrivateLink traffic** setting - If you must enforce inbound rules on PrivateLink traffic, add an inbound rule that allows traffic belonging to Segment's PrivateLink/Edge CIDR: `10.0.0.0/8` -### Configure PrivateLink for RDS Postgres +### Implement PrivateLink for RDS Postgres To implement Segment's PrivateLink integration for RDS Postgres: 1. Create a Network Load Balancer VPC endpoint service using the instructions in the [Create a service powered by AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-endpoint-service.html){:target="_blank”} documentation. 2. Let your Customer Success Manager (CSM) know that you're interested in PrivateLink. They will share information with you about Segment's AWS principal. @@ -64,12 +64,12 @@ The following Redshift integrations support PrivateLink: - [Redshift Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/) ### Prerequisites -Before you can configure AWS PrivateLink for Redshift, complete the following prerequisites: +Before you can implement AWS PrivateLink for Redshift, complete the following prerequisites: - **You're using the RA3 node type**: To access Segment's PrivateLink integration, use an RA3 instance. - **You've enabled cluster relocation**: Cluster relocation migrates your cluster behind a proxy and keeps the cluster endpoint unchanged, even if your cluster needs to be migrated to a new Availability Zone. A consistent cluster endpoint makes it possible for Segment's Edge account and VPC to remain connected to your cluster. To enable cluster relocation, follow the instructions in the AWS [Relocating your cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html){:target="_blank”} documentation. - **Your cluster is using a port within the ranges 5431-5455 or 8191-8215**: Clusters with cluster relocation enabled [might encounter an error if updated to include a port outside of this range](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html#:~:text=You%20can%20change%20to%20another%20port%20from%20the%20port%20range%20of%205431%2D5455%20or%208191%2D8215.%20(Don%27t%20change%20to%20a%20port%20outside%20the%20ranges.%20It%20results%20in%20an%20error.)){:target="_blank”}. -### Configure PrivateLink for Redshift +### Implement PrivateLink for Redshift To implement Segment's PrivateLink integration for Redshift: 1. Let your Customer Success Manager (CSM) know that you're interested in PrivateLink. They will share information with you about Segment’s Edge account and VPC. 2. After you receive the Edge account ID and VPC ID, [grant cluster access to Segment's Edge account and VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc-console-grantor.html){:target="_blank”}. @@ -84,15 +84,15 @@ The following Snowflake integrations support PrivateLink: - [Snowflake Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/snowflake-setup/) ### Prerequisites -Before you can configure AWS PrivateLink for Snowflake, complete the following prerequisites: -- Your Snowflake account is on the Business Critical [Edition](https://docs.snowflake.com/en/user-guide/intro-editions){:target="_blank”} or higher. +Before you can implement AWS PrivateLink for Snowflake, complete the following prerequisites: +- Your Snowflake account is on the [Business Critical Edition](https://docs.snowflake.com/en/user-guide/intro-editions){:target="_blank”} or higher. - Your Snowflake account is hosted on the [AWS cloud platform](https://docs.snowflake.com/en/user-guide/intro-cloud-platforms){:target="_blank”}. -### Configure PrivateLink for Snowflake +### Implement PrivateLink for Snowflake To implement Segment's PrivateLink integration for Snowflake: 1. Follow Snowflake's PrivateLink documentation to [enable AWS PrivateLink](https://docs.snowflake.com/en/user-guide/admin-security-privatelink#enabling-aws-privatelink){:target="_blank”} for your Snowflake account. 2. Let your Customer Success Manager (CSM) know that you're interested in PrivateLink. They will provide you with Segment’s AWS Edge account ID. 3. Create a Snowflake Support Case to authorize PrivateLink connections from Segment's AWS account ID as a third party vendor to your Snowflake account. -4. After Snowflake support authorizes Segment, call the [SYSTEM$GET_PRIVATELINK_CONFIG](https://docs.snowflake.com/en/sql-reference/functions/system_get_privatelink_config) function while using the Snowflake ACCOUNTADMIN role. Reach back out to your Segment CSM and provide them with the **privatelink-vpce-id** and **privatelink-account-url** values from the function output. Note down for yourself the **privatelink-account-name** value. +4. After Snowflake support authorizes Segment, call the [SYSTEM$GET_PRIVATELINK_CONFIG](https://docs.snowflake.com/en/sql-reference/functions/system_get_privatelink_config){:target="_blank”} function while using the Snowflake ACCOUNTADMIN role. Reach back out to your Segment CSM and provide them with the **privatelink-vpce-id** and **privatelink-account-url** values from the function output. Note down for yourself the **privatelink-account-name** value. 5. Segment's engineering team creates a custom VPC endpoint on your behalf. Segment also creates a CNAME record to reroute Segment traffic to use your VPC endpoint. This ensures that Segment connections to your **privatelink-account-name** are made over PrivateLink. 6. Your CSM notifies you that the setup on Segment's side is complete. Use your **privatelink-account-name** as the **Account** setting to update or create new Snowflake integrations in the Segment app. From a458456c5e5ef643ada2c461b102d5b2d7ce09fd Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Thu, 26 Sep 2024 16:25:45 -0400 Subject: [PATCH 18/35] Update src/connections/destinations/catalog/actions-salesforce/index.md Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../destinations/catalog/actions-salesforce/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-salesforce/index.md b/src/connections/destinations/catalog/actions-salesforce/index.md index 783e87c506..0d984a8591 100644 --- a/src/connections/destinations/catalog/actions-salesforce/index.md +++ b/src/connections/destinations/catalog/actions-salesforce/index.md @@ -44,7 +44,7 @@ Before you connect Segment to Salesforce, please ensure you have a Salesforce ac ## Actions v2 -Segment created new Actions v2 to provide you with additional access to features. Segment's Actions v2 support the following features: +Segment's Actions v2 provide you with access to the following features: - **Sync modes**: Control how Segment updates Salesforce by selecting a [sync mode](#sync-modes), or a strategy for updating your downstream data. - **Dynamic dropdowns**: When creating or updating a mapping in the Segment app, the dropdown auto-populates all of the available properties directly from Salesforce. - **Create and modify data**: Use Sync modes to create objects in your downstream destination without having to leave the Segment app. From 480f2980153868bfc82e2c29b950304e32174234 Mon Sep 17 00:00:00 2001 From: Joe Ayoub Date: Fri, 27 Sep 2024 09:09:48 +0100 Subject: [PATCH 19/35] spelling correction --- src/_includes/components/actions-fields.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_includes/components/actions-fields.html b/src/_includes/components/actions-fields.html index 1cd9f40c29..830084324d 100644 --- a/src/_includes/components/actions-fields.html +++ b/src/_includes/components/actions-fields.html @@ -137,7 +137,7 @@

You can use the Custom Object v2 Action to make multiple assosciations

- For more information, see HubSpot's [Assosciate records](https://knowledge.hubspot.com/records/associate-records){:target="_blank”} documentation. + For more information, see HubSpot's [Associate records](https://knowledge.hubspot.com/records/associate-records){:target="_blank”} documentation.

From 21cc0da655b8463c30177eb45e98237d4bf7901e Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Fri, 27 Sep 2024 11:51:33 -0400 Subject: [PATCH 20/35] bump up destination settings one level + rm duplicate actions --- src/_includes/components/actions-fields.html | 2 +- .../destinations/catalog/actions-customerio/index.md | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/_includes/components/actions-fields.html b/src/_includes/components/actions-fields.html index 830084324d..2223fb96ef 100644 --- a/src/_includes/components/actions-fields.html +++ b/src/_includes/components/actions-fields.html @@ -20,7 +20,7 @@ {% if settings.size > 0 %} -### Destination Settings +## Destination Settings diff --git a/src/connections/destinations/catalog/actions-customerio/index.md b/src/connections/destinations/catalog/actions-customerio/index.md index 46dffe8120..bb4adc1ccf 100644 --- a/src/connections/destinations/catalog/actions-customerio/index.md +++ b/src/connections/destinations/catalog/actions-customerio/index.md @@ -29,8 +29,6 @@ id: 5f7dd78fe27ce7ff2b8bfa37 {% include components/actions-fields.html settings="true"%} -{% include components/actions-fields.html %} - ## Migration from Customer.io classic From 46bdcce4ac13300336a5452ec61a73fbe31f76f7 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Mon, 30 Sep 2024 16:11:44 -0400 Subject: [PATCH 21/35] make changes requested by eng --- .../reverse-etl/images/mapping-alerting.jpeg | Bin 0 -> 178284 bytes src/connections/reverse-etl/manage-retl.md | 10 +++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 src/connections/reverse-etl/images/mapping-alerting.jpeg diff --git a/src/connections/reverse-etl/images/mapping-alerting.jpeg b/src/connections/reverse-etl/images/mapping-alerting.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a8d643e9b8aa4d8c4da8a314d3cf39575210da64 GIT binary patch literal 178284 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 literal 0 HcmV?d00001 diff --git a/src/connections/reverse-etl/manage-retl.md b/src/connections/reverse-etl/manage-retl.md index 0eced3730e..925283fab9 100644 --- a/src/connections/reverse-etl/manage-retl.md +++ b/src/connections/reverse-etl/manage-retl.md @@ -53,7 +53,7 @@ To reset a sync: You can choose to replay syncs. To replay a specific sync, contact [friends@segment.com](mailto:friends@segment.com). Keep in mind that triggering a replay resyncs all records for a given sync. ## Alerting -You can opt in to receive email, Slack, and in-app alerts about Reverse ETL sync failures, spikes in data ingested from your model, and fluctuations in the volume of events successfully delivered from your mapping. +You can opt in to receive email, Slack, and in-app alerts about Reverse ETL sync failures and fluctuations in the volume of events successfully delivered to your mapping. The notification channels that you select for one alert will apply to all alerts in your workspace. @@ -73,6 +73,7 @@ To subscribe to alerts for a failed or partially successful sync: > success "" > If you opted to receive notifications by email, you can click **View active email addresses** to see the email addresses that are currently signed up to receive notifications. + ### Mapping-level successful delivery rate fluctuations @@ -96,12 +98,14 @@ You can create an alert that notifies you when the volume of events successfully To receive a successful delivery rate fluctuation alert in a Slack channel, you must first create a Slack webhook. For more information about Slack webhooks, see Slack's [Sending messages using incoming webhooks](https://api.slack.com/messaging/webhooks){:target="_blank”} documentation. +![A screenshot of the Alerts tab for a Mapping, with the new mapping sidesheet partially filled out.](images/mapping-alerting.jpeg) + To subscribe to alerts for successful delivery fluctuations at the mapping level: 1. Navigate to your intended mapping and select the **Alerts** tab. 2. Click **Create alert**. 3. Set an *alert threshold*, or the percentage of successfully delivered events that would prompt an alert. 4. Select one or more of the following notification channels: - - **Email**: Select this channel to receive emailed alerts at the email address that you use to sign in to Segment. + - **Email**: Enter an email address or alias that should receive alerts. - **Slack notification**: Enter a Webhook URL and a Slack channel name to receive alerts in a Slack channel. - **In-app notifications**: Select this to receive notifications in the Segment app. To view your notifications, select the bell next to your user icon in the Segment app. 5. Toggle the **Enable alert** setting on and click **Create**. From 68ff088fafe5fe3daccba5d25032c947ad407cac Mon Sep 17 00:00:00 2001 From: vanand17 <96406241+vanand17@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:04:52 +1000 Subject: [PATCH 22/35] Update linked-audiences for list actions destinations --- src/engage/audiences/linked-audiences.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engage/audiences/linked-audiences.md b/src/engage/audiences/linked-audiences.md index 26371b4778..cc7661d4cc 100644 --- a/src/engage/audiences/linked-audiences.md +++ b/src/engage/audiences/linked-audiences.md @@ -141,7 +141,7 @@ To activate your Linked Audience: [Destinations](/docs/connections/destinations/) are the business tools or apps that Segment forwards your data to. Adding a destination allows you to act on your data and learn more about your customers in real time. To fully take advantage of Linked Audiences, you must connect and configure at least one destination. > info "Linked Audiences destinations" -> Linked Audiences only supports [Actions Destinations](/docs/connections/destinations/actions/#available-actions-based-destinations). +> Linked Audiences only supports [Actions Destinations](/docs/connections/destinations/actions/#available-actions-based-destinations). List actions destinations are not supported currently. **Note:** Ensure your [destination has been enabled](/connections/destinations/catalog/) in Segment before you begin the steps below. From d8437155926400bf9a97ce675dd03398854cdb1e Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 30 Sep 2024 21:44:18 -0500 Subject: [PATCH 23/35] fix some typos --- src/connections/auto-instrumentation/kotlin-setup.md | 2 +- src/connections/auto-instrumentation/swift-setup.md | 2 +- src/connections/auto-instrumentation/web-setup.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/connections/auto-instrumentation/kotlin-setup.md b/src/connections/auto-instrumentation/kotlin-setup.md index cc6b3114e1..ecaa8e09fd 100644 --- a/src/connections/auto-instrumentation/kotlin-setup.md +++ b/src/connections/auto-instrumentation/kotlin-setup.md @@ -106,4 +106,4 @@ Using the Signals Configuration object, you can control the destination, frequen ## Next steps -This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers examples rules. +This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers example rules. diff --git a/src/connections/auto-instrumentation/swift-setup.md b/src/connections/auto-instrumentation/swift-setup.md index b693722ea7..dd8f10d254 100644 --- a/src/connections/auto-instrumentation/swift-setup.md +++ b/src/connections/auto-instrumentation/swift-setup.md @@ -109,4 +109,4 @@ Using the Signals Configuration object, you can control the destination, frequen ## Next steps -This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers examples rules. +This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers example rules. diff --git a/src/connections/auto-instrumentation/web-setup.md b/src/connections/auto-instrumentation/web-setup.md index 7e39c40358..12019cabdd 100644 --- a/src/connections/auto-instrumentation/web-setup.md +++ b/src/connections/auto-instrumentation/web-setup.md @@ -125,4 +125,4 @@ Using the Signals Configuration object, you can control the destination, frequen ## Next steps -This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers examples rules. +This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers example rules. From 7889e89ecb5d0f336b7d0177fc2d5613fc0b8046 Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 30 Sep 2024 21:49:40 -0500 Subject: [PATCH 24/35] add redirect --- src/connections/auto-instrumentation/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/connections/auto-instrumentation/index.md b/src/connections/auto-instrumentation/index.md index 01259e427d..4408f02d6e 100644 --- a/src/connections/auto-instrumentation/index.md +++ b/src/connections/auto-instrumentation/index.md @@ -20,6 +20,8 @@ sources: url: https://cdn.filepicker.io/api/file/aRgo4XJQZausZxD4gZQq mark: url: https://cdn.filepicker.io/api/file/aRgo4XJQZausZxD4gZQq +redirect_from: + - '/docs/connections/auto-instrumentation/setup/' --- Auto-Instrumentation simplifies tracking in your websites and apps by eliminating the need for a traditional Segment instrumentation. @@ -48,7 +50,7 @@ Some Auto-Instrumentation advantages include: ## How it works -Once you integrate the Analytics SDK and Signals SDK into your website or application, Segment begins to passively monitor user activity like button clicks, page navigation, and network data. Segment captures these events as "signals" and sends them to your Auto-Instrumentation source in real time. +Once you integrate the Analytics SDK and Signals SDK into your website or application, Segment begins to passively monitor user activity like button clicks, page navigation, and network data. Segment captures these events as "signals" and sends them to your Auto-Instrumentation source in real time. In Segment, the Auto-Instrumentation source lets you view raw signals. You can then [use this data to create detailed analytics events](/docs/connections/auto-instrumentation/configuration/) based on those signals, enriching your insights into user behavior and applicatino performance. From 651fa09e1bc7819c02257b1b0cfc148e6af6cbcd Mon Sep 17 00:00:00 2001 From: pwseg Date: Mon, 30 Sep 2024 21:59:41 -0500 Subject: [PATCH 25/35] Restore Gemfile --- Gemfile.lock | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index ba53330b9f..8f5e6c086c 100755 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -45,7 +45,6 @@ GEM ffi (1.15.5) filesize (0.2.0) forwardable-extended (2.6.0) - google-protobuf (3.23.2-arm64-darwin) google-protobuf (3.23.2-x86_64-darwin) http_parser.rb (0.8.0) httpclient (2.8.3) @@ -88,9 +87,7 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.4.0) - nokogiri (1.13.10-arm64-darwin) - racc (~> 1.4) - nokogiri (1.13.10-x86_64-darwin) + nokogiri (1.15.2-x86_64-darwin) racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) @@ -104,12 +101,10 @@ GEM rb-inotify (0.10.1) ffi (~> 1.0) rexml (3.2.5) - rouge (3.30.0) + rouge (4.1.2) ruby2_keywords (0.0.5) safe_yaml (1.0.5) - sass-embedded (1.58.3-arm64-darwin) - google-protobuf (~> 3.21) - sass-embedded (1.58.3-x86_64-darwin) + sass-embedded (1.62.1-x86_64-darwin) google-protobuf (~> 3.21) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -124,7 +119,7 @@ GEM webrick (1.8.1) PLATFORMS - arm64-darwin-23 + ruby x86_64-darwin-19 x86_64-darwin-20 @@ -146,4 +141,4 @@ DEPENDENCIES wdm (~> 0.1.0) BUNDLED WITH - 2.4.5 + 2.2.18 From 2e5de2b2f517a0a73afb87e027b07eaef85ae3d9 Mon Sep 17 00:00:00 2001 From: Thomas Gilbert Date: Tue, 1 Oct 2024 08:36:59 -0400 Subject: [PATCH 26/35] update link --- .../destinations/catalog/actions-contentstack/index.md | 2 +- src/connections/destinations/catalog/contentstack-web/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/connections/destinations/catalog/actions-contentstack/index.md b/src/connections/destinations/catalog/actions-contentstack/index.md index 34711cb243..f8a2c2149a 100644 --- a/src/connections/destinations/catalog/actions-contentstack/index.md +++ b/src/connections/destinations/catalog/actions-contentstack/index.md @@ -40,4 +40,4 @@ Start sending the payload of events to Segment using Track or Identify calls. Th Based on your events/payloads, your Contentstack Personalize project should now start receiving events to help you understand the users associated with your mapped values. -The event names and properties you use must match those defined in your Contentstack Personalize project. For advanced customization and to further enhance your personalized experience, explore Contentstack Personalize in [Contentstack's Documentation](https://www.contentstack.com/docs){:target="_blank”}. \ No newline at end of file +The event names and properties you use must match those defined in your Contentstack Personalize project. For advanced customization and to further enhance your personalized experience, explore Contentstack Personalize in [Contentstack's Documentation](https://www.contentstack.com/docs/personalize){:target="_blank”}. diff --git a/src/connections/destinations/catalog/contentstack-web/index.md b/src/connections/destinations/catalog/contentstack-web/index.md index 039226a53c..9091acd772 100644 --- a/src/connections/destinations/catalog/contentstack-web/index.md +++ b/src/connections/destinations/catalog/contentstack-web/index.md @@ -40,4 +40,4 @@ Start sending the payload of events to Segment using track or identify calls. Th Based on your events/payloads, your Contentstack Personalize project should now start receiving events for understanding the users associated with your mapped values. -The event names and properties you use must match those defined in your Contentstack Personalize project. For advanced customization and to further enhance your personalized experience, explore Contentstack Personalize in [Contentstack's Documentation](https://www.contentstack.com/docs){:target="_blank”}. +The event names and properties you use must match those defined in your Contentstack Personalize project. For advanced customization and to further enhance your personalized experience, explore Contentstack Personalize in [Contentstack's Documentation](https://www.contentstack.com/docs/personalize){:target="_blank”}. From 81a4ea90ac6b21af092ca675843175ac0fd86a62 Mon Sep 17 00:00:00 2001 From: prigiattiperrut <47340158+prigiattiperrut@users.noreply.github.com> Date: Tue, 1 Oct 2024 14:47:15 +0100 Subject: [PATCH 27/35] Update troubleshooting.md --- .../catalog/libraries/website/javascript/troubleshooting.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md b/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md index 2f6cb74cfc..c9cb2bcc02 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md +++ b/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md @@ -129,6 +129,10 @@ If you're having issues with your destinations loading with Prototype.js, there Analytics.js generates a campaign object inside the context object whenever the URL contains search parameters. Without any UTM parameters, the campaign object remains empty. +## Why Are Events Received with Timestamps Set in the Past or Future? + +Please see full details [here](https://segment.com/docs/connections/spec/common/#why-are-events-received-with-timestamps-set-in-the-past-or-future). + ## Known issues: [Review and contribute to these on GitHub](https://github.com/segmentio/analytics.js/issues). From d5a5d22a146041d04a8459a9c93f950628bfe631 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:48:23 -0400 Subject: [PATCH 28/35] Apply suggestions from code review --- .../catalog/libraries/website/javascript/troubleshooting.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md b/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md index c9cb2bcc02..d78145e23f 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md +++ b/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md @@ -129,9 +129,9 @@ If you're having issues with your destinations loading with Prototype.js, there Analytics.js generates a campaign object inside the context object whenever the URL contains search parameters. Without any UTM parameters, the campaign object remains empty. -## Why Are Events Received with Timestamps Set in the Past or Future? +## Why do I see events with timestamps in the past or future? -Please see full details [here](https://segment.com/docs/connections/spec/common/#why-are-events-received-with-timestamps-set-in-the-past-or-future). +You may see events with timestamp discrepancies due to manual overriding of the timestamp value, mobile apps closed or set in the background, traffic from bots, or inaccurate device or browser time. For more information, see Segment's [Common Fields Spec](/docs/connections/spec/common/#why-are-events-received-with-timestamps-set-in-the-past-or-future). ## Known issues: From 97dfefbaa6ae78780b902fad48ec11dd93cdb475 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:22:06 -0400 Subject: [PATCH 29/35] Apply suggestions from code review --- src/protocols/faq.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/protocols/faq.md b/src/protocols/faq.md index 74f1c53a26..9b7d47a30e 100644 --- a/src/protocols/faq.md +++ b/src/protocols/faq.md @@ -155,9 +155,9 @@ Segment's [Schema Controls](docs/connections/sources/schema/destination-data-con 3. **Advanced Blocking Controls/"Common JSON Schema Violations"**: Segment evaluates incoming events thoroughly, including event names, context field names and values, and the names and values of properties/traits, against the [Common JSON schema](/docs/protocols/tracking-plan/create/#common-json-schema) in your Tracking Plan. -### Why am I still seeing unplanned properties within the source Schema, when the properties have been added to newer versions of the Tracking Plan? +### Why am I still seeing unplanned properties in my Source Schema when I've added the properties to a new version of my Tracking Plan? -The schema will only validate events against the oldest event version that exists in the tracking plan, so if you have version 1 and version 2, the schema page will only check the tracking plan against version 1. +The source schema only validates events against the oldest event version in a Tracking Plan. If, for example, you have a version 1 and version 2 of your Tracking Plan, the schema only checks against version 1 of your Tracking Plan. ### Do blocked and discarded events count towards my MTU counts? From c94904f6e6c7990095772736dd7f32a0f640e7d3 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:34:11 -0400 Subject: [PATCH 30/35] add back updates --- .../destinations/catalog/actions-braze-cloud/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/connections/destinations/catalog/actions-braze-cloud/index.md b/src/connections/destinations/catalog/actions-braze-cloud/index.md index bceaa1e650..fae5ae3012 100644 --- a/src/connections/destinations/catalog/actions-braze-cloud/index.md +++ b/src/connections/destinations/catalog/actions-braze-cloud/index.md @@ -32,7 +32,7 @@ Braze Cloud Mode (Actions) provides the following benefit over Braze Classic: - **REST Endpoint**: Your Braze REST Endpoint. For more information, see [API Overview](https://www.braze.com/docs/api/basics/){:target="_blank"} in the Braze documentation. > info "" -> Braze requires that you include a `userId` or `braze_id` for all calls made in cloud-mode. Segment sends a `braze_id` if the `userId` is missing. When you use a device-mode connection, Braze automatically tracks anonymous activity using the `braze_id` if a `userId` is missing. +> Braze now supports sending `email` as an identifier. Braze requires that you include `userId`, `braze_id`, or `email` for all calls made in cloud-mode. Segment sends a `braze_id` if the `userId` is missing. When you use a device-mode connection, Braze automatically tracks anonymous activity using the `braze_id` if a `userId` is missing. > info "V2 Actions" > The V2 versions of each action include improved sync mode support. Only valid sync modes for each action are available. As a result, the `_update_existing_only` parameter is tied to the sync mode you select for the mapping. If you select the `update` sync mode, Segment passes `_update_existing_only: true` to Braze, and if you choose the `add` sync mode, Segment passes `_update_existing_only: false` to Braze. @@ -50,4 +50,4 @@ Keep the following in mind if you plan to move to Braze (Actions) from the class Braze requires one of either `external_id`, `user_alias`, or `braze_id` to be present in all events sent. If events are failing to send, please check your event mappings to make sure these fields are resolving to valid values. ### Missing events -When an event is sent under an alias, the event may seem to be missing when the alias cannot be found in Braze. This may be due to incorrect search for the alias in Braze. To search for an alias in Braze, use the format "Alias Label:Alias Name". For example, if the "Alias Label" field is set as email and "Alias Name" field is set as email address (for example: "test@email.com"), use "email:test@email.com" to search for the alias in Braze. +When an event is sent under an alias, the event may seem to be missing when the alias cannot be found in Braze. This may be due to incorrect search for the alias in Braze. To search for an alias in Braze, use the format "Alias Label:Alias Name". For example, if the "Alias Label" field is set as email and "Alias Name" field is set as email address (for example: "test@email.com"), use "email:test@email.com" to search for the alias in Braze. \ No newline at end of file From 8d7fa2a52c1d070ab1cb0bec8b948206bbcd062f Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:57:27 -0400 Subject: [PATCH 31/35] Apply suggestions from code review --- 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 24f79e556b..c528daa275 100644 --- a/src/connections/functions/insert-functions.md +++ b/src/connections/functions/insert-functions.md @@ -47,8 +47,8 @@ Use this page to edit and manage insert functions in your workspace. You can also use this page to [enable destination insert functions](#enable-the-insert-function) in your workspace. -> warning "Storage Destination Limit" -> Currently, you are not able to connect a Storage Destination to an Insert Function. +> warning "Storage destinations are not compatible with Destination Insert Functions" +> You cannot connect an Insert Function to a storage destination at this time. ## Code the destination insert function From 1267a1d1de39657ba79908020f86d424b574b97e Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:59:46 -0400 Subject: [PATCH 32/35] move note --- src/connections/functions/insert-functions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/connections/functions/insert-functions.md b/src/connections/functions/insert-functions.md index 24f79e556b..5629a6de81 100644 --- a/src/connections/functions/insert-functions.md +++ b/src/connections/functions/insert-functions.md @@ -36,6 +36,9 @@ For data to flow to your downstream destinations, you'll need to connect your in 2. Click **Connect a destination**. 3. Select the destination you'd like to connect to and click **Connect to destination**. +> warning "Storage destinations are not compatible with Destination Insert Functions" +> You cannot connect an Insert Function to a storage destination at this time. + ### Using the Destinations tab To access insert functions through the Destinations tab: @@ -47,9 +50,6 @@ Use this page to edit and manage insert functions in your workspace. You can also use this page to [enable destination insert functions](#enable-the-insert-function) in your workspace. -> warning "Storage Destination Limit" -> Currently, you are not able to connect a Storage Destination to an Insert Function. - ## Code the destination insert function Segment invokes a separate part of the function (called a "handler") for each event type that you send to your destination insert function. From dd7446ac2b8c733f24164366bac7cc8e947fdfa3 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:39:20 -0400 Subject: [PATCH 33/35] add P&P considerations --- src/connections/aws-privatelink.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md index ff90ab189b..596b0c3db5 100644 --- a/src/connections/aws-privatelink.md +++ b/src/connections/aws-privatelink.md @@ -5,9 +5,13 @@ title: Amazon Web Services PrivateLink [Amazon Web Services' PrivateLink](https://aws.amazon.com/privatelink/){:target="_blank”} is an AWS service that provides private connectivity between VPCs without exposing traffic to the public Internet. Keeping traffic in the Amazon network reduces the data security risk associated with exposing your Warehouse traffic to the Internet. > info "" -> Segment's PrivateLink integration is currently in private beta and is governed by Segment’s [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank”}. Only warehouses located in regions `us-east-1`, `us-west-2`, or `eu-west-1` are eligible for PrivateLink. You might incur additional networking costs while using AWS PrivateLink. +> Segment's PrivateLink integration is currently in private beta and is governed by Segment’s [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank”}. You might incur additional networking costs while using AWS PrivateLink. -During the Private Beta, you can set up AWS PrivateLink for [Databricks](#databricks), [RDS Postgres](#rds-postgres), [Redshift](#redshift), and [Snowflake](#snowflake). +You can configure AWS PrivateLink for [Databricks](#databricks), [RDS Postgres](#rds-postgres), [Redshift](#redshift), and [Snowflake](#snowflake). Only warehouses located in regions `us-east-1`, `us-west-2`, or `eu-west-1` are eligible. + +Usage limits for each customer during the AWS PrivateLink Private Beta include the following: +- Up to 2 AWS PrivateLink VPC endpoints. +- A monthly data transfer limit of 300GB total for all PrivateLink VPC endpoints connected to Segment. ## Databricks From 55243934f419c7513e42c9110184bcc21fd3b199 Mon Sep 17 00:00:00 2001 From: stayseesong <83784848+stayseesong@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:11:29 -0700 Subject: [PATCH 34/35] Update src/engage/audiences/linked-audiences.md --- src/engage/audiences/linked-audiences.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engage/audiences/linked-audiences.md b/src/engage/audiences/linked-audiences.md index cc7661d4cc..eb34760c90 100644 --- a/src/engage/audiences/linked-audiences.md +++ b/src/engage/audiences/linked-audiences.md @@ -141,7 +141,7 @@ To activate your Linked Audience: [Destinations](/docs/connections/destinations/) are the business tools or apps that Segment forwards your data to. Adding a destination allows you to act on your data and learn more about your customers in real time. To fully take advantage of Linked Audiences, you must connect and configure at least one destination. > info "Linked Audiences destinations" -> Linked Audiences only supports [Actions Destinations](/docs/connections/destinations/actions/#available-actions-based-destinations). List actions destinations are not supported currently. +> Linked Audiences only supports [Actions Destinations](/docs/connections/destinations/actions/#available-actions-based-destinations). List destinations aren't supported. **Note:** Ensure your [destination has been enabled](/connections/destinations/catalog/) in Segment before you begin the steps below. From 98278840f94c003aae056cc348f0fc84d8fc08ea Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 1 Oct 2024 14:07:02 -0500 Subject: [PATCH 35/35] catalog update --- src/_data/catalog/destination_categories.yml | 2 +- src/_data/catalog/destinations.yml | 2 +- src/_data/catalog/destinations_private.yml | 2 +- src/_data/catalog/source_categories.yml | 2 +- src/_data/catalog/sources.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index 654d738357..897a60efc2 100644 --- a/src/_data/catalog/destination_categories.yml +++ b/src/_data/catalog/destination_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination categories last updated 2024-09-26 +# destination categories last updated 2024-10-01 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 6792a9e906..a68a561ba2 100644 --- a/src/_data/catalog/destinations.yml +++ b/src/_data/catalog/destinations.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2024-09-26 +# destination data last updated 2024-10-01 items: - id: 637e8d185e2dec264895ea89 display_name: 1Flow diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml index b325437cc6..1958b6c393 100644 --- a/src/_data/catalog/destinations_private.yml +++ b/src/_data/catalog/destinations_private.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2024-09-26 +# destination data last updated 2024-10-01 items: - id: 54521fd925e721e32a72eee1 display_name: Pardot diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml index d5cc6e6e0d..de9f1e2947 100644 --- a/src/_data/catalog/source_categories.yml +++ b/src/_data/catalog/source_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# source categories last updated 2024-09-26 +# source categories last updated 2024-10-01 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 e9a88acc0a..dc61a33fc3 100644 --- a/src/_data/catalog/sources.yml +++ b/src/_data/catalog/sources.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# sources last updated 2024-09-26 +# sources last updated 2024-10-01 items: - id: 8HWbgPTt3k display_name: .NET