diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 21d5d88aff..54b4ebc68b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -75,7 +75,7 @@ Sources pages check if the source is a cloud-app, then include information about ## Edit pages -Content with in each `.md` file is markdown. For information about styling, and available extensions, see `_src/utils/formatguide.md` or the live version [here](https://segment.com/docs/utils/formatguide). +Content with in each `.md` file is markdown. For information about styling, and available extensions, see `_src/utils/formatguide.md` or the live version in the [utils section of the docs](/docs/utils/formatguide). ## Building a preview diff --git a/scripts/catalog/updateSources.js b/scripts/catalog/updateSources.js index 6f72f202a7..f873d19274 100644 --- a/scripts/catalog/updateSources.js +++ b/scripts/catalog/updateSources.js @@ -14,28 +14,28 @@ const PAPI_URL = "https://api.segmentapis.com"; const regionalSupport = yaml.load(fs.readFileSync(path.resolve(__dirname, `../../src/_data/regional-support.yml`))); -// This file keeps a list of known test sources that show up in the system. +// This file keeps a list of known test sources that show up in the system. // Because we don't have a status value for sources, they end up showing in our catalog. // We use this below to prevent them from being written to yaml. const testSources = yaml.load(fs.readFileSync(path.resolve(__dirname, `../../src/_data/catalog/test_sources.yml`))); const updateSources = async () => { - let sources = []; // Initialize an empty array to hold all sources - let sourcesUpdated = []; // Initialize an empty array to hold all sources that have been updated - let regionalSourcesUpdated = []; // Initialize an empty array to hold updated source regional information - let nextPageToken = "MA=="; // Set the initial page token to the first page - let categories = new Set(); // Initialize an empty set to hold all categories - let sourceCategories = []; // Initialize an empty array to hold all source categories - - + let sources = []; // Initialize an empty array to hold all sources + let sourcesUpdated = []; // Initialize an empty array to hold all sources that have been updated + let regionalSourcesUpdated = []; // Initialize an empty array to hold updated source regional information + let nextPageToken = "MA=="; // Set the initial page token to the first page + let categories = new Set(); // Initialize an empty set to hold all categories + let sourceCategories = []; // Initialize an empty array to hold all source categories + + // Get all sources from the catalog while (nextPageToken !== undefined) { const res = await getCatalog(`${PAPI_URL}/catalog/sources/`, nextPageToken); sources = sources.concat(res.data.sourcesCatalog); nextPageToken = res.data.pagination.next; } - + // Sort the sources alphabetically sources.sort((a, b) => { if (a.name.toLowerCase() < b.name.toLowerCase()) { @@ -46,7 +46,7 @@ const updateSources = async () => { } return 0; }); - + // Set the list of categories for libraries const libraryCategories = [ 'server', @@ -55,7 +55,7 @@ const updateSources = async () => { 'roku', 'website' ]; - + // Here, define some sources that are real, but that we want to hide. const hiddenSources = [ 'amp', @@ -63,12 +63,12 @@ const updateSources = async () => { 'twilio-event-streams-beta', 'ibm-watson-assistant' ]; - + // More regional stuff const regionalSourceEndpoint = regionalSupport.sources.endpoint; const regionalSourceRegion = regionalSupport.sources.region; - - + + // Loop through all sources and create a new object with the data we want sources.forEach(source => { let slug = slugify(source.name, "sources"); @@ -77,14 +77,14 @@ const updateSources = async () => { let regions = ['us']; let endpoints = ['us']; let mainCategory = source.categories[0] ? source.categories[0].toLowerCase() : ''; - + if (libraryCategories.includes(mainCategory)) { url = `connections/sources/catalog/libraries/${mainCategory}/${slug}`; } else { url = `connections/sources/catalog/cloud-apps/${slug}`; mainCategory = 'cloud-app'; } - + // Sort the settings alphabetically settings.sort((a, b) => { if (a.name.toLowerCase() < b.name.toLowerCase()) { @@ -95,19 +95,19 @@ const updateSources = async () => { } return 0; }); - + if (hiddenSources.includes(slug)) { hidden = true; } - + if (regionalSourceEndpoint.includes(slug)) { endpoints.push('eu'); } - + if (regionalSourceRegion.includes(slug)) { regions.push('eu'); } - + // If the source ID is in the list of test sources, skip it. // If it's not, add it to the list of sources to be written to yaml. if (testSources.includes(source.id)) { @@ -128,13 +128,15 @@ const updateSources = async () => { url: source.logos.default }, categories: source.categories, + status: source.status, + partnerOwned: source.partnerOwned }; sourcesUpdated.push(updatedSource); doesCatalogItemExist(updatedSource); } - + source.categories.reduce((s, e) => s.add(e), categories); - + // Sources don't yet have regional information in the Public API, so we write that info here. let updatedRegional = { id: source.id, @@ -147,7 +149,7 @@ const updateSources = async () => { }; regionalSourcesUpdated.push(updatedRegional); }); - + const sourceArray = Array.from(categories); sourceArray.forEach(category => { sourceCategories.push({ @@ -164,12 +166,12 @@ const updateSources = async () => { return 0; }); }); - + const options = { noArrayIndent: false }; const todayDate = new Date().toISOString().slice(0, 10); - + // Create source catalog YAML file let output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n"; output += "# sources last updated " + todayDate + " \n"; @@ -177,7 +179,7 @@ const updateSources = async () => { items: sourcesUpdated }, options); fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/sources.yml`), output); - + // Create source-category mapping YAML file output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n"; output += "# source categories last updated " + todayDate + " \n"; @@ -185,15 +187,15 @@ const updateSources = async () => { items: sourceCategories }, options); fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/source_categories.yml`), output); - + // Create regional support YAML file output = yaml.dump({ sources: regionalSourcesUpdated }, options); fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/regional-supported.yml`), output); - + console.log("sources done"); }; - exports.updateSources = updateSources; \ No newline at end of file + exports.updateSources = updateSources; diff --git a/scripts/catalog/utilities.js b/scripts/catalog/utilities.js index 7de088ec91..dd24bcd0ff 100644 --- a/scripts/catalog/utilities.js +++ b/scripts/catalog/utilities.js @@ -133,11 +133,7 @@ const doesCatalogItemExist = (item) => { let content = `---\ntitle: '${item.display_name} Source'\nhidden: true\n---`; if (!docsPath.includes('/sources/')) { - let betaFlag = ''; - if (item.status === 'PUBLIC_BETA') { - betaFlag = 'beta: true\n'; - } - content = `---\ntitle: '${item.display_name} Destination'\nhidden: true\nid: ${item.id}\npublished: false\n${betaFlag}---\n`; + content = `---\ntitle: '${item.display_name} Destination'\nhidden: true\nid: ${item.id}\npublished: false\n`; } fs.mkdirSync(docsPath); @@ -172,4 +168,4 @@ exports.getCatalog = getCatalog; exports.getConnectionModes = getConnectionModes; exports.isCatalogItemHidden = isCatalogItemHidden; exports.sanitize = sanitize; -exports.doesCatalogItemExist = doesCatalogItemExist; \ No newline at end of file +exports.doesCatalogItemExist = doesCatalogItemExist; diff --git a/src/_data/catalog/beta_sources.yml b/src/_data/catalog/beta_sources.yml deleted file mode 100644 index 3da5cc4704..0000000000 --- a/src/_data/catalog/beta_sources.yml +++ /dev/null @@ -1,26 +0,0 @@ -# This file is manually generated. -# Add the ids of beta sources to give them a beta flag on the catalog page. -# (/docs/connections/sources/catalog) - -- 8aF29Uq46F -- QhEUZnE5uF -- Zd5BXedXsa -- glwy6LwOVo -- 3x07B5Dn5h -- DY0B0Q2Gce -- n8YgCndi75 -- 9TYqEh3nMe -- xqegKCQA0W -- L9XPA9n2Mc -- kpDbTUR9oD -- wFC7PGNwGR -- vMEJCURfHh -- EjYD7n6dOa -- VETiUX9u66 -- NC2jsEkA8Y -- o9OyD6xsVJ -- ODf0vA6dcH -- YWOGVbyMVz -- CwGEZ7eCcA -- xeZMgSrtAQ -- VShGHAfvlr \ No newline at end of file diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index 1072a02e0f..57f782065d 100644 --- a/src/_data/catalog/destination_categories.yml +++ b/src/_data/catalog/destination_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination categories last updated 2024-08-09 +# destination categories last updated 2024-08-13 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 d543880451..30921852a3 100644 --- a/src/_data/catalog/destinations.yml +++ b/src/_data/catalog/destinations.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2024-08-09 +# destination data last updated 2024-08-13 items: - id: 637e8d185e2dec264895ea89 display_name: 1Flow @@ -36524,14 +36524,14 @@ items: - id: 645d5fc12eb891cf0a93fe4b display_name: Facebook Custom Audiences (Actions) name: Facebook Custom Audiences (Actions) - slug: facebook-custom-audiences-actions + slug: actions-facebook-custom-audiences hidden: false endpoints: - US regions: - us-west-2 - eu-west-1 - url: connections/destinations/catalog/facebook-custom-audiences-actions + url: connections/destinations/catalog/actions-facebook-custom-audiences previous_names: - Facebook Custom Audiences (Actions) website: >- @@ -55982,7 +55982,7 @@ items: hidden: false defaultTrigger: type = "track" fields: - - id: fpEPheR55yvpnq88L8K3ec + - id: toeo6DkmR4TurSDDTA52Yg sortOrder: 0 fieldKey: eventName label: Event Name @@ -56000,7 +56000,7 @@ items: choices: null dynamic: true allowNull: false - - id: wCVPg4gyJqhmgtErxSAuuQ + - id: nEfX7HqVaDDDf34hyUkp81 sortOrder: 1 fieldKey: occurredAt label: Event Timestamp @@ -56016,7 +56016,7 @@ items: choices: null dynamic: false allowNull: false - - id: v9nTD3jmLZPa5dY3gNmtLu + - id: roeoyrLDU3srEGgHqXb7iK sortOrder: 2 fieldKey: email label: Email Address @@ -56038,7 +56038,7 @@ items: choices: null dynamic: false allowNull: false - - id: qYnXLtEcYtZDYD3iaNHnT9 + - id: 3KeVEodUpq8S2xDBXGxo6T sortOrder: 3 fieldKey: utk label: User Token @@ -56052,7 +56052,7 @@ items: choices: null dynamic: false allowNull: false - - id: mZydC3nPkefiunmiwpt8VF + - id: nTRoSPpPHV7rZg1nfayjG4 sortOrder: 4 fieldKey: objectId label: Object ID @@ -56067,7 +56067,7 @@ items: choices: null dynamic: false allowNull: false - - id: k2N8PTLbG557KpCcZZ3ZE4 + - id: k8VvRX3vHHuuNW9q1vSesf sortOrder: 5 fieldKey: properties label: Event Properties @@ -56092,7 +56092,7 @@ items: hidden: false defaultTrigger: null fields: - - id: 457ZnRrz9rNK4M6CoJYPdU + - id: bJojfxbzTTJSDfWUSDpSKV sortOrder: 0 fieldKey: createNewCustomRecord label: Create Custom Object Record if Not Found @@ -56109,7 +56109,7 @@ items: choices: null dynamic: false allowNull: false - - id: iypkuYGsJZfwp3dU37cbhy + - id: rmPaVeDHWGxcfAkcypHKa8 sortOrder: 1 fieldKey: customObjectSearchFields label: Custom Object Search Fields @@ -56124,7 +56124,7 @@ items: choices: null dynamic: false allowNull: false - - id: dFMzC1Juk5V4H6DQGNvxgb + - id: 7sCp2mi65et1Td3TDus7EK sortOrder: 2 fieldKey: objectType label: Object Type @@ -56142,7 +56142,7 @@ items: choices: null dynamic: true allowNull: false - - id: 8EuxTFRVPfHoDMyuW3NgnZ + - id: 8aDdwvCPjDBvCUYpXKBkEn sortOrder: 3 fieldKey: properties label: Properties @@ -56160,7 +56160,7 @@ items: choices: null dynamic: false allowNull: false - - id: m8jexqn9rWyhJqphKqBMLe + - id: dS9CZ1H2J8HPTPASxQ8b9h sortOrder: 4 fieldKey: searchFieldsToAssociateCustomObjects label: Search Fields to Associate custom Object @@ -56176,7 +56176,7 @@ items: choices: null dynamic: false allowNull: false - - id: w5ikpqfHs39uWxX9X7ikhf + - id: icVoxPFvnTiohrToqeaQXL sortOrder: 5 fieldKey: toObjectType label: ObjectType to associate @@ -56194,7 +56194,7 @@ items: choices: null dynamic: true allowNull: false - - id: si1t7rk3RvmP57F8R2g7JK + - id: 8na43jJAZ6A29TR4saLucm sortOrder: 6 fieldKey: associationLabel label: Association Label @@ -56214,7 +56214,7 @@ items: hidden: false defaultTrigger: type = "identify" fields: - - id: 2kZzgmkRTJjsB9EpVLVKGb + - id: 7hcPDXC11barQh582r7PAK sortOrder: 0 fieldKey: email label: Email @@ -56232,7 +56232,7 @@ items: choices: null dynamic: false allowNull: false - - id: 859iBUN6YsjH8QqUukmaQH + - id: jZaJgmo3y2cFQYHYGerXFi sortOrder: 1 fieldKey: company label: Company Name @@ -56246,7 +56246,7 @@ items: choices: null dynamic: false allowNull: false - - id: eLBHspKZvr9PiioojFNsS4 + - id: 98cCWQKHZ71hQNndy5PCDK sortOrder: 2 fieldKey: firstname label: First Name @@ -56266,7 +56266,7 @@ items: choices: null dynamic: false allowNull: false - - id: xr3uwXoWKSu5h9UsKT4WVD + - id: jP3h5xrJiJw5RBhEQegSDS sortOrder: 3 fieldKey: lastname label: Last Name @@ -56286,7 +56286,7 @@ items: choices: null dynamic: false allowNull: false - - id: 2xikAkHsDXrn1Nj16auznJ + - id: aE3cnBYNWcJ38UdhyWRjrV sortOrder: 4 fieldKey: phone label: Phone @@ -56300,7 +56300,7 @@ items: choices: null dynamic: false allowNull: false - - id: gEDsQiday52nAZNpMAqEKu + - id: 4vghby9QdNeQcN7Eg6Drsp sortOrder: 5 fieldKey: address label: Street Address @@ -56314,7 +56314,7 @@ items: choices: null dynamic: false allowNull: false - - id: kGFCNkhVbEoZ6U92YBtnUS + - id: 4BsKMTC9eQhGtiTBN6jd8z sortOrder: 6 fieldKey: city label: City @@ -56328,7 +56328,7 @@ items: choices: null dynamic: false allowNull: false - - id: mPFQ8411m6jQyJyD6uDret + - id: 2xXf5BNyhD7bvkUQCd1Afa sortOrder: 7 fieldKey: state label: State @@ -56342,7 +56342,7 @@ items: choices: null dynamic: false allowNull: false - - id: 2m6X9dYKMXPduE8fhBwA8P + - id: fSGZarH5XsWWYZaBfowBSH sortOrder: 8 fieldKey: country label: Country @@ -56356,7 +56356,7 @@ items: choices: null dynamic: false allowNull: false - - id: 4hqK642MQpa58TMDMARe4f + - id: n5cHAGkszcZvkSQUfSucNh sortOrder: 9 fieldKey: zip label: Postal Code @@ -56376,7 +56376,7 @@ items: choices: null dynamic: false allowNull: false - - id: xB2nx4DK3a6tgQJAnmdHSA + - id: mYqiWZTWWiVLFHNxwqrTPt sortOrder: 10 fieldKey: website label: Website @@ -56390,7 +56390,7 @@ items: choices: null dynamic: false allowNull: false - - id: sio4AT1b2rMU3CPJnZjrd8 + - id: aSRzt4wYiuo4ZG5u841svr sortOrder: 11 fieldKey: lifecyclestage label: Lifecycle Stage @@ -56406,7 +56406,7 @@ items: choices: null dynamic: false allowNull: false - - id: fAL1NF48zXSLA88A6CXMxp + - id: 4kVst2h8DZbA6zPU6jQTwA sortOrder: 12 fieldKey: properties label: Other properties @@ -56424,7 +56424,7 @@ items: choices: null dynamic: false allowNull: false - - id: gejqVjYJhn6XqcKhRQqdGZ + - id: 8kHsRWCJAnMhMyc1hLBMnV sortOrder: 13 fieldKey: enable_batching label: Send Batch Data to HubSpot @@ -56449,7 +56449,7 @@ items: hidden: false defaultTrigger: type = "group" fields: - - id: fXXLpEGKDoERjyaaEzwhW + - id: bucBiJyiXGHCp8vnbLwHW9 sortOrder: 0 fieldKey: groupid label: Unique Company Identifier @@ -56473,7 +56473,7 @@ items: choices: null dynamic: false allowNull: false - - id: mJqWCMVVgxQDShJQuaNGu4 + - id: jjyHmS6u7tL5ZeZcYcF2m8 sortOrder: 1 fieldKey: createNewCompany label: Create Company if Not Found @@ -56490,7 +56490,7 @@ items: choices: null dynamic: false allowNull: false - - id: 9ak6TSdps1FG2Ri6HkS5aY + - id: 4tWKovLXkTgFhRH9hckCbH sortOrder: 2 fieldKey: associateContact label: Associate Contact with Company @@ -56509,7 +56509,7 @@ items: choices: null dynamic: false allowNull: false - - id: iY45Uns9sESBARF8V2moJ2 + - id: fq4eMqdfCNjbxYGmf83KbH sortOrder: 3 fieldKey: companysearchfields label: Company Search Fields @@ -56526,7 +56526,7 @@ items: choices: null dynamic: false allowNull: false - - id: bcL8H9Y1gYixVn4kUEEk43 + - id: cvtwjMDR5cXEmfyLdxgBM2 sortOrder: 4 fieldKey: name label: Company Name @@ -56540,7 +56540,7 @@ items: choices: null dynamic: false allowNull: false - - id: b4ceyDdMErAYNGQQJfoAEm + - id: a5dS7GeLB4ZLegzMfnnvMt sortOrder: 5 fieldKey: description label: Company Description @@ -56554,7 +56554,7 @@ items: choices: null dynamic: false allowNull: false - - id: A626ZMFpH8g9KPeot9X1W + - id: eqNUmdLstoadsdcAzWhx2r sortOrder: 6 fieldKey: address label: Street Address @@ -56568,7 +56568,7 @@ items: choices: null dynamic: false allowNull: false - - id: pvNTui8izEtnL73W5HrBmd + - id: xsy8QEAKiVTDPeQhwQif4C sortOrder: 7 fieldKey: city label: City @@ -56582,7 +56582,7 @@ items: choices: null dynamic: false allowNull: false - - id: eXYy4ZjLcCGuo1yPJadPhT + - id: i2YuARc741tHFvEm2iDCh2 sortOrder: 8 fieldKey: state label: State @@ -56596,7 +56596,7 @@ items: choices: null dynamic: false allowNull: false - - id: 4kPeh6T7MAzrRt3FzTf5yh + - id: oi9fSsxDcMSnUggNXcQVwh sortOrder: 9 fieldKey: zip label: Postal Code @@ -56616,7 +56616,7 @@ items: choices: null dynamic: false allowNull: false - - id: unxTCRqh2LKkLhrMUQricK + - id: 8UErDTur4YwgYaBhvH4yaW sortOrder: 10 fieldKey: domain label: Domain @@ -56630,7 +56630,7 @@ items: choices: null dynamic: false allowNull: false - - id: hsVcEbBsJd9iwbTU6gyNyo + - id: d1uQ1b4wFsc4iarj7iG8Ns sortOrder: 11 fieldKey: phone label: Phone @@ -56644,7 +56644,7 @@ items: choices: null dynamic: false allowNull: false - - id: sST2HDwRdXHgE3ULSrSWuE + - id: mLVLtPuxVgdPvdPUWuxES5 sortOrder: 12 fieldKey: numberofemployees label: Number of Employees @@ -56658,7 +56658,7 @@ items: choices: null dynamic: false allowNull: false - - id: fidzNXRcPPt6QHEEXt7g2q + - id: 8tT8mtRajcxz6kHMk3vm3d sortOrder: 13 fieldKey: industry label: Industry @@ -56672,7 +56672,7 @@ items: choices: null dynamic: false allowNull: false - - id: dthQnQhuZAQ7toBmtEp4Kn + - id: wnNMANnkacjy52LjVUBrZV sortOrder: 14 fieldKey: lifecyclestage label: Lifecycle Stage @@ -56688,7 +56688,7 @@ items: choices: null dynamic: false allowNull: false - - id: afYq4EdW52UupPX3CLWs5F + - id: 2Mm9LRz4G88e8B9bFCTZL1 sortOrder: 15 fieldKey: properties label: Other Properties @@ -56709,16 +56709,16 @@ items: dynamic: false allowNull: false - id: dMYued7r3VjK4c2gBWUTZi - name: Upsert Object + name: Custom Object slug: upsertObject description: >- - Upsert a record of any Object type to HubSpot and optionally assocate it - with another record of any Object type. + Add, create or update records of any Object type to HubSpot, and + optionally assocate that record with other records of any Object type. platform: CLOUD hidden: false defaultTrigger: null fields: - - id: rutv5FCbtnY3ybyUtpefEM + - id: n4yR731wRHzoCewFqYj4nm sortOrder: 0 fieldKey: object_details label: Object Details @@ -56730,7 +56730,7 @@ items: choices: null dynamic: false allowNull: false - - id: 2pkTFQJEFjaboEvsTXq1oD + - id: k2otUczSks1X4WS9yG4349 sortOrder: 1 fieldKey: properties label: Properties @@ -56742,9 +56742,9 @@ items: choices: null dynamic: true allowNull: false - - id: e7TK9ZggZcuTjK4QheHzj7 + - id: niaJNoh7xwyG4hbMaigJSa sortOrder: 2 - fieldKey: sensitiveProperties + fieldKey: sensitive_properties label: Sensitive Properties type: OBJECT description: Sensitive Properties to set on the record. @@ -56754,7 +56754,7 @@ items: choices: null dynamic: true allowNull: false - - id: w3yq2kEaVYM7U3u7wVVgqN + - id: 5zQGCBwX33opbupc7RUFBS sortOrder: 3 fieldKey: association_sync_mode label: Associated Record Sync Mode @@ -56774,7 +56774,7 @@ items: value: read dynamic: false allowNull: false - - id: 5jEUJ27KoyV2gid1dAkZfH + - id: 7rmFUtdTJ5MS9EwiEC52o4 sortOrder: 4 fieldKey: associations label: Associations @@ -56786,6 +56786,64 @@ items: choices: null dynamic: false allowNull: false + - id: mRG4EEHrTjKLyAfzbKhUZ9 + name: Custom Event + slug: customEvent + description: Send Custom Events to HubSpot + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: hYuaczJcqtewcmae6SYu7z + sortOrder: 0 + fieldKey: event_name + label: Event Name + type: STRING + description: The name of the event to send to Hubspot. + placeholder: '' + required: true + multiple: false + choices: null + dynamic: true + allowNull: false + - id: aMqpW21ruPeMb13StjBGP1 + sortOrder: 1 + fieldKey: record_details + label: Associated Record Details + type: OBJECT + description: Details of the record to associate the event with + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: agPnnKb9D9XaYdiLAmbNZ6 + sortOrder: 2 + fieldKey: properties + label: Properties + type: OBJECT + description: Properties to send with the event. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: hWutWFtVU732SfYFMd8izR + sortOrder: 3 + fieldKey: occurred_at + label: Event Timestamp + type: DATETIME + description: The time when this event occurred. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: false + multiple: false + choices: null + dynamic: false + allowNull: false presets: [] partnerOwned: false - id: 631a1c2bfdce36a23f0a14ec @@ -67529,7 +67587,7 @@ items: hidden: false defaultTrigger: type = "identify" fields: - - id: kgB8Ye3eNHJG7mqLrex9MJ + - id: bRLnC5Mw6zqoTFwchKts2L sortOrder: 0 fieldKey: email label: Email @@ -67545,7 +67603,7 @@ items: choices: null dynamic: false allowNull: false - - id: cFFvFik1r3Y6f4u1xaCfjV + - id: nrUBdaeMmGBD5VNMV1Nwxo sortOrder: 1 fieldKey: enable_batching label: Batch Data to Klaviyo @@ -67557,7 +67615,7 @@ items: choices: null dynamic: false allowNull: false - - id: 5anhv2dHNzLhxcacfaUjUp + - id: 3H9zbkQwHRgrv8WGsJ2pT7 sortOrder: 2 fieldKey: phone_number label: Phone Number @@ -67574,7 +67632,7 @@ items: choices: null dynamic: false allowNull: false - - id: rbV6Cd4A2oUN6D3RbaZtSC + - id: 66WBmSfUSCCBfJc8DTQ57X sortOrder: 3 fieldKey: external_id label: External ID @@ -67589,7 +67647,7 @@ items: choices: null dynamic: false allowNull: false - - id: 27oBxL9SgP67rEnzAk8Ljr + - id: kjqNVkyt56G9WnKR1fNwZN sortOrder: 4 fieldKey: first_name label: First Name @@ -67603,7 +67661,7 @@ items: choices: null dynamic: false allowNull: false - - id: bhRM2i2XhkXXFLrEkDsrXZ + - id: kdwuBAnx1nRNU6vyLUgrRd sortOrder: 5 fieldKey: last_name label: Last Name @@ -67617,7 +67675,7 @@ items: choices: null dynamic: false allowNull: false - - id: dBpcvweNsoXdZ1Nztd7txD + - id: 4NvKYsAoHfeNXto6Bhe3YD sortOrder: 6 fieldKey: organization label: Organization @@ -67633,7 +67691,7 @@ items: choices: null dynamic: false allowNull: false - - id: mEpbtQe8crHDQxEtznrJuZ + - id: on7v5gAELgcwvK4ZJb7F9e sortOrder: 7 fieldKey: title label: Title @@ -67647,7 +67705,7 @@ items: choices: null dynamic: false allowNull: false - - id: gCCLaXJu3grmBpE2zNAN93 + - id: iqxooi291vk6Fmj5GwZEYv sortOrder: 8 fieldKey: image label: Image @@ -67661,7 +67719,7 @@ items: choices: null dynamic: false allowNull: false - - id: hikxxC1Uu5R2aKZyT5GSf5 + - id: abHHShuWiArzHSsPKzjD7J sortOrder: 9 fieldKey: location label: Location @@ -67684,7 +67742,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6tW7iUfc6QKqANd3K9PURE + - id: pPBkxnksZgZyKHVCcPP6bu sortOrder: 10 fieldKey: properties label: Properties @@ -67700,7 +67758,7 @@ items: choices: null dynamic: false allowNull: false - - id: fwesA8Qp5ReXbWYTkBPdvT + - id: dgPwaBFkgTuhkdmySWi63R sortOrder: 11 fieldKey: list_id label: List @@ -67712,7 +67770,7 @@ items: choices: null dynamic: true allowNull: false - - id: gi8yWP8Zst7evU56sjtsEe + - id: x7nVuj9deAMXEQSJfbrEry sortOrder: 14 fieldKey: list_identifier label: Existing List ID @@ -67726,7 +67784,7 @@ items: choices: null dynamic: true allowNull: false - - id: 9yGqnjaH5YEfkV9KbSnsj2 + - id: wZDR8SQjmePGDEZDrMwjJX sortOrder: 15 fieldKey: list_name label: Name of list to create @@ -67738,7 +67796,7 @@ items: choices: null dynamic: false allowNull: false - - id: sSRrHQRHZJJopm7HVh3XW9 + - id: jy51U1Aq6P3aST7VsvUkJ3 sortOrder: 16 fieldKey: retlOnMappingSave label: Connect to a static list in Klaviyo @@ -67761,7 +67819,7 @@ items: hidden: false defaultTrigger: type = "track" fields: - - id: iVvT8wcV5e7pdCKChY19pZ + - id: vqgDr8C4tCTkSTXonzwJkt sortOrder: 0 fieldKey: profile label: Profile @@ -67773,7 +67831,7 @@ items: choices: null dynamic: false allowNull: false - - id: xtoXpRuMwR39jo2f3kThZ7 + - id: bXVwKLN3nDdC2nFFecmruV sortOrder: 1 fieldKey: properties label: Properties @@ -67787,7 +67845,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8q1YWKkNhU1Ru5JEBpdLAf + - id: uXsqauyzBB5cvJbsQuohNg sortOrder: 2 fieldKey: time label: Time @@ -67806,7 +67864,7 @@ items: choices: null dynamic: false allowNull: false - - id: wZJFG4Tmvs4cSh9k2cm8E5 + - id: erMjHBypceVyF2EcnvqJqK sortOrder: 3 fieldKey: value label: Value @@ -67820,7 +67878,7 @@ items: choices: null dynamic: false allowNull: false - - id: rn2T8zZw4YH4t68RWHDAdG + - id: o4znHAffHb5sur9mySEQBB sortOrder: 4 fieldKey: unique_id label: Unique ID @@ -67840,7 +67898,7 @@ items: choices: null dynamic: false allowNull: false - - id: bG7zYXyafin16xp4D2Sacm + - id: f42mpLVbxoujMd38amEK3S sortOrder: 5 fieldKey: products label: Products @@ -67852,6 +67910,19 @@ items: choices: null dynamic: false allowNull: false + - id: qCVGRJHiJrtC7RUSE8kwxj + sortOrder: 6 + fieldKey: event_name + label: Event Name + type: STRING + description: Name of the event. This will be used as the metric name in Klaviyo. + placeholder: '' + defaultValue: Order Completed + required: false + multiple: false + choices: null + dynamic: false + allowNull: false - id: f5syVWBeSA4KrrH3Yv5Q2N name: Track Event slug: trackEvent @@ -67860,7 +67931,7 @@ items: hidden: false defaultTrigger: type = "track" fields: - - id: bHUDdcqB7EAGyKchQKWs46 + - id: vCE1MBgiur1U5VTKMeCRcK sortOrder: 0 fieldKey: profile label: Profile @@ -67872,7 +67943,7 @@ items: choices: null dynamic: false allowNull: false - - id: hCgsbVorDYwgTCTMUGHsDS + - id: 9zpDB5j1sFXxxisvFStyuh sortOrder: 1 fieldKey: metric_name label: Metric Name @@ -67886,7 +67957,7 @@ items: choices: null dynamic: false allowNull: false - - id: a5fMnzUVMAtST6xBWZBB2n + - id: cjvcMiDfbRd6FaNRgjRSRH sortOrder: 2 fieldKey: properties label: Properties @@ -67900,7 +67971,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6Sj8j5oauEaKdifsFKToZZ + - id: sQXGZzAkkDBQGJkaJmya2s sortOrder: 3 fieldKey: time label: Time @@ -67919,7 +67990,7 @@ items: choices: null dynamic: false allowNull: false - - id: fLVVnbb78NWXAvFvaFzvam + - id: aYfTbbVEtC6YLyw89CYB7M sortOrder: 4 fieldKey: value label: Value @@ -67933,7 +68004,7 @@ items: choices: null dynamic: false allowNull: false - - id: k3uhLA48oZwtLcJJfWSmjn + - id: uonAjETeAHVSWGLvKkj87m sortOrder: 5 fieldKey: unique_id label: Unique ID @@ -67961,7 +68032,7 @@ items: hidden: false defaultTrigger: event = "Audience Exited" fields: - - id: prqNt8bdDcdVfv92L6WGv3 + - id: pcEyvKqfjSRLUGsywUhkaW sortOrder: 0 fieldKey: email label: Email @@ -67975,7 +68046,7 @@ items: choices: null dynamic: false allowNull: false - - id: ekgrXq3p4RbujULXZq1wG5 + - id: iWjd3zadxbXRERyFcJ6WoV sortOrder: 1 fieldKey: external_id label: External ID @@ -67989,8 +68060,25 @@ items: choices: null dynamic: false allowNull: false - - id: kGATU2qAspvsUAskBTTd5N + - id: 9p5sWC3ZQ7XuZ2qEADr52D sortOrder: 3 + fieldKey: phone_number + label: Phone Number + type: STRING + description: >- + Individual's phone number in E.164 format. If SMS is not enabled and if + you use Phone Number as identifier, then you have to provide one of + Email or External ID. + placeholder: '' + defaultValue: + '@path': $.context.traits.phone + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fJyeWLhTDNt26HivEeWf3n + sortOrder: 4 fieldKey: enable_batching label: Batch Data to Klaviyo type: BOOLEAN @@ -68010,7 +68098,7 @@ items: hidden: false defaultTrigger: event = "Audience Entered" fields: - - id: 9XJTjboBfbBxnonzrkYSku + - id: 8qsDJwzd5UwFCwgQtophNq sortOrder: 0 fieldKey: email label: Email @@ -68024,8 +68112,25 @@ items: choices: null dynamic: false allowNull: false - - id: 5s4Xt1hP1RzX3FT8V8yUya - sortOrder: 2 + - id: 59xyBc8Brx3fLYFTeNM1YA + sortOrder: 1 + fieldKey: phone_number + label: Phone Number + type: STRING + description: >- + Individual's phone number in E.164 format. If SMS is not enabled and if + you use Phone Number as identifier, then you have to provide one of + Email or External ID. + placeholder: '' + defaultValue: + '@path': $.context.traits.phone + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: v6ZkZMgqskZqgPa9yX5aCG + sortOrder: 3 fieldKey: external_id label: External ID type: STRING @@ -68038,8 +68143,8 @@ items: choices: null dynamic: false allowNull: false - - id: 8JyG3McJ5X73pYBwQe8QEZ - sortOrder: 3 + - id: qi3sbwbBRPNXor9KrqkqVp + sortOrder: 4 fieldKey: enable_batching label: Batch Data to Klaviyo type: BOOLEAN @@ -68051,8 +68156,8 @@ items: choices: null dynamic: false allowNull: false - - id: sSpxzRridLW1EfGvppkdQZ - sortOrder: 5 + - id: bJjiMAA6yppp9bzggE1Ejo + sortOrder: 6 fieldKey: first_name label: First Name type: STRING @@ -68065,8 +68170,8 @@ items: choices: null dynamic: false allowNull: false - - id: 6hqzPHH8TrTW2GLeoYF2v8 - sortOrder: 6 + - id: mSfesQxmStxGJZ7MQVTwvs + sortOrder: 7 fieldKey: last_name label: Last Name type: STRING @@ -68079,8 +68184,8 @@ items: choices: null dynamic: false allowNull: false - - id: tG5gGEiLVXcXjEjyA6GURp - sortOrder: 7 + - id: 2kJAPadwf45xgnEHq5VZUv + sortOrder: 8 fieldKey: image label: Image type: STRING @@ -68093,8 +68198,8 @@ items: choices: null dynamic: false allowNull: false - - id: igPTZPQhm1dVRJBcTm8dwD - sortOrder: 8 + - id: wU67kj4TSCG2KttZhQByWH + sortOrder: 9 fieldKey: title label: Title type: STRING @@ -68107,8 +68212,8 @@ items: choices: null dynamic: false allowNull: false - - id: 8EiWEFfTPfMSuvQ9vxxPCP - sortOrder: 9 + - id: trn6Fe4UFzwSVAu3p61USV + sortOrder: 10 fieldKey: organization label: Organization type: STRING @@ -68123,8 +68228,8 @@ items: choices: null dynamic: false allowNull: false - - id: 9kR65UwAU42VBkH3LNe7i2 - sortOrder: 10 + - id: 29YPZ6e8K1RhgkiKgG41E1 + sortOrder: 11 fieldKey: location label: Location type: OBJECT @@ -68146,8 +68251,8 @@ items: choices: null dynamic: false allowNull: false - - id: tXk7aXmYJufVimC2WMb8JY - sortOrder: 11 + - id: 72Vyt4Ugb34qHJeg2X798o + sortOrder: 12 fieldKey: properties label: Properties type: OBJECT @@ -68170,7 +68275,7 @@ items: hidden: false defaultTrigger: event = "Identify" fields: - - id: jNB2XzxP7oCW9qFmAz4er2 + - id: uvX3BxT1WNMKb9jWbCwjxv sortOrder: 0 fieldKey: email label: Email @@ -68184,7 +68289,7 @@ items: choices: null dynamic: false allowNull: false - - id: stwndf3fa7NX92kHgZtGFB + - id: kxv1sHqTJAQKPF5ZGTDLDe sortOrder: 1 fieldKey: external_id label: External ID @@ -68199,7 +68304,7 @@ items: choices: null dynamic: false allowNull: false - - id: aBg1gbD3btiN9FjKoUaVnE + - id: fPxyQZRsyJttZFTCry96cb sortOrder: 2 fieldKey: list_id label: List @@ -68211,7 +68316,7 @@ items: choices: null dynamic: true allowNull: false - - id: k65itfzwHJMM8Jgs6Rrvt4 + - id: irjgB5JVKbsQ18F6JdPANw sortOrder: 3 fieldKey: enable_batching label: Batch Data to Klaviyo @@ -68224,6 +68329,23 @@ items: choices: null dynamic: false allowNull: false + - id: 888Je3FviUxCtXcwRkRGEc + sortOrder: 4 + fieldKey: phone_number + label: Phone Number + type: STRING + description: >- + Individual's phone number in E.164 format. If SMS is not enabled and if + you use Phone Number as identifier, then you have to provide one of + Email or External ID. + placeholder: '' + defaultValue: + '@path': $.traits.phone + required: false + multiple: false + choices: null + dynamic: false + allowNull: false - id: hrZ9JVS64P91hUzaT6wLPm name: Subscribe Profile slug: subscribeProfile @@ -68232,7 +68354,7 @@ items: hidden: false defaultTrigger: type = "track" and event = "User Subscribed" fields: - - id: 4XFnDMCHqaHB6wbRtb5yuK + - id: hLvQZ6UpSj6bCHFQMYvP5R sortOrder: 0 fieldKey: email label: Email @@ -68254,7 +68376,7 @@ items: choices: null dynamic: false allowNull: false - - id: usGYu7N7BRbtdabxvMqfSt + - id: obT42fx4vyu6wgUEvZHt31 sortOrder: 1 fieldKey: phone_number label: Phone Number @@ -68276,7 +68398,7 @@ items: choices: null dynamic: false allowNull: false - - id: brGjjbLnvesAhLhBPPfZYP + - id: 6kDYaFKfovY4BaiMYdhux1 sortOrder: 2 fieldKey: list_id label: List Id @@ -68291,7 +68413,7 @@ items: choices: null dynamic: true allowNull: false - - id: 3N6PL1cajHLVrE4sHUmxW8 + - id: vdnxVXNwZDacdGEoeuHDS8 sortOrder: 3 fieldKey: custom_source label: Custom Source ($source) @@ -68308,7 +68430,7 @@ items: choices: null dynamic: false allowNull: false - - id: gcmVCZMArLMWgfHTTZ2mA6 + - id: cFaergybbtGKKsn7ywART sortOrder: 4 fieldKey: consented_at label: Consented At @@ -68322,7 +68444,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8WPSMDboKQdPtxG7Wvne9z + - id: 5ZwaBMPavftqzCTi5T2bMu sortOrder: 5 fieldKey: enable_batching label: Batch Data to Klaviyo @@ -68342,7 +68464,7 @@ items: hidden: false defaultTrigger: type = "track" and event = "User Unsubscribed" fields: - - id: 5TQyJdUKXpa9rCWpA3JAaL + - id: eQTihtmkoFaFSsTWnCVHZM sortOrder: 0 fieldKey: email label: Email @@ -68364,7 +68486,7 @@ items: choices: null dynamic: false allowNull: false - - id: cvrcETvJD7CtCtsmT4hMhW + - id: sDn4R2zoWyzpBdBVBbBmaJ sortOrder: 1 fieldKey: phone_number label: Phone Number @@ -68386,7 +68508,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3n4CSL9D8p9oU38uYbXc5w + - id: BzCjpPrWrzbie7qftSk2t sortOrder: 2 fieldKey: list_id label: List Id @@ -68400,7 +68522,7 @@ items: choices: null dynamic: true allowNull: false - - id: pNdHKaws6TPXBJ8WCb57Ks + - id: kSsmY9BdjYkY71H7ThkxcW sortOrder: 3 fieldKey: enable_batching label: Batch Data to Klaviyo @@ -70021,7 +70143,7 @@ items: hidden: false defaultTrigger: type = "track" fields: - - id: ttZFa3ePvTMVgpiKiEKRxb + - id: ms7151nfocV6o3SSDGJtEy sortOrder: 0 fieldKey: conversionHappenedAt label: Timestamp @@ -70038,7 +70160,7 @@ items: choices: null dynamic: false allowNull: false - - id: qDa2X6fpjD2HjGRCLKr7aV + - id: jhbpGcydKqD6CXqdnt6Bz4 sortOrder: 1 fieldKey: conversionValue label: Conversion Value @@ -70057,7 +70179,7 @@ items: choices: null dynamic: false allowNull: false - - id: 9vnTyhN6sQKsn83mbbfRtt + - id: dMtBhyAV6S5wzQSTkG1zjq sortOrder: 2 fieldKey: eventId label: Event ID @@ -70073,7 +70195,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3vFYDU8SiJU7JkRVfcbEfM + - id: dNFNaSGpDhkYnshaYVgViG sortOrder: 3 fieldKey: email label: Email @@ -70090,7 +70212,7 @@ items: choices: null dynamic: false allowNull: false - - id: c38o7gni9dsLvQ2mMNvZLp + - id: rccrWapaSbmEXLb5gFfXxn sortOrder: 4 fieldKey: linkedInUUID label: LinkedIn First Party Ads Tracking UUID @@ -70107,7 +70229,7 @@ items: choices: null dynamic: false allowNull: false - - id: bxz3ZiYN69JtKHRUMV1ZzR + - id: 21mBVYkuBWqMybZRvdg7nt sortOrder: 5 fieldKey: acxiomID label: Acxiom ID @@ -70121,7 +70243,7 @@ items: choices: null dynamic: false allowNull: false - - id: nQrNduKvXEDzeZLiCFpetj + - id: tedwaFr9TZXroohSboGqA sortOrder: 6 fieldKey: oracleID label: Oracle ID @@ -70136,7 +70258,7 @@ items: choices: null dynamic: false allowNull: false - - id: oEHnop4FE7g1K3v58mXKUH + - id: pX76XhUEzxGSJuDz5bke7F sortOrder: 7 fieldKey: userInfo label: User Info @@ -70150,8 +70272,8 @@ items: choices: null dynamic: false allowNull: false - - id: 8XbbzvWqfHS2CnP5xroUnv - sortOrder: 8 + - id: n4MERbsro71XDMjhYxQHAQ + sortOrder: 10 fieldKey: adAccountId label: Ad Account type: STRING @@ -70162,8 +70284,8 @@ items: choices: null dynamic: true allowNull: false - - id: a9cix4ajiPCkRrzK2GskF9 - sortOrder: 9 + - id: 3LTwAbdfcaWWy1jfV6bmKP + sortOrder: 11 fieldKey: campaignId label: Add Campaigns to Conversion type: STRING @@ -70178,8 +70300,8 @@ items: choices: null dynamic: true allowNull: false - - id: xmmAibWFnzdjAQRtmVhPnp - sortOrder: 10 + - id: bg16V7hYY13dRWqmiKw5Ps + sortOrder: 12 fieldKey: conversionRuleId label: Existing Conversion Rule ID type: STRING @@ -70192,8 +70314,8 @@ items: choices: null dynamic: true allowNull: false - - id: sqRRMDCBS72wqKcj3x1M6n - sortOrder: 11 + - id: eSL5HpDVMziqyR8UPctZBj + sortOrder: 13 fieldKey: name label: Name type: STRING @@ -70204,8 +70326,8 @@ items: choices: null dynamic: false allowNull: false - - id: 9Rvza87eBc7vQHXLK6HGEb - sortOrder: 12 + - id: tjMYBFMoqNufoGKknBNrYw + sortOrder: 14 fieldKey: conversionType label: Conversion Type type: STRING @@ -70288,8 +70410,8 @@ items: value: SALES_QUALIFIED_LEAD dynamic: false allowNull: false - - id: wNkv9vT1FDVoXWkQKQcoSo - sortOrder: 13 + - id: nuEpAMc8AMiVpHrs2BXPCZ + sortOrder: 15 fieldKey: attribution_type label: Attribution Type type: STRING @@ -70304,8 +70426,8 @@ items: value: LAST_TOUCH_BY_CONVERSION dynamic: false allowNull: false - - id: rv8ryaiuQC78cK9hnFSANv - sortOrder: 14 + - id: gP1KM73cps6TcF8FSMTYys + sortOrder: 16 fieldKey: post_click_attribution_window_size label: Post-Click Attribution Window Size type: NUMBER @@ -70328,8 +70450,8 @@ items: value: 90 dynamic: false allowNull: false - - id: 8FbAEBwkMEvBuR7tzp1ujs - sortOrder: 15 + - id: foiETdHgDxpXAgmkTuwfn3 + sortOrder: 17 fieldKey: view_through_attribution_window_size label: View-Through Attribution Window Size type: NUMBER @@ -70352,8 +70474,8 @@ items: value: 90 dynamic: false allowNull: false - - id: xx4ATBDA2cawRcmrCNHV7P - sortOrder: 16 + - id: 5A4U7TkNqbE3Q9Be4ShESu + sortOrder: 18 fieldKey: onMappingSave label: Create a Conversion Rule type: OBJECT @@ -93706,7 +93828,7 @@ items: hidden: false defaultTrigger: type = "track" fields: - - id: 8Q57srDWcEeVfaNw3vgBUm + - id: 5tMDrWS3u2z3nT2E1NL4nn sortOrder: 0 fieldKey: event_name label: Event name @@ -93720,7 +93842,7 @@ items: choices: null dynamic: false allowNull: false - - id: kXQPxKJKm1Sbgrx8VRd4Zt + - id: dVTbj2bYBhTevFgzFyT56u sortOrder: 1 fieldKey: company_keys label: Company keys @@ -93732,7 +93854,7 @@ items: choices: null dynamic: false allowNull: false - - id: syUBVxFsK3wmubUYVVFKYx + - id: kzjR4Eunn66NYf1RYNg2TH sortOrder: 2 fieldKey: timestamp label: Timestamp @@ -93746,7 +93868,7 @@ items: choices: null dynamic: false allowNull: false - - id: oCXdLyC4a1hnhgUuFtieUp + - id: aDZyL7eN6hSbFf9ovB6Znp sortOrder: 3 fieldKey: user_keys label: User keys @@ -93754,14 +93876,14 @@ items: description: 'Key-value pairs associated with a user (e.g. email: example@example.com)' placeholder: '' defaultValue: - user_id: + userId: '@path': $.userId required: false multiple: false choices: null dynamic: false allowNull: false - - id: oY3KENsJJN6t3cw3iMWkF1 + - id: aLqZ8FnZuytLiVd9SYr6sf sortOrder: 4 fieldKey: traits label: Traits @@ -93784,19 +93906,22 @@ items: hidden: false defaultTrigger: type = "identify" fields: - - id: pap313BJW93bR7PPXE4Y68 + - id: g5iXNMFc4CeMpCvhvNEA6W sortOrder: 0 fieldKey: company_keys label: Company keys type: OBJECT description: 'Key-value pairs associated with a company (e.g. organization_id: 123456)' placeholder: '' + defaultValue: + groupId: + '@path': $.context.groupId required: true multiple: false choices: null dynamic: false allowNull: false - - id: qigwmUkUmVtK94aiFcMZy6 + - id: e5itnLSbMCDiQDd7ktTTPF sortOrder: 1 fieldKey: company_name label: Company name @@ -93810,7 +93935,7 @@ items: choices: null dynamic: false allowNull: false - - id: cB8vGm4LK8DrmmahbcqfkV + - id: p9RKn4rjGwCGWpkkp4Tmn1 sortOrder: 2 fieldKey: company_traits label: Company traits @@ -93822,7 +93947,7 @@ items: choices: null dynamic: false allowNull: false - - id: mu5HHPBZg83byCqVURp8kS + - id: n1M2Dk4K45Md5Q6YMP4s1g sortOrder: 3 fieldKey: timestamp label: Timestamp @@ -93836,7 +93961,7 @@ items: choices: null dynamic: false allowNull: false - - id: jmVXg1fmRmmqhtfKqF8ih + - id: 2PpbybCe9PPXpNRsGbEVhk sortOrder: 4 fieldKey: user_keys label: User keys @@ -93844,14 +93969,14 @@ items: description: 'Key-value pairs associated with a user (e.g. email: example@example.com)' placeholder: '' defaultValue: - user_id: + userId: '@path': $.userId required: true multiple: false choices: null dynamic: false allowNull: false - - id: 7uWXMaVNmKfq1yCttGqEoG + - id: fc7xEbEygJdrHu7QXoTcfZ sortOrder: 5 fieldKey: user_name label: User name @@ -93865,7 +93990,7 @@ items: choices: null dynamic: false allowNull: false - - id: 4voNJ67Ugmac4iWfaKW6ni + - id: vMKePBPfBqZkwVHXZ75Qsq sortOrder: 6 fieldKey: user_traits label: User traits @@ -93878,19 +94003,6 @@ items: dynamic: false allowNull: false presets: - - actionId: eqNzhvvxtviHtCcgYMj9Ld - name: Identify User - fields: - company_name: - '@path': $.traits.company_name - timestamp: - '@path': $.timestamp - user_keys: - user_id: - '@path': $.userId - user_name: - '@path': $.traits.name - trigger: type = "identify" - actionId: 2p77weRw8N7g3kHDC6Vbod name: Track Event fields: @@ -93899,12 +94011,28 @@ items: timestamp: '@path': $.timestamp user_keys: - user_id: + userId: '@path': $.userId traits: raw_event_name: '@path': $.event trigger: type = "track" + - actionId: eqNzhvvxtviHtCcgYMj9Ld + name: Identify User + fields: + company_keys: + groupId: + '@path': $.context.groupId + company_name: + '@path': $.traits.company_name + timestamp: + '@path': $.timestamp + user_keys: + userId: + '@path': $.userId + user_name: + '@path': $.traits.name + trigger: type = "identify" partnerOwned: true - id: 5c6cb84c9d413f0001804a42 display_name: ScopeAI diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml index ee620ce6a6..c209704057 100644 --- a/src/_data/catalog/destinations_private.yml +++ b/src/_data/catalog/destinations_private.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2024-08-09 +# destination data last updated 2024-08-13 items: - id: 54521fd925e721e32a72eee1 display_name: Pardot diff --git a/src/_data/catalog/regional-supported.yml b/src/_data/catalog/regional-supported.yml index 1eaf2f704e..7d2b87c8b8 100644 --- a/src/_data/catalog/regional-supported.yml +++ b/src/_data/catalog/regional-supported.yml @@ -87,6 +87,15 @@ sources: - us endpoints: - us + - id: E5Y3BqhAg2 + display_name: Authvia + hidden: false + slug: authvia + url: connections/sources/catalog/cloud-apps/authvia + regions: + - us + endpoints: + - us - id: R7eWaTLYUs display_name: AutopilotHQ hidden: false diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml index c2c4401d85..5001e1a1b6 100644 --- a/src/_data/catalog/source_categories.yml +++ b/src/_data/catalog/source_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# source categories last updated 2024-08-09 +# source categories last updated 2024-08-13 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 c78e3930e3..eddb3f265e 100644 --- a/src/_data/catalog/sources.yml +++ b/src/_data/catalog/sources.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# sources last updated 2024-08-09 +# sources last updated 2024-08-13 items: - id: 8HWbgPTt3k display_name: .NET @@ -177,6 +177,25 @@ items: url: https://cdn.filepicker.io/api/file/qWgSP5cpS7eeW2voq13u categories: - Mobile + - id: E5Y3BqhAg2 + display_name: Authvia + isCloudEventSource: true + slug: authvia + url: connections/sources/catalog/cloud-apps/authvia + hidden: false + regions: + - us + endpoints: + - us + source_type: cloud-app + description: >- + Authvia enables businesses to collect payments via text, chat and instant + messaging—the way your customers want to pay. + logo: + url: >- + https://cdn-devcenter.segment.com/cd43937e-5ffe-4b6c-aec4-8e79282e3575.svg + categories: + - Raw Data - id: R7eWaTLYUs display_name: AutopilotHQ isCloudEventSource: true diff --git a/src/_data/sidenav/main.yml b/src/_data/sidenav/main.yml index 9ed6ac6a48..51679f9cca 100644 --- a/src/_data/sidenav/main.yml +++ b/src/_data/sidenav/main.yml @@ -184,8 +184,14 @@ sections: section: - path: /connections/reverse-etl title: Reverse ETL Overview + - path: /connections/reverse-etl/setup + title: Set Up Reverse ETL + - path: /connections/reverse-etl/manage-retl + title: Manage Reverse ETL Syncs + - path: /connections/reverse-etl/system + title: Reverse ETL System - path: /connections/reverse-etl/reverse-etl-catalog - title: Reverse ETL Catalog + title: Reverse ETL Destination Catalog - section_title: Reverse ETL Source Setup Guides slug: connections/reverse-etl/reverse-etl-source-setup-guides section: diff --git a/src/_includes/components/actions-fields.html b/src/_includes/components/actions-fields.html index 3e54b0d725..5687d57a86 100644 --- a/src/_includes/components/actions-fields.html +++ b/src/_includes/components/actions-fields.html @@ -140,12 +140,12 @@ -{% for field in action.fields %} +{% for field in action.fields %}{% unless field.id == 'jYj1UxYzS5aJNU2Ue2gakK' or field.id == '2KMUXqzqudDytGbcBz2iwP' or field.id == '6VBmtsRbVxHVM61LtnFVwX' or field.id == 'q6eYyJGaCYcPSHeZPpaK5x' %} {{field.label}}{% if field.required %}*{% endif %} {% if field.type %}Type: {{field.type}}
{%endif%}{{field.description | markdownify}} -{%endfor%} +{%endunless%}{%endfor%} diff --git a/src/_includes/content/cloud-app-note.md b/src/_includes/content/cloud-app-note.md index d6440fe1b3..07f04490da 100644 --- a/src/_includes/content/cloud-app-note.md +++ b/src/_includes/content/cloud-app-note.md @@ -2,11 +2,40 @@ {% assign currentIntegration = site.data.catalog.sources.items | where: "slug", currentSlug | first %} {% if currentIntegration.url contains "cloud-apps" or page.path contains "cloud-apps" %} {% if currentIntegration.isCloudEventSource %} -

