diff --git a/ignore-links.txt b/ignore-links.txt new file mode 100644 index 0000000000..297a335673 --- /dev/null +++ b/ignore-links.txt @@ -0,0 +1,34 @@ +https://www.linkedin.com/company/segment-io/ +https://support.twilio.com/hc/en-us/articles/223136127-Twilio-Support-business-hours +https://support.cloudflare.com/hc/en-us/articles/360020348832-How-do-I-do-CNAME-setup- +https://github.com/segment-integrations/analytics.js-integration-adlearn-open-platform +https://github.com/segment-integrations/analytics.js-integration-adobe-analytics +https://marketing.adobe.com/resources/help/en_US/sc/implement/context_data_variables.html +https://marketing.adobe.com/resources/help/en_US/sc/implement/timestamps-overview.html +https://help.adroll.com/hc/en-us/articles/213429827-Currency-Codes +https://github.com/GetAmbassador/segment/blob/master/lib/index.js +https://help.amplitude.com/hc/en-us/articles/235649848-Settings#general +https://help.amplitude.com/hc/en-us/articles/115002923888-Limits#h_8d90ca72-bf91-4161-88b2-01b5448b0859 +https://help.amplitude.com/hc/en-us/articles/360017800371 +https://help.amplitude.com/hc/en-us/articles/360003032451-Instrumentation-Explorer-Debugger +https://amplitude.com/settings +https://support.anodot.com/hc/en-us/articles/360018508380-Segment-Integration +https://support.anodot.com/hc/en-us/articles/360009537879-Mapping-Dimensions-to-Measures-BETA- +https://github.com/segment-integrations/analytics.js-integration-appnexus +https://support.appsflyer.com/hc/en-us/articles/207034486-Server-to-Server-In-App-Events-API-HTTP-API- +https://support.appsflyer.com/hc/en-us/articles/207032246-OneLink-Setup-Guide +https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS +https://support.appsflyer.com/hc/en-us/articles/207032126-AppsFlyer-SDK-Integration-Android +https://support.autopilothq.com/hc/en-us/categories/200396835-Segment +https://support.autopilothq.com/hc/en-us/requests/new +https://support.autopilothq.com/hc/en-us/articles/203658119 +https://bugsnag.com/dashboard +https://github.com/segment-integrations/analytics.js-integration-clevertap +https://github.com/segment-integrations/analytics.js-integration-convertro +https://github.com/segment-integrations/analytics.js-integration-criteo +https://app.dreamdata.io/settings +https://www.getdrip.com/settings/site +https://github.com/segment-integrations/analytics.js-integration-eloqua +https://github.com/segment-integrations/analytics.js-integration-email-aptitude +https://platform.epica.ai/login +https://github.com/segment-integrations/analytics.js-integration-friendbuy \ No newline at end of file diff --git a/scripts/checklinks-external.js b/scripts/checklinks-external.js index ae9bbb3da9..40887d8c1d 100644 --- a/scripts/checklinks-external.js +++ b/scripts/checklinks-external.js @@ -22,7 +22,7 @@ const checkForDeadExternalUrls = async () => { const ph = posthtml([ require('posthtml-urls')({ eachURL: (url) => { - if (!url.startsWith('http://0') && !url.startsWith('/') && !url.startsWith('https://github.com/segmentio')) { + if (!url.startsWith('http://0') && !url.startsWith('/') && !url.startsWith('https://github.com/segmentio')) { urls.add(url) } }, @@ -30,33 +30,53 @@ const checkForDeadExternalUrls = async () => { ]) throbber.succeed() throbber.start('Processing files') - + // Run the above logic on each file files.forEach((file) => { ph.process(fs.readFileSync(file)) }) - + // Check all the links collected in the section above + throbber.succeed() throbber.start('Checking the links') const results = await checkLinks( Array.from(urls).map((url) => url - ), + ) ) + // If a link returns 'dead' (404), add it to an array const deadUrls = Array.from(urls).filter( - (url) => results[url].status === 'dead', + (url) => results[url].statusCode === 404, ) - + + // Get the ignore list + throbber.succeed() + throbber.start('Get the ignore list') + const readFileLines = filename => + fs.readFileSync(filename) + .toString('UTF8') + .split('\n') + + let ignoreList = readFileLines('ignore-links.txt') + + throbber.succeed() + + // Filter the ignored links + throbber.start('Filter the ignored URls') + let broke = [] + broke = deadUrls.filter(val => !ignoreList.includes(val)); + // If there are dead URLs, list them here, along with the count. Exit status 1 to indicate an error. - if (deadUrls.length > 0) { - throbber.fail(`Dead URLS: ${deadUrls.length}\n\n`) - console.log(`Dead URLS: ${deadUrls.length}\n\n${deadUrls.join('\n')}`) + if (broke.length > 0) { + throbber.fail(`Dead URLS: ${broke.length}\n\n`) + console.log(`Dead URLS: ${broke.length}\n\n${broke.join('\n')}`) process.exit(1) - } + } // Otherwise, claim that all the links work, and exit the process normally. else { + throbber.succeed() console.log('All links work!') process.exit } diff --git a/scripts/test.js b/scripts/test.js new file mode 100644 index 0000000000..33056fa238 --- /dev/null +++ b/scripts/test.js @@ -0,0 +1,10 @@ +const checkLinks = require('check-links') + +const check = async () => { + const url = process.argv[2] + const results = await checkLinks([url]) + console.log(results) + +} + +check() \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-braze-web/index.md b/src/connections/destinations/catalog/actions-braze-web/index.md index e616a92a12..c96a1a28c1 100644 --- a/src/connections/destinations/catalog/actions-braze-web/index.md +++ b/src/connections/destinations/catalog/actions-braze-web/index.md @@ -34,7 +34,7 @@ Braze Web Mode (Actions) can use the following features of Braze. ### In-app Messaging -Find instructions to configure In-app Messaging in the Braze [documentation](https://www.braze.com/academy/Best_Practices/#in-app-message-behavior){:target="_blank"}. Once configured, you can trigger in-app message display as a result of several different event types. By default, all In-App Messages that a user is eligible for are automatically delivered to the user upon a session start event. A new session automatically starts when a user loads your site. If you'd like to force a new session for a user, make an Identify call with the corresponding [userId](/docs/connections/spec/identify/#user-id) for that user. +Once configured, you can trigger in-app message display as a result of several different event types. By default, all In-App Messages that a user is eligible for are automatically delivered to the user upon a session start event. A new session automatically starts when a user loads your site. If you'd like to force a new session for a user, make an Identify call with the corresponding [userId](/docs/connections/spec/identify/#user-id) for that user. If you don't want your site to display new In-App Messages as they're received, disable automatic display and register your own display subscribers. To do this: @@ -60,7 +60,7 @@ The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](htt ### Push Notifications -1. To support push notifications on Chrome, you'll need to enable FCM/GCM as well as configure your site. Check out steps [one and two here, for detailed instructions on both](https://www.braze.com/documentation/Web/#step-1-to-support-chrome-enable-fcmgcm){:target="_blank"}. +1. To support push notifications on Chrome, you'll need to enable FCM/GCM as well as configure your site. Check out steps [one and two here for detailed instructions on both](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-1-to-support-chrome-enable-fcmgcm){:target="_blank"}. 2. Browser Registration. In order for a browser to receive push notifications, you must register it for push by calling: @@ -94,13 +94,13 @@ analytics.ready(function() { }); ``` -1. Set your GCM/FCM server API key and SenderID on the Braze dashboard. You can find more details for this [here](https://www.braze.com/documentation/Web/#step-4-set-your-gcmfcm-server-api-key-and-senderid-on-the-Braze-dashboard){:target="_blank"}. +1. Set your GCM/FCM server API key and SenderID on the Braze dashboard. You can find more details for this [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-4-set-your-gcmfcm-server-api-key-and-senderid-on-the-Braze-dashboard){:target="_blank"}. -2. To support push notifications on Safari, add your Website Push ID into your Segment Settings UI and Segment sends it when the Braze Web SDK initializes. To get your Website Push ID, follow the first two bullet points in [these instructions](https://www.braze.com/documentation/Web/#step-5-configure-safari-push){:target="_blank"}. +2. To support push notifications on Safari, add your Website Push ID into your Segment Settings UI and Segment sends it when the Braze Web SDK initializes. To get your Website Push ID, follow the first two bullet points in [these instructions](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-5-configure-safari-push){:target="_blank"}. ### Soft Push Prompts -1. Follow [step one](https://www.braze.com/documentation/Web/#soft-push-prompts){:target="_blank"} to create a "Prime for Push" in-app messaging Campaign on the Braze dashboard. +1. Follow [step one](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#soft-push-prompts){:target="_blank"} to create a "Prime for Push" in-app messaging Campaign on the Braze dashboard. 2. Add the following snippet to your site: @@ -141,7 +141,7 @@ analytics.ready(function() { }); ``` -For more details on this snippet, see Braze's documentation [here](https://www.braze.com/documentation/Web/#soft-push-prompts){:target="_blank"}. +For more details on this snippet, see Braze's documentation [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#soft-push-prompts){:target="_blank"}. > info "" > Place this snippet outside of your [Segment Snippet](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet) within your `script` tag. diff --git a/src/connections/destinations/catalog/adobe-analytics/index.md b/src/connections/destinations/catalog/adobe-analytics/index.md index bc466ab750..33615f7bf5 100644 --- a/src/connections/destinations/catalog/adobe-analytics/index.md +++ b/src/connections/destinations/catalog/adobe-analytics/index.md @@ -145,7 +145,7 @@ Segment's server-side integration is not open-source. Let's explore what happens **Important**: The Android library can collect the `userAgent` automatically - however, the iOS library cannot do so. However, since Segment does collect other contextual metadata about a device, it can render a valid iOS userAgent string to populate your Mobile Web Reports. -6. If you are using the [Marketing Cloud ID Service](https://marketing.adobe.com/resources/help/en_US/mcvid/mcvid_overview.html), you can pass the **Marketing Cloud Visitor ID** as an destination specific setting and which Segment sets as ``. +6. If you are using the Marketing Cloud ID Service, you can pass the **Marketing Cloud Visitor ID** as a destination specific setting and which Segment sets as ``. (In Node.js) ```javascript diff --git a/src/connections/destinations/catalog/adobe-analytics/settings.md b/src/connections/destinations/catalog/adobe-analytics/settings.md index 7e0cdd54df..69c585d35a 100644 --- a/src/connections/destinations/catalog/adobe-analytics/settings.md +++ b/src/connections/destinations/catalog/adobe-analytics/settings.md @@ -267,7 +267,7 @@ When you make a `page` call, here's what Segment does from the browser when you 3. Checks if the page call is associated with a `userId` from a previous `.identify()` call. If so, Segment sets the `userId` as `window.s.visitorID`. - **IMPORTANT**: Adobe Analytics [does not support setting visitorID](https://marketing.adobe.com/resources/help/en_US/sc/implement/timestamps-overview.html) if you are sending a timestamped call. So Segment first checks if your **Timestamp Option** is `disabled` _and_ that a `userId` exists on the event, and only then sets `window.s.visitorID`. + **IMPORTANT**: Adobe Analytics doesn't support setting visitorID if you send a timestamped call. So Segment first checks if your **Timestamp Option** is `disabled` _and_ that a `userId` exists on the event, and only then sets `window.s.visitorID`. 4. Checks for some common properties, and sets them on the `window.s` object: diff --git a/src/connections/destinations/catalog/amplitude/index.md b/src/connections/destinations/catalog/amplitude/index.md index 82ba8fe490..410e932b93 100644 --- a/src/connections/destinations/catalog/amplitude/index.md +++ b/src/connections/destinations/catalog/amplitude/index.md @@ -80,8 +80,8 @@ Page and Screen calls have two important properties: a *page name*, such as "Set If you use Analytics.js (in either [device- or cloud-mode](/docs/connections/destinations#connection-modes)), a mobile library in cloud-mode, or a Segment server library, the following settings are available. (Additional settings are available *only* for iOS and Android sources that send in device-mode.) -| Setting Name | When events are sent to Amplitude | Amplitude Event Name | Example for `{"name": "Settings", "category": "Merchant" }` | -| ----------------------- | -------------- | --------------- | ------------------- | +| Setting Name | When events are sent to Amplitude | Amplitude Event Name | Example for `{"name": "Settings", "category": "Merchant" }` | +| ----------------------- | ---------------------------------------- | ------------------------------------------- | ----------------------------------------------------------- | | Track Named Pages | A `page`/`screen` *name* is provided | Loaded/Viewed (Category) (Name) Page/Screen | "Loaded Merchant Settings Page" | | Track Categorized Pages | A `page`/`screen` *category* is provided | Loaded/Viewed (Category) Page/Screen | "Loaded Merchant Page" | | Track All Pages | Always | Loaded/Viewed a Page/Screen | "Loaded a Page" | @@ -100,10 +100,10 @@ When you use the **Track All Pages** setting, Segment sends a `Loaded a Page` ev The following settings are available on iOS for device-mode connections. -| Setting Name | When events will be sent to Amplitude | Amplitude Event Name | Example for `{"name": "Settings", "category": "Merchant" }` | -| --- | --- | --- | -| Track All Pages | Always | Viewed (Name) | "Viewed Settings" | -| Track All Screens | Always | Loaded a Screen | "Loaded a Screen" | +| Setting Name | When events will be sent to Amplitude | Amplitude Event Name | Example for `{"name": "Settings", "category": "Merchant" }` | +| ----------------- | ------------------------------------- | -------------------- | +| Track All Pages | Always | Viewed (Name) | "Viewed Settings" | +| Track All Screens | Always | Loaded a Screen | "Loaded a Screen" | When enabled, the "Track All Screens" setting includes the screen name and category as event properties, where the "Track All Pages" omits them. Most iOS implementations should use "Track All Screens". @@ -112,12 +112,12 @@ properties, where the "Track All Pages" omits them. Most iOS implementations sho The following settings are available on Android for device-mode connections. -| Setting Name | When events will be sent to Amplitude | Amplitude Event Name | Example for `{"name": "Settings", "category": "Merchant" }` | -| --- | --- | --- | --- | -| Track Named Pages | A `screen` *name* is provided | Viewed (Category) (Name) Screen | "Viewed Merchant Settings Screen" | -| Track Categorized Pages | A `screen` *category* is provided | Viewed (Category) Screen | "Viewed Merchant Screen" | -| Track All Pages | Always | If a `screen` *name* is provided: `Viewed (Name) Screen`. Otherwise `Loaded a Screen` | "Viewed Settings Screen" | -| Track All Screens | Always | Loaded a Screen | "Loaded a Screen" | +| Setting Name | When events will be sent to Amplitude | Amplitude Event Name | Example for `{"name": "Settings", "category": "Merchant" }` | +| ----------------------- | ------------------------------------- | ------------------------------------------------------------------------------------- | ----------------------------------------------------------- | +| Track Named Pages | A `screen` *name* is provided | Viewed (Category) (Name) Screen | "Viewed Merchant Settings Screen" | +| Track Categorized Pages | A `screen` *category* is provided | Viewed (Category) Screen | "Viewed Merchant Screen" | +| Track All Pages | Always | If a `screen` *name* is provided: `Viewed (Name) Screen`. Otherwise `Loaded a Screen` | "Viewed Settings Screen" | +| Track All Screens | Always | Loaded a Screen | "Loaded a Screen" | You can learn more about Page calls from our [Page spec](/docs/connections/spec/page/) and Screen calls from our [Screen spec](/docs/connections/spec/screen/). @@ -146,7 +146,7 @@ analytics.identify({ }) ``` -When you make an Identify call, Segment uses the `userId` you provide to set the [User Id in Amplitude](https://amplitude.zendesk.com/hc/en-us/articles/206404628-Step-2-Assign-User-IDs-and-Identify-Your-Users), and +When you make an Identify call, Segment uses the `userId` you provide to set the [User Id in Amplitude](https://help.amplitude.com/hc/en-us/articles/206404628-Step-2-Assign-User-IDs-and-Identify-Your-Users), and sets any `traits` you provide as Amplitude custom `user_properties`. ### Merging users with Anonymous ID and User ID @@ -163,21 +163,21 @@ You can set the Device ID in slightly different ways depending on the library an The table below represents default behavior. -| Library | Default | Fallback | -| --- | --- | --- | -| A.js | [Generated by Amplitude](https://amplitude.zendesk.com/hc/en-us/articles/115003135607-Tracking-Unique-Users#determining-unique-users) | `anonymousId` | -| Server-side | `context.device.id` | `anonymousId` | -| iOS | [Generated by Amplitude](https://amplitude.zendesk.com/hc/en-us/articles/115003135607-Tracking-Unique-Users#determining-unique-users) | n/a | -| Android | [Generated by Amplitude](https://amplitude.zendesk.com/hc/en-us/articles/115003135607-Tracking-Unique-Users#determining-unique-users) | n/a | +| Library | Default | Fallback | +| ----------- | ----------------------- | ------------- | +| A.js | Generated by Amplitude] | `anonymousId` | +| Server-side | `context.device.id` | `anonymousId` | +| iOS | Generated by Amplitude | n/a | +| Android | Generated by Amplitude | n/a | #### Prefer Anonymous ID for Device ID If you're using the "Prefer Anonymous ID for Device ID" setting in client-side, server-side, or a mobile library with Cloud-mode enabled, the following rules apply. -| Library | Default | Fallback | -| --- | --- | --- | -| A.js | `anonymousId` | [Generated by Amplitude](https://amplitude.zendesk.com/hc/en-us/articles/115003135607-Tracking-Unique-Users#determining-unique-users) | -| Server-side | `anonymousId` | `context.device.id` | +| Library | Default | Fallback | +| ----------- | ------------- | ---------------------- | +| A.js | `anonymousId` | Generated by Amplitude | +| Server-side | `anonymousId` | `context.device.id` | #### Prefer Advertising ID for Device ID @@ -185,21 +185,21 @@ This option is not currently available for mobile libraries using cloud-mode. If you're using the "Prefer Advertising ID for Device ID" setting with one of our bundled mobile SDKs, the following rules apply. -| Library | Default | Fallback | -| --- | --- | --- | -| iOS | `anonymousId` | [Generated by Amplitude](https://amplitude.zendesk.com/hc/en-us/articles/115003135607-Tracking-Unique-Users#determining-unique-users) | -| Android | `anonymousId` | [Generated by Amplitude](https://amplitude.zendesk.com/hc/en-us/articles/115003135607-Tracking-Unique-Users#determining-unique-users) | +| Library | Default | Fallback | +| ------- | ------------- | ----------------------- | +| iOS | `anonymousId` | [Generated by Amplitude | +| Android | `anonymousId` | [Generated by Amplitude | ### Device ID priority If you have multiple settings enabled, one setting or value can take priority of another. This table lists which settings, if enabled, take priority over other settings or values. -| Library | Priority (highest to lowest) | -| --- | --- | -| A.js | Prefer Anonymous ID for Device ID
Set Device ID From URL Parameter amp_device_id (Device-mode only)
[Device ID Generated by Amplitude](https://amplitude.zendesk.com/hc/en-us/articles/115003135607-Tracking-Unique-Users#determining-unique-users) | -| Server-side | Prefer Anonymous ID for Device ID
`context.device.id` | -| iOS | Use AdvertisingId for Device ID (Device-mode only)
[Device ID Generated by Amplitude](https://amplitude.zendesk.com/hc/en-us/articles/115003135607-Tracking-Unique-Users#determining-unique-users) -| Android | Use AdvertisingId for Device ID (Device-mode only)
[Device ID Generated by Amplitude](https://amplitude.zendesk.com/hc/en-us/articles/115003135607-Tracking-Unique-Users#determining-unique-users) +| Library | Priority (highest to lowest) | +| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| A.js | Prefer Anonymous ID for Device ID
Set Device ID From URL Parameter amp_device_id (Device-mode only)
Device ID Generated by Amplitude | +| Server-side | Prefer Anonymous ID for Device ID
`context.device.id` | +| iOS | Use AdvertisingId for Device ID (Device-mode only)
Device ID Generated by Amplitude | +| Android | Use AdvertisingId for Device ID (Device-mode only)
Device ID Generated by Amplitude | ### Using Device ID to merge users @@ -277,15 +277,15 @@ For a complete list of special `context` keys see [Segment's Common fields spec] Segment's iOS and Android sources can send revenue using Amplitude's preferred `logRevenueV2` method. Segment sets Amplitude's special revenue properties, such as `revenueType` and `productIdentifier`, which are used in Amplitude's Revenue Analysis and Revenue LTV charts. Segment uses the Amplitude `eventProperties` field to send any properties _not_ mapped to Amplitude's special properties. -| Amplitude Property | Segment Property | Description | -| --- | --- | --- | -| `productId` | `productId` | An identifier for the product. | -| `quantity` | `quantity` | The quantity of products purchased. Note: revenue = `quantity` * `price`. | -| `price` | `price` or `revenue` (or `total` for mobile, see note below) | The price of the products purchased, and this can be negative. | -| `revenueType` | `revenueType`| The type of revenue (e.g. tax, refund, income). | -| `receiptSignature` | `receiptSignature` (Android only) | The receipt signature. | -| `receipt` | `receipt` | This is required if you want to verify the revenue event. | -| `eventProperties` | Any remaining properties | A NSDictionary or Map of event properties to include in the revenue event. | +| Amplitude Property | Segment Property | Description | +| ------------------ | ------------------------------------------------------------ | -------------------------------------------------------------------------- | +| `productId` | `productId` | An identifier for the product. | +| `quantity` | `quantity` | The quantity of products purchased. Note: revenue = `quantity` * `price`. | +| `price` | `price` or `revenue` (or `total` for mobile, see note below) | The price of the products purchased, and this can be negative. | +| `revenueType` | `revenueType` | The type of revenue (e.g. tax, refund, income). | +| `receiptSignature` | `receiptSignature` (Android only) | The receipt signature. | +| `receipt` | `receipt` | This is required if you want to verify the revenue event. | +| `eventProperties` | Any remaining properties | A NSDictionary or Map of event properties to include in the revenue event. | \* If `properties.price` is not present, Segment uses `revenue` instead, and sends that as `price`. In Segment's iOS and Android components, if `revenue` isn't present either, Segment does an additional fallback and sends the `total`. @@ -298,19 +298,19 @@ Property names should be `camelCase` for Android implementations, and `snake_cas For Segment's Analytics.js (device-mode), iOS, and Android sources, if you do not enable the preferred `logRevenueV2` setting, Segment sends the data using the deprecated `logRevenue` methods (which still work). If you record events using this old setting, fields such as `revenueType` aren't recorded in your events. This can reduce your ability to segment on those revenue events in the Amplitude platform. -| Amplitude Property | Segment Property | Description | -| --- | --- | --- | -| `productId` | `productId` | An identifier for the product. | -| `quantity` | `quantity` | The quantity of products purchased. Note: revenue = `quantity` * `price`. | -| `price` | `price` (or `revenue` or `total`, see note below) | The price of the products purchased, and this can be negative. | -| `receipt` | `receipt` (mobile only) | This is required to verify the revenue event. | -| `receiptSignature` | `receiptSignature` (Android only) | The receipt signature. | -| `revenueType` | `revenueType` (cloud-mode only)| The type of revenue (such as tax, refund, income). | -| `revenue` | `revenue` (cloud-mode only) | The revenue collected. | -| `eventProperties` | Any remaining properties (cloud-mode only) | A NSDictionary or Map of event properties to include in the revenue event. | +| Amplitude Property | Segment Property | Description | +| ------------------ | ------------------------------------------------- | -------------------------------------------------------------------------- | +| `productId` | `productId` | An identifier for the product. | +| `quantity` | `quantity` | The quantity of products purchased. Note: revenue = `quantity` * `price`. | +| `price` | `price` (or `revenue` or `total`, see note below) | The price of the products purchased, and this can be negative. | +| `receipt` | `receipt` (mobile only) | This is required to verify the revenue event. | +| `receiptSignature` | `receiptSignature` (Android only) | The receipt signature. | +| `revenueType` | `revenueType` (cloud-mode only) | The type of revenue (such as tax, refund, income). | +| `revenue` | `revenue` (cloud-mode only) | The revenue collected. | +| `eventProperties` | Any remaining properties (cloud-mode only) | A NSDictionary or Map of event properties to include in the revenue event. | -^ In Segment's Analytics.js, iOS and Android sources, if `properties.price` is not present, Segment falls back to `revenue` and sends that as `price`. The Segment iOS and Android sources also do an additional fallback to `total`, if `revenue` isn't present either. +^ In Segment's Analytics.js, iOS and Android sources, if `properties.price` isn't present, Segment falls back to `revenue` and sends that as `price`. The Segment iOS and Android sources also do an additional fallback to `total`, if `revenue` isn't present either. > success "" > **Tip** If your site allows users to perform a single transaction with multiple products (such as a shopping cart checkout), we recommend that you use an [Order Completed](/docs/connections/destinations/catalog/amplitude/#order-completed) event to track revenue with Amplitude. @@ -455,19 +455,19 @@ or are sending Alias events from a Segment server-side library (such as Node). > note "" > To use Alias, you must have the Amplitude Portfolio add-on enabled. -For more information, see the [Segment Spec page for the Alias method](/docs/connections/spec/alias/) and [the Amplitude `usermap` documentation](https://amplitude.zendesk.com/hc/en-us/articles/360002750712-Portfolio-Cross-Project-Analysis#user-mapping-aliasing). +For more information, see the [Segment Spec page for the Alias method](/docs/connections/spec/alias/). | Segment identifier name | Equivalent Amplitude identifier name | -|--|--| -| `previousId` | `user_id` | -| `userId` | `global_user_id` | +| ----------------------- | ------------------------------------ | +| `previousId` | `user_id` | +| `userId` | `global_user_id` | ### Mapping Users Mapping a Segment user's `previousId` to the user's `userId` in Amplitude is as simple as invoking a Segment Alias method with an argument for each value. The example Alias call below maps the `previousId` with the value of `123` to the `userId` with a value of `456` in Amplitude. Both user `123` and `456` still have separate user profiles, but the profiles get merged together when you look at the user's behavior in -[Amplitude's Cross Project view](https://amplitude.zendesk.com/hc/en-us/articles/360002750712-Portfolio-Cross-Project-Analysis#user-mapping-aliasing). +[Amplitude's Cross Project view](https://help.amplitude.com/hc/en-us/articles/360002750712-Portfolio-Cross-Project-Analysis#user-mapping-aliasing). This kind of mapping is useful for users who have different ids across different Amplitude projects. The user's `user_ids` act as child ids, and can all be mapped to a single `global_user_id` in Amplitude. This allows you to analyze the user's aggregate behavior in Amplitude's Cross Portfolio view. @@ -511,7 +511,7 @@ analytics.alias({ [Segment doesn't have a concept for a session](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/). -Device-mode calls to Amplitude include session information because Segment bundles Amplitude's SDK. To set up the same `sessionId` for cloud-mode calls to Amplitude, you must explicitly set the [`session_id`](https://amplitude.zendesk.com/hc/en-us/articles/204771828-HTTP-API#optional-amplitude-specific-keys-for-the-event-argument) as an integration-specific option, as in the example below. +Device-mode calls to Amplitude include session information because Segment bundles Amplitude's SDK. To set up the same `sessionId` for cloud-mode calls to Amplitude, you must explicitly set the [`session_id`](https://developers.amplitude.com/docs/http-api-v2#optional-keyst) as an integration-specific option, as in the example below. ```js { @@ -612,7 +612,7 @@ Amplitude does not prompt the user for location permission, so your app must exp On iOS, the user's location is only recorded once per session. If you need to force update the location in Amplitude, you can use the native method `updateLocation` (iOS only) as documented -[here](https://amplitude.zendesk.com/hc/en-us/articles/115002278527#location-tracking). When you call `enableLocationListening` on the iOS SDK, it forces the SDK to update (and overwrite) the initial location that was cached during app startup. +[here](https://developers.amplitude.com/docs/ios). When you call `enableLocationListening` on the iOS SDK, it forces the SDK to update (and overwrite) the initial location that was cached during app startup. On Android, when enabled, this setting adds a latitude and longitude property to each Track call, which reflecte where geographically the event was triggered. diff --git a/src/connections/destinations/catalog/asayer/index.md b/src/connections/destinations/catalog/asayer/index.md index 63511577df..954ec3ac6c 100644 --- a/src/connections/destinations/catalog/asayer/index.md +++ b/src/connections/destinations/catalog/asayer/index.md @@ -14,7 +14,7 @@ This destination is maintained by Asayer. For any issues with the destination, [ 1. From the Segment web app, click **Catalog**. 2. Search for "Asayer" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Set your Asayer Site ID into your Destination settings. You can find in your [Asayer dashboard](https://app.asayer.io/client/sites) by clicking **Preferences > Sites > Tracking Code**. The Site ID is a whole number (e.g. 435). +3. Set your Asayer Site ID into your Destination settings. You can find in the [Asayer dashboard](https://app.openreplay.com){:target="_blank"} by clicking **Preferences > Sites > Tracking Code**. The Site ID is a whole number (e.g. 435). Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Asayer's tracking code onto your website. @@ -44,7 +44,7 @@ analytics.identify("userId123", { }); ``` -**NOTE:** All traits, as well as `userId` and `anonymousId` fields must be explicitly enabled within the Asayer dashboard under [Preferences -> Custom Fields](https://app.asayer.io/client/custom-fields) before they will successfully send. +**NOTE:** All traits, as well as `userId` and `anonymousId` fields must be explicitly enabled within the Asayer dashboard under [Preferences -> Custom Fields](https://app.openreplay.com/client/custom-fields) before they will successfully send. ## Track diff --git a/src/connections/destinations/catalog/autopilothq/index.md b/src/connections/destinations/catalog/autopilothq/index.md index e51348229e..30d2711ed4 100644 --- a/src/connections/destinations/catalog/autopilothq/index.md +++ b/src/connections/destinations/catalog/autopilothq/index.md @@ -49,4 +49,4 @@ Additional Autopilot Tracking code will be required on your site to unlock the f - Triggering Headsup messages. - User association using the Autopilot Javascript library. -For complete details, visit the Autopilot page [How to use Segment with Autopilot](https://autopilothq.zendesk.com/hc/en-us/articles/203658119). +For complete details, visit the Autopilot page [How to use Segment with Autopilot](https://support.autopilothq.com/hc/en-us/articles/203658119). diff --git a/src/connections/destinations/catalog/braze-web-device-mode-actions/index.md b/src/connections/destinations/catalog/braze-web-device-mode-actions/index.md index 5ce60155fc..ede5e02976 100644 --- a/src/connections/destinations/catalog/braze-web-device-mode-actions/index.md +++ b/src/connections/destinations/catalog/braze-web-device-mode-actions/index.md @@ -37,7 +37,7 @@ Braze Web Mode (Actions) can use the following features of Braze. ### In-app Messaging -Find instructions to configure In-app Messaging in the Braze [documentation](https://www.braze.com/academy/Best_Practices/#in-app-message-behavior){:target="_blank"}. Once configured, you can trigger in-app message display as a result of several different event types. By default, all In-App Messages that a user is eligible for are automatically delivered to the user upon a session start event. A new session automatically starts when a user loads your site. If you'd like to force a new session for a user, make an Identify call with the corresponding [userId](/docs/connections/spec/identify/#user-id) for that user. +Once configured, you can trigger in-app message display as a result of several different event types. By default, all In-App Messages that a user is eligible for are automatically delivered to the user upon a session start event. A new session automatically starts when a user loads your site. If you'd like to force a new session for a user, make an Identify call with the corresponding [userId](/docs/connections/spec/identify/#user-id) for that user. If you don't want your site to display new In-App Messages as they're received, disable automatic display and register your own display subscribers. To do this: @@ -63,7 +63,7 @@ The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](htt ### Push Notifications -1. To support push notifications on Chrome, you'll need to enable FCM/GCM as well as configure your site. Check out steps [one and two here, for detailed instructions on both](https://www.braze.com/documentation/Web/#step-1-to-support-chrome-enable-fcmgcm){:target="_blank"}. +1. To support push notifications on Chrome, you'll need to enable FCM/GCM as well as configure your site. Check out steps [one and two here for detailed instructions on both](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-1-to-support-chrome-enable-fcmgcm){:target="_blank"}. 2. Browser Registration. In order for a browser to receive push notifications, you must register it for push by calling: @@ -97,13 +97,13 @@ analytics.ready(function() { }); ``` -1. Set your GCM/FCM server API key and SenderID on the Braze dashboard. You can find more details for this [here](https://www.braze.com/documentation/Web/#step-4-set-your-gcmfcm-server-api-key-and-senderid-on-the-Braze-dashboard){:target="_blank"}. +1. Set your GCM/FCM server API key and SenderID on the Braze dashboard. You can find more details for this [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-4-set-your-gcmfcm-server-api-key-and-senderid-on-the-Braze-dashboard){:target="_blank"}. -2. To support push notifications on Safari, add your Website Push ID into your Segment Settings UI and Segment sends it when the Braze Web SDK initializes. To get your Website Push ID, follow the first two bullet points in [these instructions](https://www.braze.com/documentation/Web/#step-5-configure-safari-push){:target="_blank"}. +2. To support push notifications on Safari, add your Website Push ID into your Segment Settings UI and Segment sends it when the Braze Web SDK initializes. To get your Website Push ID, follow the first two bullet points in [these instructions](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-5-configure-safari-push){:target="_blank"}. ### Soft Push Prompts -1. Follow [step one](https://www.braze.com/documentation/Web/#soft-push-prompts){:target="_blank"} to create a "Prime for Push" in-app messaging Campaign on the Braze dashboard. +1. Follow [step one](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#soft-push-prompts){:target="_blank"} to create a "Prime for Push" in-app messaging Campaign on the Braze dashboard. 2. Add the following snippet to your site: @@ -144,7 +144,7 @@ analytics.ready(function() { }); ``` -For more details on this snippet, see Braze's documentation [here](https://www.braze.com/documentation/Web/#soft-push-prompts){:target="_blank"}. +For more details on this snippet, see Braze's documentation [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#soft-push-prompts){:target="_blank"}. > info "" > Place this snippet outside of your [Segment Snippet](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet) within your `script` tag. diff --git a/src/connections/destinations/catalog/braze/index.md b/src/connections/destinations/catalog/braze/index.md index 01a918a66d..6ad7e3bc9b 100644 --- a/src/connections/destinations/catalog/braze/index.md +++ b/src/connections/destinations/catalog/braze/index.md @@ -30,7 +30,7 @@ For issues with iOS or Android platforms, contact Braze support. For issues with 3. In the Destination Settings, add the **API Key**, found in the Braze Dashboard in *App Settings > Manage App Group*. 4. Set up a new App Group REST API Key in the Braze Dashboard in *App Settings > Developer Console > API Settings*. For more information, see [Creating and Managing REST API Keys](https://www.braze.com/docs/api/basics/#creating-and-managing-rest-api-keys) in the Braze documentation. - Select the `users.track` endpoint in the **User Data** section. -5. If you're adding Braze using Analytics.js, Segment automatically loads the [Braze Web SDK](https://www.braze.com/documentation/Web/). Otherwise, depending on the source you've selected, include Braze's library by adding the following lines to your dependency configuration. +5. If you're adding Braze using Analytics.js, Segment automatically loads the [Braze Web SDK](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup). Otherwise, depending on the source you've selected, include Braze's library by adding the following lines to your dependency configuration. ### iOS @@ -250,7 +250,7 @@ The example above would have "Purchased Item" as its `productId` and includes tw - `revenue` - `currency` -Braze supports currency codes as specified in [their Purchase Object Specification](https://www.braze.com/docs/developer_guide/rest_api/user_data/#purchase-object-specification). Be aware that any currency reported other than USD displays in [the Braze UI in USD based on the exchange rate on the date it was reported](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/logging_purchases/#logging-purchases). +Braze supports currency codes as specified in [their Purchase Object Specification](https://www.braze.com/docs/api/objects_filters/purchase_object/). Be aware that any currency reported other than USD displays in [the Braze UI in USD based on the exchange rate on the date it was reported](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/logging_purchases/#logging-purchases). You can add more product details in the form of key-value pairs to the `properties` object. The following reserved keys are not passed to Braze if included in your Track call's `properties` object: @@ -287,7 +287,7 @@ In-app messages are registered for and requested by default. Disable this featur #### Web -Instructions on how to set this up within Braze can be found in their [docs](https://www.braze.com/academy/Best_Practices/#in-app-message-behavior). Once setup, it allows you to trigger in-app message display as a result of several different event types. By default, all In-App Messages that a user is eligible for are automatically delivered to the user upon a session start event. A new session automatically starts when a user loads your site. If you'd like to force a new session for a user, simply make an identify with the corresponding [userId](/docs/connections/spec/identify/#user-id) for that user. +Once configured, you can trigger in-app message display as a result of several different event types. By default, all In-App Messages that a user is eligible for are automatically delivered to the user upon a session start event. A new session automatically starts when a user loads your site. If you'd like to force a new session for a user, simply make an identify call with the corresponding [userId](/docs/connections/spec/identify/#user-id) for that user. If you don't want your site to immediately display new In-App Messages when they're received, you can disable automatic display and register your own display subscribers. To do this: @@ -354,7 +354,7 @@ The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](htt #### Android -1. Follow the directions in Braze's [push notification docs](https://www.braze.com/documentation/Android/#push-notifications). +1. Follow the directions in Braze's [push notification docs](https://www.braze.com/docs/developer_guide/platform_integration_guides/android/push_notifications/android/implementation_guide/). 2. If you don't have Braze automatically register for push (for example, you pass the push token from an FCM or manual GCM registration) you need to ensure you call `registerAppboyPushMessages` after Braze is initialized. You can do this by checking if Braze is initialized before trying to pass the push token, and waiting for initializing to set if not. You can do this in an `onIntegrationReady` method: @@ -385,7 +385,7 @@ The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](htt #### Client -1. To support push notifications on Chrome, you'll need to enable FCM/GCM as well as configure your site. Check out steps [one and two here, for detailed instructions on both](https://www.braze.com/documentation/Web/#step-1-to-support-chrome-enable-fcmgcm). +1. To support push notifications on Chrome, you'll need to enable FCM/GCM as well as configure your site. Check out steps [one and two here for detailed instructions on both](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-1-to-support-chrome-enable-fcmgcm). 2. Browser Registration. In order for a browser to receive push notifications, you must register it for push by calling: @@ -419,13 +419,13 @@ analytics.ready(function() { }); ``` -3. Set your GCM/FCM server API key and SenderID on the Braze dashboard. You can find more details for this [here](https://www.braze.com/documentation/Web/#step-4-set-your-gcmfcm-server-api-key-and-senderid-on-the-Braze-dashboard). +3. Set your GCM/FCM server API key and SenderID on the Braze dashboard. You can find more details for this [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-4-set-your-gcmfcm-server-api-key-and-senderid-on-the-Braze-dashboard). -4. To support push notifications on Safari, add your Website Push ID into your Segment Settings UI and Segment sends it when the Braze Web SDK initializes. To get your Website Push ID, follow the first two bullet points in [these instructions](https://www.braze.com/documentation/Web/#step-5-configure-safari-push). +4. To support push notifications on Safari, add your Website Push ID into your Segment Settings UI and Segment sends it when the Braze Web SDK initializes. To get your Website Push ID, follow the first two bullet points in [these instructions](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-5-configure-safari-push). ### Soft Push Prompts -1. Follow [step one](https://www.braze.com/documentation/Web/#soft-push-prompts) to create a "Prime for Push" in-app messaging Campaign on the Braze dashboard. +1. Follow [step one](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#soft-push-prompts) to create a "Prime for Push" in-app messaging Campaign on the Braze dashboard. 2. Disable your [Automatically Send In-App Messages Destination setting](/docs/connections/destinations/catalog/braze/#settings). By default, it is enabled when you enable the Braze destination. @@ -468,7 +468,7 @@ analytics.ready(function() { }); ``` -For more details on this snippet, check out the Braze's docs [here](https://www.braze.com/documentation/Web/#soft-push-prompts). +For more details on this snippet, check out Braze's docs [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#soft-push-prompts). **Note:** Place this snippet outside of your [Segment Snippet](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet) within your `script` tag. diff --git a/src/connections/destinations/catalog/castle/index.md b/src/connections/destinations/catalog/castle/index.md index 7ef965d9c6..35e8f07bb3 100644 --- a/src/connections/destinations/catalog/castle/index.md +++ b/src/connections/destinations/catalog/castle/index.md @@ -2,7 +2,7 @@ title: Castle Destination --- -Once you enable the Castle integration, the [Castle JavaScript snippet](https://docs.castle.io/v1/tutorials/client-side-integration/web/) is placed on your website, and user data starts appearing in the Castle dashboard. +Once you enable the Castle integration, the [Castle JavaScript snippet](https://docs.castle.io/docs/sdk-browser) is placed on your website, and user data starts appearing in the Castle dashboard. Client-side tracking works out of the box, however **your existing server-side calls need to be extended** with data from the incoming request. Castle supports calling `identify`, `page`, `screen`, and `group`. Castle does *not* support the `alias` call. @@ -15,9 +15,10 @@ Castle supports calling `identify`, `page`, `screen`, and `group`. Castle does * 1. _Recommended:_ Secure Mode ## Tracking successful and failed logins -**A baseline integration of Castle includes tracking [successful and failed login attempts](https://castle.io/docs/events#recommended-order-of-integration).** If you are already tracking these events using a Segment integration, you can use [Event Mapping](https://dashboard.castle.io/settings/events) to indicate which events correspond to Castle reserved events. +A baseline integration of Castle includes tracking [successful and failed login attempts](https://docs.castle.io/docs/failed-logins). If you track these events using a Segment integration, you can use [Event Mapping](https://dashboard.castle.io/settings/events) to indicate which events correspond to Castle reserved events. ->**Note**: If you request a Castle risk score for the "Logged in" event, you should **not** map that event to Castle's reserved `$login.succeeded`. Instead, [`authenticate`](https://castle.io/docs/authentication) that event through Castle. See next section on _Requesting a risk score_. +> info "" +> If you request a Castle risk score for the "Logged in" event, you should **not** map that event to Castle's reserved `$login.succeeded`. Instead, [`authenticate`](https://docs.castle.io/docs/authentication-method) that event through Castle. See next section on _Requesting a risk score_. Here are two Ruby examples on how to track successful and failed login attempts (`context` and `integration` have been omitted for brevity): @@ -46,15 +47,17 @@ analytics.track( ) ``` ->**Note**: Segment requires either `user_id` or `anonymous_id` for the request to be processed. If you don't know which user generated the failed login create a UUID and provide it as `anonymous_id` +> info "" +> Segment requires either `user_id` or `anonymous_id` for the request to be processed. If you don't know which user generated the failed login create a UUID and provide it as `anonymous_id` ## Extending server-side tracking with request properties -Tracking events from your server-side is crucial to prevent requests from getting blocked by malicious actors. This is recommended for all [Castle's reserved events](https://castle.io/docs/events), such as logins and password changes. +Tracking events from your server-side is crucial to prevent requests from getting blocked by malicious actors. This is recommended for all [Castle's reserved events](https://docs.castle.io/docs/events), such as logins and password changes. -**Important:** Server-side `track` events are dropped by Castle unless they contain the properties listed below. `identify` calls still create or update a user, but do not create a device if these properties are missing: -- `context.ip`. The user's IP address, i.e. not your server's internal IP -- `context.user_agent`, alternatively `context.headers` containing at least the `user_agent` field. -- `context.client_id`. The _Client ID_ forwarded by the web or mobile SDK. +> warning "" +> Server-side `track` events are dropped by Castle unless they contain the properties listed below. `identify` calls still create or update a user, but don't create a device if these properties are missing: +> - `context.ip`. The user's IP address, i.e. not your server's internal IP +> - `context.user_agent`, alternatively `context.headers` containing at least the `user_agent` field. +> - `context.client_id`. The _Client ID_ forwarded by the web or mobile SDK. These properties are described in detail in the next section. @@ -84,7 +87,7 @@ By forwarding a client identifier from the client-side to the server-side, you c The Castle JavaScript SDK (loaded by Analytics.js) forwards the client identifier as a browser cookie named `__cid`. -The Castle [iOS](https://castle.io/docs/ios#forwarding-code-device_id-code-to-your-server) and [Android](https://castle.io/docs/android#forwarding-code-device_id-code-to-your-server) SDKs forward it as the HTTP header `X-Castle-Client-Id`. See the respective documentation pages for instructions on how to configure the header forwarding. +The Castle [iOS](https://docs.castle.io/docs/sdk-ios) and [Android](https://docs.castle.io/docs/sdk-android) SDKs forward it as the HTTP header `X-Castle-Client-Id`. See the respective documentation pages for instructions on how to configure the header forwarding. Here's a Ruby example on how to extract the Client ID on your server-side: @@ -131,10 +134,10 @@ For privacy reasons, **you do not want to send the "Cookie" header to Castle**, } ``` -There are example implementations on how to extract request headers in [PHP](https://github.com/castle/castle-php/blob/e93de1532ef28af17b8bf2bef350e6995a580085/lib/Castle/Request.php#L31), [Ruby](https://github.com/castle/castle-ruby/blob/master/lib/castle-rb/client.rb#L54), and [Java](https://github.com/castle/castle-java/blob/96cdc7469aa0995a836100c3dfd370b10f299e8c/src/main/java/io/castle/client/objects/UserInfoHeader.java#L148). +There are example implementations on how to extract request headers in [PHP](https://github.com/castle/castle-php/blob/e93de1532ef28af17b8bf2bef350e6995a580085/lib/Castle/Request.php#L31), [Ruby](https://github.com/castle/castle-ruby), and [Java](https://github.com/castle/castle-java/blob/96cdc7469aa0995a836100c3dfd370b10f299e8c/src/main/java/io/castle/client/objects/UserInfoHeader.java#L148). ## Identify -When you call [`identify`](/docs/connections/spec/identify), a user will be created in Castle. The Segment special traits `email`, `username`, `name`, `createdAt`, `phone`, and `address` are mapped to Castle's reserved [user traits](https://castle.io/docs/castlejs#attributes). +When you call [`identify`](/docs/connections/spec/identify), a user will be created in Castle. The Segment special traits `email`, `username`, `name`, `createdAt`, `phone`, and `address` are mapped to Castle's reserved user traits. Any additional traits will be stored on the Castle user model as _custom traits_. @@ -160,10 +163,10 @@ analytics.identify('1234', { }); ``` -> **Note:** If you're calling `authenticate` to obtain a risk score, you do *not* need to call `identify` from the server-side. Instead, `authenticate` provides a way to attach `traits` in the same call. +> **Note:** If you call `authenticate` to obtain a risk score, you do *not* need to call `identify` from the server-side. Instead, `authenticate` provides a way to attach `traits` in the same call. ## Secure Mode -Enable [Secure Mode](https://castle.io/docs/secure_mode) to prevent fraudsters from impersonating your users. +Enable Secure Mode to prevent fraudsters from impersonating your users. > **Note:** Secure Mode is highly encouraged for production deployments, but can wait until after a completed proof a concept. To enable Secure Mode in Analytics.js, you pass in the `secure` variable by rendering it in your server-side templates. The `secure` field should be a SHA256 hash of your Castle API Secret and the user ID. @@ -195,4 +198,4 @@ end ## Requesting a risk score Castle's adaptive authentication tells you whether to allow access, initiate a second factor of authentication, or log out the user. -Since all Segment calls are called asynchronously, you will need to use Castle's native SDKs to perform [adaptive authentication](https://castle.io/docs/authentication). +Since all Segment calls are called asynchronously, you'll need to use Castle's native SDKs to perform [adaptive authentication](https://docs.castle.io/docs/authentication-method). diff --git a/src/connections/destinations/catalog/clevertap/index.md b/src/connections/destinations/catalog/clevertap/index.md index faae23dd1f..ad6040dab2 100644 --- a/src/connections/destinations/catalog/clevertap/index.md +++ b/src/connections/destinations/catalog/clevertap/index.md @@ -86,7 +86,7 @@ When you send a `screen` event using the server-side destination or the iOS bund ``` -2. For more in-depth information, visit our [Android push integration documentation](https://support.clevertap.com/integration/android-sdk/#push-notification-support). +2. For more in-depth information, visit our [Android push integration documentation](https://developer.clevertap.com/docs/android). ### In-App Notifications diff --git a/src/connections/destinations/catalog/courier/index.md b/src/connections/destinations/catalog/courier/index.md index c43bf653c1..8acbc97f8b 100644 --- a/src/connections/destinations/catalog/courier/index.md +++ b/src/connections/destinations/catalog/courier/index.md @@ -68,7 +68,7 @@ Segment Track events are inbound events that might trigger a notification when C All Inbound Events coming from Segment Track calls appear with a `Segment-TrackEvent` prefix in Courier to help distinguish them from other inbound events. -Courier extracts data from the Segment Track `properties` object, and conditionally triggers a request to the [Courier Send API](https://docs.courier.com/reference/send-api?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) - only if that event is already [mapped](https://help.courier.com/en/articles/4202416-how-to-create-and-map-event-triggers-for-your-notifications). +Courier extracts data from the Segment Track `properties` object, and conditionally triggers a request to the [Courier Send API](https://www.courier.com/docs/reference/send/message/) - only if that event is already [mapped](https://help.courier.com/en/articles/4202416-how-to-create-and-map-event-triggers-for-your-notifications). * Segment passes all `properties` from the Track call to the `Send API` as elements in the `data` json objects. You can use these data points as variables in the Notification Template or as input on conditional routing logic. * Courier uses the `userId` or `anonymousId` to look up and include the associated `User Profile` with the inbound event. (See the note in the [Identify section](#identify) above.) diff --git a/src/connections/destinations/catalog/doubleclick-floodlight/index.md b/src/connections/destinations/catalog/doubleclick-floodlight/index.md index 1bc9500b1a..13b73ca812 100644 --- a/src/connections/destinations/catalog/doubleclick-floodlight/index.md +++ b/src/connections/destinations/catalog/doubleclick-floodlight/index.md @@ -82,7 +82,7 @@ See the [Analytics.js documentation](/docs/connections/sources/catalog/libraries ## Setting up Custom Variables -There are two things you need to do in order to send custom track properties as custom Floodlight variables. Firstly, refer to their [docs](https://support.google.com/dfa/partner/answer/2548879?hl=en) on how to create a custom variable inside DoubleClick: +There are two things you need to do in order to send custom track properties as custom Floodlight variables. Refer to Google's [Custom Floodlight Variables](https://support.google.com/campaignmanager/answer/2823222?hl=en) documentation. Custom Floodlight variables use the keys u1=, u2=, and so on, and can take any values that you choose to pass to them. You can include custom Floodlight variables in any of your Floodlight activity tags and report on their values in Report Builder. diff --git a/src/connections/destinations/catalog/emma/index.md b/src/connections/destinations/catalog/emma/index.md index 463cd5f0b7..5af8ed39fa 100644 --- a/src/connections/destinations/catalog/emma/index.md +++ b/src/connections/destinations/catalog/emma/index.md @@ -3,7 +3,7 @@ title: Emma Destination rewrite: true --- -[EMMA](https://emma.io/en/features/) helps you track campaigns from your trusted networks, Google Ads campaigns, Facebook and Instagram campaigns, and Twitter campaigns. You can also track user activities in your app, so you can send personalizes push notifications and in-app campaigns like banners, start-views etc. +[EMMA](https://emma.io/en/) helps you track campaigns from your trusted networks, Google Ads campaigns, Facebook and Instagram campaigns, and Twitter campaigns. You can also track user activities in your app, so you can send personalized push notifications and in-app campaigns like banners, start-views etc. This destination is maintained by EMMA. For any issues with the destination, [contact the EMMA Support team](mailto:support@emma.io). diff --git a/src/connections/destinations/catalog/evergage/index.md b/src/connections/destinations/catalog/evergage/index.md index 69aa2ec6cd..d2b4fac0dd 100644 --- a/src/connections/destinations/catalog/evergage/index.md +++ b/src/connections/destinations/catalog/evergage/index.md @@ -20,7 +20,7 @@ analytics.identify('userId123', { }); ``` -A `userId` is required on all `identify` calls sent to {{ integration.name}}. When you call `identify` Segment will call both `setUser` and `setUserField` in the [Evergage library](https://doc.evergage.com/display/EKB/Send+Data+to+Evergage) to insert both the `userId` and corresponding user traits into {{ integration.name}}. +A `userId` is required on all `identify` calls sent to {{ integration.name}}. When you call `identify` Segment will call both `setUser` and `setUserField` in the [Evergage library](https://doc.evergage.com/display/EKB/Send+Data+to+Evergage+via+JavaScript) to insert both the `userId` and corresponding user traits into {{ integration.name}}. ## Group If you're not familiar with the Segment Specs, take a look to understand what the [Group method](/docs/connections/spec/group/) does. An example call would look like: @@ -31,7 +31,7 @@ analytics.group('companyId123', { }); ``` -A `groupId` is required on all `group` calls sent to {{ integration.name}}. When you call `group` Segment will call both `setCompany` and `setAccountField` in the [Evergage library](https://doc.evergage.com/display/EKB/Send+Data+to+Evergage) to insert both the `groupId` and corresponding group traits into {{ integration.name}}. +A `groupId` is required on all `group` calls sent to {{ integration.name}}. When you call `group` Segment will call both `setCompany` and `setAccountField` in the [Evergage library](https://doc.evergage.com/display/EKB/Send+Data+to+Evergage+via+JavaScript) to insert both the `groupId` and corresponding group traits into {{ integration.name}}. ## Track If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: diff --git a/src/connections/destinations/catalog/facebook-pixel-server-side/index.md b/src/connections/destinations/catalog/facebook-pixel-server-side/index.md index 51510c5294..e21f00a8a1 100644 --- a/src/connections/destinations/catalog/facebook-pixel-server-side/index.md +++ b/src/connections/destinations/catalog/facebook-pixel-server-side/index.md @@ -47,7 +47,7 @@ Next, set up your Pixel to work with the Facebook Conversions API destination. Y ### Option 2 - Configure an existing pixel -1. Go to the Facebook Business [Event Manager Pixel Settings](https://www.facebook.com/events_manager/pixel/settings). +1. Go to the Facebook BusinessEvent Manager Pixel Settings. 2. Scroll down to the **Set up through a partner integration** section and click **Choose Partner**. 3. Choose "Segment" from the list of partners. 4. Enable the setting to "Authorize Segment Connection" and then click **Continue**. diff --git a/src/connections/destinations/catalog/facebook-pixel/index.md b/src/connections/destinations/catalog/facebook-pixel/index.md index 981856e585..885571b6fb 100644 --- a/src/connections/destinations/catalog/facebook-pixel/index.md +++ b/src/connections/destinations/catalog/facebook-pixel/index.md @@ -46,7 +46,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th analytics.page(); ``` -We've mapped `analytics.page()` to [Facebook's `fbq('track', "PageView")`](https://developers.facebook.com/docs/ads-for-websites/pixel-events/v2.11) method and will forward all page views accordingly. Note that the integration will ignore any parameters you pass to `analytics.page()`. +Segment maps `analytics.page()` to Facebook's `fbq('track', "PageView")` method and will forward all page views accordingly. Note that the integration will ignore any parameters you pass to `analytics.page()`. ## Identify diff --git a/src/connections/destinations/catalog/fullstory/index.md b/src/connections/destinations/catalog/fullstory/index.md index 3016f71a6c..c9dc4c15c4 100644 --- a/src/connections/destinations/catalog/fullstory/index.md +++ b/src/connections/destinations/catalog/fullstory/index.md @@ -3,7 +3,7 @@ title: FullStory Destination rewrite: true maintenance: true --- -[FullStory](https://help.fullstory.com/11269-Develop) lets product and support teams easily understand everything about the customer experience. The Segment integration for FullStory helps accurately identify your customers within the FullStory dashboard. +[FullStory](https://www.fullstory.com/){:target="_blank"} lets product and support teams easily understand everything about the customer experience. The Segment integration for FullStory helps accurately identify your customers within the FullStory dashboard. ## Getting Started @@ -17,7 +17,7 @@ Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.j ## Identify -If you're not familiar with the Segment Specs, take a look to understand what the [identify method](/docs/connections/spec/identify/) does. Identify calls sent to Segment will be transformed and sent to [FullStory's](https://help.fullstory.com/develop-js/identify) `FS.identify` method. +If you're not familiar with the Segment Specs, take a look to understand what the [identify method](/docs/connections/spec/identify/) does. Identify calls sent to Segment will be transformed and sent to [FullStory's](https://help.fullstory.com/hc/en-us/articles/360020828113) `FS.identify` method. An example call which does not include a `userId` will send FullStory the value of the `anonymousId` and would look like: @@ -42,7 +42,7 @@ analytics.identify("userId123", { ### Specifying display name and email -Both `email` and `displayName` are special traits that will be passed to FullStory to be used in their interface as explained in [FullStory's docs](https://help.fullstory.com/develop-js/identify). These traits are optional. +Both `email` and `displayName` are special traits that will be passed to FullStory to be used in their interface as explained in [FullStory's docs](https://help.fullstory.com/hc/en-us/articles/360020828113). These traits are optional. ``` analytics.identify("userId123", { diff --git a/src/privacy/faq.md b/src/privacy/faq.md index 4fee9d834e..863694de7c 100644 --- a/src/privacy/faq.md +++ b/src/privacy/faq.md @@ -63,7 +63,7 @@ Segment cannot guarantee that data is deleted from your Destinations. When you i ### Which destinations require additional destination setting configuration? #### Amplitude -If you have the Amplitude destination enabled in one or more sources, you must include Amplitude's secret key in each destination(s) settings so they can accept the deletion request. (You add it in the Amplitude destination settings, under "Secret Key"). You can find your Secret Key on the [General Settings](https://help.amplitude.com/hc/en-us/articles/235649848-Settings#project-general-settings) of your Amplitude project. +If you have the Amplitude destination enabled in one or more sources, you must include Amplitude's secret key in each destination(s) settings so they can accept the deletion request. (You add it in the Amplitude destination settings, under "Secret Key"). You can find your Secret Key on the [General Settings](https://help.amplitude.com/hc/en-us/articles/235649848-Settings) of your Amplitude project. #### Google Analytics To send user deletion requests to Google Analytics you must authenticate your Google Analytics account with Segment using OAuth. If you have the Google Analytics destination enabled in one or more sources, you must authenticate your account in each destination(s) settings. Navigate to the **User Deletion** settings in your Segment Google Analytics settings and use your email and password to authenticate your account.