diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index b6d8c9dd2c..336261c63a 100644 --- a/src/_data/catalog/destination_categories.yml +++ b/src/_data/catalog/destination_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination categories last updated 2023-11-16 +# destination categories last updated 2023-11-21 items: - display_name: A/B Testing slug: a-b-testing diff --git a/src/_data/catalog/destinations.yml b/src/_data/catalog/destinations.yml index 3fbd23b101..674110a361 100644 --- a/src/_data/catalog/destinations.yml +++ b/src/_data/catalog/destinations.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2023-11-16 +# destination data last updated 2023-11-21 items: - id: 637e8d185e2dec264895ea89 display_name: 1Flow @@ -8320,18 +8320,24 @@ items: mobile: true server: false warehouse: false - components: [] + components: + - code: https://github.com/appcues/segment-appcues-ios + owner: PARTNER + type: IOS + - code: https://github.com/appcues/segment-appcues-android + owner: PARTNER + type: ANDROID browserUnbundlingSupported: false browserUnbundlingPublic: true replay: false connection_modes: device: web: false - mobile: false + mobile: true server: false cloud: web: false - mobile: true + mobile: false server: false settings: - name: accountId @@ -9016,6 +9022,331 @@ items: label: API Key actions: [] presets: [] +- id: 64c031541451bb784943f809 + display_name: Attio (Actions) + name: Attio (Actions) + slug: attio-actions + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/attio-actions + previous_names: + - Attio (Actions) + website: https://attio.com + status: PUBLIC_BETA + categories: + - CRM + - Enrichment + logo: + url: https://cdn-devcenter.segment.com/2187ba37-c220-4f89-8ef8-51dac111f03c.png + mark: + url: https://cdn-devcenter.segment.com/e980167c-e917-40c3-a77d-927f3156380e.png + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: [] + actions: + - id: 3dJCmgCJYPJc4iKW8596hn + name: Identify User + slug: identifyUser + description: >- + Create or update an Attio User and link it to a Person based on a shared + email address. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: etPqT7Xs7XSFtD2fhsG591 + sortOrder: 0 + fieldKey: email_address + label: Email address + type: STRING + description: The email address of the person to link the user to + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.email + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3ihkwVg31TpWSdCML5BLY5 + sortOrder: 1 + fieldKey: user_id + label: ID + type: STRING + description: The ID of the User + placeholder: '' + defaultValue: + '@path': $.userId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: aHYt6hADL9gxAudpC2Cnfc + sortOrder: 2 + fieldKey: user_attributes + label: Additional User attributes + type: OBJECT + description: >- + Additional attributes to either set or update on the Attio User Record. + The values on the left should be Segment attributes or custom text, and + the values on the right are Attio Attribute IDs or Slugs. For example: + traits.name → name + placeholder: '' + defaultValue: {} + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qfGwmhZxZ4njhMTbVpno7j + sortOrder: 3 + fieldKey: person_attributes + label: Additional Person attributes + type: OBJECT + description: >- + Additional attributes to either set or update on the Attio Person + Record. The values on the left should be Segment attributes or custom + text, and the values on the right are Attio Attribute IDs or Slugs. For + example: traits.name → name + placeholder: '' + defaultValue: {} + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5EdPdCppuZahUE3ZoWYHuz + name: Assert Record + slug: assertRecord + description: Create or update a Record in Attio. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: benMY9oxHQcWpXEJR8wKo8 + sortOrder: 0 + fieldKey: object + label: Attio Object + type: STRING + description: The type of Attio Object you'd like to create or update ('assert') + placeholder: '' + defaultValue: person + required: true + multiple: false + choices: null + dynamic: true + allowNull: false + - id: gGdJYPVcY1rApjUV8xfc4A + sortOrder: 1 + fieldKey: matching_attribute + label: Matching Attribute + type: STRING + description: >- + The Attribute (ID or slug) on the Attio Object above, that uniquely + identifies a Record (and is marked as unique in Attio). Events + containing the same value for this attribute will update the original + Record, rather than creating a new one. For example, to create or update + a Person you might use the Attio attribute `email_addresses` here. + placeholder: '' + defaultValue: email_addresses + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5F7mGDD1r9BAB8Mbkxj2x9 + sortOrder: 2 + fieldKey: attributes + label: Attributes + type: OBJECT + description: >- + Attributes to either set or update on the Attio Record. The values on + the left should be Segment attributes or custom text, and the values on + the right are Attio Attribute IDs or Slugs, for example: traits.name → + name. The Matching Attribute must be included for assertion to work. + placeholder: '' + defaultValue: {} + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jMLaXgxMo261JaxMetVUby + name: Group Workspace + slug: groupWorkspace + description: >- + Create or update an Attio Workspace and link it to a Company based on a + domain attribute. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: hLEG36U3AkJqEFCCxRBaVV + sortOrder: 0 + fieldKey: domain + label: Domain + type: STRING + description: The domain of the Company (used to link the Workspace) + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.website + then: + '@path': $.traits.website + else: + '@path': $.website + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gUcxLmE39wKRUANtnF9pCo + sortOrder: 1 + fieldKey: workspace_id + label: ID + type: STRING + description: The ID of the Workspace + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.groupId + then: + '@path': $.groupId + else: + '@path': $.context.group_id + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nrZF5DZbLiurHdpnHipYKx + sortOrder: 2 + fieldKey: user_id + label: ID + type: STRING + description: >- + The ID of the User, if you'd like to link them to this Workspace (leave + blank to skip). This assumes you will have already called the Attio + identifyUser action: unrecognised Users will fail this action otherwise. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tk6xEvFbycQHG9hZpaqXbJ + sortOrder: 3 + fieldKey: company_attributes + label: Additional Company attributes + type: OBJECT + description: >- + Additional attributes to either set or update on the Attio Company + Record. The values on the left should be Segment attributes or custom + text, and the values on the right are Attio Attribute IDs or Slugs. For + example: traits.name → name + placeholder: '' + defaultValue: {} + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pHehxEX9C1ZYDdc8BCbzcC + sortOrder: 4 + fieldKey: workspace_attributes + label: Additional Workspace attributes + type: OBJECT + description: >- + Additional attributes to either set or update on the Attio Workspace + Record. The values on the left should be Segment attributes or custom + text, and the values on the right are Attio Attribute IDs or Slugs. For + example: traits.name → name + placeholder: '' + defaultValue: {} + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: 3dJCmgCJYPJc4iKW8596hn + name: Identify User + fields: + email_address: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.email + user_id: + '@path': $.userId + user_attributes: {} + person_attributes: {} + trigger: type = "identify" + - actionId: jMLaXgxMo261JaxMetVUby + name: Group Workspace + fields: + domain: + '@if': + exists: + '@path': $.traits.website + then: + '@path': $.traits.website + else: + '@path': $.website + workspace_id: + '@if': + exists: + '@path': $.groupId + then: + '@path': $.groupId + else: + '@path': $.context.group_id + user_id: + '@path': $.userId + company_attributes: {} + workspace_attributes: {} + trigger: type = "group" - id: 54521fd525e721e32a72ee96 display_name: Attribution name: Attribution @@ -60815,11 +61146,10 @@ items: type: string defaultValue: '' description: >- - If you're self-hosting PostHog, add the url of your instance: - https://posthog-example.herokuapp.com. If you're using app.posthog.com you + If you're using EU, add https://eu.posthog.com. If you're using US, you can leave this field empty. required: true - label: PostHog instance + label: PostHog instance (US/EU) actions: [] presets: [] - id: 5fe9e8d3dc1fbccfdfbd1490 diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml index 48c8d65a35..7635d5a6c7 100644 --- a/src/_data/catalog/destinations_private.yml +++ b/src/_data/catalog/destinations_private.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2023-11-16 +# destination data last updated 2023-11-21 items: - id: 54521fd725e721e32a72eec6 display_name: Intercom diff --git a/src/_data/catalog/regional-supported.yml b/src/_data/catalog/regional-supported.yml index 66ce1c6e57..5e2b18edaf 100644 --- a/src/_data/catalog/regional-supported.yml +++ b/src/_data/catalog/regional-supported.yml @@ -41,8 +41,8 @@ sources: - id: DY0B0Q2Gce display_name: Alloy Flow hidden: false - slug: alloy-flow - url: connections/sources/catalog/cloud-apps/alloy-flow + slug: alloyflow + url: connections/sources/catalog/cloud-apps/alloyflow regions: - us endpoints: @@ -876,8 +876,8 @@ sources: - id: 57hcOLuW6Q display_name: Shopify - Powered by Fueled hidden: false - slug: shopify---powered-by-fueled - url: connections/sources/catalog/cloud-apps/shopify---powered-by-fueled + slug: shopify-fueled + url: connections/sources/catalog/cloud-apps/shopify-fueled regions: - us endpoints: diff --git a/src/_data/catalog/slugs.yml b/src/_data/catalog/slugs.yml index 785c2d716d..dd3c33d186 100644 --- a/src/_data/catalog/slugs.yml +++ b/src/_data/catalog/slugs.yml @@ -6,6 +6,10 @@ sources: override: "roku" - original: "shopify-by-littledata" override: "shopify-littledata" + - original: "shopify---powered-by-fueled" + override: "shopify-fueled" + - original: "alloy-flow" + override: "alloyflow" destinations: - original: "vwo-cloud-mode-actions" override: "actions-vwo-cloud" @@ -124,4 +128,5 @@ destinations: - original: "iterable-actions" override: "actions-iterable" - original: "listrak-actions" - override: "actions-listrak" \ No newline at end of file + override: "actions-listrak" + diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml index 9256366cc0..f4930bfcbc 100644 --- a/src/_data/catalog/source_categories.yml +++ b/src/_data/catalog/source_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# source categories last updated 2023-11-16 +# source categories last updated 2023-11-21 items: - display_name: A/B Testing slug: a-b-testing diff --git a/src/_data/catalog/sources.yml b/src/_data/catalog/sources.yml index e4265e5450..4a5c139f28 100644 --- a/src/_data/catalog/sources.yml +++ b/src/_data/catalog/sources.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# sources last updated 2023-11-16 +# sources last updated 2023-11-21 items: - id: 8HWbgPTt3k display_name: .NET @@ -84,8 +84,8 @@ items: - id: DY0B0Q2Gce display_name: Alloy Flow isCloudEventSource: true - slug: alloy-flow - url: connections/sources/catalog/cloud-apps/alloy-flow + slug: alloyflow + url: connections/sources/catalog/cloud-apps/alloyflow hidden: false regions: - us @@ -1805,8 +1805,8 @@ items: - id: 57hcOLuW6Q display_name: Shopify - Powered by Fueled isCloudEventSource: true - slug: shopify---powered-by-fueled - url: connections/sources/catalog/cloud-apps/shopify---powered-by-fueled + slug: shopify-fueled + url: connections/sources/catalog/cloud-apps/shopify-fueled hidden: false regions: - us diff --git a/src/_data/sidenav/main.yml b/src/_data/sidenav/main.yml index d2e9f47167..5ae315f0dc 100644 --- a/src/_data/sidenav/main.yml +++ b/src/_data/sidenav/main.yml @@ -325,6 +325,8 @@ sections: - section_title: Linked Profiles slug: unify/linked-profiles section: + - path: /unify/linked-profiles/linked-events + title: Linked Events - section_title: Setup Guides slug: unify/linked-profiles/setup-guides section: @@ -334,8 +336,6 @@ sections: title: Snowflake Setup - path: /unify/linked-profiles/setup-guides/redshift-setup title: Redshift Setup - - path: /unify/linked-profiles/linked-events - title: Linked Events - section_title: Traits slug: unify/traits section: @@ -464,7 +464,7 @@ sections: - section_title: Trait Activation slug: engage/trait-activation section: - - path: /engage/trait-activation/overview + - path: /engage/trait-activation title: Trait Activation Overview - path: /engage/trait-activation/trait-activation-setup title: Trait Activation Setup diff --git a/src/assets/pdf/faq-segment-dissolution-vat.pdf b/src/assets/pdf/faq-segment-dissolution-vat.pdf index 546d93ea91..89c4dd116b 100644 Binary files a/src/assets/pdf/faq-segment-dissolution-vat.pdf and b/src/assets/pdf/faq-segment-dissolution-vat.pdf differ diff --git a/src/connections/destinations/catalog/actions-attio/index.md b/src/connections/destinations/catalog/actions-attio/index.md index 23f7cb37ba..8911eb4c9f 100644 --- a/src/connections/destinations/catalog/actions-attio/index.md +++ b/src/connections/destinations/catalog/actions-attio/index.md @@ -3,7 +3,6 @@ title: Attio (Actions) Destination hide-boilerplate: true id: 64c031541451bb784943f809 beta: true -hidden: true --- {% include content/plan-grid.md name="actions" %} diff --git a/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md b/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md index 8f9d762f7c..8946e09a90 100644 --- a/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md +++ b/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md @@ -131,7 +131,11 @@ Additionally, configure the "App Events Fields" object with the required fields: * `version` * `osVersion` +> info "" +> The value for the **version** field should be `a2` for Android or `i2` for iOS, as stated in [Facebook's documentation](https://developers.facebook.com/docs/marketing-api/conversions-api/app-events){:target="_blank"}. + ![the app data object](images/app_data.png) + #### Match rate considerations If you use Facebook Conversions API as a stand-alone without certain data fields collected from the browser, the match rate might not be as high as if you included them. You can increase the match rate for events from a server source by including User Data, such as Zip Code, Country and State. diff --git a/src/connections/destinations/catalog/actions-google-analytics-4-web/index.md b/src/connections/destinations/catalog/actions-google-analytics-4-web/index.md index c85f27966b..3aaf9fa629 100644 --- a/src/connections/destinations/catalog/actions-google-analytics-4-web/index.md +++ b/src/connections/destinations/catalog/actions-google-analytics-4-web/index.md @@ -37,6 +37,8 @@ With custom parameters, you must create [custom dimensions and metrics](https:// ### Custom Events +Before you create a custom event, make sure the event you want to create isn't already collected through an [automatically collected event](https://support.google.com/analytics/answer/9234069?sjid=7831609405656395105-NA){:target="_blank"} or recommended as a [recommended event](https://support.google.com/analytics/answer/9267735?sjid=7831609405656395105-NA){:target="_blank"}. Segment recommends using an existing event, because these events automatically populate dimensions and metrics that are used in your reports. + Google Analytics 4 does not accept custom event names that include spaces. Segment replaces spaces in the Event Name in the Custom Event action with an underscore. As a result, you will see custom events snake cased in Google Analytics 4. Event names are case-sensitive in Google Analytics 4. If you would like all event names to be lowercase, use the **Lowercase Event Name** setting when you create a Custom Event mapping and select `Yes` from the dropdown. If this setting is disabled, Google will treat event names with different casing as distinct events. diff --git a/src/connections/destinations/catalog/actions-salesforce-marketing-cloud/index.md b/src/connections/destinations/catalog/actions-salesforce-marketing-cloud/index.md index 2e21cd07fa..6553b3a3de 100644 --- a/src/connections/destinations/catalog/actions-salesforce-marketing-cloud/index.md +++ b/src/connections/destinations/catalog/actions-salesforce-marketing-cloud/index.md @@ -89,7 +89,7 @@ API events are another way to send your Segment events to SFMC. API events can t To send an Engage audience to SFMC: 1. Create an attribute in the SFMC data extension that stores your contact data. The attribute should be a boolean data type to store whether or not a user entered the audience. You can name this attribute anything. 2. Set up the Salesforce Marketing Cloud (Actions) destination using the instructions [above](#connect-the-salesforce-marketing-cloud-actions-destination) and connect it to your Engage source. -3. Create a "Send Contact to Data Extension" action in order to map the SFMC attribute to the Engage audience key. The Engage audience key can be found in **Engage > Audiences > Select your audience > Settings > Audience key**. In the Contact Fields mapping, input the name of the attribute you created in SFMC on the left-hand side. On the right-hand side, search for an event variable of `traits.[your-audience-key]` and select "No matches found. Use "traits.[your-audience-key]" as an event variable". +3. Create a "Send Contact to Data Extension" action in order to map the SFMC attribute to the Engage audience key. The Engage audience key can be found in **Engage > Audiences > Select your audience > Settings > Audience key**. In the Contact Fields mapping, input the name of the attribute you created in SFMC on the right-hand side. On the left-hand side, search for an event variable of `traits.[your-audience-key]` and select "No matches found. Use "traits.[your-audience-key]" as an event variable". 4. Navigate back to your Engage audience and connect the Salesforce Marketing Cloud (Actions) destination to the audience. Keep "Send Identify" toggled on and save. When you add an Engage audience to SFMC, the first sync contains all the users in that audience. Users are added as rows in your data extension with the attribute you created set to `true` to indicate audience membership. If a user leaves that audience, the attribute value is automatically updated to `false`, but the user is not removed from the data extension. This allows you to see all users who have ever been in the audience, and then optionally create a [filtered data extension](https://help.salesforce.com/s/articleView?id=sf.mc_es_create_filtered_de.htm&type=5){:target="_blank"} if you want a subset of users. @@ -97,5 +97,5 @@ When you add an Engage audience to SFMC, the first sync contains all the users i To send an Engage computed trait to SFMC: 1. Create an attribute in the SFMC data extension that stores your contact data. Choose the data type matching the type of computed trait you plan to send; for example, text for traits which produce string values, number or decimal for traits which produce numeric values. You can name this attribute anything. 2. Set up the Salesforce Marketing Cloud (Actions) destination using the instructions [above](#connect-the-salesforce-marketing-cloud-actions-destination) and connect it to your Engage source. -3. Create a "Send Contact to Data Extension" action in order to map the SFMC attribute to the Engage trait key. The Engage trait key can be found in **Engage > Audiences > Computed Traits > Choose your computed trait > Settings > Trait key**. In the Contact Fields mapping, input the name of the attribute you created in SFMC on the left-hand side. On the right-hand side, search for an event variable of `traits.[your-trait-key]` and select "No matches found. Use "traits.[your-trait-key]" as an event variable". +3. Create a "Send Contact to Data Extension" action in order to map the SFMC attribute to the Engage trait key. The Engage trait key can be found in **Engage > Audiences > Computed Traits > Choose your computed trait > Settings > Trait key**. In the Contact Fields mapping, input the name of the attribute you created in SFMC on the right-hand side. On the left-hand side, search for an event variable of `traits.[your-trait-key]` and select "No matches found. Use "traits.[your-trait-key]" as an event variable". 4. Navigate back to your Engage computed trait and connect the Salesforce Marketing Cloud (Actions) destination to the computed trait. Keep "Send Identify" toggled on and save. diff --git a/src/connections/destinations/catalog/appsflyer/index.md b/src/connections/destinations/catalog/appsflyer/index.md index ecb1e0ed9c..77b623561e 100644 --- a/src/connections/destinations/catalog/appsflyer/index.md +++ b/src/connections/destinations/catalog/appsflyer/index.md @@ -139,9 +139,12 @@ analytics.track({ ``` > Check your specific [server-side library docs](/docs/connections/sources/#server) for specifics on how to format the method properly. +> info "" +> See the **Can Omit AppsFlyerId** and **Fallback to send IDFV when advertisingId key not present (Server-Side Only)** settings descriptions for details on excluding the previous fields in server-side events. + Finally, the server-side component will look for the following `properties` and handle them specially: -- `ip` (this should be the `ip` of your customer--this is not collected by Segment's libraries out-of-the-box) +- `ip` (this should be the `ip` of your customer--this is not collected by Segment's libraries out-of-the-box. Pass this into the payload under context so that AppsFlyer can properly attribute it.) - `timestamp` (refer to AppsFlyer's docs on [how they process timestamps](https://support.appsflyer.com/hc/en-us/articles/207034486-Server-to-Server-In-App-Events-API-HTTP-API-){:target="blank"}. Since the libraries generate a [timestamp](/docs/connections/spec/common/#timestamps), Segment always sets this value) - `currency` (defaults to `"USD"`) - `revenue` (For `Order Completed` events, precedence is given to `total`, falling back to `properties.revenue`) diff --git a/src/connections/destinations/catalog/google-ads-gtag/index.md b/src/connections/destinations/catalog/google-ads-gtag/index.md index 8df9c54c39..db76677af5 100644 --- a/src/connections/destinations/catalog/google-ads-gtag/index.md +++ b/src/connections/destinations/catalog/google-ads-gtag/index.md @@ -77,6 +77,9 @@ To figure out if an event is flagged for conversion, follow these steps: 5. Go to the **Settings** tab for your Gtag destination in Segment on a new webpage and choose **Click Conversions** to look at the mapped `track()` events and make sure the events are mapped to the correct **Conversion Label**. +> info "" +> The conversion label is unique to each conversion action and is configured per mapping. You can find the conversion label in the [event snippet](https://support.google.com/google-ads/answer/7548399?hl=en#:~:text=For%20website%20conversion,currency%27%3A%20%27USD%27%0A%20%20%20%20%20%20%7D){:target="_blank"}. The event snippet should have `send_to: 'AW-123456789/AbC-D_efG-h12_34-567'`. The conversion label is the part after the '/'. + ![Edit Settings](../../images/conversion-settings.png) 6. Go back to your website and trigger the event mapped to the conversion. For example, as shown in the image above, it would be `Order Completed`. diff --git a/src/connections/destinations/catalog/hubspot/index.md b/src/connections/destinations/catalog/hubspot/index.md index 446451cc91..58d4a9f434 100644 --- a/src/connections/destinations/catalog/hubspot/index.md +++ b/src/connections/destinations/catalog/hubspot/index.md @@ -1,6 +1,6 @@ --- rewrite: true -title: HubSpot Destination +title: HubSpot (Classic) Destination hide-personas-partial: true cmode-override: true id: 54521fd725e721e32a72eec1 diff --git a/src/connections/destinations/catalog/marketo-v2/index.md b/src/connections/destinations/catalog/marketo-v2/index.md index 82fe088bea..c53ad56b20 100644 --- a/src/connections/destinations/catalog/marketo-v2/index.md +++ b/src/connections/destinations/catalog/marketo-v2/index.md @@ -258,3 +258,17 @@ There are a few necessary steps that have to be taken to migrate from Segment's ![A screenshot of the Marketo Custom Activities field.](images/cg6YhDEPWXv+.png) 6. When enabling Marketo V2, because of the way Marketo's API works, there is potential to create duplicate leads, especially when the first enabling the destination. For ways to prevent this, check out the Preventing Duplicate Leads. + +## Send a single source's data to multiple Marketo V2 workspaces + +Segment doesn't support multiple instances of Marketo V2 for any source in Segment (for both Device-Mode and Cloud-Mode). If you need a single source's data sent to multiple Marketo V2 workspaces, follow the instructions on configuring a [Repeater destination](/docs/connections/destinations/catalog/repeater/) to route your source's data through the Repeater destination into a new source and new Marketo V2 destination instance. +To create a Repeater destination, new source, and second Marketo V2 destination: + +1. Create and connect a new [Repeater destination](https://app.segment.com/goto-my-workspace/destinations/catalog/repeater) to your source and select the intended source. +2. Click **Add destination**, name the destination, and select Fill in settings manually. +4. Create a new source, then navigate to **Settings > API Keys** and copy the **Write Key** value. +- From the Repeater destination's **Settings** page, you'll find **Write Keys** in the **Connection Settings**. This is where your second source's write key from step 4 will go. +5. Navigate back to your Repeater destination and paste in the source's `writeKey` into the write key setting. +6. Add a Marketo V2 destination to your new source with the desired configuration settings. +7. Enable the Repeater destination, new source, new Marketo V2 destination. +8. You'll begin seeing data transmitted from your originating source to the Repeater Destination (Event Delivery), then to the new source (Debugger), and finally to the Marketo V2 destination (Event Delivery). diff --git a/src/connections/destinations/destination-filters.md b/src/connections/destinations/destination-filters.md index 034ff61f6b..3098d69610 100644 --- a/src/connections/destinations/destination-filters.md +++ b/src/connections/destinations/destination-filters.md @@ -229,7 +229,6 @@ Use the destination filter tester during setup to verify that you're filtering o Destination Filters can't target properties or traits with spaces in the field name. As an alternative, use [Insert Functions](/docs/connections/functions/insert-functions/), which let you write code to take care of such filtering. - #### Can I use destination filters to drop events unsupported by a destination? The check for unsupported events types happens before any destination filter checks. As a result, Destination Filters can't prevent unsupported event type errors. To filter these events, use the [Integrations Object](/docs/guides/filtering-data/#filtering-with-the-integrations-object). @@ -239,3 +238,7 @@ The check for unsupported events types happens before any destination filter che Destination filters only filter events sent after filter setup. If you just added a destination filter but still see some events going through, you're likely seeing retries from failed events that occurred before you set up the filter. When Segment sends an event to a destination but encounters a timeout error, it attempts to send the event again. As a result, if you add a destination filter while Segment is trying to send a failed event, these retries could filter through, since they reflect events that occurred before filter setup. + +#### How do destination filters handle Protocols Transformations? + +When you enable a destination-specific Transformation, Segment processes your events with a destination filter. Segment processes source-level Transformations before the events reach the destination filter. diff --git a/src/connections/find-writekey.md b/src/connections/find-writekey.md index 40c3aced83..141c9218f5 100644 --- a/src/connections/find-writekey.md +++ b/src/connections/find-writekey.md @@ -2,12 +2,23 @@ title: Locate your Write Key --- -The write key is a unique identifier for each Source. It lets Segment know which Source is sending the data, and which destinations should receive that data. +The write key is a unique identifier for each source. It lets Segment know which source is sending the data and which destinations should receive that data. -To find a write key, you first need to create a non-Cloud Source such as a website, server, or mobile source. ([Cloud-sources](/docs/connections/sources/about-cloud-sources/) do not have write keys, as they use a token or key from your account with that service.) +## Find the write key for a source -Then, in the Source, go to "Settings', and then go to "API Keys". +To find a write key, you first need to create an [event streams source](/docs/connections/sources/#event-streams-sources) like a website, server, or mobile source. ([Cloud-sources](/docs/connections/sources/about-cloud-sources/) do not have write keys, as they use a token or key from your account with that service.) + +Then, in the Source, go to **Settings** and select **API Keys**. ![Screenshot showing the Settings page of a web source, with the API Keys tab selected.](images/find_writekey.png) -Now you can add the Source's write key in your app, and begin sending us data. +Now you can add the source's write key to your app and begin sending data to Segment. + +## Locate a source using your write key + +To find the source given a write key within your workspace, open your workspace and select the search icon. Enter your write key into the search bar. If the write key exists in the workspace and is connected to a source, the source shows up in the list of results. + +![Screenshot of the in-app search function, with a Javascript source named My Website in the list of search results.](images/find-source-using-write-key.png) + +> info "This method is only available to locate event streams sources" +> This method cannot be used to find a destination or cloud event source. diff --git a/src/connections/functions/source-functions.md b/src/connections/functions/source-functions.md index 23e94d6988..69320bec90 100644 --- a/src/connections/functions/source-functions.md +++ b/src/connections/functions/source-functions.md @@ -358,6 +358,8 @@ async function onRequest(request, settings) { - **Invalid Settings**: A configuration error prevented Segment from executing your code. If this error persists for more than an hour, [contact Segment Support](https://segment.com/help/contact/){:target="_blank"}. - **Message Rejected**: Your code threw `InvalidEventPayload` or `ValidationError` due to invalid input. - **Unsupported Event Type**: Your code doesn't implement a specific event type (for example, `onTrack()`) or threw an `EventNotSupported` error. +- **[StatusCode: 429, TooManyRequestsException: Rate Exceeded]([url](/docs/connections/integration_error_codes/#:~:text=errors.awaiting%2Dretry,events%20in%20burst.))**: Rate limit exceeded. These events will be retried when the rate becomes available. +- **[failed calling Tracking API: the message is too large and over the maximum 32KB limit]([url](/docs/connections/sources/catalog/libraries/server/http-api/#:~:text=Payload%20is%20too%20large%3A%20The%20HTTP%20API%20can%20handle%20API%20requests%20that%20are%2032KB%20or%20smaller.%20The%20batch%20API%20endpoint%20accepts%20a%20maximum%20of%20500KB%20per%20request%2C%20with%20a%20limit%20of%2032KB%20per%20event%20in%20the%20batch.%20If%20these%20limits%20are%20exceeded%2C%20Segment%20returns%20a%20400%20Bad%20Request%20error.))**: Segment's Tracking API can only handle API requests that are 32KB or smaller. Reduce the size of the request for Segment to accept the event. - **Retry**: Your code threw `RetryError` indicating that the function should be retried. Segment only attempts to run your source function again if a **Retry** error occurs. diff --git a/src/connections/images/find-source-using-write-key.png b/src/connections/images/find-source-using-write-key.png new file mode 100644 index 0000000000..e06361f778 Binary files /dev/null and b/src/connections/images/find-source-using-write-key.png differ diff --git a/src/connections/sources/catalog/cloud-apps/hubspot/index.md b/src/connections/sources/catalog/cloud-apps/hubspot/index.md index 346ebf6d66..a0c52a092a 100644 --- a/src/connections/sources/catalog/cloud-apps/hubspot/index.md +++ b/src/connections/sources/catalog/cloud-apps/hubspot/index.md @@ -61,7 +61,7 @@ Due to HubSpot's [API Rate Limits](http://developers.hubspot.com/apps/api_guidel Below are tables outlining the properties included in the collections listed above. To see the full description of each property, refer to the HubSpot documentation linked in the collections above. -If you have Custom Properties on Contacts or Companies collections that you would like to sync, submit a ticket detailing the custom properties [here](http://segment.com/help/contact){:target="_blank"}. +If you have Custom Properties on Contacts or Companies collections that you would like to sync, submit a ticket with HubSpot API names of the custom properties [here](http://segment.com/help/contact){:target="_blank"}. > info "" > For Deals collection, Segment retrieves properties that the HubSpot API returns, which means you can add the new fields on your own from HubSpot if you have the necessary permissions. diff --git a/src/connections/sources/catalog/cloud-apps/shopify-fueled/index.md b/src/connections/sources/catalog/cloud-apps/shopify-fueled/index.md index 96ec0f6308..8f64820f71 100644 --- a/src/connections/sources/catalog/cloud-apps/shopify-fueled/index.md +++ b/src/connections/sources/catalog/cloud-apps/shopify-fueled/index.md @@ -10,7 +10,7 @@ With Fueled, Shopify merchants can implement Segment event tracking in minutes **Shopify merchants can try Fueled's Segment integration free for 15 days.** -This integration is maintained by[Fueled](https://fueled.io){:target="_blank"}. [Contact the Fueled Support team](mailto:support@fueled.io) with any questions. +This integration is maintained by [Fueled](https://fueled.io){:target="_blank"}. [Contact the Fueled Support team](mailto:support@fueled.io) with any questions. ## Getting started diff --git a/src/connections/sources/catalog/libraries/website/javascript/identity.md b/src/connections/sources/catalog/libraries/website/javascript/identity.md index 680aee9478..79098a4159 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/identity.md +++ b/src/connections/sources/catalog/libraries/website/javascript/identity.md @@ -45,6 +45,11 @@ analytics.user().anonymousId(); If the user's `anonymousId` is `null` (meaning not set) when you call this function, Analytics.js automatically generated and sets a new `anonymousId` for the user. +If you are using the npm library, the previous call returns a promise for `user()`. As a workaround, you'll need to grab the user's current `anonymousId` in the following way: + +```js +analytics.instance?.user().anonymousId() +``` ### Refreshing the Anonymous ID diff --git a/src/connections/sources/debugger.md b/src/connections/sources/debugger.md index 0e7c978552..dbd45f2c20 100644 --- a/src/connections/sources/debugger.md +++ b/src/connections/sources/debugger.md @@ -4,6 +4,9 @@ title: Using the Source Debugger The Source Debugger is a real-time tool that helps you confirm that API calls made from your website, mobile app, or servers arrive to your Segment Source, so you can troubleshoot your Segment set up even quicker. With the Debugger, you can check that calls are sent in the expected format without having to wait for any data processing. +> info "" +> The Source Debugger's event order may not reflect how events send downstream or are received by connected destinations. The Debugger primarily confirms incoming data and provides a basic view of its structure. For a reliable record of the data you send to Segment, Segment advises you to attach a raw storage destination to your sources. + ![A screenshot of the debugger view, with a Track event selected and the pretty view opened.](images/debugger_view.png) The Debugger is separate from your workspace's data pipeline and is not an exhaustive view of all the events ever sent to your Segment workspace. The Debugger only shows a sample of the events that the Source receives in real time, with a cap of 500 events. The Debugger is a great way to test specific parts of your implementation to validate that events are being fired successfully and arriving to your Source. diff --git a/src/engage/audiences/index.md b/src/engage/audiences/index.md index 02fb45ccf7..e714186755 100644 --- a/src/engage/audiences/index.md +++ b/src/engage/audiences/index.md @@ -18,6 +18,11 @@ You can build an Audience from existing events, traits, computed traits, or othe ![Creating an Engage Audience from the conditions list](/docs/engage/images/audience_condition_list.png) +> info "" +> The **Include Anonymous Users** checkbox determines which external IDs need to exist on a profile for Segment to include the user in the audience: +> - **Include Anonymous Users** not selected: `user_id`, `email`, `android.idfa`, or `ios.idfa` +> - **Include Anonymous Users** selected: `user_id`, `email`, `android.idfa`, `ios.idfa`, or `anonymous_id` + ### Events You can build an Audience from any events that are connected to Engage, including [Track](/docs/connections/spec/track), [Page](/docs/connections/spec/page), and [Screen](/docs/connections/spec/screen) calls. You can use the `property` button to refine the audience on specific event properties, as well. diff --git a/src/engage/journeys/faq-best-practices.md b/src/engage/journeys/faq-best-practices.md index 385932901f..7826178915 100644 --- a/src/engage/journeys/faq-best-practices.md +++ b/src/engage/journeys/faq-best-practices.md @@ -30,14 +30,6 @@ Unlike lists associated with Engage Audiences, users who are added to a journey Save your Journey in a draft state so that you can review before you publish it. Once you publish a Journey, you cannot edit select portions of a Journey and Journeys sends data to destinations. -### Make a copy to edit published Journeys - -Once you publish a Journey, you cannot add, delete, or edit the steps within the Journey. You can edit the Journey name, description, and destinations. - -To edit the steps within a published Journey, make a copy of the Journey you wish to edit, make adjustments, delete the original Journey, and then publish the revised Journey. - -When you do this, the key used for syncing to destinations will be different from the copied Journey. Make sure you change the reference key used in the downstream destinations accordingly. - ### Know how to incorporate historical data Aside from the entry condition, all Journey step conditions are triggered by future events and existing trait memberships. Event-based conditions only evaluate events that occur *after* the Journey is published. diff --git a/src/engage/trait-activation/overview.md b/src/engage/trait-activation/index.md similarity index 96% rename from src/engage/trait-activation/overview.md rename to src/engage/trait-activation/index.md index 1344d9f91f..70ea14409c 100644 --- a/src/engage/trait-activation/overview.md +++ b/src/engage/trait-activation/index.md @@ -2,6 +2,8 @@ title: Trait Activation Overview beta: true plan: engage-foundations +redirect_from: +- 'engage/trait-activation/overview' --- Use Trait Activation to configure sync payloads that you send from Engage Audiences and Journeys to a Destination. Map traits from user profiles to Destinations, configure identifiers to sync, and choose a sync strategy that fits your use cases. diff --git a/src/engage/using-engage-data.md b/src/engage/using-engage-data.md index 38962d67b2..65729b046f 100644 --- a/src/engage/using-engage-data.md +++ b/src/engage/using-engage-data.md @@ -9,7 +9,7 @@ You can send your Computed Traits and Audiences to your Segment Destinations, wh > success "" -> **Tip!** You can also use the [Profile API](/docs/unify/profile-api/) to activate Engage data programmatically. +> You can also use the [Profile API](/docs/unify/profile-api/) to activate Engage data programmatically. ## Engage Destination types: Event vs. List @@ -207,7 +207,6 @@ _See [this doc](https://segment.com/docs/engage/journeys/send-data/#what-do-i-se } ``` - ## Additional identifiers Engage has a flexible identity resolution layer that allows you to build user profiles based on multiple identifiers like `user_id`, `email`, or `mobile advertisingId`. However, different destinations may require different keys, so they can do their own matching and identification. For example, Zendesk requires that you include the `name` property. @@ -215,9 +214,11 @@ Engage includes logic to automatically enrich payloads going to these destinatio If you send events to a destination that requires specific enrichment Segment doesn't already include, [contact Segment](https://segment.com/help/contact/){:target="_blank"}, and we‘ll do our best to address it. -> note "" -> **Note**: Profiles with multiple identifiers (for example, `user_id` and `email`) will trigger one API call per identifier when the audience or computed trait is first synced to a destination. +> info "" +> Profiles with multiple identifiers (for example, `user_id` and `email`) will trigger one API call per identifier when the audience or computed trait is first synced to a destination. +> success "" +> Email as an identifier is set in `traits.email` for Identify calls, and `context.traits.email` for Track calls. ## Multiple identifiers of the same type @@ -273,7 +274,11 @@ When you create a new Computed Trait or Audience in Engage, you can choose to ca > success "" > **Why would I disable historical data?** You might want to disable historical data if you're sending a triggered campaign. For example, if you want to send an email confirming a purchase, you _probably_ don't want to email users who bought something months ago, but you *do* want to target current users as they make purchases (and thus enter the audience). -**Note**: The Facebook Custom Audiences Website destination does not accept historical data, and so only uses data from after the moment you configure it. +> warning "" +> The Facebook Custom Audiences Website destination does not accept historical data, and so only uses data from after the moment you configure it. + +> info "" +> Use the [Engage settings](/docs/engage/settings/#destinations-settings){:target="_blank"} to add a destination to your Engage space. ## Engage compatible Destinations: Event type diff --git a/src/unify/index.md b/src/unify/index.md index d479bd0b61..8aebefade5 100644 --- a/src/unify/index.md +++ b/src/unify/index.md @@ -3,6 +3,7 @@ title: Unify Overview plan: unify redirect_from: - '/engage/profiles/' + - '/unify/traits/' --- Use Segment Unify, formerly known as Profiles, for a complete view of your customers. @@ -48,8 +49,9 @@ With the Profile explorer, you have a complete view of your customers. > info "" > If you're using Engage, use the Profile explorer to view audiences, traits, journey membership, and [subscription states](/docs/engage/user-subscriptions/) for email and phone numbers. -## Enrich profiles with traits -Add detail to user profiles with new traits and use them to power personalized marketing campaigns. You can add new traits to your user or account profiles in Unify using: +## Enrich profiles with traits + +With Unify Plus, you can add detail to user profiles with new traits and use them to power personalized marketing campaigns. Add new traits to your user or account profiles using: - [**Computed Traits:**](/docs/unify/traits/computed-traits/) Use the Unify drag-and-drop interface to build per-user (B2C) or per-account (B2B) metrics on user profiles (for example, “lifetime value” or “lead score”). - [**SQL Traits:**](/docs/unify/traits/sql-traits/) Run custom queries on your data warehouse using the Unify SQL editor, and import the results into Segment. With SQL Traits, you can pull rich, uncaptured user data back into Segment. diff --git a/src/unify/linked-profiles/linked-events.md b/src/unify/linked-profiles/linked-events.md index 542abb863d..d9b99ad0a4 100644 --- a/src/unify/linked-profiles/linked-events.md +++ b/src/unify/linked-profiles/linked-events.md @@ -2,6 +2,9 @@ title: Linked Events beta: true plan: unify +redirect_from: + - '/unify/linked-profiles' + - '/unify/linked-profiles/setup-guides' --- > info "Linked Events is in private beta"