Good to know: Event Cloud source

-

The {{ page.title }} is an **event** source. This means that it sends data as events, which are behaviors or occurrences tied to a user and a point in time. Data from these sources can be loaded into your Segment warehouses, and **also** sent to Segment streaming destinations. [Learn more about cloud sources.](/docs/connections/sources/#cloud-apps)

-
-{% else %} -

Good to know: Object Cloud source

The {{ page.title }} is an **object** source. This means that it sends information (traits) about a thing that exists and persists over time, such as a person or company, and which can be updated over time. Data from this source can only be exported directly to a warehouse, but it can then be used for further analysis. [Learn more about cloud sources.](/docs/connections/sources/#cloud-apps)

+
+
+
Source Info
+ + {% if currentIntegration.partnerOwned %} +
Partner Owned
+ + {% endif %} +
+
+ +{% else %} +
+
+
Source Info
+ + {% if currentIntegration.partnerOwned %} +
Partner Owned
+ + {% endif %} +
+
{% endif %} {% endif %} + + diff --git a/src/_includes/content/destination-dossier.html b/src/_includes/content/destination-dossier.html index dd7987a226..9c7241aab1 100644 --- a/src/_includes/content/destination-dossier.html +++ b/src/_includes/content/destination-dossier.html @@ -47,7 +47,7 @@
Destination Info
{{ integration.display_name }}
- {% if site.data.catalog.beta_sources contains integration.id %} + {% if integration.status == 'PUBLIC_BETA' %}

Beta

{% endif %} diff --git a/src/connections/sources/catalog/libraries/mobile/amp/index.md b/src/connections/sources/catalog/libraries/mobile/amp/index.md index e978b86471..3f972d78f6 100644 --- a/src/connections/sources/catalog/libraries/mobile/amp/index.md +++ b/src/connections/sources/catalog/libraries/mobile/amp/index.md @@ -57,7 +57,7 @@ For sources in [EU workspaces](/docs/guides/regional-segment/), use the followin ``` -By default, the snippet will automatically fire a page event which you can read more about [here](/docs/connections/sources/catalog/libraries/mobile/amp/#page). +By default, the snippet will automatically fire a page event which you can read more about [in the Page section of this documentation](/docs/connections/sources/catalog/libraries/mobile/amp/#page). ## Page @@ -222,8 +222,8 @@ This identity schema will allow you to join down funnel interaction with earlier ### Why aren't all my IDs prefixed with an 'amp-'? All AMP events won't consistently have an 'amp-' prefixed ID as this is only included in the event that the AMP page is directly visited on your domain. -For further details refer to the various `Client ID` scenarios in relation to AMP pages [here]( https://developers.google.com/analytics/devguides/collection/amp-analytics/client-id){:target="_blank"} (Segment can only guarantee that if the third scenario happens, the AMP ID will get generated and picked up). - +For further details refer to the various `Client ID` scenarios in relation to AMP pages [in Google's docs]( https://developers.google.com/analytics/devguides/collection/amp-analytics/client-id){:target="_blank"} (Segment can only guarantee that if the third scenario happens, the AMP ID will get generated and picked up). + See a live AMP with Segment analytics diff --git a/src/connections/sources/catalog/libraries/mobile/android/index.md b/src/connections/sources/catalog/libraries/mobile/android/index.md index 9a4ee04008..80bff29ade 100644 --- a/src/connections/sources/catalog/libraries/mobile/android/index.md +++ b/src/connections/sources/catalog/libraries/mobile/android/index.md @@ -1,14 +1,14 @@ --- -title: 'Analytics for Android' +title: 'Analytics-Android' strat: android repo: analytics-android support_type: maintenance id: wXNairW5xX --- - Analytics for Android makes it easier for you to send data to any tool without having to learn, test or implement a new API every time. +Analytics-Android makes it easier for you to send data to any tool without having to learn, test or implement a new API every time. -Analytics for Android only supports any Android device running API 14 (Android 4.0) and higher. This includes Amazon Fire devices. +Analytics-Android only supports any Android device running API 14 (Android 4.0) and higher. This includes Amazon Fire devices. > info "Analytics-Kotlin" > The Analytics-Kotlin library is in General Availability. You can use Analytics-Kotlin for [mobile](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/) or [server](/docs/connections/sources/catalog/libraries/server/kotlin) applications. If you'd like to upgrade to Analytics-Kotlin, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/). Segment's future development efforts concentrate on the new Analytics-Kotlin SDK, and will only ship security updates for the Analytics-Android SDK. diff --git a/src/connections/sources/catalog/libraries/mobile/android/quickstart.md b/src/connections/sources/catalog/libraries/mobile/android/quickstart.md index 221f06e79b..0632742fa9 100644 --- a/src/connections/sources/catalog/libraries/mobile/android/quickstart.md +++ b/src/connections/sources/catalog/libraries/mobile/android/quickstart.md @@ -135,4 +135,4 @@ Once you've added a few `track` calls, **you're done!** You successfully instrum ## What's Next? -We just walked through the quickest way to get started with Segment using Analytics for Android. You might also want to check out our full [Analytics for Android reference](/docs/connections/sources/catalog/libraries/mobile/android) to see what else is possible, or read about the [Tracking API methods](/docs/connections/sources/catalog/libraries/server/http-api/) to get a sense for the bigger picture. +We just walked through the quickest way to get started with Segment using Analytics-Android. You might also want to check out Segment's full [Analytics-Android reference](/docs/connections/sources/catalog/libraries/mobile/android) to see what else is possible, or read about the [Tracking API methods](/docs/connections/sources/catalog/libraries/server/http-api/) to get a sense for the bigger picture. diff --git a/src/connections/sources/catalog/libraries/mobile/android/wear.md b/src/connections/sources/catalog/libraries/mobile/android/wear.md index 4ece7ced87..4e8727560d 100644 --- a/src/connections/sources/catalog/libraries/mobile/android/wear.md +++ b/src/connections/sources/catalog/libraries/mobile/android/wear.md @@ -1,16 +1,16 @@ --- -title: 'Analytics for Android Wear' +title: 'Analytics-Android Wear' strat: android hidden: true --- -Analytics for Android Wear makes it simple to send your data to any tool without having to learn, test or implement a new API every time. +Analytics-Android Wear makes it simple to send your data to any tool without having to learn, test, or implement a new API every time. -All of Segment's client libraries are open-source, so you can [view Analytics for Android on GitHub](https://github.com/segmentio/analytics-android), or check out our [browser and server-side libraries](/docs/connections/sources/catalog/) too. +All of Segment's client libraries are open-source, so you can [view Analytics-Android on GitHub](https://github.com/segmentio/analytics-android), or check out our [browser and server-side libraries](/docs/connections/sources/catalog/) too. ## Getting Started -To get started with Analytics for Android Wear check out our [quickstart guide](/docs/connections/sources/catalog/libraries/mobile/android/quickstart/) which will help you install analytics tracking in your mobile app in just a few minutes. Once you've installed the SDK, read on for setting it up the wear part of your App. Note that you can only use the Android SDK v2 or later with wear, and that any Beta APIs below are subject to change. +To get started with Analytics-Android Wear check out our [quickstart guide](/docs/connections/sources/catalog/libraries/mobile/android/quickstart/) which will help you install analytics tracking in your mobile app in just a few minutes. Once you've installed the SDK, read on for setting it up the wear part of your App. Note that you can only use the Android SDK v2 or later with wear, and that any Beta APIs below are subject to change. ## Adding the Wear dependency diff --git a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/adjust-swift.md b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/adjust-swift.md index 6c253b9268..2ecb072e10 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/adjust-swift.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/adjust-swift.md @@ -3,10 +3,10 @@ title: Analytics Swift Adjust Plugin strat: swift --- -[Adjust](https://adjust.com){:target="_blank"} is the mobile attribution provider of choice for hundreds of organizations across the globe. They unify all your marketing activities into one powerful platform, giving you the insights you need to scale your business. The Adjust Destination is open-source. You can browse the code on GitHub [here](https://github.com/segment-integrations/analytics-swift-integration-adjust). +[Adjust](https://adjust.com){:target="_blank"} is the mobile attribution provider of choice for hundreds of organizations across the globe. They unify all your marketing activities into one powerful platform, giving you the insights you need to scale your business. The Adjust Destination is open-source. You can browse the code on GitHub in the [@segment-integrations/analytics-swift-integration-adjust](https://github.com/segment-integrations/analytics-swift-integration-adjust){:target="_blank”} repo. > info "" -> Note that this plugin simply adds session data for Adjust, and events are sent via Cloud Mode. +> Note that this plugin simply adds session data for Adjust, and events are sent in Cloud Mode. ## Getting started @@ -19,14 +19,14 @@ strat: swift ## Adding the dependency -### via Xcode +### Xcode In the Xcode `File` menu, click `Add Packages`. You'll see a dialog where you can search for Swift packages. In the search field, enter the URL to this repo. https://github.com/segment-integrations/analytics-swift-integration-adjust You'll then have the option to pin to a version, or specific branch, as well as which project in your workspace to add it to. Once you've made your selections, click the `Add Package` button. -### via Package.swift +### Package.swift Open your Package.swift file and add the following do your the `dependencies` section: diff --git a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/adobe-swift.md b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/adobe-swift.md index 07fe84d2a5..a8718848a8 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/adobe-swift.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/adobe-swift.md @@ -4,7 +4,7 @@ strat: adobe redirect_from: '/connections/destinations/catalog/omniture/' id: 5783cec280412f644ff14226 --- -After you enable Adobe Analytics (formerly known as Omniture or Sitecatalyst) in Segment, you can start sending data from any of the Segment [libraries](/docs/connections/sources/catalog/) to an Adobe report suite. When you send events from Segment's mobile SDKs or Cloud-mode libraries, Segment translates that data using a mapping that you configure, and then passes it to the Adobe Analytics [Data Insertion API](https://docs.adobe.com/content/help/en/analytics/import/c-data-insertion-api.html){:target="_blank”}. For additional details, you can browse the code on GitHub [here](https://github.com/segment-integrations/analytics-swift-adobe-analytics). +After you enable Adobe Analytics (formerly known as Omniture or Sitecatalyst) in Segment, you can start sending data from any of the Segment [libraries](/docs/connections/sources/catalog/) to an Adobe report suite. When you send events from Segment's mobile SDKs or Cloud-mode libraries, Segment translates that data using a mapping that you configure, and then passes it to the Adobe Analytics [Data Insertion API](https://docs.adobe.com/content/help/en/analytics/import/c-data-insertion-api.html){:target="_blank”}. For additional details, you can browse the code on GitHub in the [@segment-integrations/analytics-swift-adobe-analytics](https://github.com/segment-integrations/analytics-swift-adobe-analytics){:target="_blank”} repo. ## Planning for Adobe Analytics diff --git a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/appsflyer-swift.md b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/appsflyer-swift.md index 4096a5b36a..8da169e543 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/appsflyer-swift.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/appsflyer-swift.md @@ -94,7 +94,7 @@ Finally, Segment uses AppsFlyer's `transactionId` deduplication when you send an ## Install Attributed -Segment will automatically trigger an `Install Attributed` event if you have **trackAttributionData** enabled in your settings, and the Segment-AppsFlyer integration installed in your app. The event payload will adhere to the `Install Attributed` event specification documented [here](/docs/connections/spec/mobile/#install-attributed) and will propagate to your other downstream destinations. +Segment will automatically trigger an `Install Attributed` event if you have **trackAttributionData** enabled in your settings, and the Segment-AppsFlyer integration installed in your app. The event payload will adhere to the `Install Attributed` event specification documented [in Segment's Mobile Spec](/docs/connections/spec/mobile/#install-attributed) and will propagate to your other downstream destinations. ### Revenue Tracking diff --git a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/braze-swift.md b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/braze-swift.md index cab72d4e23..1b49a63be3 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/braze-swift.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/braze-swift.md @@ -4,7 +4,7 @@ title: Analytics Swift Braze Plugin [Braze](https://www.braze.com/), formerly Appboy, is an engagement platform that empowers growth by helping marketing teams to build customer loyalty through mobile, omni-channel customer experiences. -Braze’s destination plugin code is open source and available on GitHub. You can view it [here](https://github.com/braze-inc/analytics-swift-braze). This destination plugin is maintained by Braze. For any issues with the destination plugin code, please reach out to Braze's support. +Braze’s destination plugin code is open source and available on GitHub. You can view it on GitHub in the [@braze-inc/analytics-swift-braze](https://github.com/braze-inc/analytics-swift-braze){:target="_blank”} repo. This destination plugin is maintained by Braze. For any issues with the destination plugin code, please reach out to Braze's support. ## Getting Started diff --git a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/firebase-swift.md b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/firebase-swift.md index c1e24b1c67..8c958b583a 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/firebase-swift.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/firebase-swift.md @@ -179,4 +179,4 @@ Firebase is Google's recommended method for reporting conversions to Adwords. To ### Troubleshooting -Firebase has great logging. If you are having any issues, you can enable debug mode as outlined [here](https://firebase.google.com/docs/analytics/debugview). \ No newline at end of file +Firebase has great logging. If you are having any issues, you can enable debug mode as outlined in Google's [Debug events](https://firebase.google.com/docs/analytics/debugview){:target="_blank”} docs. \ No newline at end of file diff --git a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/mixpanel-swift.md b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/mixpanel-swift.md index 26a7959831..a33823047b 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/mixpanel-swift.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/mixpanel-swift.md @@ -251,11 +251,11 @@ If you're testing in Xcode remember you must first background the app, then the If an `ip` property is passed to Mixpanel, the value will be interpreted as the IP address of the request and therefore automatically parsed into Mixpanel geolocation properties (City, Country, Region). After that IP address has been parsed, they will throw out the IP address and only hold onto those resulting geolocation properties. As such, if you want to display an IP address as a property within the Mixpanel UI or within raw data, you will simply want to slightly modify the naming convention for that property. -Instead of `ip`, you can use a property name of `user IP` or `IP Address` (whatever is most clear for your implementation). This way, Mixpanel won't automatically interpret the IP address as an IP address, and instead store that value as a property on the event. You can read more [here](https://mixpanel.com/help/reference/http#tracking-events){:target="_blank"}. +Instead of `ip`, you can use a property name of `user IP` or `IP Address` (whatever is most clear for your implementation). This way, Mixpanel won't automatically interpret the IP address as an IP address, and instead store that value as a property on the event. You can read more in Mixpanel's [Import Events](https://mixpanel.com/help/reference/http#tracking-events){:target="_blank"} docs. ### Push Notifications Push notifications are only available for projects bundling the Segment-Mixpanel SDK. > info "" -> Set up your push notification handlers by calling into native Mixpanel methods. You can read more about how to approach this in the [iOS](/docs/connections/sources/catalog/libraries/mobile/ios/#what-if-your-sdk-doesnt-support-feature-x) \ No newline at end of file +> Set up your push notification handlers by calling into native Mixpanel methods. You can read more about how to approach this in the [iOS](/docs/connections/sources/catalog/libraries/mobile/ios/#what-if-your-sdk-doesnt-support-feature-x) docs. \ No newline at end of file diff --git a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/nielsen-dtvr-swift.md b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/nielsen-dtvr-swift.md index 0912b30cea..5bc1ccbbb3 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/nielsen-dtvr-swift.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/destination-plugins/nielsen-dtvr-swift.md @@ -3,7 +3,7 @@ title: Analytics Swift Nielsen DTVR Plugin hidden: true --- -Digital in TV Ratings (DTVR) responds to the shifting and complex multi-platform, multi-device and multi-distribution landscape by providing comprehensive measurement of digital content consumption—including streaming TV commercial video, static web pages and mobile apps—across all major devices and platforms. For additional information, you can browse the code on GitHub [here](https://github.com/segment-integrations/analytics-swift-nielsen-dtvr). +Digital in TV Ratings (DTVR) responds to the shifting and complex multi-platform, multi-device and multi-distribution landscape by providing comprehensive measurement of digital content consumption—including streaming TV commercial video, static web pages and mobile apps—across all major devices and platforms. For additional information, you can browse the code on GitHub in the [@segment-integrations/analytics-swift-nielsen-dtvr](https://github.com/segment-integrations/analytics-swift-nielsen-dtvr){:target="_blank”} repo. ## Getting started diff --git a/src/connections/sources/catalog/libraries/mobile/apple/implementation.md b/src/connections/sources/catalog/libraries/mobile/apple/implementation.md index 5bf3b35625..bc2076965f 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/implementation.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/implementation.md @@ -1,5 +1,5 @@ --- -title: Analytics for Swift Implementation Guide +title: Analytics-Swift Implementation Guide strat: swift tags: - apple diff --git a/src/connections/sources/catalog/libraries/mobile/apple/index.md b/src/connections/sources/catalog/libraries/mobile/apple/index.md index e7f2f594ed..b57ba18960 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/index.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/index.md @@ -130,7 +130,7 @@ See Segment's documentation for [device-mode destinations](/docs/connections/sou See Segment's [cloud-mode destinations](/docs/connections/sources/catalog/libraries/mobile/apple/cloud-mode-destinations/) for a full list of available cloud-mode destinations that Swift supports. -
Segment offers support for two different types of Destinations, learn more about the differences between the two [here](). +
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 @@ -152,7 +152,7 @@ See Segment's [cloud-mode destinations](/docs/connections/sources/catalog/librar ## Tools and extensions -Analytics for Swift is built with extensibility in mind. Use the tools list below to improve data collection. +Analytics-Swift is built with extensibility in mind. Use the tools list below to improve data collection. - [Plugin architecture](/docs/connections/sources/catalog/libraries/mobile/swift/swift-plugin-architecture) - [Typewriter](/docs/connections/sources/catalog/libraries/mobile/swift/swift-typewriter) diff --git a/src/connections/sources/catalog/libraries/mobile/apple/swift-destination-filters.md b/src/connections/sources/catalog/libraries/mobile/apple/swift-destination-filters.md index e2e3c6e85c..777a6e54c0 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/swift-destination-filters.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/swift-destination-filters.md @@ -1,5 +1,5 @@ --- -title: Analytics for Swift Destination Filters +title: Analytics-Swift Destination Filters strat: swift --- > info "" diff --git a/src/connections/sources/catalog/libraries/mobile/apple/swift-plugin-architecture.md b/src/connections/sources/catalog/libraries/mobile/apple/swift-plugin-architecture.md index d920206092..f4680fe3f3 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/swift-plugin-architecture.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/swift-plugin-architecture.md @@ -1,5 +1,5 @@ --- -title: Analytics for Swift Plugin Architecture +title: Analytics-Swift Plugin Architecture strat: swift --- diff --git a/src/connections/sources/catalog/libraries/mobile/apple/swift-samples.md b/src/connections/sources/catalog/libraries/mobile/apple/swift-samples.md index 9794f3e129..b1c14be228 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/swift-samples.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/swift-samples.md @@ -1,5 +1,5 @@ --- -title: Analytics for Swift Code Samples +title: Analytics-Swift Code Samples strat: swift --- diff --git a/src/connections/sources/catalog/libraries/mobile/apple/swift-typewriter.md b/src/connections/sources/catalog/libraries/mobile/apple/swift-typewriter.md index baffde1a45..770b865ef0 100644 --- a/src/connections/sources/catalog/libraries/mobile/apple/swift-typewriter.md +++ b/src/connections/sources/catalog/libraries/mobile/apple/swift-typewriter.md @@ -1,5 +1,5 @@ --- -title: Analytics for Swift Typewriter +title: Analytics-Swift Typewriter strat: swift --- [Typewriter](https://github.com/segmentio/typewriter) is a tool for generating strongly-typed Segment analytics libraries based on your pre-defined [Tracking Plan](/docs/protocols/tracking-plan) spec. diff --git a/src/connections/sources/catalog/libraries/mobile/ios/index.md b/src/connections/sources/catalog/libraries/mobile/ios/index.md index 07090f9141..594934ad2f 100644 --- a/src/connections/sources/catalog/libraries/mobile/ios/index.md +++ b/src/connections/sources/catalog/libraries/mobile/ios/index.md @@ -1,11 +1,11 @@ --- -title: Analytics for iOS +title: Analytics-iOS strat: ios repo: analytics-ios support_type: maintenance id: UBrsG9RVzw --- -With Analytics for iOS, you can send your data to analytics or marketing tool, without needing to learn, test, or implement a new API with each update or addition. +With Analytics-iOS, you can send your data to analytics or marketing tool, without needing to learn, test, or implement a new API with each update or addition.


@@ -57,7 +57,7 @@ When the app is terminated, Segment saves the queue to disk, and loads that data ### Install the SDK -The recommended way to install Analytics for iOS is using [Cocoapods](http://cocoapods.org/), since it means you can create a build with specific destinations, and because it makes it simple to install and upgrade. +The recommended way to install Analytics-iOS is using [CocoaPods](http://cocoapods.org/){:target="_blank"}, since it means you can create a build with specific destinations, and because it makes it simple to install and upgrade. First, add the `Analytics` dependency to your `Podfile`, like so: @@ -313,7 +313,7 @@ Analytics.shared().identify("a user's id", traits: ["email": "a user's email add -Analytics for iOS works on its own background thread, so it will never block the main thread for the UI or the calling thread. +Analytics-iOS works on its own background thread, so it will never block the main thread for the UI or the calling thread. Calling `- identify:` with a `userId` will write that ID to disk to be used in subsequent calls. That ID can be removed either by uninstalling the app or by calling [`reset`](#reset). diff --git a/src/connections/sources/catalog/libraries/mobile/ios/quickstart.md b/src/connections/sources/catalog/libraries/mobile/ios/quickstart.md index 73b1f131a7..f976bd00e1 100644 --- a/src/connections/sources/catalog/libraries/mobile/ios/quickstart.md +++ b/src/connections/sources/catalog/libraries/mobile/ios/quickstart.md @@ -26,7 +26,7 @@ When you create a Source in the Segment web app, it tells the Segment servers th ## Step 2: Install the SDK -Segment recommends you install Analytics for iOS by using either [Cocoapods](http://cocoapods.org/) or your Swift Package Manager. These allow you to create a build with specific bundled destinations, and they have a simplified installation and upgrading process. +Segment recommends you install Analytics-iOS by using either [CocoaPods](http://cocoapods.org/){:target="_blank"} or your Swift Package Manager. These allow you to create a build with specific bundled destinations, and they have a simplified installation and upgrading process. ### Install the SDK using Swift Package Manager @@ -234,4 +234,4 @@ Analytics.shared().flush() ## What's Next? -We just walked through the quickest way to get started with Segment using Analytics for iOS. You might also want to check out our full [Analytics for iOS reference](/docs/connections/sources/catalog/libraries/mobile/ios) to see what else is possible, or read about the [Tracking API methods](/docs/connections/sources/catalog/libraries/server/http-api/) to get a sense for the bigger picture. +We just walked through the quickest way to get started with Segment using Analytics-iOS. You might also want to check out our full [Analytics-iOS reference](/docs/connections/sources/catalog/libraries/mobile/ios) to see what else is possible, or read about the [Tracking API methods](/docs/connections/sources/catalog/libraries/server/http-api/) to get a sense for the bigger picture. diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adjust-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adjust-kotlin-android.md index 937bd13b25..e819892a5b 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adjust-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adjust-kotlin-android.md @@ -2,7 +2,7 @@ title: Analytics Kotlin Adjust Plugin strat: kotlin-android --- -[Adjust](https://adjust.com){:target="_blank"} is the mobile attribution provider of choice for hundreds of organizations across the globe. They unify all your marketing activities into one powerful platform, giving you the insights you need to scale your business. The Adjust Destination is open-source. You can browse the code on GitHub [here](https://github.com/segmentio/analytics-kotlin). +[Adjust](https://adjust.com){:target="_blank"} is the mobile attribution provider of choice for hundreds of organizations across the globe. They unify all your marketing activities into one powerful platform, giving you the insights you need to scale your business. The Adjust Destination is open-source. You can browse the code on GitHub in the [@segmentio/analytics-kotlin](https://github.com/segmentio/analytics-kotlin){:target="_blank”} repository. ## Getting started diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adobe-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adobe-kotlin-android.md index 80365d5cac..dc134cf17c 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adobe-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/adobe-kotlin-android.md @@ -4,7 +4,7 @@ strat: adobe redirect_from: '/connections/destinations/catalog/omniture/' id: 5783cec280412f644ff14226 --- -After you enable Adobe Analytics (formerly known as Omniture or Sitecatalyst) in Segment, you can start sending data from any of the Segment [libraries](/docs/connections/sources/catalog/) to an Adobe report suite. When you send events from Segment's mobile SDKs or Cloud-mode libraries, Segment translates that data using a mapping that you configure, and then passes it to the Adobe Analytics [Data Insertion API](https://docs.adobe.com/content/help/en/analytics/import/c-data-insertion-api.html){:target="_blank”}. For more information, you can browse the code on GitHub [here](https://github.com/segment-integrations/analytics-kotlin-adobe-analytics). +After you enable Adobe Analytics (formerly known as Omniture or Sitecatalyst) in Segment, you can start sending data from any of the Segment [libraries](/docs/connections/sources/catalog/) to an Adobe report suite. When you send events from Segment's mobile SDKs or Cloud-mode libraries, Segment translates that data using a mapping that you configure, and then passes it to the Adobe Analytics [Data Insertion API](https://docs.adobe.com/content/help/en/analytics/import/c-data-insertion-api.html){:target="_blank”}. For more information, you can browse the code on GitHub in the [@segment-integrations/analytics-kotlin-adobe-analytics](https://github.com/segment-integrations/analytics-kotlin-adobe-analytics){:target="_blank”} repository. ## Planning for Adobe Analytics diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/appsflyer-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/appsflyer-kotlin-android.md index 117f1c721c..f8a94881ba 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/appsflyer-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/appsflyer-kotlin-android.md @@ -82,7 +82,7 @@ Segment includes all the event properties as callback parameters on the AppsFlye ## Install Attributed -Segment will automatically trigger an `Install Attributed` event if you have **trackAttributionData** enabled in your settings, and the Segment-AppsFlyer integration installed in your app. The event payload will adhere to the `Install Attributed` event specification documented [here](/docs/connections/spec/mobile/#install-attributed) and will propagate to your other downstream destinations. +Segment will automatically trigger an `Install Attributed` event if you have **trackAttributionData** enabled in your settings, and the Segment-AppsFlyer integration installed in your app. The event payload will adhere to the `Install Attributed` event specification documented [in the Spec: Mobile](/docs/connections/spec/mobile/#install-attributed) docs and will propagate to your other downstream destinations. This logic depends on the Appsflyer `AppsFlyerConversionListener` [interface](https://dev.appsflyer.com/hc/docs/android-sdk-reference-appsflyerconversionlistener){:target="_blank"}, and will only send when Appsflyer detects an install. diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/braze-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/braze-kotlin-android.md index ce9264c0e5..c0f32ec09b 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/braze-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/braze-kotlin-android.md @@ -5,7 +5,7 @@ strat: kotlin-android [Braze](https://www.braze.com/), formerly Appboy, is an engagement platform that empowers growth by helping marketing teams to build customer loyalty through mobile, omni-channel customer experiences. -Braze’s destination plugin code is open source and available on GitHub. You can view it [here](https://github.com/braze-inc/braze-segment-kotlin){:target="_blank"}. This destination plugin is maintained by Braze. For any issues with the destination plugin code, please reach out to Braze's support. +Braze’s destination plugin code is open source and available on GitHub. You can view it on GitHub in the [@braze-inc/braze-segment-kotlin](https://github.com/braze-inc/braze-segment-kotlin){:target="_blank"} repository. This destination plugin is maintained by Braze. For any issues with the destination plugin code, please reach out to Braze's support. ## Getting Started diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/firebase-kotlin-android.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/firebase-kotlin-android.md index 1bf9401742..ceabccc3bf 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/firebase-kotlin-android.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/firebase-kotlin-android.md @@ -148,4 +148,4 @@ Firebase is Google's recommended method for reporting conversions to Adwords. To ### Troubleshooting -Firebase has great logging. If you are having any issues, you can enable debug mode as outlined [here](https://firebase.google.com/docs/analytics/debugview). \ No newline at end of file +Firebase has great logging. If you are having any issues, you can enable debug mode as outlined [in Google'd Debug view](https://firebase.google.com/docs/analytics/debugview){:target="_blank”} documentation. \ No newline at end of file diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/implementation.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/implementation.md index 372eff3a40..947e31d518 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/implementation.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/implementation.md @@ -1,5 +1,5 @@ --- -title: Analytics for Kotlin Implementation Guide +title: Analytics-Kotlin Implementation Guide strat: kotlin-android tags: - android diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/index.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/index.md index 12c1a43328..fea5f89276 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/index.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/index.md @@ -1,5 +1,5 @@ --- -title: 'Analytics for Kotlin (Android)' +title: 'Analytics-Kotlin (Android)' strat: kotlin-android redirect_from: - '/connections/sources/catalog/cloud-apps/kotlin/' @@ -167,7 +167,7 @@ Once you've installed the mobile or server Analytics Kotlin library, you can sta ### 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. -
Segment offers support for two different types of Destinations, learn more about the differences between the two [here](). +
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).
@@ -190,7 +190,7 @@ Destinations are the business tools or apps that Segment forwards your data to. ## Tools and extensions -Analytics for Kotlin is built with extensibility in mind. Use the tools list below to improve data collection. +Analytics-Kotlin is built with extensibility in mind. Use the tools list below to improve data collection. - [Plugin architecture](https://segment.com/docs/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/) - [Typewriter](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-typewriter) diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-destination-filters.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-destination-filters.md index 9becb311bf..7b83cf3b75 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-destination-filters.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-destination-filters.md @@ -1,5 +1,5 @@ --- -title: Analytics for Kotlin Destination Filters +title: Analytics-Kotlin Destination Filters strat: kotlin-android --- diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md index 1949ab727d..8e1f3dea68 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-faq.md @@ -1,5 +1,5 @@ --- -title: Analytics for Kotlin FAQ +title: Analytics-Kotlin FAQ strat: kotlin-android --- diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-plugin-architecture.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-plugin-architecture.md index b93b3f3922..719cf160e9 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-plugin-architecture.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-plugin-architecture.md @@ -1,5 +1,5 @@ --- -title: Analytics for Kotlin Plugin Architecture +title: Analytics-Kotlin Plugin Architecture strat: kotlin-android --- diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-samples.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-samples.md index 32809c4782..97870e04e9 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-samples.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-samples.md @@ -1,5 +1,5 @@ --- -title: Analytics for Kotlin Code Samples +title: Analytics-Kotlin Code Samples strat: swift --- diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-typewriter.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-typewriter.md index f8cd366a13..43080864d0 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-typewriter.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/kotlin-android-typewriter.md @@ -1,5 +1,5 @@ --- -title: Analytics for Kotlin Typewriter +title: Analytics-Kotlin Typewriter strat: kotlin-android --- [Typewriter](https://github.com/segmentio/typewriter) is a tool for generating strongly-typed Segment analytics libraries based on your pre-defined [Tracking Plan](/docs/protocols/tracking-plan) spec. diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md index 4b1a62e2be..a8ffb572f8 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md @@ -1,5 +1,5 @@ --- -title: Analytics for Kotlin Migration Guide +title: Analytics-Kotlin Migration Guide strat: kotlin-android tags: - android @@ -386,7 +386,7 @@ If you don't need to transform all of your Segment calls, and only want to trans ## 4. Upgrade Notes > info "You might need to call Identify as a one-off after migrating to Kotlin" -> To preserve the userId for users identified prior to your migration to Kotlin, you must make a one-off Identify call. This is due to a storage format change between the Analytics for Android and Analytics-Kotlin libraries. +> To preserve the userId for users identified prior to your migration to Kotlin, you must make a one-off Identify call. This is due to a storage format change between the Analytics-Android and Analytics-Kotlin libraries. ### 4.a) Changes to the Configuration Object diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/adjust-react-native.md b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/adjust-react-native.md index 6f7ce4f2c0..896fa863aa 100644 --- a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/adjust-react-native.md +++ b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/adjust-react-native.md @@ -3,7 +3,7 @@ title: Analytics React Native Adjust Plugin strat: react-native --- -[Adjust](https://adjust.com){:target="_blank"} is the mobile attribution provider of choice for hundreds of organizations across the globe. They unify all your marketing activities into one powerful platform, giving you the insights you need to scale your business. The Adjust Destination is open-source. You can browse the code on GitHub [here](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-adjust). +[Adjust](https://adjust.com){:target="_blank"} is the mobile attribution provider of choice for hundreds of organizations across the globe. They unify all your marketing activities into one powerful platform, giving you the insights you need to scale your business. The Adjust Destination is open-source. You can browse the code on GitHub in the [@segmentio/analytics-react-native](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-adjust){:target="_blank”} repository. ## Getting started diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/appsflyer-react-native.md b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/appsflyer-react-native.md index c0854f399f..3092eaeee2 100644 --- a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/appsflyer-react-native.md +++ b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/appsflyer-react-native.md @@ -105,7 +105,7 @@ Finally, Segment uses AppsFlyer's `transactionId` deduplication when you send an ## Install Attributed -Segment will automatically trigger an `Install Attributed` event if you have **trackAttributionData** enabled in your settings, and the Segment-AppsFlyer integration installed in your app. The event payload will adhere to the `Install Attributed` event specification documented [here](/docs/connections/spec/mobile/#install-attributed) and will propagate to your other downstream destinations. +Segment will automatically trigger an `Install Attributed` event if you have **trackAttributionData** enabled in your settings, and the Segment-AppsFlyer integration installed in your app. The event payload will adhere to the `Install Attributed` event specification documented [in the Spec: Mobile](/docs/connections/spec/mobile/#install-attributed) docs and will propagate to your other downstream destinations. ### Revenue Tracking diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/braze-middleware-react-native.md b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/braze-middleware-react-native.md index 7ce0a62111..eab35ec3ff 100644 --- a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/braze-middleware-react-native.md +++ b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/braze-middleware-react-native.md @@ -5,9 +5,9 @@ strat: react-native [Braze](https://www.braze.com/){:target="_blank"}, formerly Appboy, is an engagement platform that empowers growth by helping marketing teams to build customer loyalty through mobile, omni-channel customer experiences. -Braze’s middleware plugin code is open source and available on GitHub. You can view it [here](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-braze-middleware){:target="_blank"}. +Braze’s middleware plugin code is open source and available on GitHub. You can view it on GitHub in the [@segmentio/analytics-react-native](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-braze-middleware){:target="_blank"}. -The Braze middleware plugin is a `BeforePlugin` used to debounce `identify` events for [Braze](https://www.braze.com). This Plugin should be used with a [Cloud Mode](/docs/connections/destinations/#connection-modes) connection to Braze. To connect to Braze with a Device Mode connection use the [Braze Destination Plugin](https://www.npmjs.com/package/@segment/analytics-react-native-plugin-braze) instead. It is not possible to use both plugins in one `Analytics React Native` instance. +The Braze middleware plugin is a `BeforePlugin` used to debounce `identify` events for [Braze](https://www.braze.com){:target="_blank"}. This Plugin should be used with a [Cloud Mode](/docs/connections/destinations/#connection-modes) connection to Braze. To connect to Braze with a Device Mode connection use the [Braze Destination Plugin](https://www.npmjs.com/package/@segment/analytics-react-native-plugin-braze){:target="_blank"} instead. It is not possible to use both plugins in one `Analytics React Native` instance. ## Installation @@ -24,7 +24,7 @@ yarn add @segment/analytics-react-native-plugin-braze-middleware ``` ## Usage -Follow the [instructions for adding plugins](https://github.com/segmentio/analytics-react-native#adding-plugins) on the main Analytics client: +Follow the [instructions for adding plugins](https://github.com/segmentio/analytics-react-native#adding-plugins){:target="_blank"} on the main Analytics client: In your code where you initialize the analytics client call the `.add(plugin)` method with an `BrazeMiddlewarePlugin` instance: diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/firebase-react-native.md b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/firebase-react-native.md index 463288f198..bc065aca90 100644 --- a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/firebase-react-native.md +++ b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/firebase-react-native.md @@ -4,7 +4,7 @@ strat: react-native --- Firebase is Google's platform for mobile apps. The Segment Firebase destination requires that you bundle the Firebase SDK with your project. The Segment-wrapped destination code then runs on the user's device, and sends its tracking calls to the Firebase API endpoints, and a copy to Segment for archiving. -Firebase’s destination plugin code is open source and available on GitHub. You can view it [here](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-firebase). +Firebase’s destination plugin code is open source and available on GitHub. You can view it in the [@segmentio/analytics-react-native](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-firebase){:target="_blank"} repository. ## Adding the dependency @@ -134,4 +134,4 @@ Firebase is Google's recommended method for reporting conversions to Adwords. To ### Troubleshooting -Firebase has great logging. If you are having any issues, you can enable debug mode as outlined [here](https://firebase.google.com/docs/analytics/debugview). +Firebase has great logging. If you are having any issues, you can enable debug mode as outlined [in Google's Debug view docs](https://firebase.google.com/docs/analytics/debugview){:target="_blank"}. diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md index 799b68cab2..30fa0347bc 100644 --- a/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md +++ b/src/connections/sources/catalog/libraries/mobile/react-native/destination-plugins/mixpanel-react-native.md @@ -234,4 +234,4 @@ If you're testing in Xcode remember you must first background the app, then the If an `ip` property is passed to Mixpanel, the value will be interpreted as the IP address of the request and therefore automatically parsed into Mixpanel geolocation properties (City, Country, Region). After that IP address has been parsed, they will throw out the IP address and only hold onto those resulting geolocation properties. As such, if you want to display an IP address as a property within the Mixpanel UI or within raw data, you will simply want to slightly modify the naming convention for that property. -Instead of `ip`, you can use a property name of `user IP` or `IP Address` (whatever is most clear for your implementation). This way, Mixpanel won't automatically interpret the IP address as an IP address, and instead store that value as a property on the event. You can read more [here](https://mixpanel.com/help/reference/http#tracking-events){:target="_blank"}. \ No newline at end of file +Instead of `ip`, you can use a property name of `user IP` or `IP Address` (whatever is most clear for your implementation). This way, Mixpanel won't automatically interpret the IP address as an IP address, and instead store that value as a property on the event. You can read more in Mixpanel's [Import Events](https://mixpanel.com/help/reference/http#tracking-events){:target="_blank"} documentation. \ No newline at end of file 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 f8625b0d85..c0a0ce9a87 100644 --- a/src/connections/sources/catalog/libraries/mobile/react-native/index.md +++ b/src/connections/sources/catalog/libraries/mobile/react-native/index.md @@ -92,7 +92,7 @@ These are the options you can apply to configure 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 [here](/docs/connections/sources/catalog/libraries/mobile/react-native/react-native-plugin-architecture/). +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. ```js import { createClient } from '@segment/analytics-react-native'; @@ -203,7 +203,7 @@ Once you've installed the Analytics React Native library, you can start collecti ## 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. -
Segment offers support for two different types of Destinations, learn more about the differences between the two [here](). +
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 diff --git a/src/connections/sources/catalog/libraries/server/csharp/index.md b/src/connections/sources/catalog/libraries/server/csharp/index.md index f034bf4982..70a581dc83 100644 --- a/src/connections/sources/catalog/libraries/server/csharp/index.md +++ b/src/connections/sources/catalog/libraries/server/csharp/index.md @@ -35,7 +35,7 @@ To get started with the Analytics-CSharp library: 1. Create a Source in Segment. 1. Go to **Connections > Sources > Add Source**. 2. Search for *Xamarin, Unity, or .NET* (whichever source you want to use) and click **Add Source**. **Note:** There is no CSharp source. To use Analytics-CSharp, use either Xamarin, Unity, or .NET as your source. -2. Add the Analytics dependency to your project. Analytics-CSharp is distributed through NuGet. Check other installation options [here](https://www.nuget.org/packages/Segment.Analytics.CSharp/). +2. Add the Analytics dependency to your project. Analytics-CSharp is distributed through NuGet. Check other installation options on the Segment.Analytics.CSharp [NuGet page](https://www.nuget.org/packages/Segment.Analytics.CSharp/){:target="_blank"}. ``` dotnet add package Segment.Analytics.CSharp --version @@ -415,9 +415,9 @@ class FlushOnScreenEventsPolicy : IFlushPolicy ## Handling Errors You can handle analytics client errors through the `analyticsErrorHandler` option. -The error handler configuration requires an instance that implements `IAnalyticsErrorHandler` which will get called whenever an error happens on the analytics client. It will receive a general `Exception`, but you can check if the exception is a type of `AnalyticsError` and converts to get more info about the error. Checkout [here](https://github.com/segmentio/Analytics-CSharp/blob/main/Analytics-CSharp/Segment/Analytics/Errors.cs#L77) to see a full list of error types that analytics throws. +The error handler configuration requires an instance that implements `IAnalyticsErrorHandler` which will get called whenever an error happens on the analytics client. It will receive a general `Exception`, but you can check if the exception is a type of `AnalyticsError` and converts to get more info about the error. Check out [the @segmentio/Analytics-CSharp](https://github.com/segmentio/Analytics-CSharp/blob/main/Analytics-CSharp/Segment/Analytics/Errors.cs#L77){:target="_blank"} repository to see a full list of error types that analytics throws. -You can use this error handling to trigger different behaviours in the client when a problem occurs. For example if the client gets rate limited you could use the error handler to swap flush policies to be less aggressive: +You can use this error handling to trigger different behaviors in the client when a problem occurs. For example if the client gets rate limited you could use the error handler to swap flush policies to be less aggressive: ```csharp class NetworkErrorHandler : IAnalyticsErrorHandler diff --git a/src/connections/sources/catalog/libraries/server/kotlin/index.md b/src/connections/sources/catalog/libraries/server/kotlin/index.md index 17d1a036c4..449cd79a44 100644 --- a/src/connections/sources/catalog/libraries/server/kotlin/index.md +++ b/src/connections/sources/catalog/libraries/server/kotlin/index.md @@ -1,5 +1,5 @@ --- -title: Analytics for Kotlin (Server) +title: Analytics-Kotlin (Server) redirect_from: - '/connections/sources/catalog/cloud-apps/kotlin/' id: yMu7LRR59b diff --git a/src/connections/sources/catalog/libraries/server/object-api/index.md b/src/connections/sources/catalog/libraries/server/object-api/index.md index b1dc344ca4..e9c0f7a972 100644 --- a/src/connections/sources/catalog/libraries/server/object-api/index.md +++ b/src/connections/sources/catalog/libraries/server/object-api/index.md @@ -195,7 +195,7 @@ Client.Set(*objects.Object{ Client.Close() ``` -View the Objects-go library on GitHub [here](https://github.com/segmentio/objects-go){:target="_blank"}. +View the Objects-go library on GitHub in the [@segmentio/objects-go](https://github.com/segmentio/objects-go){:target="_blank"} repository. Here is a `curl` example of how to get started: diff --git a/src/connections/sources/catalog/libraries/server/python/index.md b/src/connections/sources/catalog/libraries/server/python/index.md index ac0b205dfe..8e00f08b37 100644 --- a/src/connections/sources/catalog/libraries/server/python/index.md +++ b/src/connections/sources/catalog/libraries/server/python/index.md @@ -156,7 +156,7 @@ The Page call has the following fields: | `user_id` _string | The ID for the user that is a part of the group. | | `category` _string, optional_ | The category of the page. Useful for industries, like ecommerce, where many pages often live under a larger category. | | `name` _string, optional_ | The name of the page, for example **Signup** or **Home**. | -| `properties` _dict, optional_ | The page properties. To see a reference of reserved page properties, see the spec [here](/docs/connections/spec/page/#properties). | +| `properties` _dict, optional_ | The page properties. To see a reference of reserved page properties, see the [Spec: Page](/docs/connections/spec/page/#properties) documentation. | | `context` _dict, optional_ | A dict containing any context about the request. To see the full reference of supported keys, check them out in the [context reference](/docs/connections/spec/common/#context) | | `timestamp` _datetime, optional_ | A `datetime` object representing when the Page took place. This is most useful if you're importing historical data. If the Page just happened, leave it blank to use the server's time. | | `anonymous_id` _string or int, optional_ | An anonymous session ID for this user. | diff --git a/src/connections/sources/catalog/libraries/website/javascript/custom-proxy.md b/src/connections/sources/catalog/libraries/website/javascript/custom-proxy.md index 27e024a067..4228ee3bdc 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/custom-proxy.md +++ b/src/connections/sources/catalog/libraries/website/javascript/custom-proxy.md @@ -36,7 +36,7 @@ You need to set up two important parts, regardless of the CDN provider you use: > If you are using a [Regional Workspace](/docs/guides/regional-segment/#client-side-sources), please note that instead of using `api.segment.io` to proxy the Tracking API, you'll be using `events.eu1.segmentapis.com` > info "" -> Segment only has the ability to enable the proxy setting for the Web (Analytics.js) source. Details for mobile source proxies are in the [Analytics for iOS](/docs/connections/sources/catalog/libraries/mobile/ios/#proxy-https-calls) and [Analytics for Android](/docs/connections/sources/catalog/libraries/mobile/android/#proxying-http-calls) documentation. It is not currently possible to set up a proxy for server sources using the Segment UI. +> Segment only has the ability to enable the proxy setting for the Web (Analytics.js) source. Details for mobile source proxies are in the [Analytics-iOS](/docs/connections/sources/catalog/libraries/mobile/ios/#proxy-https-calls) and [Analytics-Android](/docs/connections/sources/catalog/libraries/mobile/android/#proxying-http-calls) documentation. It is not currently possible to set up a proxy for server sources using the Segment UI. ## Custom Proxy setup diff --git a/src/connections/sources/catalog/libraries/website/javascript/index.md b/src/connections/sources/catalog/libraries/website/javascript/index.md index d2af9e4879..629c1fa5de 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/index.md +++ b/src/connections/sources/catalog/libraries/website/javascript/index.md @@ -513,7 +513,7 @@ Destination flags are **case sensitive** and match [the destination's name in th ### Load options > info "" -> **Note:** To use this feature, you must be on snippet version 4.1.0 or later. You can get the latest version of the snippet [here](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet). +> **Note:** To use this feature, you must be on snippet version 4.1.0 or later. You can get the latest version of the snippet from the [Analytics.js Quickstart](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet). You can modify the `.load` method in Analytics.js (the second line of the snippet) to take a second argument. If you pass an object with an `integrations` dictionary, then Segment only loads the integrations in that dictionary that are marked as enabled with the boolean value `true`. @@ -936,7 +936,7 @@ Bundle the destinations you want loaded from [npm](https://www.npmjs.com/package }) ``` - Pass in the destination plugin to the added config option called `plugins`. A list of all action destination packages can be found [here](https://github.com/segmentio/action-destinations/blob/main/packages/destinations-manifest/package.json){:target="_blank"}. + Pass in the destination plugin to the added config option called `plugins`. A list of all action destination packages can be found on GitHub in the [@segmentio/action-destinations](https://github.com/segmentio/action-destinations/blob/main/packages/destinations-manifest/package.json){:target="_blank"} repository. * To add classic destinations from npm: diff --git a/src/connections/sources/catalog/libraries/website/javascript/supported-browsers.md b/src/connections/sources/catalog/libraries/website/javascript/supported-browsers.md index 1c4f8118d3..a0d1eb8f88 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/supported-browsers.md +++ b/src/connections/sources/catalog/libraries/website/javascript/supported-browsers.md @@ -22,7 +22,7 @@ The library is regularly tested and is functional with the following browsers: Segment guarantees support for Internet Explorer 11 and later for Analytics.js. Remember that different bundled (device-mode) destinations might have different compatibility guarantees for their own products. Refer to the vendor's documentation to confirm browser compatibility. -If you need to support older versions of Internet Explorer or Opera, Segment recommends you to either load a polyfill script in the head as shown [here](https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.7.0/polyfill.min.js){:target="_blank"}, or use the analytics-next npm package and polyfill bundle as shown in [Babel](https://babeljs.io/docs/babel-preset-env){:target="_blank"}. +If you need to support older versions of Internet Explorer or Opera, Segment recommends you to either load a polyfill script in the head as shown [in this code snippet](https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.7.0/polyfill.min.js){:target="_blank"}, or use the analytics-next npm package and polyfill bundle as shown in [Babel](https://babeljs.io/docs/babel-preset-env){:target="_blank"}. > info "" > Classic destinations and Analytics.js support Internet Explorer 11, but some Actions destinations are not yet supported. diff --git a/src/connections/sources/custom-domain.md b/src/connections/sources/custom-domain.md index f0fc7e11e0..a4a265190d 100644 --- a/src/connections/sources/custom-domain.md +++ b/src/connections/sources/custom-domain.md @@ -54,20 +54,31 @@ To configure Custom Domain: - **Is the domain name enabled for Content Policy**: Select either Yes or No. You are not required to create a Content Policy prior to requesting Custom Domain. - **Description**: Enter an optional description for your service request. If you are requesting Custom Domain for multiple workspaces, enter any additional workspace slugs and source names into this field. 4. Segment provides you with a list of nameservers you should add to your DNS. Once you receive the nameservers from Segment, update your DNS. -5. After you've updated your DNS, Segment verifies that you've made all required updates and then provides you with two custom domains, one for the Tracking API and a second for your CDN. -6. Update your JavaScript snippet to reference the new subdomains or use the new Tracking API custom domain as your endpoint for server library sources. +5. After you've updated your DNS, Segment verifies that you've made all required updates and then provides you with two custom domains, one for the Tracking API and a second for your CDN. +6. Once Custom Domain is enabled for your workspace, the Segment app generates a new JavaScript source code snippet for your Analytics.js sources. Copy and paste this snippet into the header of your website. You can also use the subdomain provided for the Tracking API as the new endpoint for your server library sources. ## FAQ ### What sources can I use with Custom Domain? Custom Domain was largely developed to support JavaScript sources. It helps with comprehensive collection of first-party data from your website when accessed over any platform (desktop, mobile, and more). You can use the subdomain for all other non-JavaScript sources as well, for consistency, but it will have no impact on data collection for those sources. -Once Custom Domain is enabled for your workspace, the Segment app generates a new JavaScript source code snippet for you to copy-paste into the header of your website. For non-JavaScript sources, you can use the sub-domain as an endpoint when using the Tracking API. +### How can I configure non-JavaScript sources to use Custom Domain? -### Is this a fully-managed solution? What servers or infrastructure do I need to set up on my side for this proxy? -Yes, Custom Domain is a fully-managed solution. +For non-Analytics.js sources, you’ll need to update your implementation to use the subdomain as an endpoint when using the Tracking API. For example: + +- **Server Sources**: When sending data from server-side implementations, use the `host` configuration parameter to send data to your subdomain instead of the default Segment domain. +- **Mobile Sources**: When sending data from mobile implementations, use the `apiHost` configuration parameter to send data to your subdomain instead of the default Segment domain. + +### Is there a benefit in migrating server-side sources over to client-side with Custom Domain? +Server-side tracking is generally more reliable than client-side tracking. For example, when tracking data client-side, you might lose data when users might block all cookies or use tools that interfere with network requests leaving the browser. + +For business-critical events, Segment recommends server-side data tracking. This approach means that your data is less susceptible to disruptions from client-side variables, which can result in more accurate and reliable tracking. -You must be able to delegate a DNS subdomain to Segment and add the name servers Segment provides to your DNS. + +### Is this a fully-managed solution? What servers or infrastructure do I need to set up on my side for this proxy? +Yes, Custom Domain is a fully-managed solution. However, you must set up the following infrastructure on your end: +- Delegate a DNS subdomain to Segment +- Add the name servers Segment provides to your DNS First, decide on your subdomain and then delegate it to Segment. Segment then asks you to add a DNS NS record to your DNS with specific values to complete the DNS delegation. From there on, Segment fully manages the infrastructure for serving Analytics.js and ingesting events data through the subdomain. @@ -83,3 +94,7 @@ Segment also uses AWS Certificate Manager (ACM) to manage and renew certificates Yes, Custom Domain allows Segment to rename `window.analytics` to a unique name to avoid being blocked by some ad blocking software. Customers who have access to the Custom Domain feature can rename analytics to `/.js` by choosing an Alias for Analytics.js within the source settings that are available after the workspace is enabled for Custom Domain. + +### What happens to the Analytics.js cookies already set on the user's browser prior to a Custom Domain implementation? +Analytics.js cookies are not lost in the transition to Custom Domain. When users revisit your website, the previous Analytics.js cookies continue to be fetched and added to events, if available. + diff --git a/src/connections/sources/plugins/vimeo/index.md b/src/connections/sources/plugins/vimeo/index.md index 02c3a8442f..49fc1919d7 100644 --- a/src/connections/sources/plugins/vimeo/index.md +++ b/src/connections/sources/plugins/vimeo/index.md @@ -8,7 +8,7 @@ With the analytics.js Vimeo Plugin you can easily collect Vimeo player events in ## Getting Started To use the plugin you must first generate an Access Token in Vimeo. The plugin uses this token to access metadata about the video content being played. -Vimeo provides documentation outlining this process [here](https://developer.vimeo.com/api/start#getting-started-step1). Make sure you are carefully selecting your access scopes! The plugin only needs to read information about your video(s). +Vimeo provides documentation outlining this process in the Vimeo [The Basics](https://developer.vimeo.com/api/start#getting-started-step1){:target="_blank"} documentation. Make sure you are carefully selecting your access scopes. The plugin only needs to read information about your video(s). ### 1. Enable diff --git a/src/connections/sources/visual-tagger.md b/src/connections/sources/visual-tagger.md index db77c90e0b..0981f65c78 100644 --- a/src/connections/sources/visual-tagger.md +++ b/src/connections/sources/visual-tagger.md @@ -105,7 +105,7 @@ When you click on an element on your website, a window appears where you can ent Segment recommends that you use an "Object Action" format (for example, `Blog Post Clicked`, and use Title Case (capitalize the first letter of each word ) when naming events. 2. **Properties**. Add properties to the event to add contextual information about the action that the user took. Properties are optional, but they are very helpful when you analyze events data later. - - Use `snake_case` for property names (all lowercase, with spaces between words represented as an underscore “_”). For a guide on event naming best practices, check out the Docs [here](/docs/protocols/tracking-plan/best-practices/#formalize-your-naming-and-collection-standards). + - Use `snake_case` for property names (all lowercase, with spaces between words represented as an underscore “_”). For a guide on event naming best practices, check out the Protocols [docs](/docs/protocols/tracking-plan/best-practices/#formalize-your-naming-and-collection-standards). - Check the [list of properties that are collected by default](/docs/connections/spec/common/) before you add a property. 3. **Advanced**. You can also click the `` button to manually edit the CSS selector. If you didn't select the right element, you can choose the element on the page again by clicking on the finger button. diff --git a/src/connections/storage/catalog/amazon-s3/index.md b/src/connections/storage/catalog/amazon-s3/index.md index 135643060c..ac10597e3b 100644 --- a/src/connections/storage/catalog/amazon-s3/index.md +++ b/src/connections/storage/catalog/amazon-s3/index.md @@ -184,9 +184,9 @@ Segment recommends doing this as a best practice. The following policy strictly ## Region > warning "" -> The Amazon S3 destination only supports workspaces in the US region. Workspaces outside of the US can't connect to this destination. If you wish to connect to a different region use Segment's new [AWS S3 destination](https://segment.com/docs/connections/storage/catalog/aws-s3/) instead. +> The Amazon S3 destination only supports workspaces in the US region. Workspaces outside of the US can't connect to this destination. If you wish to connect to a different region use Segment's new [AWS S3 destination](/docs/connections/storage/catalog/aws-s3/) instead. -Segment infers the region of your bucket when data is copied to it, so you don't need to specify a bucket region in your configuration. If you're using VPC Endpoints for your S3 bucket, make sure you configure the endpoint in the same region as your bucket. You can find more information on this in the AWS S3 docs [here](http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints-s3.html). +Segment infers the region of your bucket when data is copied to it, so you don't need to specify a bucket region in your configuration. If you're using VPC Endpoints for your S3 bucket, make sure you configure the endpoint in the same region as your bucket. You can find more information on this in the AWS S3 docs [Gateway endpoints for Amazon S3](http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints-s3.html){:target="_blank"}. ## Custom Path Prefix @@ -197,9 +197,9 @@ To use a custom key prefix for the files in your bucket, append the path to the Segment recommends using the [AWS CLI](http://aws.amazon.com/cli/) and writing a short script to download specific days, one at a time. The AWS CLI is faster than [s3cmd](http://s3tools.org/s3cmd) because it downloads files in parallel. > info "" -> S3 transparently decompresses the files for most clients. To access the raw gzipped data you can programmatically download the file using [the AWS SDK](http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html) and setting `ResponseContentEncoding: none`. This functionality isn't available in the AWS CLI). You can also manually remove the metadata on the file (`Content-Type: text/plain` and `Content-Encoding: gzip`) through the AWS interface, which allows you to download the file as gzipped. +> S3 transparently decompresses the files for most clients. To access the raw gzipped data you can programmatically download the file using [the AWS SDK](http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html){:target="_blank"} and setting `ResponseContentEncoding: none`. This functionality isn't available in the AWS CLI. You can also manually remove the metadata on the file (`Content-Type: text/plain` and `Content-Encoding: gzip`) through the AWS interface, which allows you to download the file as gzipped. -To configure the AWS CLI, see Amazon's documentation [here](http://docs.aws.amazon.com/cli/latest/userguide/installing.html). For linux systems, run the following command: +To configure the AWS CLI, see Amazon's [Get started with the CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html){:target="_blank"} documentation. For Linux systems, run the following command: ```bash diff --git a/src/connections/storage/catalog/data-lakes/index.md b/src/connections/storage/catalog/data-lakes/index.md index 82942831a8..66cd3b5540 100644 --- a/src/connections/storage/catalog/data-lakes/index.md +++ b/src/connections/storage/catalog/data-lakes/index.md @@ -73,7 +73,7 @@ You will see event data and [sync reports](/docs/connections/storage/data-lakes/ To receive sync failure alerts by email, subscribe to the `Storage Destination Sync Failed` activity email notification within the **App Settings > User Preferences > [Notification Settings](https://app.segment.com/goto-my-workspace/settings/notifications){:target="_blank”}**. -`Sync Failed` emails are sent on the 1st, 5th, and 20th sync failure. Learn more about the types of errors which can cause sync failures [here](/docs/connections/storage/data-lakes/sync-reports/#sync-errors). +`Sync Failed` emails are sent on the 1st, 5th, and 20th sync failure. Learn more about the types of errors which can cause sync failures in Segment's [Sync errors](/docs/connections/storage/data-lakes/sync-reports/#sync-errors) docs. ### (Optional) Step 4 - Replay historical data diff --git a/src/connections/storage/warehouses/index.md b/src/connections/storage/warehouses/index.md index 59fab788e1..d4aeb540e7 100644 --- a/src/connections/storage/warehouses/index.md +++ b/src/connections/storage/warehouses/index.md @@ -23,7 +23,7 @@ Examples of data warehouses include Amazon Redshift, Google BigQuery, and Postgr
> info "Looking for the Warehouse Schemas docs?" -> They've moved! Check them out [here](schema/). +> They've moved: [Warehouse Schemas](/docs/connections/storage/warehouses/schema). {% include components/reference-button.html href="https://segment.com/academy/intro/when-to-use-sql-for-analysis/?referrer=docs" icon="media/academy.svg" title="Analytics Academy: When to use SQL for analysis" description="When your existing analytics tools can't answer your questions, it's time to level-up and use SQL for analysis." %} diff --git a/src/engage/audiences/account-audiences.md b/src/engage/audiences/account-audiences.md index 4832548f82..6c5b49dcbc 100644 --- a/src/engage/audiences/account-audiences.md +++ b/src/engage/audiences/account-audiences.md @@ -56,7 +56,7 @@ The three types of user-level conditions are: ## Account-level computed and SQL traits -Workspaces with access to account-level audiences can create account-level [computed](/docs/engage/audiences/computed-traits/) and [SQL](/docs/engage/audiences/sql-traits/) traits. All user-level computed trait types are supported (see [here](/docs/engage/audiences/computed-traits/#types-of-computed-traits) for a full list). Account-level computed traits operate on the set of events triggered by all users associated with a given account. +Workspaces with access to account-level audiences can create account-level [computed](/docs/engage/audiences/computed-traits/) and [SQL](/docs/engage/audiences/sql-traits/) traits. All user-level computed trait types are supported (see the [Types of computed traits](/docs/engage/audiences/computed-traits/#types-of-computed-traits) docs for a full list). Account-level computed traits operate on the set of events triggered by all users associated with a given account. Use-cases for account-level computed traits include: - Calculate the number of times users associated with an account logged in during the past month diff --git a/src/engage/campaigns/mobile-push/index.md b/src/engage/campaigns/mobile-push/index.md index 7bea70cce8..888283c5e3 100644 --- a/src/engage/campaigns/mobile-push/index.md +++ b/src/engage/campaigns/mobile-push/index.md @@ -209,7 +209,7 @@ The previous steps are required. For configuration options, including subscripti ### Instructions for Android -Now that you've integrated Analytics for Kotlin, follow these steps to add the Engage Plugin for Android: +Now that you've integrated Analytics-Kotlin, follow these steps to add the Engage Plugin for Android: 1. Add the following to your Gradle dependencies: diff --git a/src/getting-started/02-simple-install.md b/src/getting-started/02-simple-install.md index d6d7794f27..bb23f6898a 100644 --- a/src/getting-started/02-simple-install.md +++ b/src/getting-started/02-simple-install.md @@ -160,7 +160,7 @@ Once you add a few `track` calls, you're done with setting up Segment. You succe ### Step 1: Install the SDK
-To install Analytics for iOS, Segment recommends you to use [Cocoapods](http://cocoapods.org), because it allows you to create a build with specific bundled destinations, and because it makes it simple to install and upgrade. +To install Analytics-iOS, Segment recommends you to use [CocoaPods](http://cocoapods.org){:target="_blank"}, because it allows you to create a build with specific bundled destinations, and because it makes it simple to install and upgrade.
1) Add the `Analytics` dependency to your `Podfile` by adding the following line: diff --git a/src/guides/how-to-guides/cross-channel-tracking.md b/src/guides/how-to-guides/cross-channel-tracking.md index 5124a0f85a..1710577cf0 100644 --- a/src/guides/how-to-guides/cross-channel-tracking.md +++ b/src/guides/how-to-guides/cross-channel-tracking.md @@ -91,7 +91,7 @@ UTM parameters are types of query strings added to the end of a URL. When clicke ![Diagram showing how different UTM parameters redirect to your site and then are displayed in Traffic analytics.](images/x-channel_GWqnp2I6.png) -UTM parameters are only used when linking to your site from outside of your domain. When a visitor arrives to your site using a link containing UTM parameters, Segment's client-side analytics.js library will automatically parse the URL's query strings, and store them within the `context` object as outlined [here](/docs/connections/spec/common/#context-fields-automatically-collected). These parameters do not persist to subsequent calls unless you pass them explicitly. +UTM parameters are only used when linking to your site from outside of your domain. When a visitor arrives to your site using a link containing UTM parameters, Segment's client-side analytics.js library will automatically parse the URL's query strings, and store them within the `context` object as outlined in the [Spec: Common](/docs/connections/spec/common/#context-fields-automatically-collected) docs. These parameters do not persist to subsequent calls unless you pass them explicitly. UTM parameters contain three essential components: diff --git a/src/guides/usage-and-billing/startup-program.md b/src/guides/usage-and-billing/startup-program.md index 3d648f818b..1a0eff242d 100644 --- a/src/guides/usage-and-billing/startup-program.md +++ b/src/guides/usage-and-billing/startup-program.md @@ -16,7 +16,7 @@ The Segment Startup Program includes three components: - Partner **Startup Deals** - Segment partners with other technology companies that offer valuable tools for startups to offer exclusive deals and promotions from marketing, data warehouse, and analytics tools. - **Startup Resources** - Segment offers learning materials on topics like analytics, product-market fit, and more for founders to become experts on data analytics and making the most of Segment's technology. -Interested companies can apply [here](http://segment.com/industry/startups). +Interested companies can apply on the [Startup Program](http://segment.com/industry/startups){:target="_blank”} site. *Can vary based on affiliated accelerator and VC partners. @@ -45,7 +45,7 @@ If you go over the total credit applied, you will be charged for the additional Once you've used your total credits, you might be eligible to renew for another year at a discounted rate. Otherwise, we can talk about options for upgrading your plan. **How do I get the startup partner deals?** -Once you've been accepted to the Segment Startup Program, you can apply for the partner deals using [this form](http://bit.ly/segment-deal-redeem). (You can view a list of the available deals [here](https://bit.ly/segment-partner-deals).) +Once you've been accepted to the Segment Startup Program, you can apply for the partner deals using [this Airtable form](http://bit.ly/segment-deal-redeem){:target="_blank”}. (You can view a list of the available deals [in a section of the Airtable form](https://bit.ly/segment-partner-deals){:target="_blank”}.) **How do I know if my accelerator/incubator/VC firm has a relationship with Segment?** Ask your program manager to see if they participate in the Segment Startup Program. If they do not, you can request that they [apply to become a partner](https://airtable.com/shr84MIvVo4k8xbaO){:target="_blank"}. diff --git a/src/guides/usage-and-billing/twilio-developer-plan.md b/src/guides/usage-and-billing/twilio-developer-plan.md index 8817a5f465..01fdea35f5 100644 --- a/src/guides/usage-and-billing/twilio-developer-plan.md +++ b/src/guides/usage-and-billing/twilio-developer-plan.md @@ -22,7 +22,7 @@ Need more destinations or more MTUs? Upgrade to the [Team Plan](https://segment. ## How do I qualify for the Twilio Developer Plan? -You must have an active Twilio account to sign up for the Twilio Developer Plan. Active Twilio users can sign up for the Twilio Developer Plan [here](https://www.segment.com/twilio-developer-plan). +You must have an active Twilio account to sign up for the Twilio Developer Plan. Active Twilio users can sign up for the Twilio Developer Plan [on Segment's website](https://www.segment.com/twilio-developer-plan){:target="_blank”}. ## What is a data source? @@ -51,8 +51,8 @@ For more information about Monthly Tracked Users, see [What is an MTU?](/docs/gu If you exceed the 10,000 MTU limit once in a 6-month period, Segment locks access to your account, but data still flows through Segment. To unlock your account, you can choose from these options: - **Option 1**: Wait for a full billing cycle (1 month) to go by without any overages. Segment unlocks your account if the MTU numbers reduce on their own. -- **Option 2**: Upgrade to the [Team plan](https://segment.com/pricing/). This starts a 2-week free trial that gives you 14 days to fix your implementation to decrease the traffic. -- **Option 3:** Upgrade to a [Business plan](https://segment.com/pricing/). Business plans are custom built for customers and typically have higher MTU limits than Team plans. [Click here](https://segment.com/demo) to schedule time with a Segment representative to see if a Business plan is a good fit for you. +- **Option 2**: Upgrade to the [Team plan](https://segment.com/pricing/){:target="_blank”}. This starts a 2-week free trial that gives you 14 days to fix your implementation to decrease the traffic. +- **Option 3:** Upgrade to a [Business plan](https://segment.com/pricing/){:target="_blank”}. Business plans are custom built for customers and typically have higher MTU limits than Team plans. [Schedule time with a Segment representative](https://segment.com/demo){:target="_blank”} to see if a Business plan is a good fit for you. If you exceed the 10,000 MTU limit twice in a 6-month period, Segment locks access to your account and also stops sending and receiving data. You can unlock your account by following option 2 or 3 above to upgrade your plan. diff --git a/src/partners/destinations/index.md b/src/partners/destinations/index.md index ffc007b34b..de47dd7d8d 100644 --- a/src/partners/destinations/index.md +++ b/src/partners/destinations/index.md @@ -17,7 +17,7 @@ Sign up for the [Segment Select Partner Program](https://segment.com/partners/in Before you begin development, consider the following points: -1. Decide the type of destination you want to build. Developer Center supports building cloud-mode and device-mode web destinations. Segment recommends building a cloud-mode destination, because data is sent to Segment prior to going to your API, so customers can take advantage of Segment features like filters, transformations, and replays. You can learn more [here](https://segment.com/docs/connections/destinations/#connection-modes). Developer Center does not support building device-mode mobile destinations. Segment recommends building a plugin to get information like session ID from the device. +1. Decide the type of destination you want to build. Developer Center supports building cloud-mode and device-mode web destinations. Segment recommends building a cloud-mode destination, because data is sent to Segment prior to going to your API, so customers can take advantage of Segment features like filters, transformations, and replays. You can learn more in the [Connection Modes](/docs/connections/destinations/#connection-modes) documentation. Developer Center does not support building device-mode mobile destinations. Segment recommends building a plugin to get information like session ID from the device. 2. Spec out the integration. If you want some guidance, you can use this [template](https://docs.google.com/document/d/1dIJxYge9N700U9Nhawapy25WMD8pUuey72S5qo3uejA/edit#heading=h.92w309fjzhti){:target="_blank"}, which will prompt you to think about the connection mode of the destination, the method of authentication, the settings, and the Actions and default Field Mappings that you want to build. diff --git a/src/partners/direct-destination.md b/src/partners/direct-destination.md index 4c2809f5e6..84ffecf716 100644 --- a/src/partners/direct-destination.md +++ b/src/partners/direct-destination.md @@ -115,7 +115,7 @@ Upon receiving data, your endpoint should reply with one of the following status | `401` | The client's API key is malformed, has expired, or is otherwise no longer valid. | | `403` | The client's API key is valid, but has been rejected due to inadequate permissions. | | `500` | If you encounter an internal error when processing the message, reply with this code. (Hopefully you won't have to send too many of these.) | -| `501` | If Segment sends you an [API call type](https://segment.com/docs/connections/spec/#api-calls) (indicated by the `type` property included on all messages) you don't support, reply with this code. Read more about the API call types Segment supports [here](https://segment.com/docs/connections/spec/#api-calls). | +| `501` | If Segment sends you an [API call type](/docs/connections/spec/#api-calls) (indicated by the `type` property included on all messages) you don't support, reply with this code. Read more about the API call types Segment supports [in the Spec](docs/connections/spec/#api-calls) docs. | | `503` | Send Segment this code when your endpoint is temporarily down for maintenance or otherwise not accepting messages. This helps Segment avoid dropping users' messages during your downtime. | #### Response body @@ -164,7 +164,7 @@ To test your Destination in the Catalog, click the "View in workspace" button in From here, click "Configure App", select a Source, and click "Confirm Source". You can now configure your destination by setting the "API Key", then clicking the toggle to enable the destination. -Next you can click the "Event Tester" tab to send data to your destination. Here you can see what requests Segment sends to your destination and introspect the response you are returning. Learn more about the event tester [here](/docs/guides/best-practices/how-do-I-test-my-connections/). +Next you can click the "Event Tester" tab to send data to your destination. Here you can see what requests Segment sends to your destination and introspect the response you are returning. Learn more about the event tester in the [Event Tester docs](/docs/connections/test-connections/). Now you can use the JavaScript SDK in a browser to generate real analytics events. diff --git a/src/partners/faqs.md b/src/partners/faqs.md index cb990d8eb8..c28f688ae7 100644 --- a/src/partners/faqs.md +++ b/src/partners/faqs.md @@ -22,7 +22,7 @@ For unknown users, Segment will handle generating a unique `anonymousId` using o Segment handles cacheing these values on our mobile SDKs and client-side analytics.js library and sending the values on subsequent calls. Our server-side libraries rely on the customer creating either the `anonymousId` or `userId` and passing this in on each call. -Read more about our unique ID's [here](https://segment.com/blog/a-brief-history-of-the-uuid/). +Read more about unique IDs on Segment's blog: [A brief history of the UUID](https://segment.com/blog/a-brief-history-of-the-uuid/){:target="_blank”}. ### Do you have semantic events? @@ -38,13 +38,13 @@ No. Since Segment queues events, Segment cannot guarantee the order in which the ### Does Segment de-dupe messages? -Yes! Segment de-dupes messages by `messageId`. +Yes, Segment de-dupes messages by `messageId`. Segment maintains a sliding window of all `messageId`s received for each source, only allowing `messageId`s through that do not already appear within the window. Segment guarantees this window to be at least 24 hours of messages (meaning any message sent twice within 24 hours will be de-duped), but in practice, this window is significantly larger(currently sitting at around 170 days). -You can read more [here](https://segment.com/blog/exactly-once-delivery/). +You can read more on the Segment blog: [Delivering billions of messages exactly once](https://segment.com/blog/exactly-once-delivery/){:target="_blank”}. ### What is a replay? @@ -62,9 +62,9 @@ Be sure to let us know if you are able to accept replays and what your rate limi Segment provides excellent data deliverability by employing API layer scalability and durability, data backup and replay, partner API monitoring, and library and integration cloud retries. Segment's API processes 170B+ billion calls per month across over a billion of monthly tracked users, is rate performant (avg. load 100,000 msg/sec), fully automated and scalable, can tolerate massive data spikes. -Segment monitors hundreds of partner APIs for 500s, success rate, and end-to-end latency to help our customers proactively achieve the best data deliverability possible. +Segment monitors hundreds of partner APIs for 500s, success rate, and end-to-end latency to help customers proactively achieve the best data deliverability possible. -You can subscribe to updates [here](https://status.segment.com/). +You can subscribe to updates on [status.segment.com](https://status.segment.com/){:target="_blank”}. ### Does Segment retry data? diff --git a/src/partners/index.md b/src/partners/index.md index f5a8d21905..3475cd659c 100644 --- a/src/partners/index.md +++ b/src/partners/index.md @@ -38,7 +38,7 @@ To develop your integration in the Developer Center, complete the following step ### Become a Segment Partner -Sign up for the [Segment Select Partner Program](https://segment.com/partners/integration/). During the sign-up process, you’ll agree to the [Segment Partner Program Agreement](https://segment.com/legal/partnersagreement/) and [Privacy Policy](https://segment.com/legal/privacy/). +Sign up for the [Segment Select Partner Program](https://segment.com/partners/integration/){:target="_blank”}. During the sign-up process, you’ll agree to the [Segment Partner Program Agreement](https://segment.com/legal/partnersagreement/){:target="_blank”} and [Privacy Policy](https://segment.com/legal/privacy/){:target="_blank”}. ### Understand Segment's conceptual model and Spec @@ -48,7 +48,7 @@ The [Segment Spec](/docs/connections/spec) provides best practices for the speci ### Follow Segment's security guidance -Security for both customers and partners is a priority at Segment. Before you start building on the Developer Center, review the [Acceptable Use Policy](https://segment.com/legal/acceptable-use-policy/) and ensure you're following these guidelines: +Security for both customers and partners is a priority at Segment. Before you start building on the Developer Center, review the [Acceptable Use Policy](https://segment.com/legal/acceptable-use-policy/){:target="_blank”} and ensure you're following these guidelines: - Follow a secure software-development lifecycle, which enables you to create code that is safe for Segment customers and their end users, and that enables you to maintain and raise the security of that code over time - If you or your code comes into contact with Segment customer- or end-user data for any reason, protect it with commercially reasonable methods throughout its data lifecycle, including creation, handling, transporting, storing and destruction. @@ -57,7 +57,7 @@ Security for both customers and partners is a priority at Segment. Before you st ### Request access to the Segment Developer Center -Segment provides access to the developer on request. [Click here](https://segment.com/partners/developer-center/){:target="_blank"} to request access. A Segment account is required for this step. +Segment provides access to the Developer Portal on request. Open the Developer Portal page and click [Sign up](https://segment.com/partners/developer-center/){:target="_blank"} to request access. A Segment account is required for this step. Segment receives a large volume of requests so please include a valid company website and email address, answer all questions with details about integration's use case as well as highlighting specific customer requests to expedite the approval process. @@ -79,11 +79,11 @@ Before users can go hands on with your integration, a review by Segment engineer #### Destinations -To submit your destination for review, follow the destination-specific instructions [here](/docs/partners/destinations#submit-a-pull-request). +To submit your destination for review, follow the destination-specific instructions in the [Submit a pull request](/docs/partners/destinations#submit-a-pull-request) docs. #### Sources -To submit your source for review, complete the steps described in the Developer Portal, and click **Submit for review**. +To submit your source for review, complete the steps described in the Developer Portal and click **Submit for review**. {% comment %} ## Provide integration metadata for the catalog diff --git a/src/partners/sources.md b/src/partners/sources.md index a3d87ac813..1c7d6599d9 100644 --- a/src/partners/sources.md +++ b/src/partners/sources.md @@ -52,7 +52,7 @@ Here are the five most common options: - `Sentence case` — Account created -You can read more about Segment's recommended naming conventions [here](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/){:target="_blank"}. +You can read more about Segment's recommended naming conventions in the Segment Academy post [Naming Conventions: Why You Need Them for Clean Data](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/){:target="_blank"}. ### `userId` @@ -101,7 +101,7 @@ The write key is required in the header of every call to identify the customer w **Rate limits and batching** There is no hard rate limit at which point Segment will drop your data. However, to avoid processing delays, Segment asks partners to send requests at a maximum rate of 50 requests per second. -If you want to batch requests to the HTTP endpoint, refer to the batching documentation [here](/docs/connections/sources/catalog/libraries/server/http-api/#import). The suggested maximum rate includes any batch requests. +If you want to batch requests to the HTTP endpoint, refer to the HTTP API's [batching documentation](/docs/connections/sources/catalog/libraries/server/http-api/#import). The suggested maximum rate includes any batch requests. ## Regional Segment diff --git a/src/partners/subscriptions/build-webhook.md b/src/partners/subscriptions/build-webhook.md index 65fe1ba13d..19573653be 100644 --- a/src/partners/subscriptions/build-webhook.md +++ b/src/partners/subscriptions/build-webhook.md @@ -14,7 +14,7 @@ Review the steps outlined in the [Developer Center Overview](/docs/partners). Th 1. Understand Segment's [Conceptual Model](/docs/partners/conceptual-model) and [Spec](/docs/connections/spec). 2. Follow Segment's security guidance. -3. Request [access to the Segment Developer Center](https://segment.com/partners/developer-center/). +3. Request [access to the Segment Developer Center](https://segment.com/partners/developer-center/){:target="_blank”}. 4. Create an App. 5. Build and test your Component(s). 6. Publish documentation. @@ -124,7 +124,7 @@ Upon receiving data, your endpoint should reply with one of the following status | `401` | The client's API key is malformed, has expired, or is otherwise no longer valid. | | `403` | The client's API key is valid, but has been rejected due to inadequate permissions. | | `500` | If you encounter an internal error when processing the message, reply with this code. (Hopefully you won't have to send too many of these.) | -| `501` | If Segment sends you an [API call type](https://segment.com/docs/connections/spec/#api-calls) (indicated by the `type` property included on all messages) you don't support, reply with this code. Read more about the API call types Segment supports [here](https://segment.com/docs/connections/spec/#api-calls). | +| `501` | If Segment sends you an [API call type](/docs/connections/spec/#api-calls) (indicated by the `type` property included on all messages) you don't support, reply with this code. Read more about the API call types Segment supports in the [Segment Spec documentation](/docs/connections/spec/#api-calls). | | `503` | Send Segment this code when your endpoint is temporarily down for maintenance or otherwise not accepting messages. This helps Segment avoid dropping users' messages during your downtime. | #### Response Body @@ -178,7 +178,7 @@ To test your Destination in the Catalog, click the "Test" tab in the Developer C From here, click "Configure App", select a Source, and click "Confirm Source". You can now configure your destination by setting the "API Key", then clicking the toggle to enable the destination. -Next you can click the "Event Tester" tab to send data to your destination. Here you can see what requests Segment sends to your destination and introspect the response you are returning. Learn more about the event tester [here](/docs/guides/best-practices/how-do-I-test-my-connections/). +Next you can click the "Event Tester" tab to send data to your destination. Here you can see what requests Segment sends to your destination and introspect the response you are returning. Learn more about the event tester in the [Event Tester](/docs/connections/test-connections/) docs. Now you can use the JavaScript SDK in a browser to generate real analytics events. diff --git a/src/partners/subscriptions/index.md b/src/partners/subscriptions/index.md index b95c5ef23d..13932dcfaa 100644 --- a/src/partners/subscriptions/index.md +++ b/src/partners/subscriptions/index.md @@ -15,7 +15,7 @@ Review the steps outlined in the [Developer Center Overview](/docs/partners). Th 1. Understand Segment's [Conceptual Model](/docs/partners/conceptual-model) and [Spec](/docs/connections/spec). 2. Follow Segment's security guidance. -3. Request [access to the Segment Developer Center](https://segment.com/partners/developer-center/). +3. Request [access to the Segment Developer Center](https://segment.com/partners/developer-center/)/docs/connections/test-connections/. 4. Create an App. 5. Build and test your Component(s). 6. Publish documentation. @@ -27,4 +27,4 @@ Review the steps outlined in the [Developer Center Overview](/docs/partners). Th > note "" > **NOTE:** On July 31, 2021 support for building Subscription Functions was removed from Developer Center. You may continue building [Subscription Webhooks](/docs/partners/subscriptions/build-webhook) in place of Subscription Functions. Work has begun on Developer Center 2.0 which will offer a more holistic approach to building on Segment. If you're interested in joining the beta in the coming months, please fill out [this form](https://airtable.com/shrvZzQ6NTTwsc6rQ){:target="_blank"}! -[Subscription Webhooks](/docs/partners/subscriptions/build-webhook) allow you to build a new HTTP service that receives Webhook POSTs from Segment. Read more in-depth technical details about building webhooks [here](/docs/partners/subscriptions/build-webhook). +[Subscription Webhooks](/docs/partners/subscriptions/build-webhook) allow you to build a new HTTP service that receives Webhook POSTs from Segment. Read more in-depth technical details about building webhooks in the [Subscription Webhooks](/docs/partners/subscriptions/build-webhook) docs. diff --git a/src/protocols/apis-and-extensions/typewriter.md b/src/protocols/apis-and-extensions/typewriter.md index 07541dd657..d2899545f8 100644 --- a/src/protocols/apis-and-extensions/typewriter.md +++ b/src/protocols/apis-and-extensions/typewriter.md @@ -4,9 +4,9 @@ redirect_from: '/protocols/typewriter/' --- > warning "" -> Typewriter for analytics.js and analytics-node will receive no new features and only critical maintenance updates from Segment. Typewriter for other libraries and SDKs are not actively maintained by Segment. Typewriter is available on [Github](https://github.com/segmentio/typewriter/){:target="_blank”} under the MIT license for the open-source community to fork and contribute. +> Typewriter for analytics.js and analytics-node will receive no new features and only critical maintenance updates from Segment. Typewriter for other libraries and SDKs are not actively maintained by Segment. Typewriter is available on [GitHub](https://github.com/segmentio/typewriter/){:target="_blank”} under the MIT license for the open-source community to fork and contribute. -[Typewriter](https://github.com/segmentio/typewriter) is a tool for generating strongly-typed Segment analytics libraries based on your pre-defined [Tracking Plan](/docs/protocols/tracking-plan) spec. +[Typewriter](https://github.com/segmentio/typewriter){:target="_blank”} is a tool for generating strongly-typed Segment analytics libraries based on your pre-defined [Tracking Plan](/docs/protocols/tracking-plan) spec. At a high-level, Typewriter can take an event from your Tracking Plan like this `"Order Completed"` event: @@ -60,13 +60,13 @@ To get started, check out one of the quickstart guides below: - [Swift Quickstart](#swift-quickstart) > info "" -> For use with the Analytics-iOS and Analytics-Android SDK, use [Typewriter v7](/docs/protocols/apis-and-extensions/typewriter-v7). +> For use with the Analytics-iOS and Analytics-Android SDK, use [Typewriter v7](/docs/protocols/apis-and-extensions/typewriter-v7){:target="_blank”}. -Have feedback on Typewriter? Consider opening a [GitHub issue here](https://github.com/segmentio/typewriter/issues/new). +Have feedback on Typewriter? Consider opening a [GitHub Issue in the @segmentio/typewriter](https://github.com/segmentio/typewriter/issues/new){:target="_blank”} repository. ## Prerequisites -Typewriter is built using [Node.js](https://nodejs.org/en/), and requires node >= 14.x +Typewriter is built using [Node.js](https://nodejs.org/en/){:target="_blank”}, and requires node >= 14.x You can check if you have Node and NPM installed by running the following commands in your command-line window: @@ -75,7 +75,7 @@ $ node --version v14.x ``` -If you don't have these, [you'll need to install `node`](https://nodejs.org/en/download/package-manager). Installing `node` also installs `npm` and `npx` for you. If you're on macOS, you can install it with [Homebrew](https://brew.sh/): +If you don't have these, [you'll need to install `node`](https://nodejs.org/en/download/package-manager){:target="_blank”}. Installing `node` also installs `npm` and `npx` for you. If you're on macOS, you can install it with [Homebrew](https://brew.sh/){:target="_blank”}: ```sh $ brew install node @@ -89,7 +89,7 @@ To get started with Typewriter in your browser: 1. Make sure you have `node` installed using the instructions in the [prerequisites](#prerequisites) above. 2. Install `analytics.js` in your app. There are two methods. - **Snippet method (most common)**: Paste the snippet in the[`Step 1: Copy the Snippet`](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet) from the [`analytics.js` Quickstart Guide](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/). - - **NPM method**: Load analytics.js with the npm library. Learn more about using the npm method [here](https://github.com/segmentio/analytics-next/tree/master/packages/browser#readme). + - **NPM method**: Load analytics.js with the npm library. Learn more about using the npm method in the [@segmentio/analytics-next](https://github.com/segmentio/analytics-next/tree/master/packages/browser#readme){:target="_blank”} repository. 3. Once you've got `analytics.js` installed, add Typewriter as a developer dependency in your project: @@ -191,7 +191,7 @@ To get started with Node.js: > info "" > Run `npx typewriter` to regenerate your Typewriter client. You need to do this each time you update your Tracking Plan. -Typewriter wraps your analytics calls in an [ES6 `Proxy`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy), which helps protect your application from crashing if you make analytics calls with a generated function that doesn't exist. For example, if an `Order Completed` event didn't exist in your Tracking Plan in the first example above, then your app would crash with a `TypeError: typewriter.orderCompleted is not a function`. However, since `typewriter` dynamically proxies the underlying function calls, it can detect if a function does not exist, and handle it for you. Typewriter logs a warning message, then fires an `Unknown Analytics Call Fired` event into your source. This helps to prevent regressions when you migrate JavaScript projects to Typewriter in bulk. Keep in mind that proxying doesn't work with named exports. +Typewriter wraps your analytics calls in an [ES6 `Proxy`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy){:target="_blank”}, which helps protect your application from crashing if you make analytics calls with a generated function that doesn't exist. For example, if an `Order Completed` event didn't exist in your Tracking Plan in the first example above, then your app would crash with a `TypeError: typewriter.orderCompleted is not a function`. However, since `typewriter` dynamically proxies the underlying function calls, it can detect if a function does not exist, and handle it for you. Typewriter logs a warning message, then fires an `Unknown Analytics Call Fired` event into your source. This helps to prevent regressions when you migrate JavaScript projects to Typewriter in bulk. Keep in mind that proxying doesn't work with named exports. ## Swift Quickstart @@ -332,13 +332,13 @@ $ npx typewriter ## API Token Configuration -Typewriter requires a Segment API token to fetch Tracking Plans from the [Segment Public API](https://docs.segmentapis.com/). +Typewriter requires a Segment API token to fetch Tracking Plans from the [Segment Public API](https://docs.segmentapis.com/){:target="_blank”}. You must be a workspace owner to create Segment API tokens. To create an API token: -1. Click on the **Tokens** tab on the [Access Management](https://app.segment.com/goto-my-workspace/settings/access-management) page and click **Create Token**. +1. Click on the **Tokens** tab on the [Access Management](https://app.segment.com/goto-my-workspace/settings/access-management){:target="_blank”} page and click **Create Token**. 2. Choose Segment's Public API. 3. Add a description for the token and assign access. If you choose *Workspace Member*, you only need to select **Tracking Plan Read-Only** for the Resource Role, as Typewriter only needs the *Tracking Plan Read-Only* role. 4. Click **Create**. @@ -363,19 +363,19 @@ To make the most of Typewriter, Segment recommends installing a few extensions: **JavaScript** -Typewriter clients include function documentation adhering to the [JSDoc](https://jsdoc.app/) specification. Install the relevant extension below for JSDoc support in your editor: +Typewriter clients include function documentation adhering to the [JSDoc](https://jsdoc.app/){:target="_blank”} specification. Install the relevant extension below for JSDoc support in your editor: - *VSCode*: Supports JSDoc out-of-the-box. -- *Atom*: Install the official [atom-ide-ui](https://atom.io/packages/atom-ide-ui) and [ide-typescript](https://atom.io/packages/ide-typescript) plugins (the latter provides JavaScript support). -- *Sublime Text*: Install [`tern_for_sublime`](https://packagecontrol.io/packages/tern_for_sublime). And then [follow this guide's advice](https://medium.com/@nicklee1/configuring-sublime-text-3-for-modern-es6-js-projects-6f3fd69e95de) on configuring Tern. +- *Atom*: Install the official [atom-ide-ui](https://atom.io/packages/atom-ide-ui){:target="_blank”} and [ide-typescript](https://atom.io/packages/ide-typescript){:target="_blank”} plugins (the latter provides JavaScript support). +- *Sublime Text*: Install [`tern_for_sublime`](https://packagecontrol.io/packages/tern_for_sublime){:target="_blank”}. And then [follow this guide's advice](https://medium.com/@nicklee1/configuring-sublime-text-3-for-modern-es6-js-projects-6f3fd69e95de){:target="_blank”} on configuring Tern. **TypeScript** For intellisense in TypeScript clients, install the relevant extension below for TypeScript support in your editor. If your project is a mix between JavaScript and TypeScript, then you should also install the plugins in the JavaScript section above so that your editor will also support JSDoc intellisense. - *VSCode*: Supports TypeScript out-of-the-box. -- *Atom*: Install the official [atom-ide-ui](https://atom.io/packages/atom-ide-ui) and [ide-typescript](https://atom.io/packages/ide-typescript) plugins. -- *Sublime Text*: Install the [TypeScript](https://packagecontrol.io/packages/TypeScript) plugin from [Package Control](https://packagecontrol.io/installation). +- *Atom*: Install the official [atom-ide-ui](https://atom.io/packages/atom-ide-ui){:target="_blank”} and [ide-typescript](https://atom.io/packages/ide-typescript){:target="_blank”} plugins. +- *Sublime Text*: Install the [TypeScript](https://packagecontrol.io/packages/TypeScript){:target="_blank”} plugin from [Package Control](https://packagecontrol.io/installation){:target="_blank”}. **iOS** @@ -454,7 +454,7 @@ scripts: token: echo "OIEGO$*hf83hfh034fnosnfiOEfowienfownfnoweunfoiwenf..." ``` -To give a real example, Segment stores secrets in [`segmentio/chamber`](http://github.com/segmentio/chamber) which is backed by [AWS Parameter Store](https://aws.amazon.com/blogs/mt/the-right-way-to-store-secrets-using-parameter-store/){:target="_blank"}. Providing access to a token in `chamber` looks like this: +To give a real example, Segment stores secrets in [`segmentio/chamber`](http://github.com/segmentio/chamber){:target="_blank”} which is backed by [AWS Parameter Store](https://aws.amazon.com/blogs/mt/the-right-way-to-store-secrets-using-parameter-store/){:target="_blank"}. Providing access to a token in `chamber` looks like this: ```yaml scripts: @@ -467,7 +467,7 @@ To learn more about the `typewriter.yml` configuration format, see the [Configur In your `typewriter.yml`, you can configure a script (`scripts.after`) that fires after generating a Typewriter client. You can use this to apply your team's style guide to any of Typewriter's auto-generated files. -For example, if you want to apply your [`prettier`](https://prettier.io/) formatting to `plan.json` (the local snapshot of your Tracking Plan), you can use an `after` script like this: +For example, if you want to apply your [`prettier`](https://prettier.io/){:target="_blank”} formatting to `plan.json` (the local snapshot of your Tracking Plan), you can use an `after` script like this: ```yaml scripts: @@ -507,7 +507,7 @@ $ npx typewriter development $ 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 doesn't support run-time validation using Common JSON Schema. For languages that don't support run-time validation, the development and production clients are identical. +> Not all languages support run-time validation. Currently, `analytics.js` and `analytics-node` support it using [AJV](https://github.com/epoberezkin/ajv){:target="_blank”} (both for JavaScript and TypeScript projects) while `analytics-ios` and `analytics-android` do not yet support run-time validation. Typewriter also doesn't support run-time validation using Common JSON Schema. For languages that don't support run-time validation, the development and production clients are identical. Segment recommends you to use a development build when testing your application locally, or when running tests. Segment generally recommends _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. @@ -572,8 +572,8 @@ Not all languages support run-time validation. Currently, `analytics.js` and `an ## Contributing -If you're interested in contributing, [open an issue on GitHub](https://github.com/segmentio/typewriter/issues/new) and Segment can help provide you pointers to get started. +If you're interested in contributing, [open an issue on GitHub](https://github.com/segmentio/typewriter/issues/new){:target="_blank”} and Segment can help provide you pointers to get started. ## Feedback -Segment welcomes feedback you may have on your experience with Typewriter. To contact Segment, [open an issue on GitHub](https://github.com/segmentio/typewriter/issues/new). +Segment welcomes feedback you may have on your experience with Typewriter. To contact Segment, [open an issue on GitHub](https://github.com/segmentio/typewriter/issues/new){:target="_blank”}. diff --git a/src/unify/Traits/predictions/index.md b/src/unify/Traits/predictions/index.md index 9570d3c997..3bbab52b91 100644 --- a/src/unify/Traits/predictions/index.md +++ b/src/unify/Traits/predictions/index.md @@ -72,8 +72,8 @@ For example, to predict a customer's propensity to purchase over the next 30 day To access Predictions, you must: -- Track more than 1 event type, but fewer than 5,000 event types. An event type refers to the total number of distinct events seen across all users in an Engage Space within the past 15 days. - - If you currently track more than 5,000 distinct events, reduce the number of tracked events below this limit and wait around 15 days before creating your first prediction. +- Track more than 1 event type, but fewer than 2,000 event types. An event type refers to the total number of distinct events seen across all users in an Engage Space within the past 15 days. + - If you currently track more than 2,000 distinct events, reduce the number of tracked events below this limit and wait around 15 days before creating your first prediction. - Events become inactive if they've not been sent to an Engage Space within the past 15 days. - To prevent events from reaching your Engage Space, modify your event payloads to set `integrations.Personas` to `false`. - For more information on using the integrations object, see [Spec: Common Fields](/docs/connections/spec/common/#context:~:text=In%20more%20detail%20these%20common%20fields,Destinations%20field%20docs%20for%20more%20details.), [Integrations](https://segment.com/docs/connections/spec/common/#context:~:text=Kotlin-,Integrations,be%20sent%20to%20rest%20of%20the%20destinations%20that%20can%20accept%20it.,-Timestamps), and [Filtering with the Integrations object](https://segment.com/docs/guides/filtering-data/#filtering-with-the-integrations-object). diff --git a/src/unify/Traits/sql-traits.md b/src/unify/Traits/sql-traits.md index 2685014d79..7fbfac86ba 100644 --- a/src/unify/Traits/sql-traits.md +++ b/src/unify/Traits/sql-traits.md @@ -218,6 +218,10 @@ No, SQL Traits supports string and numeric data types. You can cast arrays as a After a SQL trait has been created, you can't change its Warehouse Source. You'll need to create a new trait if you want to change the Warehouse source. +### What happens if a user is no longer returned by the SQL trait? + +If a user was present in one computation, but it is no longer present in the following one, the SQL trait will detect this difference and nullify all trait values for the user. [Contact Segment](https://segment.com/help/contact/){:target="_blank"} if you have a use case which calls for an exemption from this default behavior. + ## Troubleshooting ### I'm getting a permissions error. diff --git a/src/unify/identity-resolution/identity-resolution-settings.md b/src/unify/identity-resolution/identity-resolution-settings.md index 9aefcd9bf5..2aaa61a209 100644 --- a/src/unify/identity-resolution/identity-resolution-settings.md +++ b/src/unify/identity-resolution/identity-resolution-settings.md @@ -10,18 +10,18 @@ redirect_from: > info "" -> The steps in this guide pertain to spaces created before September 27th, 2020. For spaces created after September 27th, 2020, please refer to the onboarding guide [here](/docs/unify/identity-resolution/identity-resolution-onboarding/). +> The steps in this guide pertain to spaces created before September 27th, 2020. For spaces created after September 27th, 2020, please refer to the [Identity Resolution Onboarding](/docs/unify/identity-resolution/identity-resolution-onboarding/) docs. ## Configure Identity Graph rules -Before you connect a source to Unify, Segment recommends that you first review the default Identity settings and configure custom rules as needed. Segment applies configuration updates to all *new* data flowing through the space after you save your changes. As a result, if this is your first time setting up your Identity Graph, Segment recommends that you get started with a *Dev* space [here](/docs/unify/identity-resolution/space-setup/). +Before you connect a source to Unify, Segment recommends that you first review the default Identity settings and configure custom rules as needed. Segment applies configuration updates to all *new* data flowing through the space after you save your changes. As a result, if this is your first time setting up your Identity Graph, Segment recommends that you get started with a *Dev* space in the [Space Setup](/docs/unify/identity-resolution/space-setup/) docs. > info "" > Workspace owners and users with the Identity Admin role can edit the Identity Resolution table. > warning "Changing Identity Resolution rules" > Making a space's Identity Resolution rules less restrictive by changing the [limit](/docs/unify/identity-resolution/identity-resolution-settings/#limit) shouldn't cause any issues to existing or future profiles.

However, making a space's rules more restrictive might have an impact existing profiles that don't adhere to the new rules (for example, decreasing an identifier's limit or changing the [priority](/docs/unify/identity-resolution/identity-resolution-settings/#priority) of identifiers). ->

Segment recommends to get started with a Dev space [here](https://segment.com/docs/unify/identity-resolution/space-setup/), test the rules with the expected data, and then create an identical Production space with those rules. Document any changes to a space's Identity Resolution rules, and don't update rules to be more restrictive after profiles already exist outside the bounds of those new rules. +>

Segment recommends to get started with a Dev space in the [Space Setup](/docs/unify/identity-resolution/space-setup/) docs, test the rules with the expected data, and then create an identical Production space with those rules. Document any changes to a space's Identity Resolution rules, and don't update rules to be more restrictive after profiles already exist outside the bounds of those new rules. ## ExternalIDs diff --git a/src/unify/identity-resolution/space-setup.md b/src/unify/identity-resolution/space-setup.md index 59663fb9d7..d5fd41b54e 100644 --- a/src/unify/identity-resolution/space-setup.md +++ b/src/unify/identity-resolution/space-setup.md @@ -10,7 +10,7 @@ When starting with Unify, begin by creating a *Dev* space. This will be your san ## Step two: Configure Identity settings -Before you connect any source to the Dev space, Segment recommends that you first start by reviewing and configuring your Identity settings, as changes to the Identity rules will only be applied to new events received following any updates. Read more on those settings [here](/docs/unify/identity-resolution/identity-resolution-settings/). +Before you connect any source to the Dev space, Segment recommends that you first start by reviewing and configuring your Identity settings, as changes to the Identity rules will only be applied to new events received following any updates. Read more on those settings in the [Identity Resolution Settings](/docs/unify/identity-resolution/identity-resolution-settings/) docs. ## Step three: Set up a connection policy diff --git a/src/unify/product-limits.md b/src/unify/product-limits.md index 867c324523..542cd7f9ea 100644 --- a/src/unify/product-limits.md +++ b/src/unify/product-limits.md @@ -7,7 +7,7 @@ redirect_from: --- > info "" -> Beginning August 18, 2023, new Unify Plus and Engage users can refer to this page for Segment's product limits. Existing users prior to this date can continue to refer to the Engage product limits [here](/docs/engage/product-limits/). +> Beginning August 18, 2023, new Unify Plus and Engage users can refer to this page for Segment's product limits. Existing users prior to this date can continue to refer to the Engage product limits in the [Engage Default Limits](/docs/engage/product-limits/) documentation. To provide consistent performance and reliability at scale, Segment enforces default use and rate limits within Unify. Most customers do not exceed these limits. diff --git a/src/unify/quickstart.md b/src/unify/quickstart.md index ce14843124..bb03c679a8 100644 --- a/src/unify/quickstart.md +++ b/src/unify/quickstart.md @@ -40,12 +40,12 @@ You probably have teammates who help set up your Segment Workspace with the data Segment recommends connecting your production website or App source as a great starting point. > info "" -> If the source you want to add doesn't appear on the list, then check if the source is enabled. If the source is enabled, verify that you have set up a connection policy which enforces that you can only add sources with specific labels to this space. Read more about Segment's connection policy [here](/docs/unify/identity-resolution/space-setup/#step-three-set-up-a-connection-policy). +> If the source you want to add doesn't appear on the list, then check if the source is enabled. If the source is enabled, verify that you have set up a connection policy which enforces that you can only add sources with specific labels to this space. Read more about Segment's connection policy in the [Space Setup](/docs/unify/identity-resolution/space-setup/#step-three-set-up-a-connection-policy) docs. > success "" > **Tip:** It sounds a little counter- intuitive to connect a production source to a developer space, but your production sources have rich user data in them, which is what you need to build and validate user profiles. -Once you select sources, Segment starts a replay of one month of historical data from these sources into your Unify space. We're doing this step first so you have some user data to build your first profiles. +Once you select sources, Segment starts a replay of one month of historical data from these sources into your Unify space. Segment does this step first so you have some user data to build your first profiles. The replay usually takes several hours, but the duration will vary depending on how much data you have sent through these sources in the past one month. When the replay finishes, you are notified in the Sources tab under Settings, shown below. diff --git a/src/utils/cmode-verify.md b/src/utils/cmode-verify.md index f045e54f3b..2a66ee8d4d 100644 --- a/src/utils/cmode-verify.md +++ b/src/utils/cmode-verify.md @@ -102,7 +102,7 @@ tests: mobile: true server: true --- -Use this page to verify that the static table at the top of each section matches the API generated tables below it. Any mismatches indicate a change in the API that requires further research to determine impact to the main Connection Modes table [here](docs/connections/destinations/cmodes-compare/). +Use this page to verify that the static table at the top of each section matches the API generated tables below it. Any mismatches indicate a change in the API that requires further research to determine impact to the main Connection Modes table in the [Destinations Connection Modes comparison](docs/connections/destinations/cmodes-compare/) docs. Mismatches are shown highlighted in Red.