diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml
index dfcb7c0c7e..4cf8c20b5f 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 2021-11-23
+# destination categories last updated 2021-11-25
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 3560229429..9207cfade7 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 2021-11-23
+# destination data last updated 2021-11-25
items:
- display_name: 2mee
name: 2mee
@@ -2799,6 +2799,54 @@ items:
description: You can find your Site ID in your Auryc account.
required: true
label: Site ID
+- display_name: AutopilotApp
+ name: AutopilotApp
+ slug: autopilotapp
+ hidden: false
+ url: connections/destinations/catalog/autopilotapp
+ previous_names:
+ - AutopilotApp
+ website: https://autopilotapp.com/
+ status: PUBLIC_BETA
+ categories:
+ - Email Marketing
+ - Marketing Automation
+ logo:
+ url: >-
+ https://public-segment-devcenter-production.s3.amazonaws.com/b5eba5a9-10f3-47eb-8de3-416d8663caf6.svg
+ mark:
+ url: >-
+ https://public-segment-devcenter-production.s3.amazonaws.com/ea4945e2-eaaa-44ac-aa87-b042272d35e3.svg
+ methods:
+ track: true
+ identify: true
+ group: false
+ alias: false
+ page: false
+ platforms:
+ browser: true
+ mobile: true
+ server: true
+ components: []
+ browserUnbundlingSupported: false
+ browserUnbundlingPublic: false
+ replay: false
+ connection_modes:
+ device:
+ web: false
+ mobile: false
+ server: false
+ cloud:
+ web: false
+ mobile: false
+ server: false
+ settings:
+ - name: apiKey
+ type: string
+ defaultValue: ''
+ description: Enter your autopilot API key here
+ required: true
+ label: API Key
- display_name: AutopilotHQ
name: AutopilotHQ
slug: autopilothq
diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml
index 30ffd0785b..03b3789fa7 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 cateogries last updated 2021-11-23
+# source cateogries last updated 2021-11-25
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 9eddc39fb2..5aac4b37cb 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 2021-11-23
+# sources last updated 2021-11-25
items:
- display_name: .NET
slug: net
diff --git a/src/_data/catalog/warehouse.yml b/src/_data/catalog/warehouse.yml
index e20c10431e..8f77ef1a84 100644
--- a/src/_data/catalog/warehouse.yml
+++ b/src/_data/catalog/warehouse.yml
@@ -18,7 +18,7 @@ items:
description: >-
The AWS S3 destination provides a more secure way to store data in your AWS S3 buckets.
url: connections/storage/catalog/aws-s3
- status: PUBLIC_BETA
+ status: PUBLIC
logo:
url: 'https://d3hotuclm6if1r.cloudfront.net/logos/amazon-s3-default.svg'
mark:
diff --git a/src/config-api/index.md b/src/config-api/index.md
index 4588a993e4..2250418582 100644
--- a/src/config-api/index.md
+++ b/src/config-api/index.md
@@ -2,6 +2,11 @@
title: Config API Overview
---
+> info "The Segment Public API: Beta Release"
+> The Segment Public API is available in Public Beta. This new API features more consistent endpoints, improved error handling and reporting, support for pagination, and more.
+>
+> See the [Segment Public API documentation](https://api.segmentapis.com/docs/){:target="_blank"} for more information.
+
The Config API enables you to programmatically manage Segment workspaces, sources, destinations and more. With the API you can:
* List all your workspace Sources and Destinations to see how data flows through Segment
diff --git a/src/connections/destinations/catalog/actions-amplitude/index.md b/src/connections/destinations/catalog/actions-amplitude/index.md
index cc2a30ab3d..78e224563c 100644
--- a/src/connections/destinations/catalog/actions-amplitude/index.md
+++ b/src/connections/destinations/catalog/actions-amplitude/index.md
@@ -138,7 +138,7 @@ Build your own subscriptions! Combine supported [triggers](/docs/connections/des
- [Map User](#map-user)
- [Group Identify User](#group-identify-user)
-You can see the Segment event fields Amplitude accepts for each action in the Actions subscription set up page. Combine these
+You can see the Segment event fields Amplitude accepts for each action in the Actions subscription set up page.
### Log Event
diff --git a/src/connections/destinations/catalog/actions-google-enhanced-conversions/index.md b/src/connections/destinations/catalog/actions-google-enhanced-conversions/index.md
index 89e1ff452f..6ff4e43e0e 100644
--- a/src/connections/destinations/catalog/actions-google-enhanced-conversions/index.md
+++ b/src/connections/destinations/catalog/actions-google-enhanced-conversions/index.md
@@ -11,10 +11,10 @@ hidden: true
> success ""
> **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/) Google Enhanced Conversions Segment destination.
-The Google Enhanced Conversions destination enables you to improve the accuracy of your conversion measurement. You can send first-party customer conversion data from your website, such as email address, to Google Ads. Segment hashes this data sends it in a privacy-safe way. Google matches hashed data with signed-in Google accounts to attribute the conversion to ad events, such as clicks or views. To learn more about Google Enhanced Conversions, see Google's documentation [About enhanced conversions (beta)](https://support.google.com/google-ads/answer/9888656?hl=en-GB){:target="_blank"}.
+The Google Enhanced Conversions destination enables you to improve the accuracy of your conversion measurement. You can supplement existing conversion tags by sending first-party customer conversion data from your website, such as email address, to Google Ads. Segment hashes this data and sends it in a privacy-safe way. Google matches hashed data with signed-in Google accounts to attribute the conversion to ad events, such as clicks or views. To learn more about Google Enhanced Conversions, see Google's documentation [About enhanced conversions](https://support.google.com/google-ads/answer/9888656?hl=en-GB){:target="_blank"}.
> warning "Before you begin"
-> Enable Enhanced Conversions in your Google Ads account. For each Conversion, specify in the settings to that you will use the enhanced conversions API:
+> Enable Enhanced Conversions in your Google Ads account. For each Conversion, specify in the settings that you will use the Enhanced Conversions API:
> 1. When you log in to Google Ads, make sure you are in [Expert Mode](https://support.google.com/google-ads/answer/9520605?hl=en){:target="_blank"}.
> 2. Click **Tools & Settings** in the top bar, and select **Conversions** from the dropdown. Select the **Conversion Action** you want Segment to log to.
> 3. Expand the tab for **Enhanced conversions**. Enable **Turn on enhanced conversions**. Under "To start, select how you want to set up enhanced conversions", select **API**.
diff --git a/src/connections/destinations/catalog/autopilotapp/index.md b/src/connections/destinations/catalog/autopilotapp/index.md
new file mode 100644
index 0000000000..3d0c4d642e
--- /dev/null
+++ b/src/connections/destinations/catalog/autopilotapp/index.md
@@ -0,0 +1,55 @@
+---
+title: AutopilotApp Destination
+rewrite: true
+beta: true
+---
+
+[Autopilot](https://autopilotapp.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps thousands of organizations around the world automate their communications via email notifications, such as regular email newsletters, abandoned cart emails, as well as SMS messages, and more, to help organizations market and grow their businesses faster.
+
+Once you connect Segment to AutopilotApp (the Autopilot product), you can leverage Autopilot's powerful [campaign](https://help.autopilotapp.com/user/latest/campaigns/) features on your Segment customer data.
+
+This destination is maintained by Autopilot. For any issues with the destination, [contact the Autopilot Support team](mailto:help@autopilotapp.com).
+
+
+## Getting Started
+
+{% include content/connection-modes.md %}
+
+1. From the Destinations catalog page in the Segment App, click **Add Destination**.
+2. Search for "AutopilotApp" in the Destinations Catalog, and select the "AutopilotApp" destination.
+3. Click **Configure AutopilotApp** and choose which Source should send data to the "AutopilotApp" destination.
+4. If requested, specify the Destination Name for your "AutopilotApp" destination, and click **Save**.
+5. Complete [integrating your Autopilot account with Segment](https://help.autopilotapp.com/user/latest/data-sources/configuring-a-new-data-source/3rd-party-integrations/segment.html), which automatically configures your Autopilot API keys within your "AutopilotApp" destination in Segment.
+
+
+## Supported methods
+
+Autopilot supports the following methods, as specified in the [Segment Spec](/docs/connections/spec).
+
+
+### Identify
+
+Send [Identify](/docs/connections/spec/identify) calls to create or update [people](https://help.autopilotapp.com/user/latest/people/) in Autopilot. For example:
+
+```js
+analytics.identify('userId123', {
+ firstName: 'John',
+ lastName: 'Doe',
+ email: 'john.doe@example.com'
+});
+```
+
+Segment sends Identify calls to Autopilot as an `identify` event.
+
+
+### Track
+
+Send [Track](/docs/connections/spec/track) calls to create or update [activities](https://help.autopilotapp.com/user/latest/activities/) (including activity attributes) in Autopilot. For example:
+
+```js
+analytics.track('Login Button Clicked', {
+ action: "login-clicked"
+});
+```
+
+Segment sends Track calls to Autopilot as a `track` event.
\ No newline at end of file
diff --git a/src/connections/destinations/catalog/salesforce/index.md b/src/connections/destinations/catalog/salesforce/index.md
index 23c7929d74..d6031a9d6f 100644
--- a/src/connections/destinations/catalog/salesforce/index.md
+++ b/src/connections/destinations/catalog/salesforce/index.md
@@ -179,7 +179,10 @@ To create resources of other types, such as Accounts or custom objects, Segment
### Sandbox Mode
-To enable an integration with a Salesforce Sandbox instance, toggle the Sandbox setting to true.
+To enable an integration with a Salesforce Sandbox instance:
+1. Toggle the Sandbox setting to `true` in the Salesforce Destination settings.
+2. Append the sandbox name to the account email, as shown below:
+ - `name@work.com` -> `name@work.com.sandboxname` where `sandboxname` is the name of your sandbox.
### API Call Limits
diff --git a/src/connections/sources/catalog/libraries/mobile/android/troubleshooting.md b/src/connections/sources/catalog/libraries/mobile/android/troubleshooting.md
index 0ae606ecb4..b7d4d3b611 100644
--- a/src/connections/sources/catalog/libraries/mobile/android/troubleshooting.md
+++ b/src/connections/sources/catalog/libraries/mobile/android/troubleshooting.md
@@ -10,7 +10,7 @@ strat: android
- The `writekey` might change when you make changes to the source from the Segment web app.
- If the `writeKey` you entered is something other than a string or an empty string your app may crash
- If the `writeKey` you entered is a valid form but not the correct writeKey for your specific source, you won't see an error response. Segment receives the data, but cannot route it to your source (debugger).
-3. [Enable logging](/docs/connections/sources/catalog/libraries/mobile/android/#debugging) to confirm if call is being sent to Segment
+3. [Enable logging](/docs/connections/sources/catalog/libraries/mobile/android/#adding-debug-logging) to confirm if call is being sent to Segment
## No events in my destinations
@@ -29,7 +29,7 @@ If you still don't see data getting to your destination, continue debugging base
Inspect one of your data payloads. If you are using device-mode for a specific destination, the value of that integration should be set to `false` in the `integrations` object. That means that the data is being sent from the device directly to the destination's API endpoints, and not through Segment's servers. This is expected if you chose to use a device-mode destination's SDK with Segment's during installation.
-Enable verbose [logging](/docs/connections/sources/catalog/libraries/mobile/android/#debugging) and trigger the call in question. You should see a call to Segment, and one going to the partner SDK. It will show you exactly which partner method was invoked and the arguments it was invoked with!
+Enable verbose [logging](/docs/connections/sources/catalog/libraries/mobile/android/#adding-debug-logging) and trigger the call in question. You should see calls to Segment and the partner SDK that show the partner method that was invoked and the arguments with which it was invoked.
## Debugging Cloud-mode Destinations
diff --git a/src/connections/sources/catalog/libraries/mobile/swift-ios/index.md b/src/connections/sources/catalog/libraries/mobile/swift-ios/index.md
index b0bb8dcb70..6845f11087 100644
--- a/src/connections/sources/catalog/libraries/mobile/swift-ios/index.md
+++ b/src/connections/sources/catalog/libraries/mobile/swift-ios/index.md
@@ -256,7 +256,7 @@ class SomePlugin: EventPlugin {
#### DestinationPlugin
The `DestinationPlugin` interface is commonly used for device-mode destinations. This plugin contains an internal timeline that follows the same process as the analytics timeline, enabling you to modify and augment how events reach a particular destination.
-For example, if you want to implement a device-mode destination plugin for Amplitude, you can use this:
+For example, if you want to implement a device-mode destination plugin for AppsFlyer, you can use this:
```swift
internal struct AppsFlyerSettings: Codable {
diff --git a/src/connections/sources/catalog/libraries/ott/roku/index.md b/src/connections/sources/catalog/libraries/ott/roku/index.md
index 03e59f4016..09d4a80a5a 100644
--- a/src/connections/sources/catalog/libraries/ott/roku/index.md
+++ b/src/connections/sources/catalog/libraries/ott/roku/index.md
@@ -43,7 +43,7 @@ To instantiate the library, you first need to update the application scene .xml
1. Include SegmentAnalyticsConnector.brs BrightScript file
```
-
```
2. Include SegmentAnalyticsTask node component under the children tag
diff --git a/src/connections/spec/best-practices-identify.md b/src/connections/spec/best-practices-identify.md
index 41fa0ad25c..2a3c629c3a 100644
--- a/src/connections/spec/best-practices-identify.md
+++ b/src/connections/spec/best-practices-identify.md
@@ -12,7 +12,7 @@ When you use the Segment Identify call with the Track call, you can start to bui
The Segment libraries generate an `anonymousId` for each user, even before you Identify them.
-An `anonymousId` is a randomly generated 36 character string automatically assigned to a user on their first visit to your website or mobile application. You can use the `anonymousId` to link events performed by the user as they navigate around your website. When you track the `anonymousId` , you can attribute activities over multiple days to the same user by collecting all of the activities with that ID. If a user chooses to register for your site, or log in to your app, you can Identify them, and still include their `anonymousId` in the event payload along with the new `userId`.
+An `anonymousId` is a randomly generated 36 character string automatically assigned to a user on their first visit to your website or mobile application. You can use the `anonymousId` to link events performed by the user as they navigate around your website. When you track the `anonymousId`, you can attribute activities over multiple days to the same user by collecting all of the activities with that ID. If a user chooses to register for your site, or log in to your app, you can Identify them, and still include their `anonymousId` in the event payload along with the new `userId`.
> success ""
> **Tip!** Only the Segment mobile and website libraries automatically generate an `anonymousId`. If you use Segment’s Server libraries, you must generate an `anonymousId` manually. It can be any pseudo-unique identifier, for example you might use a `sessionId` from a backend server.
@@ -23,7 +23,7 @@ Segment’s Identify method lets you link a user to their actions and record tra
Segment recommends that you use a unique user identifier that won’t change for your `userId`, for example a database ID from your organization’s internal systems. (See below)
-When you make an [Identify call](/docs/connections/spec/identify) using Analytics.js, Segment saves the `userId` to the browser cookie, and writes all the user traits in local storage. If you’re using one of the Segment mobile libraries, the `userId` and and traits are stored in the device’s memory. This makes it possible to append the user’s data to all subsequent [Page calls](/docs/connections/sources/catalog/libraries/website/javascript#page) or [Track calls](/docs/connections/sources/catalog/libraries/website/javascript#track) for the user, so you can properly attribute those actions.
+When you make an [Identify call](/docs/connections/spec/identify) using Analytics.js, Segment saves the `userId` to the browser cookie, and writes all the user traits in local storage. If you’re using one of the Segment mobile libraries, the `userId` and traits are stored in the device’s memory. This makes it possible to append the user’s data to all subsequent [Page calls](/docs/connections/sources/catalog/libraries/website/javascript#page) or [Track calls](/docs/connections/sources/catalog/libraries/website/javascript#track) for the user, so you can properly attribute those actions.
If a user returns to your site after the [cookie expires](#id-expiration-and-overwriting), Analytics.js looks for an old ID in the user’s `localStorage`, and if one is found, sets it as the user’s ID again in a new cookie. If the user clears their cookies *and* `localStorage`, all of the IDs are removed. The user gets a completely new `anonymousId` when they next visit the page.
@@ -34,7 +34,7 @@ A User ID should be a robust, static, unique identifier that you recognize a use
Ideally, the User ID could be a database ID. For example, if you’re using MongoDB it might be a row identifier and look something like `507f191e810c19729de860ea`. These can also be [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)s that you generate somewhere in your application. You can also use identifiers that you get from other tools - such as Shopify or Braze - however this approach can lead to extra complexity in your systems.
-Segment does **not** recommend using simple email addresses or usernames as as a User ID, as these can change over time. Segment recommends that you use static IDs instead, so the IDs *never* change. When you use a static ID, you can still recognize the user in your analytics tools, even if the user changes their email address. And even better, you can link your analytics data with your own internal database.
+Segment does **not** recommend using simple email addresses or usernames as a User ID, as these can change over time. Segment recommends that you use static IDs instead, so the IDs *never* change. When you use a static ID, you can still recognize the user in your analytics tools, even if the user changes their email address. And even better, you can link your analytics data with your own internal database.
> success ""
> **Tip!** Even if you don't use an email address or a username as a User ID, you should still send them in the analytics payload as [traits](/docs/connections/spec/identify#traits).
@@ -130,7 +130,7 @@ The Segment ID cookie is set with a one year expiration. However, there are some
- If you invoke any call before you set an `anonymousId`, Segment automatically sets the `anonymousId` first. This means if you explicitly set an `anonymousId`, you might give the user two `anonymousId`s or overwrite an existing one.
- If you fetch the `anonymousId` using `analytics.user().anonymousId()` before one is set, Segment generates and sets an `anonymousId` rather than returning `null`.
- If you call `analytics.identify()` with a `userId` that is different from the currently cached `userId`, this can overwrite the existing one and cause attribution problems.
-- If you generate a new `anonymousId` on a server library, and passing it from the server to the browser, this could overwrite the user's existing `anonymousId`.
+- If you generate a new `anonymousId` on a server library, and pass it from the server to the browser, this could overwrite the user's existing `anonymousId`.
> info ""
> Remember, if a user has multiple devices, they can have different `anonymousId`s on each different device.
diff --git a/src/connections/spec/index.md b/src/connections/spec/index.md
index 30c35c8c84..7e5d8758cb 100644
--- a/src/connections/spec/index.md
+++ b/src/connections/spec/index.md
@@ -26,7 +26,7 @@ Second, it **details the event data we capture across some of our cloud sources
Third, it **shares the events we recommend you track for a particular industry based on our experience working with thousands of customers**. When you respect these specs, we can map these events to particular features within end destinations like Google Analytics and Facebook Ads.
- Industry Specs
- - [Mobile](/docs/connections/spec/mobile/)
- - [E-Commerce](/docs/connections/spec/ecommerce/v2/)
- - [Video](/docs/connections/spec/video/)
- - [B2B SaaS](/docs/connections/spec/b2b-saas/)
+ - [Mobile](/docs/connections/spec/mobile/)
+ - [E-Commerce](/docs/connections/spec/ecommerce/v2/)
+ - [Video](/docs/connections/spec/video/)
+ - [B2B SaaS](/docs/connections/spec/b2b-saas/)
diff --git a/src/connections/storage/catalog/aws-s3/index.md b/src/connections/storage/catalog/aws-s3/index.md
index a0e1f39657..c5b25d3b72 100644
--- a/src/connections/storage/catalog/aws-s3/index.md
+++ b/src/connections/storage/catalog/aws-s3/index.md
@@ -39,63 +39,66 @@ To complete this section, you need access to your AWS dashboard.
1. Create a new S3 bucket in your preferred region. For more information, see Amazon's documentation, [Create your first S3 bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html){:target="_blank"}.
2. Create a new IAM role for Segment to assume. For more information, see Amazon's documentation, [Creating a role to delegate permissions to an IAM user](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html){:target="_blank"}.
-3. Attach the following trust relationship document. Be sure to add your Workspace ID to the `sts:ExternalId` field.
- ```json
+ 1. When prompted to enter an Account ID, enter `595280932656`. (You cannot enter an ARN in this step. In step 4, you can update the `Principal` to a specific role after you create an IAM role.)
+ 2. Click the **Require External ID** checkbox.
+ 3. Enter your Segment Workspace ID in the **External ID** field.
+3. Attach the following policy to the IAM role created in step 2. Replace `` with the name of the S3 bucket you created in step 1.
+ ```json
{
- "Version": "2012-10-17",
- "Statement": [
- {
- "Sid": "",
- "Effect": "Allow",
- "Principal": {
- "AWS": "arn:aws:iam::595280932656:role/segment-s3-integration-production-access"
- },
- "Action": "sts:AssumeRole",
- "Condition": {
- "StringEquals": {
- "sts:ExternalId": ""
- }
- }
- }
- ]
- }
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Sid": "PutObjectsInBucket",
+ "Effect": "Allow",
+ "Action": [
+ "s3:PutObject",
+ "s3:PutObjectAcl"
+ ],
+ "Resource": "arn:aws:s3:::/segment-logs/*"
+ }
+ ]
+ }
```
-4. Create and attach the following IAM policy to the role created in step 3 above. Replace `` with the name of the bucket you created in step 1 above.
+ If you're using KMS encryption on your S3 bucket, add the following policy to the IAM role:
```json
{
- "Version": "2012-10-17",
- "Statement": [
- {
- "Sid": "PutObjectsInBucket",
- "Effect": "Allow",
- "Action": [
- "s3:PutObject",
- "s3:PutObjectAcl"
- ],
- "Resource": "arn:aws:s3:::/segment-logs/*"
- }
- ]
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Sid": "AllowKMS",
+ "Effect": "Allow",
+ "Action": [
+ "kms:GenerateDataKey",
+ "kms:Decrypt"
+ ],
+ "Resource": ""
+ }
+ ]
}
```
- If you're using KMS encryption on your S3 bucket, add the following policy to the IAM role:
- ```json
+If you have server-side encryption enabled, see the [required configuration](#encryption).
+
+4. Update `Principal` in the role’s trust relationship document to `arn:aws:iam::595280932656:role/segment-s3-integration-production-access`. Replace `` with your Segment Workspace ID.
+``` json
{
- "Version": "2012-10-17",
- "Statement": [
+ "Version": "2012-10-17",
+ "Statement": [
{
- "Sid": "AllowKMS",
- "Effect": "Allow",
- "Action": [
- "kms:GenerateDataKey",
- "kms:Decrypt"
- ],
- "Resource": ""
+ "Sid": "",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": "arn:aws:iam::595280932656:role/segment-s3-integration-production-access"
+ },
+ "Action": "sts:AssumeRole",
+ "Condition": {
+ "StringEquals": {
+ "sts:ExternalId": ""
+ }
+ }
}
]
}
- ```
-
-If you have server-side encryption enabled, see the [required configuration](#encryption).
+```
### Create an IAM role using the AWS CLI
@@ -128,7 +131,7 @@ To create an S3 IAM role, you must first install and configure the AWS CLI on yo
}
```
-2. Navigate to the folder containing `trust-relationship-policy.json` and run the following command to create your IAM role and attach the trust relationship document, replacing `` with the name you want to give this IAM role:
+2. Navigate to the folder containing `trust-relationship-policy.json` and run the following command to create your IAM role and attach the trust relationship document, replacing `` with the name you want to give the IAM role:
``` python
aws iam create-role --role-name --assume-role-policy-document file://trust-relationship-policy.json --description "IAM role for Segment to assume (AWS S3 destination)"
diff --git a/src/personas/journeys/build-journey.md b/src/personas/journeys/build-journey.md
index c3c6aa0580..b5dadd08dc 100644
--- a/src/personas/journeys/build-journey.md
+++ b/src/personas/journeys/build-journey.md
@@ -3,8 +3,6 @@ title: Build a Journey
---
{% include content/plan-grid.md name="journeys" %}
-Use this guide to create a new Journey.
-
## Before you begin
Verify that you've connected at least one source to your Personas space, with events streaming in.
@@ -19,9 +17,9 @@ For more information, see [Setting up your Sources](/docs/personas/quickstart/#s
1. Add a name to describe the step, for example `New users`.
2. Add inclusion conditions, or import conditions from an existing audience to define users who will enter the Journey.
3. Check **Use historical data** to allow users who have already matched the entry criteria to enter the Journey. Otherwise, only users who meet the entry conditions after publication will enter the Journey.
- 4. Click **Preview** to see the list of user who meet your criteria. Verify that you've defined the right conditions.
+ 4. Click **Preview** to see the list of users who meet your criteria. Verify that you've defined the right conditions.
5. Click **Save**.
-4. Segment displays the entry condition on the Journey Builder canvas. It may take up to 2 minutes for Segment to estimate the number of users in the journey.
+4. Segment displays the entry condition on the Journey Builder canvas. It may take up to two minutes for Segment to estimate the number of users in the journey.
5. Click **+** to add the next step and view available step types.
> info ""
@@ -36,7 +34,7 @@ If you select the **Use historical data** option, Segment queries all historical
## Available step types
-Journeys provides 5 step types, which you can add after the entry condition.
+Journeys provides five step types, which you can add after the entry condition.

@@ -46,20 +44,20 @@ Journeys provides 5 step types, which you can add after the entry condition.
**Wait for duration** defines the length of time in minutes, hours, days, or weeks that a user must wait before moving to the next step.
-**True/false split** divides the previous step's user group into 2 branches, based on Boolean logic against a defined condition. Users who satisfy the condition(s) move to the **True** branch. Otherwise, they move to the **False** branch. To enforce mutual exclusivity, Journeys evaluates true/false conditions when a user reaches the relevant step.
+**True/false split** divides the previous step's user group into two branches, based on Boolean logic against a defined condition. Users who satisfy the condition(s) move to the **True** branch. Otherwise, they move to the **False** branch. To enforce mutual exclusivity, Journeys evaluates true/false conditions when a user reaches the relevant step.
You can add Step Names to describe the users in the True and False branch.

-**Multi-branch split** divides the group of users from the previous step into 2 or more branches based on conditions you define for each branch.
+**Multi-branch split** divides the group of users from the previous step into two or more branches based on each branch's defined conditions.
-Define the number of branches you want to create. Then, add a **Wait for condition** step to define each branch's condition.
+Define the number of branches you want to create, then add a **Wait for condition** step to define each branch's condition.
> info ""
> Journeys doesn't enforce mutual exclusivity in branch conditions. For more information about ensuring branch exclusivity, see [Best Practices](#).
-**Send to Destinations** delivers information about the journey to the selected Destination. For more information, see [Send data to Destinations](/docs/personas/journeys/send-data)
+**Send to Destinations** delivers information about the Journey to the selected Destination. For more information, see [Send data to Destinations](/docs/personas/journeys/send-data)
## Cloning a Journey
@@ -90,19 +88,9 @@ When you’ve finished creating your Journey, click **Save as Draft** in the bot
Keep the following considerations in mind when working with a published Journey:
-- It may take up to 3 hours for Journeys to compute user counts after publication.
+- It may take up to three hours for Journeys to compute user counts after publication.
- You can edit a Journey's name, description, and Destination steps.
- You can't add, edit, or delete other steps in the Journey.
- Once Journeys computes and displays user counts, you’ll see the list of users at each step of the Journey.
- Click a user profile to see the Journey list to which they belong.
- Journeys sends and updates data to Destinations in real-time.
-
-## Edit name, description, and Destinations
-
-### Edit name and description
-To edit your Journey name and description, navigate to the **Settings** tab of the Journey Overview.
-
-### Edit destinations
-To edit Destinations, click **Edit Destinations** from the Journey Overview. You can add, edit, or delete connected Destinations within existing Send to Destinations steps.
-
-
diff --git a/src/privacy/user-deletion-and-suppression.md b/src/privacy/user-deletion-and-suppression.md
index 2711989966..2a3f8a3b58 100644
--- a/src/privacy/user-deletion-and-suppression.md
+++ b/src/privacy/user-deletion-and-suppression.md
@@ -14,7 +14,7 @@ In keeping with Segment's commitment to GDPR and CCPA readiness, Segment offers
## Overview
-All deletion and suppression actions in Segment are asynchronous, and categorized as Regulations.Regulations are requests to Segment to control your data flow. You can issue Regulations from your Segment Workspace, in Settings > End User Privacy
+All deletion and suppression actions in Segment are asynchronous and categorized as Regulations. Regulations are requests to Segment to control your data flow. You can issue Regulations from your Segment Workspace, in Settings > End User Privacy
With Regulations, you can issue a single request to delete and suppress data about a user by `userId`. Segment scopes Regulations to your workspace, and targets all sources within the workspace.
diff --git a/src/protocols/apis-and-extensions/images/typewriter-token.png b/src/protocols/apis-and-extensions/images/typewriter-token.png
index 02e28a41ac..ae0e5548d4 100644
Binary files a/src/protocols/apis-and-extensions/images/typewriter-token.png and b/src/protocols/apis-and-extensions/images/typewriter-token.png differ
diff --git a/src/protocols/apis-and-extensions/typewriter.md b/src/protocols/apis-and-extensions/typewriter.md
index f9d8580f58..36cbd55927 100644
--- a/src/protocols/apis-and-extensions/typewriter.md
+++ b/src/protocols/apis-and-extensions/typewriter.md
@@ -28,8 +28,8 @@ SEGTypewriterAnalytics.orderCompleted(
total: 39.99
)
```
-
-> **Note**: Typewriter can currently generate clients for `analytics.js`, `analytics-node`, `analytics-ios` and `analytics-android`.
+> note ""
+> Typewriter can currently generate clients for `analytics.js`, `analytics-node`, `analytics-ios` and `analytics-android`.
These generated clients are embedded with metadata from your Tracking Plan, which contextualizes your analytics instrumentation, and reduces (or entirely eliminates!) incorrect instrumentations in your production environments. In your editor, you can access event names, descriptions, property names, types and more:
@@ -101,8 +101,8 @@ Typewriter comes with a quickstart wizard that generates a [`typewriter.yml`](#c
```sh
$ npx typewriter init
```
-
-> **Note**: You can regenerate your Typewriter client by running `npx typewriter`. You need to do this each time you update your Tracking Plan.
+> note ""
+> You can regenerate your Typewriter client by running `npx typewriter`. You need to do this each time you update your Tracking Plan.
Running the command creates a `typewriter.yml` file in your repo. For more information on the format of this file, see the [Typewriter Configuration Reference](#configuration-reference).
@@ -153,8 +153,8 @@ Typewriter comes with a quickstart wizard that generates a [`typewriter.yml`](#c
```sh
$ npx typewriter init
```
-
-> **Note**: You can regenerate your Typewriter client by running `npx typewriter`. You need to do this each time you update your Tracking Plan.
+> note ""
+> You can regenerate your Typewriter client by running `npx typewriter`. You need to do this each time you update your Tracking Plan.
Running the command creates a `typewriter.yml` file in your repo. For more information on the format of this file, see the [Typewriter Configuration Reference](#configuration-reference).
@@ -195,8 +195,8 @@ Typewriter comes with a quickstart wizard that generates a [`typewriter.yml`](#c
```sh
$ npx typewriter init
```
-
-> **Note**: You can regenerate your Typewriter client by running `npx typewriter`. You need to do this each time you update your Tracking Plan.
+> note ""
+> You can regenerate your Typewriter client by running `npx typewriter`. You need to do this each time you update your Tracking Plan.
Running the command creates a `typewriter.yml` file in your repo. For more information on the format of this file, see the [Typewriter Configuration Reference](#configuration-reference).
@@ -252,8 +252,8 @@ Typewriter comes with a quickstart wizard that generates a [`typewriter.yml`](#c
$ npx typewriter init
```
-> success ""
-> **Note**: You can regenerate your Typewriter client by running `npx typewriter`. You need to do this each time you update your Tracking Plan.
+> note ""
+> You can regenerate your Typewriter client by running `npx typewriter`. You need to do this each time you update your Tracking Plan.
Running the command creates a `typewriter.yml` file in your repo. For more information on the format of this file, see the [Typewriter Configuration Reference](#configuration-reference).
@@ -289,8 +289,7 @@ Typewriter requires a Segment API token to fetch Tracking Plans from the [Segmen
Only workspace owners can create Segment API tokens. To create an API token, open the `Tokens` tab on the [Access Management](https://app.segment.com/goto-my-workspace/settings/access-management) page and click `Create Token`. Typewriter only needs the `Protocols Read-only` role.
-
-
+
Typewriter looks for an API token in two ways, in the following order:
1. Executes a token script from the `typewriter.yml`. See [Token Script](#token-script) for more information.
@@ -446,8 +445,8 @@ $ npx typewriter development
# To build a production client:
$ npx typewriter production
```
-
-> **Note**: Not all languages support run-time validation. Currently, `analytics.js` and `analytics-node` support it using [AJV](https://github.com/epoberezkin/ajv) (both for JavaScript and TypeScript projects) while `analytics-ios` and `analytics-android` do not yet support run-time validation. Typewriter also does not yet support run-time validation using Common JSON Schema. For languages that do not yet support run-time validation, the development and production clients are identical.
+> note ""
+> Not all languages support run-time validation. Currently, `analytics.js` and `analytics-node` support it using [AJV](https://github.com/epoberezkin/ajv) (both for JavaScript and TypeScript projects) while `analytics-ios` and `analytics-android` do not yet support run-time validation. Typewriter also does not yet support run-time validation using Common JSON Schema. For languages that do not yet support run-time validation, the development and production clients are identical.
Segment recommends using a development build when testing your application locally, or when running tests. We generally recommend _against_ using a development build in production, since this includes a full copy of your Tracking Plan which can increase the size of the application.
@@ -482,8 +481,8 @@ typewriter.setTypewriterOptions({
onViolation: yourViolationHandler
})
```
-
-> **Note**: Typewriter is preconfigured in `analytics-node` environments to throw an error if `NODE_ENV=test`, which is set by most Node.js testing libraries such as `ava` and `jest`.
+> note ""
+> Typewriter is preconfigured in `analytics-node` environments to throw an error if `NODE_ENV=test`, which is set by most Node.js testing libraries such as `ava` and `jest`.
Another common use case is to customize how violations are reported to your team. For example, at Segment, we customized this handler to show a [toast notification](https://evergreen.segment.com/components/toaster) to our developers in-app: