diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml
index 7f95e7cfdd..1505f25d7d 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 2025-09-04
+# destination categories last updated 2025-09-11
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 5e7688f28f..9535527585 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 2025-09-04
+# destination data last updated 2025-09-11
items:
- id: 637e8d185e2dec264895ea89
display_name: 1Flow
@@ -22418,9 +22418,9 @@ items:
categories:
- CRM
logo:
- url: https://cdn-devcenter.segment.com/a6bfb97c-8e56-48cc-9c1f-3009e815e9a4.svg
+ url: https://cdn-devcenter.segment.com/c1085aa3-5e2d-4b36-a8bb-a9a2829860db.svg
mark:
- url: https://cdn-devcenter.segment.com/8157e37e-b676-413f-9eaf-76e70ad981ae.svg
+ url: https://cdn-devcenter.segment.com/86482475-5a17-437c-b0a6-00316cf5c6b0.svg
methods:
track: true
identify: true
@@ -29048,66 +29048,6 @@ items:
actions: []
presets: []
partnerOwned: false
-- id: 5fabc0b00f88248bbce4db48
- display_name: Bucket
- name: Bucket
- slug: bucket
- hidden: false
- endpoints:
- - US
- regions:
- - us-west-2
- - eu-west-1
- url: connections/destinations/catalog/bucket
- previous_names:
- - Bucket
- website: https://reflag.com
- status: PUBLIC
- categories:
- - Feature Flagging
- logo:
- url: https://cdn-devcenter.segment.com/bd123113-c56d-4592-800a-005422cb8556.svg
- mark:
- url: https://cdn-devcenter.segment.com/8761d6f6-28f6-439a-a0dd-ce6a39a3fae8.svg
- methods:
- track: true
- identify: true
- group: true
- alias: false
- screen: false
- page: false
- platforms:
- browser: true
- mobile: true
- server: true
- warehouse: false
- cloudAppObject: false
- linkedAudiences: false
- components: []
- browserUnbundlingSupported: false
- browserUnbundlingPublic: false
- replay: false
- connection_modes:
- device:
- web: false
- mobile: false
- server: false
- cloud:
- web: true
- mobile: true
- server: true
- settings:
- - name: apiKey
- type: string
- defaultValue: ''
- description: >-
- The publishable key for your Bucket environment, found on the tracking
- page on app.bucket.co.
- required: true
- label: Publishable Key
- actions: []
- presets: []
- partnerOwned: true
- id: 54521fd525e721e32a72ee99
display_name: BugHerd
name: BugHerd
@@ -33239,7 +33179,7 @@ items:
hidden: false
defaultTrigger: type = "group"
fields:
- - id: bRg82PaLtjz39joF6RjVUf
+ - id: oKNaRSymAtPtpo2BmTyWNe
sortOrder: 2
fieldKey: userIdentities
label: User Identities
@@ -33256,7 +33196,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: bkKsAVXVseoY69hKB4bPyR
+ - id: 2mgXUNU6vPJHTHnT5rHzKj
sortOrder: 3
fieldKey: groupId
label: Group ID
@@ -33271,7 +33211,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: kUgTjzdcYQaYk4wfnxQziQ
+ - id: oTZb1RATG3LSJobm7sSrGB
sortOrder: 4
fieldKey: listName
label: List name
@@ -33296,7 +33236,7 @@ items:
hidden: false
defaultTrigger: null
fields:
- - id: 6kcJ8cGN26bjBffWyEgWDu
+ - id: bQYDtWsYaXSFhMKdh6qyoB
sortOrder: 2
fieldKey: userIdentities
label: User Identities
@@ -33313,7 +33253,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: aL2j6cG6GJdE4Zy9YXhYpM
+ - id: tPJ6YoqrB1SfqRdFtwvJVW
sortOrder: 3
fieldKey: groupId
label: Group ID
@@ -33336,7 +33276,7 @@ items:
hidden: false
defaultTrigger: type = "track" or type = "page"
fields:
- - id: mtMJBRDextz49EyHudaMrZ
+ - id: 9od9zufiZ2erAGqtWeSoSj
sortOrder: 2
fieldKey: userIdentities
label: User Identities
@@ -33353,7 +33293,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: g6emu1FhEXgGfDz5RmB9Z5
+ - id: x5ScKMNLbm6Fq7D37ngfha
sortOrder: 3
fieldKey: action
label: Event name
@@ -33373,7 +33313,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: qWYkXkb1V7kHzPvgenVrEc
+ - id: n4dzjBVfuzFPPHKU9yW9hD
sortOrder: 4
fieldKey: time
label: Event timestamp
@@ -33390,7 +33330,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: snmK3qR6oGNRLa9WEKqTgv
+ - id: tB8nv67TK7QZtGmWo9e2o7
sortOrder: 5
fieldKey: properties
label: Event properties
@@ -33405,7 +33345,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: sycJyTw7325gBvAGmsfiTR
+ - id: kc7ibz5h9oE6qAwpm8aPvH
sortOrder: 6
fieldKey: context
label: Event context
@@ -33430,7 +33370,7 @@ items:
hidden: false
defaultTrigger: type = "identify"
fields:
- - id: c5CYbAakApuCkZSzJEX4XD
+ - id: ndbC9nYNGiNPn8jrYSz1ni
sortOrder: 2
fieldKey: userIdentities
label: User Identities
@@ -33447,7 +33387,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: hSrtvEh6mkgj1rfzcLhGp8
+ - id: 8fLztYZyAomjDScwPVoUwF
sortOrder: 3
fieldKey: attributes
label: Contact Attributes
@@ -33477,7 +33417,7 @@ items:
event = "Order Completed" or event = "Order Updated" or event = "Order
Refunded" or event = "Order Cancelled"
fields:
- - id: mAEWu8QV8eBrHAqJLzeBMZ
+ - id: cmQnBF7td3syi57ym278Mz
sortOrder: 2
fieldKey: userIdentities
label: User Identities
@@ -33494,7 +33434,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: 28JKLaDofBiAnBc7KFoM1n
+ - id: kkiWWVGxyKSCsMNjdbmrvK
sortOrder: 3
fieldKey: orderID
label: Order ID
@@ -33509,7 +33449,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: u4cXTTXJxV6wYf1xWXtKfH
+ - id: 4MkFyp4PzXkihj25HmSSYQ
sortOrder: 4
fieldKey: purchaseDate
label: Order purchase date
@@ -33524,7 +33464,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: fSbSz2vk2dCRHh9uqQSeF7
+ - id: hHqNpgJ6VUohmKyoLyiAgN
sortOrder: 5
fieldKey: status
label: Order status
@@ -33539,7 +33479,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: pUYhvLdPGNu78PCFeicYa2
+ - id: tYkSJRPNCzyCxui6amgxiL
sortOrder: 6
fieldKey: totalAmount
label: Order total
@@ -33554,8 +33494,26 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: oma7Uh8jacLVUsRGTevpmp
+ - id: 3TzTBxNzQQvmuCr49ef8To
sortOrder: 7
+ fieldKey: discountApplication
+ label: Discount application
+ type: OBJECT
+ description: >-
+ Discount application data, allowed fields: type (only 'fixed' as of
+ now), amount (float discount amount, e.g. 10.45)
+ placeholder: ''
+ defaultValue:
+ type: fixed
+ amount:
+ '@path': $.properties.discount
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: vzqcffxacJddKbC2gmipwC
+ sortOrder: 8
fieldKey: properties
label: Order properties
type: OBJECT
@@ -33582,8 +33540,8 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: xjFB4gTQCeuTTe42ayDHJX
- sortOrder: 8
+ - id: eXbgqQe7SZzGos3bD88LNy
+ sortOrder: 9
fieldKey: items
label: Order items
type: OBJECT
@@ -33629,7 +33587,7 @@ items:
hidden: false
defaultTrigger: type = "track" and event = "Product Removed"
fields:
- - id: 54nhUHwVphF2y7Y7qkfCQt
+ - id: pXLzFnrSvRKhs7Lqd2oAdE
sortOrder: 2
fieldKey: userIdentities
label: User Identities
@@ -33646,7 +33604,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: nnYTZFN9fcFKRktdfvukK9
+ - id: 3sUbdRraKYo7fF2AWep2tF
sortOrder: 3
fieldKey: productID
label: Product ID
@@ -33661,7 +33619,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: hS5nc3CgiUcY7o76r4DquH
+ - id: 67a8HSEBAKa3wYibyY1qYN
sortOrder: 4
fieldKey: qty
label: Quantity
@@ -33684,7 +33642,7 @@ items:
hidden: false
defaultTrigger: type = "track" and event = "Product Added"
fields:
- - id: mkiqQTQGmxDxrAW3pU5zSm
+ - id: 3TF3oQRonmretFvLwy1tJy
sortOrder: 2
fieldKey: userIdentities
label: User Identities
@@ -33701,7 +33659,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: 36pNjLK1RbVBeempx4uNKq
+ - id: 4UzaP4WKsxwhyDogR4txLw
sortOrder: 3
fieldKey: productID
label: Product ID
@@ -33716,7 +33674,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: vinQEmPxbgG1Q6gSUnYijm
+ - id: fgXwqzRTZjQKo2R4zzwGrS
sortOrder: 4
fieldKey: sku
label: SKU
@@ -33731,7 +33689,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: nQJAXxofk1YUaXM2hZXdBw
+ - id: 5TTJ9VfbRRZKcbX5DG9s3g
sortOrder: 5
fieldKey: qty
label: Quantity
@@ -33746,7 +33704,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: nT9LYT1ynfSpz9rDiaoqMX
+ - id: nQhj9JAwNmhCevGFE4KR3f
sortOrder: 6
fieldKey: category
label: Category
@@ -33761,7 +33719,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: rbCG8yC5stqvfiaJb9GRGJ
+ - id: 5tsoyppsMhfA1LxDWd2b1r
sortOrder: 7
fieldKey: name
label: Name
@@ -33776,7 +33734,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: a2VMziwz7Zmberqem5UNRy
+ - id: vpzZEaLGtE6BHwjnt4cBx3
sortOrder: 8
fieldKey: description
label: Description
@@ -33789,7 +33747,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: i4Re7z74ambH3Pkt4wTBpE
+ - id: ookm57U7Rop7v8Tb9X7A3w
sortOrder: 9
fieldKey: itemPrice
label: Price
@@ -33804,7 +33762,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: kYALejHU7Qar6SdUEcTKzG
+ - id: 5q8opKukgPxR7scqaS8WBm
sortOrder: 10
fieldKey: url
label: URL
@@ -33819,7 +33777,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: 4viFQ5RaMSHT97iMLK1T38
+ - id: mpvr1wnLot7vkfkg2xa14u
sortOrder: 11
fieldKey: imageUrl
label: Image URL
@@ -33834,7 +33792,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: exnXoG9QsNcUxEFWNCReoE
+ - id: sk5onwpyeMcuVfkANZ19zH
sortOrder: 12
fieldKey: properties
label: Properties
@@ -33862,7 +33820,7 @@ items:
hidden: false
defaultTrigger: type = "alias"
fields:
- - id: sUu8qBPJFvNo1gseAsggxk
+ - id: deTEdbVnpkURNx8xp2oXyL
sortOrder: 0
fieldKey: segmentId
label: New Segment User ID
@@ -33877,7 +33835,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: qGLBjsF1jxC8tqSLYgGSRJ
+ - id: 3ihoGZkSKQmuZTCvwcBgXJ
sortOrder: 1
fieldKey: anonymousId
label: New Segment Anonymous ID
@@ -33892,7 +33850,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: 3YfDb4yA7irEhTvzWCitkQ
+ - id: eDPmuvLWEXSnNL2rDCeEg7
sortOrder: 2
fieldKey: previousId
label: Previous Segment ID
@@ -107651,6 +107609,67 @@ items:
actions: []
presets: []
partnerOwned: true
+- id: 5fabc0b00f88248bbce4db48
+ display_name: Reflag
+ name: Reflag
+ slug: reflag
+ hidden: false
+ endpoints:
+ - US
+ regions:
+ - us-west-2
+ - eu-west-1
+ url: connections/destinations/catalog/reflag
+ previous_names:
+ - Bucket
+ - Reflag
+ website: https://reflag.com
+ status: PUBLIC
+ categories:
+ - Feature Flagging
+ logo:
+ url: https://cdn-devcenter.segment.com/bd123113-c56d-4592-800a-005422cb8556.svg
+ mark:
+ url: https://cdn-devcenter.segment.com/8761d6f6-28f6-439a-a0dd-ce6a39a3fae8.svg
+ methods:
+ track: true
+ identify: true
+ group: true
+ alias: false
+ screen: false
+ page: false
+ platforms:
+ browser: true
+ mobile: true
+ server: true
+ warehouse: false
+ cloudAppObject: false
+ linkedAudiences: false
+ components: []
+ browserUnbundlingSupported: false
+ browserUnbundlingPublic: false
+ replay: false
+ connection_modes:
+ device:
+ web: false
+ mobile: false
+ server: false
+ cloud:
+ web: true
+ mobile: true
+ server: true
+ settings:
+ - name: apiKey
+ type: string
+ defaultValue: ''
+ description: >-
+ The publishable key for your Bucket environment, found on the tracking
+ page on app.bucket.co.
+ required: true
+ label: Publishable Key
+ actions: []
+ presets: []
+ partnerOwned: true
- id: 5f33e746fad0d620b8a4b144
display_name: Regal.io
name: Regal.io
diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml
index 4ddeb30206..98df0b0481 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 2025-09-04
+# destination data last updated 2025-09-11
items:
- id: 54521fd925e721e32a72eee1
display_name: Pardot
diff --git a/src/_data/catalog/regional-supported.yml b/src/_data/catalog/regional-supported.yml
index d9a080135a..0d5dde5a48 100644
--- a/src/_data/catalog/regional-supported.yml
+++ b/src/_data/catalog/regional-supported.yml
@@ -1209,3 +1209,12 @@ sources:
endpoints:
- us
- eu
+ - id: h00x3Ep5el
+ display_name: Zigpoll
+ hidden: false
+ slug: zigpoll
+ url: connections/sources/catalog/cloud-apps/zigpoll
+ regions:
+ - us
+ endpoints:
+ - us
diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml
index 391e115cd2..3ab209b789 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 2025-09-04
+# source categories last updated 2025-09-11
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 9a0036b93a..6b58405108 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 2025-09-04
+# sources last updated 2025-09-11
items:
- id: 8HWbgPTt3k
display_name: .NET
@@ -2726,3 +2726,23 @@ items:
- Helpdesk
status: PUBLIC
partnerOwned: false
+ - id: h00x3Ep5el
+ display_name: Zigpoll
+ isCloudEventSource: true
+ slug: zigpoll
+ url: connections/sources/catalog/cloud-apps/zigpoll
+ hidden: false
+ regions:
+ - us
+ endpoints:
+ - us
+ source_type: cloud-app
+ description: Instant customer feedback tool
+ logo:
+ url: >-
+ https://cdn-devcenter.segment.com/a5eb4039-5579-4c4e-a337-092e8e283790.svg
+ categories:
+ - Surveys
+ - Personalization
+ status: PUBLIC_BETA
+ partnerOwned: true
diff --git a/src/_includes/content/functions/runtime.md b/src/_includes/content/functions/runtime.md
index 1eec66aa95..4073eaa30c 100644
--- a/src/_includes/content/functions/runtime.md
+++ b/src/_includes/content/functions/runtime.md
@@ -1,23 +1,10 @@
-On March 26, 2024, Segment is upgrading the Functions runtime environment to Node.js v18, which is the current long-term support (LTS) release.
+On March 26, 2024, Segment upgraded the Functions runtime environment to Node.js v18, which is the current long-term support (LTS) release.
This upgrade keeps your runtime current with industry standards. Based on the [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html){:target="_blank"} and [Node.js](https://nodejs.org/en/about/previous-releases){:target="_blank"} support schedule, Node.js v16 is no longer in *Maintenance LTS*. Production applications should only use releases of Node.js that are in *Active LTS* or *Maintenance LTS*.
-All new functions will use Node.js v18 starting March 26, 2024.
+For existing functions, this change automatically occurs as you update and deploy an existing function. Segment recommends that you check your function post-deployment to ensure everything's working. Your function may face issues due to the change in syntax between different Node.js versions and dependency compatibility.
-For existing functions, this change automatically occurs as you update and deploy an existing function. Segment recommends that you check your function post-deployment to ensure everything's working. Your function may face issues due to the change in sytax between different Node.js versions and dependency compatibility.
-
-
Limited time opt-out option
-If you need more time to prepare, you can opt out of the update before March 19, 2024.
Note that if you opt out:
-- The existing functions will continue working on Node.js v16.
-- You won't be able to create new functions after July 15, 2024.
-- You won't be able to update existing functions after August 15, 2024.
-- You won't receive future bug fixes, enhancements, and dependency updates to the functions runtime.
-[Contact Segment](https://segment.com/help/contact/){:target="_blank"} to opt-out or with any questions.
-
-
-
Node.js 18
Segment strongly recommends updating to Node.js v18 to benefit from future runtime updates, the latest security, and performance improvements.
-
-Functions do not currently support importing dependencies, but you can [contact Segment Support](https://segment.com/help/contact/){:target="_blank"} to request that one be added.
+Functions don't currently support importing dependencies, but you can [contact Segment Support](https://segment.com/help/contact/){:target="_blank"} to request that one be added.
The following dependencies are installed in the function environment by default.
diff --git a/src/_includes/content/functions/settings.md b/src/_includes/content/functions/settings.md
index 2b11c86279..e2becaa0a5 100644
--- a/src/_includes/content/functions/settings.md
+++ b/src/_includes/content/functions/settings.md
@@ -2,15 +2,15 @@
Settings allow you to pass configurable variables to your function, which is the best way to pass sensitive information such as security tokens. For example, you might use `settings` as placeholders to use information such as an API endpoint and API key. This way, you can use the same code with different settings for different purposes. When you deploy a function in your workspace, you are prompted to fill out these settings to configure the function.
-First, add a setting in **Settings** tab in the code editor:
+To use settings:
-{:width="500"}
+1. Add a setting in the **Settings** tab in the code editor:
-Click **Add Setting** to add your new setting.
+{:width="500"}
-
+2. Click **Add Setting** to add your new setting.
-You can configure the details about this setting, which change how it's displayed to anyone using your function:
+3. Configure the details about this setting, which change how it's displayed to anyone using your function:
- **Label** - Name of the setting, which users see when configuring the function.
- **Name** - Auto-generated name of the setting to use in function's source code.
@@ -21,8 +21,6 @@ You can configure the details about this setting, which change how it's displaye
As you change the values, a preview to the right updates to show how your setting will look and work.
-Click **Add Setting** to save the new setting.
+4. Click **Add Setting** to save the new setting.
Once you save a setting, it appears in the **Settings** tab for the function. You can edit or delete settings from this tab.
-
-{:width="500"}
diff --git a/src/_includes/content/snippet-helper.md b/src/_includes/content/snippet-helper.md
index db8e0b740a..8e755ae975 100644
--- a/src/_includes/content/snippet-helper.md
+++ b/src/_includes/content/snippet-helper.md
@@ -138,4 +138,30 @@ analytics.page();
```
{% endcodeexampletab %}
-{% endcodeexample %}
+{% codeexampletab HTML head with snippet %}
+```html
+
+ My Page Title
+
+
+
+
+
+```
+{% endcodeexampletab %}
+
+{% endcodeexample %}
\ No newline at end of file
diff --git a/src/connections/functions/insert-functions.md b/src/connections/functions/insert-functions.md
index 00e32f89b0..12a9147f96 100644
--- a/src/connections/functions/insert-functions.md
+++ b/src/connections/functions/insert-functions.md
@@ -5,15 +5,13 @@ title: Destination Insert Functions
Use Destination Insert Functions to enrich, transform, or filter your data before it reaches downstream destinations.
-**Implement advanced data computation**: Write custom computation, operations, and business logic on streaming data that you send to downstream destinations.
+With Destination Insert Functions you can:
+* **Implement advanced data computation**: Write custom computation, operations, and business logic on streaming data that you send to downstream destinations.
+* **Enrich your data**: Use destination insert functions with Segment's Profile API or third party sources to add additional context to your data and create personalized customer experiences.
+* **Support data compliance**: Use destination insert functions to support data masking, encryption, decryption, improved PII data handling, and tokenization.
+* **Customize filtration for your destinations**: Create custom logic with nested if-else statements, regex, custom business rules, and more to filter event data.
-**Enrich your data**: Use destination insert functions with Segment's Profile API or third party sources to add additional context to your data and create personalized customer experiences.
-
-**Support data compliance**: Use destination insert functions to support data masking, encryption, decryption, improved PII data handling, and tokenization.
-
-**Customize filtration for your destinations**: Create custom logic with nested if-else statements, regex, custom business rules, and more to filter event data.
-
-> info "Destination Insert Functions are not compatible with IP Allowlisting"
+> info "Destination Insert Functions aren't compatible with IP Allowlisting"
> For more information, see the [IP Allowlisting](/docs/connections/destinations/#ip-allowlisting) documentation.
## Create destination insert functions
@@ -80,7 +78,7 @@ Insert functions can define handlers for each message type in the [Segment spec]
Each of the functions above accepts two arguments:
-- **event** - Segment event object, where fields and values depend on the event type. For example, in "Identify" events, Segment formats the object to match the [Identify spec](/docs/connections/spec/identify/).
+- **event** - Segment event object, where fields and values depend on the event type. For example, in Identify events, Segment formats the object to match the [Identify spec](/docs/connections/spec/identify/).
- **settings** - Set of [settings](#create-settings-and-secrets) for this function.
The example below shows a function that listens for "Track" events, and sends some details about them to an external service.
@@ -104,16 +102,16 @@ async function onTrack(event) {
}
```
-To change which event type the handler listens to, you can rename it to the name of the message type. For example, if you rename this function `onIdentify`, it listens for "Identify" events instead.
+To change which event type the handler listens to, you can rename it to the name of the message type. For example, if you rename this function `onIdentify`, it listens for Identify events instead.
-To ensure the Destination processes an event payload modified by the function, return the `event` object at the handler's end.
+To ensure the destination processes an event payload modified by the function, return the `event` object at the handler's end.
> info ""
> Functions' runtime includes a `fetch()` polyfill using a `node-fetch` package. Check out the [node-fetch documentation](https://www.npmjs.com/package/node-fetch){:target="_blank"} for usage examples.
### Variable scoping
-When declaring settings variables, make sure to declare them in the function handler rather than globally in your function. This prevents you leaking the settings values across other function instances.
+When declaring settings variables, make sure to declare them in the function handler rather than globally in your function. This prevents you from leaking the settings values across other function instances.
The handler for insert functions is event-specific, for example, `onTrack()`, `onIdentify()`, and so on.
@@ -208,9 +206,9 @@ You may want to consider the [context object's](/docs/connections/spec/common/#c
{% include content/functions/settings.md %}
-Next, fill out this setting's value in the **Test** tab, so you can run the function and verify that the correct setting value is passed. (This value is only for testing your function.)
+5. Fill out this setting's value in the **Test** tab, so you can run the function and verify that the correct setting value is passed. (This value is only for testing your function.)
-Now that you've configured a setting and entered a test value, you can add code to read its value and run the function, as in the example below:
+6. Add code to read its value and run the function, as in the example below:
```js
async function onTrack(request, settings) {
diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/index.md b/src/connections/sources/catalog/libraries/mobile/react-native/index.md
index 545fb13ec0..9259f46072 100644
--- a/src/connections/sources/catalog/libraries/mobile/react-native/index.md
+++ b/src/connections/sources/catalog/libraries/mobile/react-native/index.md
@@ -5,7 +5,8 @@ support_type: flagship
id: B0X0QmvMny
---
-With Analytics for React Native, you can collect analytics in your React Native application and send data to any analytics or marketing tool without having to learn, test, or implement a new API every time. Analytics React Native enables you to process and track the history of a payload, while Segment controls the API and prevents unintended operations.
+
+With Analytics for [React Native](https://reactnative.dev/){:target="_blank"}, you can collect analytics in your React Native application and send data to any analytics or marketing tool without having to learn, test, or implement a new API every time. Analytics React Native lets you process and track the history of a payload, while Segment controls the API and prevents unintended operations.
All of Segment's libraries are open-source, and you can view Analytics for React Native on GitHub. For more information, see the [Analytics React Native GitHub repository](https://github.com/segmentio/analytics-react-native){:target="_blank"}.
@@ -16,13 +17,14 @@ All of Segment's libraries are open-source, and you can view Analytics for React
> `@segment/analytics-react-native` is compatible with Expo's [Custom Dev Client](https://docs.expo.dev/development/getting-started/){:target="_blank"} and [EAS builds](https://docs.expo.dev/build/introduction/){:target="_blank"} without any additional configuration. Destination Plugins that require native modules may require custom [Expo Config Plugins](https://docs.expo.dev/guides/config-plugins/){:target="_blank"}.
>
> `@segment/analytics-react-native` isn't compatible with Expo Go.
-## Getting Started
+
+## Getting started
To get started with the Analytics for React Native library:
1. Create a React Native Source in Segment.
- 1. Go to **Connections > Sources > Add Source**.
- 2. Search for React Native and click **Add source**.
+ 1. Go to **Connections > Sources > Add source**.
+ 2. Search for "React Native" and click **Add Source**.
2. Install `@segment/analytics-react-native`, [`@segment/sovran-react-native`](https://github.com/segmentio/analytics-react-native/tree/master/packages/sovran){:target="_blank"} and [`react-native-get-random-values`](https://github.com/LinusU/react-native-get-random-values){:target="_blank"}. You can install in one of two ways:
```js
@@ -73,26 +75,26 @@ These are the options you can apply to configure the client:
| Name | Default | Description |
| --------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `writeKey` **required** | '' | Your Segment API key. |
-| `collectDeviceId` | false | Set to true to automatically collect the device Id.from the DRM API on Android devices. |
-| `debug` | true\* | When set to false, it will not generate any logs. |
+| `writeKey` | '' | Your Segment API key (**required**). |
+| `collectDeviceId` | false | Set to `true` to automatically collect the device ID from the DRM API on Android devices. |
+| `debug` | true\* | When set to `false`, it will not generate any logs. |
| `logger` | undefined | Custom logger instance to expose internal Segment client logging. |
| `flushAt` | 20 | How many events to accumulate before sending events to the backend. |
| `flushInterval` | 30 | In seconds, how often to send events to the backend. |
-| `flushPolicies` | undefined | Add more granular control for when to flush, see [Adding or removing policies](#adding-or-removing-policies) |
-| `maxBatchSize` | 1000 | How many events to send to the API at once |
-| `trackAppLifecycleEvents` | false | Enable automatic tracking for [app lifecycle events](/docs/connections/spec/mobile/#lifecycle-events): application installed, opened, updated, backgrounded |
-| `trackDeepLinks` | false | Enable automatic tracking for when the user opens the app with a deep link. This requires additional setup on iOS, [see instructions](#ios-deep-link-tracking-setup) |
-| `defaultSettings` | undefined | Settings that will be used if the request to get the settings from Segment fails. Type: [SegmentAPISettings](https://github.com/segmentio/analytics-react-native/blob/c0a5895c0c57375f18dd20e492b7d984393b7bc4/packages/core/src/types.ts#L293-L299) |
-| `autoAddSegmentDestination` | true | Set to false to skip adding the SegmentDestination plugin |
-| `storePersistor` | undefined | A custom persistor for the store that `analytics-react-native` uses. Must match [`Persistor`](https://github.com/segmentio/analytics-react-native/blob/master/packages/sovran/src/persistor/persistor.ts#L1-L18) interface exported from [sovran-react-native](https://github.com/segmentio/analytics-react-native/blob/master/packages/sovran). |
+| `flushPolicies` | undefined | Add more granular control for when to flush, see [adding or removing policies](#adding-or-removing-policies). |
+| `maxBatchSize` | 1000 | How many events to send to the API at once. |
+| `trackAppLifecycleEvents` | false | Enable automatic tracking for app lifecycle events: [Application Installed](/docs/connections/spec/mobile/#application-installed), [Opened](/docs/connections/spec/mobile/#application-opened), [Updated](/docs/connections/spec/mobile/#application-updated), [Backgrounded](/docs/connections/spec/mobile/#application-backgrounded). |
+| `trackDeepLinks` | false | Enable automatic tracking for when the user opens the app with a deep link. This requires [additional setup on iOS](https://github.com/segmentio/analytics-react-native?tab=readme-ov-file#ios-deep-link-tracking-setup){:target="_blank"}. |
+| `defaultSettings` | undefined | Settings that will be used if the request to get the settings from Segment fails. Type: [`SegmentAPISettings`](https://github.com/segmentio/analytics-react-native/blob/c0a5895c0c57375f18dd20e492b7d984393b7bc4/packages/core/src/types.ts#L293-L299){:target="_blank"}. |
+| `autoAddSegmentDestination` | true | Set to `false` to skip adding the `SegmentDestination` plugin. |
+| `storePersistor` | undefined | A custom persistor for the store that `analytics-react-native` uses. Must match [`Persistor`](https://github.com/segmentio/analytics-react-native/blob/master/packages/sovran/src/persistor/persistor.ts#L1-L18){:target="_blank"} interface exported from [sovran-react-native](https://github.com/segmentio/analytics-react-native/blob/master/packages/sovran){:target="_blank"}. |
| `proxy` | undefined | `proxy` is a batch url to post to instead of 'https://api.segment.io/v1/b'. |
-| `errorHandler` | undefined | Create custom actions when errors happen, see [Handling errors](#handling-errors) |
+| `errorHandler` | undefined | Create custom actions when errors happen. For detail, see [handling errors](#handling-errors). |
| `useSegmentEndpoints` | false | Set to `true` to automatically append the Segment endpoints when using `proxy` or `cdnProxy` to send or fetch settings. Otherwise, `proxy` or `cdnProxy` will be used as is. |
-## Adding Plugins to the Client
+## Adding plugins to the client
-You can add a plugin at any time through the `segmentClient.add()` method. More information about plugins, including a detailed architecture overview and a guide to creating your own can be found in the [Analytics React Native Plugin Architecture](/docs/connections/sources/catalog/libraries/mobile/react-native/react-native-plugin-architecture/) docs.
+You can add a plugin at any time using `segmentClient.add()`. More information about plugins, including a detailed architecture overview and a guide to creating your own, can be found in the [Analytics React Native Plugin Architecture](/docs/connections/sources/catalog/libraries/mobile/react-native/react-native-plugin-architecture/) docs.
```js
import { createClient } from '@segment/analytics-react-native';
@@ -110,7 +112,7 @@ segmentClient.add({ plugin: new FirebasePlugin() });
segmentClient.add({ plugin: new IdfaPlugin() });
```
## Usage
-You can use Analytics React Native with or without hooks. Detailed overviews of both implementation options can be found below.
+You can use Analytics React Native with or without hooks.
### Usage with hooks
To use the `useAnalytics` hook within the application, wrap the application in an AnalyticsProvider. This uses the [Context API](https://reactjs.org/docs/context.html){:target="_blank"} which allows access to the analytics client anywhere in the application.
@@ -201,15 +203,15 @@ Once you've installed the Analytics React Native library, you can start collecti
- [Alias](/docs/connections/sources/catalog/libraries/mobile/react-native/implementation/#alias)
## Destinations
-Destinations are the business tools or apps that Segment forwards your data to. Adding Destinations allow you to act on your data and learn more about your customers in real time.
+Destinations are the business tools or apps that Segment sends your data to. Adding destinations allows you to act on your data and learn more about your customers in real time.
- Segment offers support for two different types of destination connection modes: Cloud-mode and Device-mode. learn more about the differences between the two in the Segment [Destination docs](/docs/connections/destinations/#connection-modes).
+ Segment offers support for two different types of destination connection modes: cloud-mode and device-mode. Learn more about the differences between the two in the Segment [destination docs](/docs/connections/destinations/#connection-modes).
{% include components/reference-button.html
href="/docs/connections/sources/catalog/libraries/mobile/react-native/cloud-mode-destinations"
icon="destinations-catalog/cloud-apps.svg"
- title="Cloud-mode Destinations"
+ title="Cloud-mode destinations"
description="Destinations that can be enabled from your Segment workspace and require no additional app setup."
newtab="false"
%}
@@ -217,7 +219,7 @@ Destinations are the business tools or apps that Segment forwards your data to.
{% include components/reference-button.html
href="/docs/connections/sources/catalog/libraries/mobile/react-native/destination-plugins"
icon="destinations-catalog/mobile.svg"
- title="Device-mode Destinations"
+ title="Device-mode destinations"
description="Destinations that require additional app setup, and limit certain Segment functionality."
newtab="false"
%}
@@ -243,7 +245,7 @@ group('some-company', {
{% endcodeexampletab %}
{% endcodeexample %}
-## Utility Methods
+## Utility methods
The Analytics React Native 2.0 utility methods help you to manage your data. They include:
- Alias
- Reset
@@ -251,7 +253,7 @@ The Analytics React Native 2.0 utility methods help you to manage your data. The
- Cleanup
### Alias
-The [alias](/docs/connections/spec/alias/) method is used to merge two user identities by connecting two sets of user data as one. This method is required to manage user identities in some of Segment's destinations.
+The [Alias](/docs/connections/spec/alias/) method is used to merge two user identities by connecting two sets of user data as one. This method is required to manage user identities in some of Segment's destinations.
{% codeexample %}
{% codeexampletab Method signature %}
@@ -270,10 +272,10 @@ alias('user-123');
{% endcodeexample %}
### Reset
-The reset method clears the internal state of the library for the current user and group. This is useful for apps where users can log in and out with different identities over time.
+The Reset method clears the internal state of the library for the current user and group. This is useful for apps where users can log in and out with different identities over time.
> warning ""
-> **Note:** Each time you call reset, a new AnonymousId is generated automatically.
+> Each time you call Reset, a new AnonymousId is generated automatically.
{% codeexample %}
{% codeexampletab Method signature %}
@@ -313,7 +315,7 @@ flush();
{% endcodeexample %}
### Cleanup
-In case you need to reinitialize the client, that is, you've called createClient more than once for the same client in your application lifecycle, use this method on the old client to clear any subscriptions and timers first.
+If you've called createClient more than once for the same client in your application lifecycle, use this method on the old client to clear any subscriptions and timers first.
```js
let client = createClient({
@@ -329,11 +331,11 @@ client = createClient({
If you don't do this, the old client instance would still exist and retain the timers, making all your events fire twice.
-Ideally, you shouldn't have to use this method, and the Segment client should be initialized only once in the application lifecycle.
+Ideally, you shouldn't have to use this method and the Segment client should be initialized only once in the application lifecycle.
## Control upload with Flush Policies
-To granularly control when Segment uploads events you can use `FlushPolicies`.
-A Flush Policy defines the strategy for deciding when to flush. This can be on an interval, time of day, after receiving a certain number of events, or after receiving a particular event. This gives you more flexibility on when to send event to Segment.
+To granularly control when Segment uploads events, use `FlushPolicies`. A Flush Policy defines the strategy for deciding when to flush. This can be on an interval, time of day, after receiving a certain number of events, or after receiving a particular event. This gives you more flexibility on when to send event to Segment.
+
Set Flush Policies in the configuration of the client:
```ts
const client = createClient({
@@ -345,20 +347,21 @@ const client = createClient({
],
});
```
-You can set several policies at a time. When a flush occurs, it triggers an upload of the events, then resets the logic after every flush.
-As a result, only the first policy to reach `shouldFlush` will trigger a flush. In the example above either the event count reaches 5 or the timer reaches 500ms, whatever comes first will trigger a flush.
-Segment has several standard Flush Policies:
-- `CountFlushPolicy` triggers when you reach a certain number of events
-- `TimerFlushPolicy` triggers on an interval of milliseconds
-- `StartupFlushPolicy` triggers on client startup only
+You can set several policies at a time. When a flush occurs, it triggers an upload of the events then resets the logic after every flush. As a result, only the first policy to reach `shouldFlush` will trigger a flush. In the example, the event count either reaches 5 or the timer reaches 500 ms - whatever comes first will trigger a flush.
+
+Segment has several standard flush policies:
+- `CountFlushPolicy` triggers when you reach a certain number of events.
+- `TimerFlushPolicy` triggers on an interval of milliseconds.
+- `StartupFlushPolicy` triggers on client startup only.
> info ""
> If you implement custom flush policies, they replace Segment's default Count and Timer policies. To incorporate custom policies, add your custom Timer and Count policies to the client's Flush Policies configuration.
### Adding or removing policies
-One of the main advantages of Flush Policies is that you can add and remove policies on the fly. This is very powerful when you want to reduce or increase the amount of flushes.
-For example you might want to disable flushes if you detect the user has no network:
+Flush policies can be added and removed while the application runs, which lets you adjust the number of flushes as needed.
+
+For example, to disable flushes if you detect the user has no network:
```ts
import NetInfo from "@react-native-community/netinfo";
const policiesIfNetworkIsUp = [
@@ -383,12 +386,15 @@ const unsubscribe = NetInfo.addEventListener((state) => {
});
```
### Creating your own flush policies
-You can create a custom Flush Policy special for your application needs by implementing the `FlushPolicy` interface. You can also extend the `FlushPolicyBase` class that already creates and handles the `shouldFlush` value reset.
-A `FlushPolicy` only needs to implement two methods:
-- `start()`: Executed when the flush policy is enabled and added to the client. This is a good place to start background operations, make async calls, configure things before execution
-- `onEvent(event: SegmentEvent)`: Called on every event tracked by your client
-- `reset()`: Called after a flush is triggered (either by your policy, by another policy, or manually)
-Your policies also have a `shouldFlush` observable boolean value. When this is set to true the client attempts to upload events. Each policy should reset this value to `false` according to its own logic, although it's common to do it inside the `reset` method.
+You can create a custom flush policy by implementing the `FlushPolicy` interface. You can also extend the `FlushPolicyBase` class which already creates and handles the `shouldFlush` value reset.
+
+A `FlushPolicy` must implement two of the following methods:
+- **`start()`**: Runs when the flush policy is enabled and added to the client. Use this method to start background operations, make asynchronous calls, or configure settings before execution.
+- **`onEvent(event: SegmentEvent)`**: Runs on every event tracked by your client.
+- **`reset()`**: Runs after a flush is triggered by your policy, another policy, or manually.
+
+Your policies also have a `shouldFlush` observable boolean value. When this is set to `true`, the client attempts to upload events. Each policy should reset this value to `false` based on its logic, although it's common to do this in the `reset` method.
+
```ts
export class FlushOnScreenEventsPolicy extends FlushPolicyBase {
onEvent(event: SegmentEvent): void {
@@ -398,7 +404,7 @@ export class FlushOnScreenEventsPolicy extends FlushPolicyBase {
}
}
reset(): void {
- // Superclass will reset the shouldFlush value so that the next screen event triggers a flush again
+ // Superclass will reset the shouldFlush value so that the next screen event triggers a flush again.
// But you can also reset the value whenever, say another event comes in or after a timeout
super.reset();
}
@@ -406,14 +412,14 @@ export class FlushOnScreenEventsPolicy extends FlushPolicyBase {
```
## Automatic screen tracking
-As sending a screen() event with each navigation action can get tiresome, it's best to track navigation globally. The implementation is different depending on which library you use for navigation. The two main navigation libraries for React Native are [React Navigation](https://reactnavigation.org/){:target="_blank"} and [React Native Navigation](https://wix.github.io/react-native-navigation/docs/before-you-start/){:target="_blank"}.
+To avoid sending a Screen event with each navigation action, you can track navigation globally. The implementation depends on which navigation library you use. The two main navigation libraries for React Native are [React Navigation](https://reactnavigation.org/){:target="_blank"} and [React Native Navigation](https://wix.github.io/react-native-navigation/docs/before-you-start/){:target="_blank"}.
### React Navigation
-When setting up React Navigation, you'll essentially find the root level navigation container and call `screen()` whenever the user navigates to a new screen. Segment's [example app](https://github.com/segmentio/analytics-react-native/tree/master/example){:target="_blank"} is set up with screen tracking using React Navigation, so you can use it as a guide.
+When setting up React Navigation, find the root-level navigation container and call `screen()` whenever the user navigates to a new screen. Segment's [example app](https://github.com/segmentio/analytics-react-native/tree/master/example){:target="_blank"} is set up with screen tracking using React Navigation, so you can use it as a guide.
To set up automatic screen tracking with React Navigation:
-1. Find the file where you used the `NavigationContainer`. This is the main top level container for React Navigation.
+1. Find the file where you used the `NavigationContainer`. This is the main top-level container for React Navigation.
2. In the component, create a new state variable to store the current route name:
```js
@@ -454,8 +460,8 @@ To set up automatic screen tracking with React Navigation:
```
### React Native Navigation
-In order to set up automatic screen tracking while using [React Native Navigation](https://wix.github.io/react-native-navigation/docs/before-you-start/){:target="_blank"}:
-1. Use an event listener at the point where you set up the root of your application (for example, `Navigation.setRoot`).
+To set up automatic screen tracking while using [React Native Navigation](https://wix.github.io/react-native-navigation/docs/before-you-start/){:target="_blank"}:
+1. Use an event listener at the point where you set up the root of your application, for example, `Navigation.setRoot`.
2. Access your `SegmentClient` at the root of your application.
```js
@@ -465,10 +471,10 @@ In order to set up automatic screen tracking while using [React Native Navigatio
});
```
-## Plugin Architecture
-Segment's plugin architecture enables you to modify and augment how the events are processed before they're uploaded to the Segment API. In order to customize what happens after an event is created, you can create and place various Plugins along the processing pipeline that an event goes through. This pipeline is referred to as a timeline.
+## Plugin architecture
+Segment's plugin architecture lets you modify and augment how the events are processed before they're uploaded to the Segment API. To customize what happens after an event is created, you can create and place various plugins along the processing pipeline that an event goes through. This pipeline is referred to as a timeline.
-### Plugin Types
+### Plugin types
| Plugin Type | Description |
| ------------- | ------------------------------------------------------------------------------------------------- |
@@ -479,15 +485,15 @@ Segment's plugin architecture enables you to modify and augment how the events a
| `utility` | Executes only with manual calls such as Logging. |
> info ""
-> Plugins can have their own native code (such as the iOS-only [`IdfaPlugin`](https://github.com/segmentio/analytics-react-native/blob/829fc80bc8c4f59fa99dadd25083efa422d577f0/packages/plugins/plugin-idfa/README.md){:target="_blank"} or wrap an underlying library (such as the [`FirebasePlugin`](https://www.npmjs.com/package/@segment/analytics-react-native-plugin-firebase) which uses `react-native-firebase` under the hood).
+> Plugins can have their own native code, such as the iOS-only [`IdfaPlugin`](https://github.com/segmentio/analytics-react-native/blob/829fc80bc8c4f59fa99dadd25083efa422d577f0/packages/plugins/plugin-idfa/README.md){:target="_blank"}, or wrap an underlying library, such as the [`FirebasePlugin`](https://www.npmjs.com/package/@segment/analytics-react-native-plugin-firebase){:target="_blank"} which uses `react-native-firebase`.
-### Destination Plugins
-Segment is an out-of-the-box `DestinationPlugin`. You can add as many other destination plugins as you like and upload events and data to them.
+### Destination plugins
+Segment provides a `DestinationPlugin`. You can add additional destination plugins and upload events and data to them.
-If you don't want the Segment destination plugin, you can pass `autoAddSegmentDestination = false` in the options when setting up your client. This prevents the `SegmentDestination` plugin from being added automatically for you.
+If you don't want the Segment destination plugin, set `autoAddSegmentDestination = false` in the options when setting up your client. This prevents the `SegmentDestination` plugin from being added automatically.
-### Adding Plugins
-You can add a plugin at any time through the `segmentClient.add()` method.
+### Adding plugins
+You can add a plugin at any time using `segmentClient.add()`.
```js
@@ -506,8 +512,8 @@ segmentClient.add({ plugin: new FirebasePlugin() });
segmentClient.add({ plugin: new IdfaPlugin() });
```
-### Writing your own Plugins
-Plugins implement as ES6 Classes. To get started, familiarize yourself with the available classes in `/packages/core/src/plugin.ts`.
+### Writing your own plugins
+Plugins implement as [ES6 classes](https://www.w3schools.com/react/react_es6_classes.asp){:target="_blank"}. To get started, familiarize yourself with the available classes in `/packages/core/src/plugin.ts`.
The available plugin classes are:
- `Plugin`
@@ -516,8 +522,7 @@ The available plugin classes are:
- `UtilityPlugin`
- `PlatformPlugin`
-Any plugin must be an extension of one of these classes.
-You can then customize the functionality by overriding different methods on the base class. For example, here is a simple `Logger` plugin:
+Any plugin must be an extension of one of these classes. You can then customize the functionality by overriding different methods on the base class. For example, here is a simple `Logger` plugin:
```js
// logger.js
@@ -530,7 +535,7 @@ import {
export class Logger extends Plugin {
- // Note that `type` is set as a class property
+ // Note that `type` is set as a class property.
// If you do not set a type your plugin will be a `utility` plugin (see Plugin Types above)
type = PluginType.before;
@@ -546,11 +551,11 @@ import { Logger } from './logger';
segmentClient.add({ plugin: new Logger() });
```
-As the plugin overrides the `execute()` method, this `Logger` calls `console.log` for every event going through the Timeline.
+As the plugin overrides `execute()`, this `Logger` calls `console.log` for every event going through the timeline.
-### Add a custom Destination Plugin
+### Add a custom destination plugin
-You can add custom plugins to Destination Plugins. For example, you could implement the following logic to send events to Braze on weekends only:
+You can add custom plugins to destination plugins. For example, you could implement the following logic to send events to Braze on weekends only:
```js
@@ -587,9 +592,9 @@ export class BrazeEventPlugin extends Plugin {
}
```
-Segment would then send events to the Braze Destination Plugin on Saturdays and Sundays, based on device time.
+Segment would then send events to the Braze pestination plugin on Saturdays and Sundays, based on device time.
-### Example Plugins
+### Example plugins
These are the example plugins you can use and alter to meet your tracking needs:
| Plugin | Package |
@@ -642,8 +647,8 @@ To get started with destination filters on mobile device-mode destinations using
segment.add({ plugin: new FirebasePlugin() })
``` -->
-## Supported Destinations
-Segment supports a large number of [Cloud-mode](/docs/connections/destinations/#connection-modes) destinations. Segment also supports the below destinations for Analytics React Native 2.0 in device-mode, with more to follow:
+## Supported destinations
+Segment supports a large number of [cloud-mode](/docs/connections/destinations/#connection-modes) destinations. Segment also supports the following destinations for Analytics React Native 2.0 in device-mode:
- [Adjust](https://www.npmjs.com/package/@segment/analytics-react-native-plugin-adjust){:target="_blank"}
- [Amplitude Session](https://www.npmjs.com/package/@segment/analytics-react-native-plugin-amplitude-session){:target="_blank"}
- [Appsflyer](https://www.npmjs.com/package/@segment/analytics-react-native-plugin-appsflyer){:target="_blank"}
@@ -653,19 +658,19 @@ Segment supports a large number of [Cloud-mode](/docs/connections/destinations/#
- [Firebase](https://www.npmjs.com/package/@segment/analytics-react-native-plugin-firebase){:target="_blank"}
## Device identifiers
-On Android, Segment's React Native library generates a unique ID by using the DRM API as context.device.id. Some destinations rely on this field being the Android ID, so be sure to double-check the destination’s vendor documentation. If you choose to override the default value using a plugin, make sure the identifier you choose complies with Google’s User Data Policy. For iOS the context.device.id is set the IDFV.
+On Android, Segment's React Native library generates a unique ID by using the DRM API as `context.device.id`. Some destinations rely on this field being the Android ID, so be sure to double-check the destination’s vendor documentation. If you choose to override the default value using a plugin, make sure the identifier you choose complies with [Google’s User Data Policy](https://developers.google.com/terms/api-services-user-data-policy){:target="_blank"}. For iOS, the `context.device.id` is set to the [IDFV](https://developer.apple.com/documentation/uikit/uidevice/identifierforvendor){:target="_blank"}.
-To collect the Android Advertising ID provided by Play Services, Segment provides a [plugin](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-advertising-id){:target="_blank"} that can be used to collect that value. This value is set to context.device.advertisingId. For iOS, this [plugin](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-idfa){:target="_blank"} can be used to set the IDFA context.device.advertisingId property.
+To collect the Android Advertising ID provided by Play Services, Segment provides a [plugin](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-advertising-id){:target="_blank"} that can be used to collect that value. This value is set to `context.device.advertisingId`. For iOS, this [plugin](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-idfa){:target="_blank"} can be used to set the IDFA `context.device.advertisingId` property.
## FAQs
-### Can I use the catalog of device-mode destinations from Segment's 1.X.X React-Native release?
-No, only the plugins listed above are supported in device-mode for Analytics React Native 2.0.
-### Will I still see device-mode integrations listed as `false` in the integrations object?
+#### Can I use the catalog of device-mode destinations from Segment's 1.X.X React-Native release?
+No, only the plugins [listed](#plugin-types) are supported in device-mode for Analytics React Native 2.0.
+#### Will I still see device-mode integrations listed as `false` in the integrations object?
When you successfully package a plugin in device-mode, you won't see the integration listed as `false` in the integrations object for a Segment event. This logic is packaged in the event metadata, and isn't surfaced in the Segment debugger.
-### Why are my IDs not set in UUID format?
+#### Why are my IDs not set in UUID format?
Due to [limitations](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/uuid.ts#L5){:target="_blank"} with the React Native bridge, Segment doesn't use UUID format for `anonymousId` and `messageId` values in local development. These IDs will be set in UUID format for your live app.
-### How do I set a distinct writeKey for iOS and android?
-You can set different writeKeys for iOS and Android. This is helpful if you want to send data to different destinations based on the client side platform. To set different writeKeys, you can dynamically set the writeKey when you initialize the Segment client:
+#### How do I set a distinct `writeKey` for iOS and Android?
+You can set different writeKeys for iOS and Android. This is useful if you want to send data to different destinations based on the client side platform. To set different writeKeys, you can dynamically set the writeKey when you initialize the Segment client:
```js
import {Platform} from 'react-native';
@@ -677,11 +682,11 @@ const segmentClient = createClient({
writeKey: segmentWriteKey
});
```
-### What is the instanceId set in context?
-The instanceId was introduced in [V 2.10.1](https://github.com/segmentio/analytics-react-native/releases/tag/%40segment%2Fanalytics-react-native-v2.10.1) and correlates events to a particular instance of the client in a scenario when you might have multiple instances on a single app.
+#### What is the `instanceId` set in context?
+The `instanceId` was introduced in [v2.10.1](https://github.com/segmentio/analytics-react-native/releases/tag/%40segment%2Fanalytics-react-native-v2.10.1) and correlates events to a particular instance of the client in a scenario when you might have multiple instances on a single app.
-### How do I interact with the integrations object?
-The integrations object is no longer part of the Segment events method signature. To access the integrations object and control what destinations the event reaches, you can use a Plugin:
+#### How do I interact with the Integrations object?
+The Integrations object is no longer part of the Segment events method signature. To access the Integrations object and control what destinations the event reaches, you can use a plugin:
```js
import {
@@ -706,8 +711,8 @@ import {
}
}
```
-### How do I add to the context Object?
-Like with the integrations object above, you'll need to use a plugin to access and modify the context object. For example, if you'd like to add `context.groupId` to every Track call, you should create a plugin like this:
+#### How do I add to the Context object?
+You need to use a plugin to access and modify the Context object. For example, to add `context.groupId` to every Track call, create a plugin like this:
```js
//in AddToContextPlugin.js
import {
@@ -735,14 +740,14 @@ import { AddToContextPlugin } from './AddToContextPlugin'
segmentClient.add({ plugin: new AddToContextPlugin() });
```
-### I've upgraded to React Native 2.0, but I am still getting warnings in the Google Play Store that my app is not compliant. Why is this?
+#### I've upgraded to React Native 2.0, but I'm still getting warnings in the Google Play Store that my app is not compliant. Why is this?
The React Native 2.0 library is compliant with Google Play Store policies. However, Segment recommends that you check to see if there are any old and inactive [tracks on the Google Play Store](https://developers.google.com/android-publisher/tracks){:target="_blank"} that are not updated to the latest build. If this is the case, we recommend updating those tracks to resolve the issue.
-### Can I set inlineRequires to false in my metro.config.js file?
-Segment requires the `inlineRequires` value in your `metro.config.js` value to be set to `true`. To disable `inlineRequires` for certain modules, you can specify this by using a [blockList](https://facebook.github.io/metro/docs/configuration/#:~:text=If%20inlineRequires%20is%20an%20object){:target="_blank"}.
+#### Can I set `inlineRequires` to false in my `metro.config.js` file?
+Segment requires the `inlineRequires` value in your `metro.config.js` value to be set to `true`. To disable `inlineRequires` for certain modules, you can specify this using a [blockList](https://facebook.github.io/metro/docs/configuration/#:~:text=If%20inlineRequires%20is%20an%20object){:target="_blank"}.
-### Can I clear user traits without calling the reset() method?
-The set method on userInfo can accept a function that receives the current state and returns a modified desired state. Using this method, you can return the current traits, delete any traits you no longer wish to track, and persist the new trait set.
+#### Can I clear user traits without calling the Reset method?
+The Reset method on `userInfo` can accept a function that receives the current state and returns a modified desired state. Using this method, you can return the current traits, delete any traits you no longer wish to track, and persist the new trait set.
```js
segmentClient.userInfo.set((currentUserInfo) => {
@@ -755,9 +760,9 @@ segmentClient.userInfo.set((currentUserInfo) => {
});
```
-### If I use a proxy, what Segment endpoint should I send to?
-If you proxy your events through the `proxy` config option, you must forward the batched events to `https://api.segment.io/v1/b`. The `https://api.segment.io/v1/batch` endpoint is reserved for events arriving from server side sending, and proxying to that endpoint for your mobile events may result in unexpected behavior.
+#### If I use a proxy, what Segment endpoint should I send to?
+If you proxy your events through the `proxy` config option, you must forward the batched events to `https://api.segment.io/v1/b`. The `https://api.segment.io/v1/batch` endpoint is reserved for events arriving from server-side sending. Proxying to that endpoint for your mobile events may result in unexpected behavior.
## Changelog
-[View the Analytics React Native changelog on GitHub](https://github.com/segmentio/analytics-react-native/releases){:target="_blank"}.
+View the [Analytics React Native changelog](https://github.com/segmentio/analytics-react-native/releases){:target="_blank"} on GitHub.
diff --git a/src/connections/sources/catalog/libraries/server/python/index.md b/src/connections/sources/catalog/libraries/server/python/index.md
index 172475732f..8025c33bb4 100644
--- a/src/connections/sources/catalog/libraries/server/python/index.md
+++ b/src/connections/sources/catalog/libraries/server/python/index.md
@@ -3,15 +3,15 @@ title: Analytics for Python
id: XRksQPCr7X
support_type: maintenance
---
-Segment's Python library lets you record analytics data from your Python code. The requests hit Segment's servers, and then Segment routes your data to any analytics service you enable on your destinations page.
+Segment's Python library lets you record analytics data from your Python code. The requests hit Segment's servers and then Segment routes your data to any analytics service you enable on your destinations page.
-This library is open-source, so you can [check it out on GitHub](https://github.com/segmentio/analytics-python).
+This library is open-source. [Check it out on GitHub](https://github.com/segmentio/analytics-python){:target="_blank”}.
All of Segment's server-side libraries are built for high-performance, so you can use them in your web server controller code. This library uses an internal queue to make Identify and Track calls non-blocking and fast. It also batches messages and flushes asynchronously to Segment's servers using a separate thread.
-Want to stay updated on releases? Subscribe to the [release feed](https://github.com/segmentio/analytics-python/releases.atom).
+Want to stay updated on releases? Subscribe to the [release feed on GitHub](https://github.com/segmentio/analytics-python/releases.atom){:target="_blank”}.
-## Getting Started
+## Getting started
Install `segment-analytics-python` using pip:
@@ -19,7 +19,7 @@ Install `segment-analytics-python` using pip:
pip install segment-analytics-python
```
-If you're using a system for managing dependencies, you'll want to pin the library to `1.X` to avoid breaking changes when the library is updated
+If you're using a system for managing dependencies, you'll want to pin the library to `1.X` to avoid breaking changes when the library is updated.
Inside your app, you'll want to **set your `write_key`** before making any analytics calls:
@@ -66,9 +66,9 @@ analytics.send = False
The Identify method lets you tie a user to their actions and record traits about them. It includes a unique User ID and any optional traits you know about them.
-Segment recommends that you call Identify once when the user's account is created, and later when their traits change.
+Segment recommends that you call Identify once when the user's account is created, and later when their traits change.
-Example Identify call:
+The following example Identify call is identifying John by his unique User ID (the one you know him by in your database) and labeling him with `email`, `name` and `friends` traits.
```python
analytics.identify('019mr8mf4r', {
@@ -78,9 +78,7 @@ analytics.identify('019mr8mf4r', {
})
```
-The example Identify call is identifying John by his unique User ID (the one you know him by in your database) and labeling him with `email`, `name` and `friends` traits.
-
-The Identify call has the following fields:
+An Identify call has the following fields:
| Field | Description |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
@@ -92,7 +90,7 @@ The Identify call has the following fields:
| `integrations` _dict, optional_ | A dictionary of destinations to enable or disable |
-Find details on the **Identify method payload** in the [Segment Spec](/docs/connections/spec/identify/).
+Find details on the **Identify method payload** in the [Segment Spec](/docs/connections/spec/identify/).
## Track
@@ -102,16 +100,15 @@ You'll want to track events that are indicators of success for your site, like *
To get started, Segment recommends tracking just a few important events. You can always add more later.
-Example Track call:
+The following sample Track call informs Segment that your user just triggered the **Signed Up** event and chose your hypothetical `'Enterprise'` plan.
```python
analytics.track('f4ca124298', 'Signed Up', {
'plan': 'Enterprise'
})
```
-This call informs Segment that your user just triggered the **Signed Up** event and chose your hypothetical `'Enterprise'` plan.
-Track event properties can be anything you want to record, for example:
+Track event properties can be anything you want to record. For example, here's an Track event for a user who bookmarked an article:
```python
analytics.track('f4ca124298', 'Article Bookmarked', {
@@ -121,7 +118,7 @@ analytics.track('f4ca124298', 'Article Bookmarked', {
})
```
-The Track method has the following fields:
+A Track call has the following fields:
| Field | Description |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -142,14 +139,14 @@ The [Page](/docs/connections/spec/page) method lets you record page views on you
If you use a client-side set up in combination with the Python library, page calls are **already tracked for you** by default. If you want to record your own page views manually and aren't using a client-side library, read on.
-Example Page call:
+As an example, here's a sample event for users who view this page:
```python
analytics.page('user_id', 'Docs', 'Python', {
'url': 'http://segment.com'
})
```
-The Page call has the following fields:
+A Page call has the following fields:
| Field | Description |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -162,7 +159,6 @@ The Page call has the following fields:
| `anonymous_id` _string or int, optional_ | An anonymous session ID for this user. |
| `integrations` _dict, optional_ | A dictionary of destinations to enable or disable |
-
Find details on the **Page method payload** in the [Segment Spec](/docs/connections/spec/page/).
## Screen
@@ -171,7 +167,7 @@ The [Screen](/docs/connections/spec/screen) method lets you record screen views
If you use a Segment mobile SDK in combination with the library, screen calls are **already tracked for you** by default.If you want to record your own screen views manually and don't use a Segment SDK library, learn how below.
-Example Screen call:
+Here's an example of a Screen call for the user settings page in your app:
```python
analytics.screen('user_id', 'Settings', 'Brightness', {
@@ -192,17 +188,15 @@ The Screen call has the following fields:
| `anonymous_id` _string or int, optional_ | An anonymous session ID for this user. |
| `integrations` _dict, optional_ | A dictionary of destinations to enable or disable |
-
Find details on the **Screen method payload** in the [Segment Spec](/docs/connections/spec/screen/).
----
## Group
Group lets you associate an [identified user](/docs/connections/sources/catalog/libraries/server/python/#identify) with a group. A group could be a company, organization, account, project or team. It also lets you record custom traits about the group, like industry or number of employees.
This is useful for tools like [Intercom](/docs/connections/destinations/catalog/intercom/), [Preact](/docs/connections/destinations/catalog/preact/) and [Totango](/docs/connections/destinations/catalog/totango/), as it ties the user to a **group** of other users.
-Example Group call:
+Here's an example Group call linking your user to their employer, Initech:
```python
analytics.group('user_id', 'group_id', {
@@ -211,7 +205,7 @@ analytics.group('user_id', 'group_id', {
})
```
-The Group call has the following fields:
+A Group call has the following fields:
| Field | Description |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -223,16 +217,15 @@ The Group call has the following fields:
| `anonymous_id` _string or int, optional_ | An anonymous session ID for this user. |
| `integrations` _dict, optional_ | A dictionary of destinations to enable or disable |
-
-Find more details about Group, including the **Group method payload**, in the [Segment Spec](/docs/connections/spec/group/).
+Find more details about Group calls, including the **Group method payload**, in the [Segment Spec](/docs/connections/spec/group/).
## Alias
Alias is how you associate one identity with another. This is an advanced method, but it is required to manage user identities successfully in *some* of Segment's destinations.
-In [Mixpanel](/docs/connections/destinations/catalog/mixpanel/#alias) it's used to associate an anonymous user with an identified user once they sign up. For [Kissmetrics](/docs/connections/destinations/catalog/kissmetrics/#alias) if your user switches IDs, you can use Alias to rename the 'userId'.
+In [Mixpanel](/docs/connections/destinations/catalog/mixpanel/#alias) it's used to associate an anonymous user with an identified user once they sign up. For [Kissmetrics](/docs/connections/destinations/catalog/kissmetrics/#alias) if your user switches IDs, you can use Alias to rename the `userId`.
-Example Alias call:
+Here's an example of an Alias call that associates a previous user ID with a new ID:
```python
analytics.alias(previous_id, user_id)
@@ -271,7 +264,7 @@ For more details about Alias, including the **Alias call payload**, see the [Seg
You can import historical data by adding the `timestamp` argument to any of your method calls. This can be helpful if you've just switched to Segment.
-Historical imports can only be done into destinations that can accept historical timestamped data. Most analytics tools like Mixpanel, Amplitude, Kissmetrics, etc. can handle that type of data just fine. One common destination that does not accept historical data is Google Analytics since their API cannot accept historical data.
+Historical imports can only be done into destinations that can accept historical timestamped data. Most analytics tools like Mixpanel, Amplitude, or Kissmetrics, for example, can handle that type of data just fine. One common destination that does not accept historical data is Google Analytics, since their API cannot accept historical data.
> info ""
> If you track things that are happening right now, omit the `timestamp` and Segment's servers will timestamp the requests for you.
@@ -365,8 +358,6 @@ for entry in log:
analytics.flush()
```
----
-
## Selecting destinations
The Alias, Group, Identify, Page, and Track calls can all be passed an object of `integrations` that lets you turn certain destinations on or off. By default all destinations are enabled.
@@ -382,13 +373,13 @@ analytics.track('9742', 'Song Played', integrations={
```
This example illustrates that this track call goes only to Kissmetrics. `'all': False` says that no destination should be enabled unless otherwise specified. `'Kissmetrics': True` enables Kissmetrics.
-Destination flags are **case sensitive** and match [the destination's name in the docs](/docs/connections/destinations/) (for example, "AdLearn Open Platform", "awe.sm", or "MailChimp").
+Destination flags are **case sensitive** and match [the destination's name in the docs](/docs/connections/destinations/), for example, "AdLearn Open Platform", "awe.sm", or "MailChimp".
## Batching
Segment's libraries are built to support high performance environments. It's safe to use analytics-python on a web server that serves hundreds of requests per second.
-Every method you call **does not** result in an HTTP request, but is queued in memory instead. Messages are flushed in batch in the background, which allows for much faster operation.
+Every method you call **doesn't** result in an HTTP request, but is queued in memory instead. Messages are flushed in batch in the background, which allows for much faster operation.
By default, Segment's Python library will flush:
@@ -445,7 +436,7 @@ logging.getLogger('segment').setLevel('DEBUG')
## Options
-If you hate defaults or want to send data to multiple sources, then you can create your own Clients. Keep in mind that each client runs a separate background thread, so you won't want to create these on every request. Check out these gizmos:
+If you hate defaults or want to send data to multiple sources, then you can create your own Clients. Keep in mind that each client runs a separate background thread, so you won't want to create these on every request. Check out this sample code:
```python
from analytics import Client
@@ -458,7 +449,7 @@ Client('YOUR_WRITE_KEY', debug=True, on_error=on_error, send=True,
| `debug` _bool_ | `True` to log more verbosely, `False` by default. |
| `send` _bool_ | `False` to avoid sending data to Segment, `True` by default. |
| `on_error` _function_ | Set an error handler to be called whenever errors occur |
-| `max_queue_size` _int_ | Maximum number of elements allowed in the queue. If this condition is ever reached, that means you're identifying / tracking faster than you can flush. If this happens, [let Segment know](https://segment.com/help/contact/). |
+| `max_queue_size` _int_ | Maximum number of elements allowed in the queue. If this condition is ever reached, that means you're identifying or tracking faster than you can flush. If this happens, [let Segment know](https://segment.com/help/contact/). |
| `upload_interval` _float_ | The frequency, in seconds, to send data to Segment. Default value is 0.5. |
| `upload_size` _int_ | Number of items in a batch to upload. Default value is 100. |
| `gzip` _bool_ | `True` to compress data with gzip before sending, `False` by default. |
@@ -490,7 +481,7 @@ default_app_config = 'myapp.apps.MyAppConfig'
### How do I add logging to Django?
-If you're troubleshooting your analytics, you'll want to turn on logging.
+If you're troubleshooting your Analytics setup, you'll want to turn on logging.
You need to add the `analytics` logger and handler to your `settings.py`.
@@ -535,7 +526,7 @@ Google App Engine may not resolve project dependencies. If this is the case add
- [requests](https://github.com/kennethreitz/requests){:target="_blank"}
- [python-dateutil](https://github.com/paxan/python-dateutil){:target="_blank"}
-If you're having issues with threads outliving your request, check [Background threads and synchronous mode](#background-threads-and-synchronous-mode)
+If you're having issues with threads outliving your request, check the [Background threads and synchronous mode](#background-threads-and-synchronous-mode) docs.
## OAuth 2.0
@@ -603,7 +594,7 @@ Check that you have the most recent version.
python -c "import segment.analytics as analytics; print analytics.VERSION"
```
-Does it match [the most current version](https://github.com/segmentio/analytics-python/blob/master/analytics/version.py#L2)?
+Does it match [the most current version](https://github.com/segmentio/analytics-python/blob/master/analytics/version.py#L2){:target="_blank”}?
If not, update your version.
diff --git a/src/connections/sources/catalog/libraries/website/javascript/quickstart.md b/src/connections/sources/catalog/libraries/website/javascript/quickstart.md
index 805d1fb4c2..db51a53b57 100644
--- a/src/connections/sources/catalog/libraries/website/javascript/quickstart.md
+++ b/src/connections/sources/catalog/libraries/website/javascript/quickstart.md
@@ -30,14 +30,12 @@ You can choose to install Segment to your site in 1 of 2 ways:
[b. Install Segment as an NPM package](#step-2b-install-segment-as-a-npm-package)
-### Step 2a: Add the Segment Snippet
+### Step 2a: Add the Segment snippet
> info ""
> You can find the latest version of the Segment snippet in the **Overview** tab of your JavaScript source.
-To add the Segment snippet to your app:
-
-Paste the snippet into the `` tag of your site to install Segment.
+To add the Segment snippet to your app, paste it into the `` tag of your site, **below the `` tag and the canonical URL**. This ensures that Analytics.js can capture the `document.title` value.
{% include content/snippet-helper.md %}
@@ -48,7 +46,7 @@ Replace `YOUR_WRITE_KEY` in the snippet you pasted with your Segment project's *
That snippet loads Analytics.js onto the page _asynchronously_, so it won't affect your page load speed. Once the snippet is running on your site, you can turn on destinations from the destinations page in your workspace and they start loading on your site automatically.
-Note that you should remove other native third-party destination code that you might have on your site. For example, if you're using Segment to send data to Google Analytics, make sure you remove the Google Analytics snippet from your site source code to prevent sending the data twice.
+You should also remove other native third-party destination code that you might have on your site. For example, if you're using Segment to send data to Google Analytics, make sure you remove the Google Analytics snippet from your site source code to prevent sending the data twice.
> info ""
> If you only want the most basic Google Analytics setup, there's no need to continue with the setup. Just toggle on Google Analytics in the Segment interface.
diff --git a/src/engage/audiences/index.md b/src/engage/audiences/index.md
index ab7acaf1e8..7819182eac 100644
--- a/src/engage/audiences/index.md
+++ b/src/engage/audiences/index.md
@@ -159,6 +159,14 @@ For step-by-step instructions on how to connect an audience to a destination, se
> info "Historical data behavior for new destinations"
> When you connect a new destination to an existing audience, Engage backfills historical data if the **Include Historical Data** option is enabled in the audience settings. If this setting is disabled, only new data gets sent. To sync all historical data manually, [contact Support](mailto:friends@segment.com) to request a resync.
+### Disconnect or remove a destination
+
+Whnen managing your audience-destination connections you have two options:
+
+1. **Connect to destination** - Toggles the connection on and off. When disconnected, the setup and configuration remain saved, but no data flows from the audience to the destination until you re-enable the connection. Use this option to pause sending data without losing your work.
+2. **Remove destination from audience** - Deletes the connection completely, so no events are sent to the destination. To use the destination again, you'll need to set it up as new from the beginning.
+
+
## Understanding compute times
Because a number of factors (like system load, backfills, or user bases) determine the complexity of an audience, some compute times take longer than others.
@@ -246,7 +254,7 @@ To edit a realtime trait or audience:
1. In your Engage Space, select the **Computed Traits** or **Audiences** tab.
2. Select the realtime audience or trait you want to edit.
3. Select the **Builder** tab and make your edits.
-4. Preview the results, then select **Create Audience** to confirm your edits.
+4. Preview the results, then select **Save audience** to confirm your edits.
Engage then processes your realtime audience or trait edits. While the edit task runs, the audience remains locked and you can't make further changes. Once Engage incorporates your changes, you'll be able to access your updated audience or trait.
diff --git a/src/engage/audiences/linked-audiences.md b/src/engage/audiences/linked-audiences.md
index 726bae1d4e..d365592116 100644
--- a/src/engage/audiences/linked-audiences.md
+++ b/src/engage/audiences/linked-audiences.md
@@ -141,25 +141,25 @@ After you build your Linked Audience, you can send events to your chosen destina
To activate your Linked Audience:
-- [Step 2a: Connecting to a Destination](#step-2a-connecting-to-a-destination)
+- [Step 2a: Configuring an activation](#step-2a-connecting-to-a-destination)
- [Step 2b: Selecting your Destination Actions](#step-2b-select-your-destination-actions)
- [Step 2c: Defining how and when to trigger an event to your Destination](#step-2c-define-how-and-when-to-trigger-an-event-to-your-destination)
-- [Step 2d: Configuring the event payload](#step-2d-configure-the-event)
+- [Step 2d: Creating and activation and configuring the event payload](#step-2d-configure-the-event)
-### Step 2a: Connecting to a destination
-[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.
+### Step 2a: Configuring an activation
+See the step-by-step video on activating Linked Audiences:
+
-> info "Linked Audiences destinations"
-> Linked Audiences only supports [Actions Destinations](/docs/connections/destinations/actions/#available-actions-based-destinations). List destinations aren't supported.
+[Destinations](/docs/connections/destinations/) are the business tools or apps that Segment forwards your data to. Adding an activation to your Linked Audience 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 by creating an activation.
**Note:** Ensure you've [enabled your destination](/connections/destinations/catalog/) in Segment before you begin the steps below.
1. Navigate to **Engage > Audiences**.
2. Select the Linked Audience you set up in the previous step.
-3. Select **Add destination**.
+3. Select **Add activation**.
4. Select a destination from the catalog.
-5. Click **Configure data to send to destination**.
+5. Click **Next** to proceed with next steps.
### Step 2b: Select your Destination Actions
@@ -181,9 +181,17 @@ Configure how and when events are produced with each audience run. Select the en
-### Step 2d: Configure the event
+### Step 2d: Creating the activation
-After you select an action, Segment attempts to automatically configure the data fields that will be sent to the destination. You can review and adjust these settings before enabling this event.
+After you select the action and trigger, you can review your configuration and then create the activation by selecting **Save**. Creating the actvation will move you to the activation overview page, where you can configure destination settings (if applicable), identifier strategy, enrichment settings, and mappings.
+
+### Destination settings
+
+Some destinations may require configuration of additional destination settings, such as Advertiser ID. Please configure these settings before in order to enable your activation.
+
+### Identifier strategy
+
+Choose how Segment should send the identifiers to your destination. The settings will impact all activations that use this destination for this audience.
#### Enrich event
@@ -204,15 +212,13 @@ As you're enriching your events in Linked Audiences, you should view a preview o
#### Map event
-Only required fields are displayed. All optional & pre-filled fields are hidden, though you can view hidden fields by clicking **Show hidden fields**.
-
-These fields are pre-filled with properties configured by default.
+Segment attempts to automatically configure the data fields that will be sent to the destination. These fields are pre-filled with properties configured by default. Only required fields are displayed. All optional & pre-filled fields are hidden, though you can view hidden fields by clicking **Show hidden fields**. You can review and adjust these settings before enabling this event.
## Step 3: Send a test event to your destination
Send a test event to ensure that everything is connected properly and your destination receives the event.
-Enter the destination User id for the profile you want to use to test the event, then click **Send test event to destination**.
+Enter the destination User ID for the profile you want to use to test the event, then click **Send test event to destination**.
The Event content dropdown shows you a preview of what the data sent to your destination might look like.
@@ -245,8 +251,8 @@ There may be up to a five minute delay from the configured start time for audien
With your Linked Audience activated, follow these steps to monitor your activation:
-1. From the Audience Overview page, selected one of your connected destinations.
-2. Under the **Settings** tab, click **Destination delivery**, which then opens the Linked Audiences Delivery Overview.
+1. From the Audience Overview page, selected one of your connected activations.
+2. In the actions menu, select **View delivery overview in Connections**, which then opens the Linked Audiences Delivery Overview.
### Delivery Overview for Linked Audiences
diff --git a/src/engage/onboarding.md b/src/engage/onboarding.md
index 5cddc182b1..4387077004 100644
--- a/src/engage/onboarding.md
+++ b/src/engage/onboarding.md
@@ -5,8 +5,9 @@ hidden: true
redirect_from:
- '/engage/overview/onboarding'
---
-> info "Engage Premier End of Sale"
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
+
+> info "Engage Premier End of Life"
+> Engage Premier features, including Channels, Broadcasts, content templates, and Subscriptions, will no longer be available after December 15, 2025.
Twilio Engage brings Segment, Twilio, SendGrid, and WhatsApp together to help you create and send email, SMS, and WhatsApp campaigns to your customers.
diff --git a/src/protocols/tracking-plan/best-practices.md b/src/protocols/tracking-plan/best-practices.md
index 0ec32feb1f..143dcc4b62 100644
--- a/src/protocols/tracking-plan/best-practices.md
+++ b/src/protocols/tracking-plan/best-practices.md
@@ -5,9 +5,7 @@ redirect_from:
- '/protocols/tracking-plan/'
---
-Figuring out what events to track in Segment can feel overwhelming. Fortunately, Segment has helped thousands of customers through this process and has amassed a ton of resources to help you get started. Whether you're a small team just getting your app off the ground or a highly complex enterprise with hundreds of stakeholders, these resources can help.
-
-That being said, be prepared to invest time defining how you want to track data. Any investment in improving data quality will reap massive rewards, and compound over time by allowing your analytics teams to produce better insights, your marketing teams to run better campaigns and so much more.
+ Whether you're a small team just getting your app off the ground or a highly complex enterprise with hundreds of stakeholders, these resources can help. Be prepared to invest time defining how you want to track data. Any investment in improving data quality will reap massive rewards, and compound over time by allowing your analytics teams to produce better insights, your marketing teams to run better campaigns and so much more.
## Data tracking philosophy