diff --git a/.github/Vocab/Marketing/accept.txt b/.github/Vocab/Marketing/accept.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/.github/Vocab/Marketing/reject.txt b/.github/Vocab/Marketing/reject.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/.github/Vocab/Docs/accept.txt b/.github/styles/Vocab/Docs/accept.txt similarity index 99% rename from .github/Vocab/Docs/accept.txt rename to .github/styles/Vocab/Docs/accept.txt index 6952a4ce86..6bcbdff496 100644 --- a/.github/Vocab/Docs/accept.txt +++ b/.github/styles/Vocab/Docs/accept.txt @@ -25,6 +25,7 @@ async Blitzllama blocklist boolean +Breyta Chargebee CloudFront Cocoapods diff --git a/.github/Vocab/Docs/reject.txt b/.github/styles/Vocab/Docs/reject.txt similarity index 100% rename from .github/Vocab/Docs/reject.txt rename to .github/styles/Vocab/Docs/reject.txt diff --git a/.github/styles/segment/headings.yml b/.github/styles/segment/headings.yml new file mode 100644 index 0000000000..7c6d14d08c --- /dev/null +++ b/.github/styles/segment/headings.yml @@ -0,0 +1,5 @@ +extends: capitalization +message: "'%s' should be in sentence case" +level: warning +scope: heading +match: $sentence diff --git a/.github/styles/segment/inclusivity.yml b/.github/styles/segment/inclusivity.yml new file mode 100644 index 0000000000..ffb9046404 --- /dev/null +++ b/.github/styles/segment/inclusivity.yml @@ -0,0 +1,20 @@ +extends: existence +message: Avoid the term '%s' +level: warning +code: false +ignorecase: true +tokens: + - appears to be + - arguably + - grandfather + - powow + - blacklist + - whitelist + - blackhat + - whitehat + - manned + - man-made + - master + - slave + - sanity check + - dummy \ No newline at end of file diff --git a/.github/styles/segment/links copy.yml b/.github/styles/segment/links copy.yml new file mode 100644 index 0000000000..9847e1054e --- /dev/null +++ b/.github/styles/segment/links copy.yml @@ -0,0 +1,6 @@ +extends: existence +message: "Write meaningful link text." +level: warning +scope: link +raw: + - '\[?here\]\(' diff --git a/.vale.ini b/.vale.ini index a0e9f3e9f4..a06bcbb1b7 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,4 +1,4 @@ -StylesPath = vale-styles +StylesPath = .github/styles Vocab = Docs diff --git a/README.md b/README.md index 31ac6465d5..19e1de530e 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ If you see an error or something incorrect on a specific page, click Request doc ### Pull Requests -If you would like to update the documentation yourself, create a Pull Request to bring it to the team’s attention. Click Edit this page to edit the page directly on GitHub. Alternatively, you can clone the repository and submit your Pull Request that way. For more information, see [Contributing](CONTRIBUTING.md) and the [Developer Guide](devguide.md) +If you would like to update the documentation yourself, create a Pull Request to bring it to the team’s attention. Click Edit this page to edit the page directly on GitHub. Alternatively, you can clone the repository and submit your Pull Request that way. For more information, see [Contributing](CONTRIBUTING.md) and the [Developer Guide](devguide.md). diff --git a/src/_data/catalog/destinations.yml b/src/_data/catalog/destinations.yml index c39c6c2dea..f2ea8af5fd 100644 --- a/src/_data/catalog/destinations.yml +++ b/src/_data/catalog/destinations.yml @@ -7610,6 +7610,67 @@ items: phone: '@path': $.traits.phone trigger: type = "identify" or type = "group" +- id: 6241e78214aad278a6322f52 + display_name: Breyta CRM + name: Breyta CRM + slug: breyta-crm + hidden: false + endpoints: + - us + regions: + - us + url: connections/destinations/catalog/breyta-crm + previous_names: + - Breyta CRM + website: https://breyta.io + status: PUBLIC_BETA + categories: + - Analytics + - Customer Success + logo: + url: >- + https://public-segment-devcenter-production.s3.amazonaws.com/214ac298-7522-46be-a714-6a2f9c1be203.svg + mark: + url: >- + https://public-segment-devcenter-production.s3.amazonaws.com/7d9fc850-f53a-4ae1-b270-6c157caff98e.svg + methods: + track: true + identify: true + group: true + alias: false + page: true + platforms: + browser: true + mobile: true + server: true + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: apiKey + type: string + defaultValue: '' + description: Breyta App Login -> Integrations -> Segment -> Copy API key + required: true + label: API Key + - name: workspaceId + type: string + defaultValue: '' + description: Your Breyta Workspace Id + required: true + label: Workspace Id + actions: [] + presets: [] - id: 54521fd525e721e32a72ee98 display_name: Bronto name: Bronto @@ -32920,7 +32981,7 @@ items: hidden: false defaultTrigger: null fields: - - id: gQ9Z6YMrJWD4pk6N71Ef98 + - id: uexErRjqBF9YjDupL9Ltpo sortOrder: 0 fieldKey: operation label: Operation @@ -32932,11 +32993,11 @@ items: required: true multiple: false choices: - - label: Create + - label: Create new record value: create - - label: Update + - label: Update existing record value: update - - label: Upsert + - label: Update or create a record if one doesn't exist value: upsert - label: Bulk Upsert value: bulkUpsert @@ -32944,7 +33005,7 @@ items: value: bulkUpdate dynamic: false allowNull: false - - id: di2XZwX2MNVFJ2iuR2juDH + - id: uV9V7jQ7KmbyAzeU3esg6X sortOrder: 1 fieldKey: traits label: Record Matchers @@ -32966,7 +33027,7 @@ items: choices: null dynamic: false allowNull: false - - id: bQ576ohC4bDqCFFvvUs4zn + - id: m4hJQ8f1rFdvHW68rN5meZ sortOrder: 2 fieldKey: bulkUpsertExternalId label: Bulk Upsert External Id @@ -32978,7 +33039,7 @@ items: choices: null dynamic: false allowNull: false - - id: gn1u845E64Sq927oCUCErh + - id: eNcAyKVfmfisKAf1FsRQvX sortOrder: 3 fieldKey: bulkUpdateRecordId label: Bulk Update Record Id @@ -32990,7 +33051,7 @@ items: choices: null dynamic: false allowNull: false - - id: n9hE2aTNbZXXtgdoWvqyyv + - id: 7n8Keh385zENH9r6kocbtp sortOrder: 4 fieldKey: customObjectName label: Salesforce Object @@ -33005,7 +33066,7 @@ items: choices: null dynamic: false allowNull: false - - id: mzf1FoW9AQr931Cmrqyv3s + - id: wvUFLdxGnwZTuRvvMdMg5A sortOrder: 5 fieldKey: customFields label: Other Fields @@ -33025,7 +33086,7 @@ items: choices: null dynamic: false allowNull: false - - id: 625h2FyiuWFud5XCsTxUrd + - id: myMfEiEQcYJ3nQu1VXTwm1 sortOrder: 6 fieldKey: enable_batching label: Enable Batching? @@ -33045,7 +33106,7 @@ items: hidden: false defaultTrigger: null fields: - - id: 6iPHv4tMTVmAkKchivc4D5 + - id: pBjoQMTp7MFRSQXqU2nLdj sortOrder: 0 fieldKey: operation label: Operation @@ -33057,11 +33118,11 @@ items: required: true multiple: false choices: - - label: Create + - label: Create new record value: create - - label: Update + - label: Update existing record value: update - - label: Upsert + - label: Update or create a record if one doesn't exist value: upsert - label: Bulk Upsert value: bulkUpsert @@ -33069,7 +33130,7 @@ items: value: bulkUpdate dynamic: false allowNull: false - - id: aXGQFLX4PV419e5A2mc6zN + - id: 58PrLYs6J2TYq5yP8yuZ91 sortOrder: 1 fieldKey: traits label: Record Matchers @@ -33091,7 +33152,7 @@ items: choices: null dynamic: false allowNull: false - - id: e872Sg8TaAqLi3U7jTGwYy + - id: kMyoYExR2pEUWAKoEEQafT sortOrder: 2 fieldKey: bulkUpsertExternalId label: Bulk Upsert External Id @@ -33103,7 +33164,7 @@ items: choices: null dynamic: false allowNull: false - - id: tTicbAF6Y3hqSnmipq22dH + - id: 2Gffnf1fd5jXPnNWAKm1Pc sortOrder: 3 fieldKey: bulkUpdateRecordId label: Bulk Update Record Id @@ -33115,7 +33176,7 @@ items: choices: null dynamic: false allowNull: false - - id: 4rBta5ogRfQrGxJq4qmf3k + - id: p9hxCD8pjAph3g9m7SiZzs sortOrder: 4 fieldKey: last_name label: Last Name @@ -33137,7 +33198,7 @@ items: choices: null dynamic: false allowNull: false - - id: oQEeKLarEndPARMMSkhN1G + - id: gxrpAszW8hC6hjr83ZxaZm sortOrder: 5 fieldKey: first_name label: First Name @@ -33157,7 +33218,7 @@ items: choices: null dynamic: false allowNull: false - - id: tKQiYc5mCp8Wm4EQSbhXnM + - id: 98Tj9fL9H7yaPTtoxr13xJ sortOrder: 6 fieldKey: account_id label: Account ID @@ -33172,7 +33233,7 @@ items: choices: null dynamic: false allowNull: false - - id: bRNyh9g348TFUxR84QPfv1 + - id: 6AVRaVbLAWNuKEYW2JmqVy sortOrder: 7 fieldKey: email label: Email @@ -33192,7 +33253,7 @@ items: choices: null dynamic: false allowNull: false - - id: ceuHgCyAKz2j5AZCwF33yH + - id: 293Qc3FYd6UXvG2dzDdFZN sortOrder: 8 fieldKey: mailing_city label: Mailing City @@ -33212,7 +33273,7 @@ items: choices: null dynamic: false allowNull: false - - id: 2GTcGH5Zy2FatqGGMNo8nw + - id: 7xY27nroTTuUZdA7uzrQ1A sortOrder: 9 fieldKey: mailing_postal_code label: Mailing Postal Code @@ -33232,7 +33293,7 @@ items: choices: null dynamic: false allowNull: false - - id: qfoNH8dZoGX8n8tvQLzM7j + - id: 6fJyPDJvxyDqaSPeLqvqUQ sortOrder: 10 fieldKey: mailing_country label: Mailing Country @@ -33252,7 +33313,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6ZfiLFEenV49YQY6ZndoP3 + - id: pt62hin5bcLeDer7HhYSKi sortOrder: 11 fieldKey: mailing_street label: Mailing Street @@ -33272,7 +33333,7 @@ items: choices: null dynamic: false allowNull: false - - id: ixrfx4ZzVfMZTvJbwuRm5g + - id: 3JJmwv7TveDhVoqEpVCnz4 sortOrder: 12 fieldKey: mailing_state label: Mailing State @@ -33292,7 +33353,7 @@ items: choices: null dynamic: false allowNull: false - - id: wBULN2pjRzkr1yH2kRe6Py + - id: jgCczypGe11iLeuBWnwW9m sortOrder: 13 fieldKey: customFields label: Other Fields @@ -33312,7 +33373,7 @@ items: choices: null dynamic: false allowNull: false - - id: eE1c9Bb1Wd3jpYvL31HmDj + - id: d7hdAjd5ANJESbtR9G6Luq sortOrder: 14 fieldKey: enable_batching label: Enable Batching? @@ -33332,7 +33393,7 @@ items: hidden: false defaultTrigger: null fields: - - id: dFyHeRFFh1axq2Gqmzgt1A + - id: eNHnhyPg51qHVY9bZN9dZx sortOrder: 0 fieldKey: operation label: Operation @@ -33344,11 +33405,11 @@ items: required: true multiple: false choices: - - label: Create + - label: Create new record value: create - - label: Update + - label: Update existing record value: update - - label: Upsert + - label: Update or create a record if one doesn't exist value: upsert - label: Bulk Upsert value: bulkUpsert @@ -33356,7 +33417,7 @@ items: value: bulkUpdate dynamic: false allowNull: false - - id: 3EGr2g8mNb2Y1PHPN8smRZ + - id: kTB1rr7YeUmZm8jJuaYnxR sortOrder: 1 fieldKey: traits label: Record Matchers @@ -33378,7 +33439,7 @@ items: choices: null dynamic: false allowNull: false - - id: cQvghfUHPw6vZ9LK5KYuAi + - id: vgGr4dQ9qqAk2yMe6MZZyt sortOrder: 2 fieldKey: bulkUpsertExternalId label: Bulk Upsert External Id @@ -33390,7 +33451,7 @@ items: choices: null dynamic: false allowNull: false - - id: qqPgnfmbnAbfuSUc94NsHK + - id: qm62AumXyDHjX3S1t4aWgR sortOrder: 3 fieldKey: bulkUpdateRecordId label: Bulk Update Record Id @@ -33402,7 +33463,7 @@ items: choices: null dynamic: false allowNull: false - - id: gix96GDmAvYU6jmTN8vSM5 + - id: uocEdEzkFY9S2oTRMXUaNf sortOrder: 4 fieldKey: close_date label: Close Date @@ -33416,7 +33477,7 @@ items: choices: null dynamic: false allowNull: false - - id: 4ibkzP9uJspLSiJLAWgweR + - id: o5xQRcpw2mcWE3SaYKzkHc sortOrder: 5 fieldKey: name label: Name @@ -33430,7 +33491,7 @@ items: choices: null dynamic: false allowNull: false - - id: cGNwwxpKzhPn5EsdZKSsbB + - id: teEYjsTYnwJrJgRMgeBFJJ sortOrder: 6 fieldKey: stage_name label: Stage Name @@ -33444,7 +33505,7 @@ items: choices: null dynamic: false allowNull: false - - id: 7zBbnGBfr85xz9CVoEC3MY + - id: am6T5jMfwqy9ZTge235vMe sortOrder: 7 fieldKey: amount label: Amount @@ -33456,7 +33517,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6sdhaZkDv62bZymf3tu1fP + - id: cMCHvgK8f8z6xK24PZJXKg sortOrder: 8 fieldKey: description label: Description @@ -33468,7 +33529,7 @@ items: choices: null dynamic: false allowNull: false - - id: tCsZprhjedCQ5TDJsfchqz + - id: wjVJdWGdC1hAm6UoBByJNU sortOrder: 9 fieldKey: customFields label: Other Fields @@ -33488,7 +33549,7 @@ items: choices: null dynamic: false allowNull: false - - id: 9VEVjm8zftvUBuhw1UvrFy + - id: tXDeCZkKKYbPU92T1q7DYX sortOrder: 10 fieldKey: enable_batching label: Enable Batching? @@ -33510,7 +33571,7 @@ items: hidden: false defaultTrigger: type = "group" fields: - - id: pLj2H6F16x4Gdinj9E1ke6 + - id: sDeTYzLnBEzR66pP1cerzy sortOrder: 0 fieldKey: operation label: Operation @@ -33522,11 +33583,11 @@ items: required: true multiple: false choices: - - label: Create + - label: Create new record value: create - - label: Update + - label: Update existing record value: update - - label: Upsert + - label: Update or create a record if one doesn't exist value: upsert - label: Bulk Upsert value: bulkUpsert @@ -33534,7 +33595,7 @@ items: value: bulkUpdate dynamic: false allowNull: false - - id: 9Ck9nHjnfwx8aWUsnDTipH + - id: 9pkfmqf82rBMdoHzUEgdxx sortOrder: 1 fieldKey: traits label: Record Matchers @@ -33556,7 +33617,7 @@ items: choices: null dynamic: false allowNull: false - - id: diKbJpy72FRp4WwxehAdM9 + - id: x8By5oaThddfK5e3BtSYGi sortOrder: 2 fieldKey: bulkUpsertExternalId label: Bulk Upsert External Id @@ -33568,7 +33629,7 @@ items: choices: null dynamic: false allowNull: false - - id: egkXEc6vcAxq7Ktef9tp34 + - id: peoFVpcM17MGizbCtp6niS sortOrder: 3 fieldKey: bulkUpdateRecordId label: Bulk Update Record Id @@ -33580,7 +33641,7 @@ items: choices: null dynamic: false allowNull: false - - id: kftg6tvawdMU5iuAtLeMZ1 + - id: 7CDgwBQDv7tktWDtjSK4jH sortOrder: 4 fieldKey: name label: Name @@ -33594,7 +33655,7 @@ items: choices: null dynamic: false allowNull: false - - id: 4jRL1oqdG5DwJggNAY25Pf + - id: emTkrQNrhVXmJ6vTd5pFmB sortOrder: 5 fieldKey: account_number label: Account Number @@ -33610,7 +33671,7 @@ items: choices: null dynamic: false allowNull: false - - id: xAykFm58qt1TcNXeCNtvLd + - id: 3sYNwDBqVpFXjLznJqHv6k sortOrder: 6 fieldKey: number_of_employees label: Number of employees @@ -33630,7 +33691,7 @@ items: choices: null dynamic: false allowNull: false - - id: GJGwu3Hu2V3VvrERTXRmN + - id: a9YKnb33wPGvcTPwjLRwxJ sortOrder: 7 fieldKey: billing_city label: Billing City @@ -33650,7 +33711,7 @@ items: choices: null dynamic: false allowNull: false - - id: 7m4miCbvDCth5L7eV3SqcP + - id: itrN21v8ojkSujK2w45hYX sortOrder: 8 fieldKey: billing_postal_code label: Billing Postal Code @@ -33670,7 +33731,7 @@ items: choices: null dynamic: false allowNull: false - - id: iSc6k9sWiMVZMGVV1Ufbrm + - id: jhDP7nZ5jKhEq1XzYJ1zdS sortOrder: 9 fieldKey: billing_country label: Billing Country @@ -33690,7 +33751,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3NCy2ZjJzrv86y2AunTpRJ + - id: 6wS3y2nduw3PnhczGa32AV sortOrder: 10 fieldKey: billing_street label: Billing Street @@ -33710,7 +33771,7 @@ items: choices: null dynamic: false allowNull: false - - id: 7pcwQ2CWBj399U3pNECgQb + - id: bFMvCEzWpqHTcSbLsMNH5W sortOrder: 11 fieldKey: billing_state label: Billing State @@ -33730,7 +33791,7 @@ items: choices: null dynamic: false allowNull: false - - id: bgMnJEHpdE8PqZj4UBAiZQ + - id: 9YNy2hGxLc1Mn9w8kmcgDz sortOrder: 12 fieldKey: shipping_city label: Shipping City @@ -33742,7 +33803,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6z9NdUeYeQm4ThRtUKtekQ + - id: 9XhP9pgQqrewFmxFw5zCDM sortOrder: 13 fieldKey: shipping_postal_code label: Shipping Postal Code @@ -33754,7 +33815,7 @@ items: choices: null dynamic: false allowNull: false - - id: bXzBjGG34Bu51C8J6v8oQ2 + - id: n4FAPJM8RWk3EQ68KH1mVj sortOrder: 14 fieldKey: shipping_country label: Shipping Country @@ -33766,7 +33827,7 @@ items: choices: null dynamic: false allowNull: false - - id: wdWELAShCYmzfQ7tpSmKPb + - id: sDmHkXsiu8EMCLj7eD3EYf sortOrder: 15 fieldKey: shipping_street label: Shipping Street @@ -33778,7 +33839,7 @@ items: choices: null dynamic: false allowNull: false - - id: tANGVZFyDPFUvfvfncAVfn + - id: orPuGWXAsWKezdUyVxsSGL sortOrder: 16 fieldKey: shipping_state label: Shipping State @@ -33790,7 +33851,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6kMTdTzNhsQSYY9cD86SYn + - id: f12wX88UbPLMYMpEAEMU97 sortOrder: 17 fieldKey: phone label: Phone @@ -33810,7 +33871,7 @@ items: choices: null dynamic: false allowNull: false - - id: x8zuZZkP2emNQfsShMFGbW + - id: 9AfqhPV1dQEVA8zEDpBTv sortOrder: 18 fieldKey: description label: Description @@ -33830,7 +33891,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8S3wci66tgjhoC6uyHiCKq + - id: b62tBs3aS5XdcXYZoKNbT5 sortOrder: 19 fieldKey: website label: Website @@ -33850,7 +33911,7 @@ items: choices: null dynamic: false allowNull: false - - id: q8wQq7fgXhWDnreo3ho6JV + - id: iiaocZi8knPrAC9sKCdu5u sortOrder: 20 fieldKey: customFields label: Other Fields @@ -33870,7 +33931,7 @@ items: choices: null dynamic: false allowNull: false - - id: uarpXNZLsxoRyqo31offyF + - id: nB1VMDHDxnPBtgHxTx3PKe sortOrder: 21 fieldKey: enable_batching label: Enable Batching? @@ -33890,7 +33951,7 @@ items: hidden: false defaultTrigger: type = "identify" fields: - - id: nEEWHGanABA6CLf36T3Q6b + - id: wSyeAi7hahZZJhLPU8VPua sortOrder: 0 fieldKey: operation label: Operation @@ -33902,11 +33963,11 @@ items: required: true multiple: false choices: - - label: Create + - label: Create new record value: create - - label: Update + - label: Update existing record value: update - - label: Upsert + - label: Update or create a record if one doesn't exist value: upsert - label: Bulk Upsert value: bulkUpsert @@ -33914,7 +33975,7 @@ items: value: bulkUpdate dynamic: false allowNull: false - - id: aQNPYb7ChiwNVdDR7seSUh + - id: dqEkMWnTAy9kEB2GQmmbP9 sortOrder: 1 fieldKey: traits label: Record Matchers @@ -33936,7 +33997,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6ow65F1D3uX4EJ5vTRXZzr + - id: wodpWHYD4XzwjSqQfqS1QH sortOrder: 2 fieldKey: bulkUpsertExternalId label: Bulk Upsert External Id @@ -33948,7 +34009,7 @@ items: choices: null dynamic: false allowNull: false - - id: n1nJcWX8xeqvmYeJC2GUF9 + - id: 2nxH5SdinixHW9p13Qgfv4 sortOrder: 3 fieldKey: bulkUpdateRecordId label: Bulk Update Record Id @@ -33960,7 +34021,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8dUC2rzsRBwfTxQxiByq1k + - id: wQTUzMKTNB1xoqCJToGXWt sortOrder: 4 fieldKey: company label: Company @@ -33980,7 +34041,7 @@ items: choices: null dynamic: false allowNull: false - - id: iLrb1JTrGFNxgMLLuAiLSz + - id: fKtSK824Do2q5VdepVQnXS sortOrder: 5 fieldKey: last_name label: Last Name @@ -34000,7 +34061,7 @@ items: choices: null dynamic: false allowNull: false - - id: od3bas4zNRQ8HFm8Ab9gPF + - id: 82fv7TjNPHLFcxG6MxDWZc sortOrder: 6 fieldKey: first_name label: First Name @@ -34020,7 +34081,7 @@ items: choices: null dynamic: false allowNull: false - - id: q1n2QPhkaxCjX9p7kmNVmF + - id: cCKNNgzvJ1UJi2cfS4cq1e sortOrder: 7 fieldKey: email label: Email @@ -34040,7 +34101,7 @@ items: choices: null dynamic: false allowNull: false - - id: dRrkHWkoMAofCCoain8ue3 + - id: a4URto2UGTJMWfmDc5PpUc sortOrder: 8 fieldKey: city label: City @@ -34060,7 +34121,7 @@ items: choices: null dynamic: false allowNull: false - - id: 2yxMkre8FDUXBSaZ7dxe2A + - id: kfgn3W9nUaD9NpEjFUjRxx sortOrder: 9 fieldKey: postal_code label: Postal Code @@ -34080,7 +34141,7 @@ items: choices: null dynamic: false allowNull: false - - id: cRsHWxL5vsv4n9vK9Eqz3D + - id: rFi1oCTgb9duPkrKxzm533 sortOrder: 10 fieldKey: country label: Country @@ -34100,7 +34161,7 @@ items: choices: null dynamic: false allowNull: false - - id: rEKrcFdM1PQinWVz2ThedE + - id: ek3MHJct6Yrqz8oMJ5BYiy sortOrder: 11 fieldKey: street label: Street @@ -34120,7 +34181,7 @@ items: choices: null dynamic: false allowNull: false - - id: nFK4Ya5zbMpgHxaTPpMwSk + - id: ahHLwJEg8dfkTXC2YY7Fvy sortOrder: 12 fieldKey: state label: State @@ -34140,7 +34201,7 @@ items: choices: null dynamic: false allowNull: false - - id: 53RnmUazZSpiuUVXrVXmWC + - id: cbCwcDZJm6LWLS924xRW8A sortOrder: 13 fieldKey: customFields label: Other Fields @@ -34160,7 +34221,7 @@ items: choices: null dynamic: false allowNull: false - - id: cAira4M1izqG7Lv5EWX4zp + - id: uQ5qrEy8x6GSRpZdcZnrqc sortOrder: 14 fieldKey: enable_batching label: Enable Batching? @@ -34180,7 +34241,7 @@ items: hidden: false defaultTrigger: null fields: - - id: w9SRRSYRqykJWHCJzqScY1 + - id: koLCA1X53uHXJy1zMCg6BC sortOrder: 0 fieldKey: operation label: Operation @@ -34192,11 +34253,11 @@ items: required: true multiple: false choices: - - label: Create + - label: Create new record value: create - - label: Update + - label: Update existing record value: update - - label: Upsert + - label: Update or create a record if one doesn't exist value: upsert - label: Bulk Upsert value: bulkUpsert @@ -34204,7 +34265,7 @@ items: value: bulkUpdate dynamic: false allowNull: false - - id: aGtoPMR3YVJ2kZEvsrWPmd + - id: 5K8YGMkXpgyFpXw83qEBSX sortOrder: 1 fieldKey: traits label: Record Matchers @@ -34226,7 +34287,7 @@ items: choices: null dynamic: false allowNull: false - - id: cLYvWW79mRJG4kjKuUb16c + - id: nHtWxXfWzX8B4qe16jguCP sortOrder: 2 fieldKey: bulkUpsertExternalId label: Bulk Upsert External Id @@ -34238,7 +34299,7 @@ items: choices: null dynamic: false allowNull: false - - id: 69642YpfvsM7o27BXErggM + - id: pkQ8NFyo48uNQFQik9ZqDt sortOrder: 3 fieldKey: bulkUpdateRecordId label: Bulk Update Record Id @@ -34250,7 +34311,7 @@ items: choices: null dynamic: false allowNull: false - - id: sLuLF4T4uA9HuzPLzW1TUo + - id: bs9yUduRCScYdhHBexxzea sortOrder: 4 fieldKey: description label: Description @@ -34262,7 +34323,7 @@ items: choices: null dynamic: false allowNull: false - - id: qimnapEs4BWRT75hjxdyEy + - id: kWXJcGByQzigM8h8xpGhLd sortOrder: 5 fieldKey: customFields label: Other Fields @@ -34282,7 +34343,7 @@ items: choices: null dynamic: false allowNull: false - - id: gQkUmxmWxnm2bJRs4FrzaD + - id: m4Vo6JvqVrW2YzNwek3TAy sortOrder: 6 fieldKey: enable_batching label: Enable Batching? diff --git a/src/_data/catalog/regional-supported.yml b/src/_data/catalog/regional-supported.yml index 7e13408f36..c84312d7d3 100644 --- a/src/_data/catalog/regional-supported.yml +++ b/src/_data/catalog/regional-supported.yml @@ -553,6 +553,7 @@ sources: - eu endpoints: - us + - eu - id: bnpfpwKnhu display_name: Radar slug: radar @@ -1155,6 +1156,14 @@ destinations: - eu endpoints: - us + - id: 6241e78214aad278a6322f52 + display_name: Breyta CRM + slug: breyta-crm + url: connections/destinations/catalog/breyta-crm + regions: + - us + endpoints: + - us - id: 54521fd525e721e32a72ee98 display_name: Bronto slug: bronto diff --git a/src/_data/catalog/sources.yml b/src/_data/catalog/sources.yml index 8b9c706dea..660d0cd2fa 100644 --- a/src/_data/catalog/sources.yml +++ b/src/_data/catalog/sources.yml @@ -1054,6 +1054,7 @@ items: - eu endpoints: - us + - eu source_type: server description: '' logo: diff --git a/src/_data/regional-support.yml b/src/_data/regional-support.yml index 81ef416370..7ee5ba4c14 100644 --- a/src/_data/regional-support.yml +++ b/src/_data/regional-support.yml @@ -15,6 +15,7 @@ sources: - node-js - php - pixel-tracking-api + - python - react-native - roku - ruby diff --git a/src/_data/sidenav/strat.yml b/src/_data/sidenav/strat.yml index 4f5cabcbcc..acc44c962f 100644 --- a/src/_data/sidenav/strat.yml +++ b/src/_data/sidenav/strat.yml @@ -4,25 +4,25 @@ sections: section_title: Adobe Integrations section: - path: /connections/destinations/catalog/adobe-analytics - title: Adobe Analytics destination - - path: /connections/destinations/catalog/actions-adobe-target-web - title: Adobe Target Web Destination - - path: /connections/destinations/catalog/actions-adobe-target-cloud - title: Adobe Target Cloud Mode Destination + title: 'Adobe Analytics destination: Overview' - path: /connections/destinations/catalog/adobe-analytics/settings - title: Mapping Segment to Adobe Analytics + title: 'Adobe Analytics destination: Mappings' - path: /connections/destinations/catalog/adobe-analytics/identity - title: Identity resolution in Segment Adobe Analytics + title: 'Adobe Analytics destination: Identity resolution' - path: /connections/destinations/catalog/adobe-analytics/mobile - title: Adobe Analytics for mobile + title: 'Adobe Analytics destination: Mobile support' - path: /connections/destinations/catalog/adobe-analytics/heartbeat - title: Adobe Analytics Heartbeat + title: 'Adobe Analytics destination: Heartbeat tracking' - path: /connections/destinations/catalog/adobe-analytics/best-practices - title: Adobe Analytics best practices + title: 'Adobe Analytics destination: Best practices' + - path: /connections/destinations/catalog/actions-adobe-target-web + title: Adobe Target Web destination + - path: /connections/destinations/catalog/actions-adobe-target-cloud + title: Adobe Target Cloud Mode destination - path: /connections/destinations/catalog/marketo-v2 title: Marketo destination - path: /connections/destinations/catalog/marketo-static-lists - title: Marketo static lists destination (Personas) + title: Marketo Static Lists destination (Personas) - path: /connections/sources/catalog/cloud-apps/marketo title: Marketo cloud source @@ -33,11 +33,13 @@ sections: - path: /connections/destinations/catalog/facebook-pixel title: Facebook Pixel destination - path: /connections/destinations/catalog/actions-facebook-conversions-api - title: Facebook Conversions API Destination (Actions) + title: Facebook Conversions API (Actions) destination - path: /connections/destinations/catalog/facebook-app-events title: Facebook App Events destination - path: /connections/destinations/catalog/facebook-offline-conversions title: Facebook Offline Conversions destination + - path: /connections/destinations/catalog/personas-facebook-custom-audiences + title: Facebook Custom Audiences destination (Personas) - path: /connections/sources/catalog/cloud-apps/facebook-ads title: Facebook Ads cloud source - path: /connections/sources/catalog/cloud-apps/facebook-lead-ads @@ -48,29 +50,30 @@ sections: section_title: Google Integrations section: - path: /connections/destinations/catalog/firebase - title: Google Firebase (mobile analytics) destination + title: Google Firebase destination - path: /connections/destinations/catalog/google-analytics title: Google Universal Analytics destination - path: /connections/destinations/catalog/actions-google-analytics-4 title: Google Analytics 4 destination - path: /connections/destinations/catalog/google-tag-manager - title: Google Tag Manager + title: Google Tag Manager destination - path: /connections/destinations/catalog/actions-google-enhanced-conversions - title: Google Enhanced Conversions + title: Google Enhanced Conversions destination - path: /connections/destinations/catalog/doubleclick-floodlight title: DoubleClick Floodlight destination - - path: /connections/destinations/catalog/personas-display-video-360 - title: 'Using Personas with Google DV360 (Beta)' - path: /connections/destinations/catalog/google-ads-classic - title: 'Google Ads (Classic) destination' + title: Google Ads (Classic) destination - path: /connections/destinations/catalog/google-ads-gtag - title: 'Google Ads (Gtag) destination' + title: Google Ads (Gtag) destination - path: /connections/destinations/catalog/google-cloud-function title: Google Cloud Function destination - path: /connections/destinations/catalog/google-cloud-pubsub - title: Google Cloud Pubsub destination - - path: /connections/sources/catalog/libraries/mobile/android - title: Google Android mobile source library + title: Google Cloud Pub/Sub destination + - path: /connections/destinations/catalog/adwords-remarketing-lists + title: Google Ads Remarketing Lists destination (Personas) + - path: /connections/destinations/catalog/personas-display-video-360 + title: Google Display & Video 360 destination (Personas) + - slug: salesforce section_title: Salesforce Integrations @@ -79,13 +82,8 @@ sections: title: Salesforce destination - path: /connections/destinations/catalog/actions-salesforce title: Salesforce (Actions) destination - # This is in Private Beta - # - path: /connections/destinations/catalog/salesforce-live-agent - # title: Salesforce Live Agent destination - path: /connections/destinations/catalog/salesforce-marketing-cloud title: Salesforce Marketing Cloud destination - # - path: /connections/destinations/catalog/salesforce-dmp - # title: Salesforce DMP destination (beta) - path: /connections/destinations/catalog/pardot title: Salesforce Pardot destination - path: /connections/sources/catalog/cloud-apps/salesforce diff --git a/src/connections/destinations/catalog/amplitude/index.md b/src/connections/destinations/catalog/amplitude/index.md index 5d61c501d0..6558bb3536 100644 --- a/src/connections/destinations/catalog/amplitude/index.md +++ b/src/connections/destinations/catalog/amplitude/index.md @@ -34,9 +34,10 @@ In addition to the docs below, Amplitude created a [integration guide](https://d ## Getting Started -1. From the Segment web app, click **Catalog**. -2. Search for "Amplitude" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the destination settings, enter your Amplitude API key. +1. From the Segment web app, navigate to **Connections > Destinations** and click **Add Destination**. +2. Search for **Amplitude** select it. +3. Choose which sources to connect the destination to. +4. In the destination settings, enter your Amplitude API key. You can find your Amplitude API key in the [Amplitude project settings](https://analytics.amplitude.com/settings/projects). It is a 32-character string of numbers and letters. Locate the project you want to receive your Segment data, copy that project's API key, and paste it into your Amplitude destination settings in Segment. diff --git a/src/connections/destinations/catalog/breyta-crm/index.md b/src/connections/destinations/catalog/breyta-crm/index.md new file mode 100644 index 0000000000..73221309f0 --- /dev/null +++ b/src/connections/destinations/catalog/breyta-crm/index.md @@ -0,0 +1,60 @@ +--- +title: Breyta Destination +id: 6241e78214aad278a6322f52 +--- + +[Breyta](https://breyta.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}, CRM as it should be. Breyta is designed to work for you, so you can spend more time closing deals. Get actionable and automatic insights throughout your customer lifecycle. + +This destination is maintained by Breyta. For any issues with the destination, [contact the Breyta Support team](mailto:hello@breyta.io). + +## Getting started + +{% include content/connection-modes.md %} + +1. Login to your [Breyta account](https://app.breyta.io){:target="_blank"}. +2. Go to the Integrations page and click **Add New**. +3. Select the Segment Integration and sign in to your Segment account to grant Breyta access. + +## Supported methods + +Breyta supports the following methods, as specified in the [Segment Spec](/docs/connections/spec). + +### Page + +Segment sends Page calls to Breyta as page events. They can be used in Breyta as event sources. You can filter and score users based on which pages they have visited. +```js +analytics.page() +``` + +### Screen + +Segment sends Screen calls to Breyta as screen events. They can be used in Breyta as event sources. You can filter and score users based on which screens they have visited. +```obj-c +[[SEGAnalytics sharedAnalytics] screen:@"Home"]; +``` + +### Identify + +Segment sends Identify calls to Breyta as an identify event. When you identify a new user, Breyta creates a new User record. If the User already exists, Breyta updates the User’s properties. +```js +analytics.identify('userId123', { + email: 'john.doe@example.com' +}); +``` + +### Group + +Segment sends Group calls to Breyta as an group event. A group event can create a Group or associate a User to a Group within Breyta. +```js +analytics.group('accountId123', { + account_id: '12345678', + name: "ABC Group" +}); +``` + +### Track + +Segment sends Track calls to Breyta as a track event. They can be used in Breyta as event sources. You can filter and score users based on which events they have triggered in your app. +```js +analytics.track('Login Button Clicked') +``` diff --git a/src/connections/destinations/catalog/clevertap/index.md b/src/connections/destinations/catalog/clevertap/index.md index 0d8acdefd7..b3762cbadd 100644 --- a/src/connections/destinations/catalog/clevertap/index.md +++ b/src/connections/destinations/catalog/clevertap/index.md @@ -9,7 +9,7 @@ Once the Segment library is integrated, toggle CleverTap on in your Segment dest You can integrate CleverTap using a server-side or mobile destination (iOS or Android). If you are interested in using CleverTap's push notifications or in-app notifications products, you should use the mobile destinations. -All server-side destination requests require either a Segment Anonymous ID or a userId in the payload. +All server-side destination requests requires both the Segment Anonymous ID or a userId in the payload. This is a requirement from CleverTap. CleverTap supports the `identify`, `track`, `page` (server-side only), and `screen` (iOS and server-side only) methods. diff --git a/src/connections/destinations/catalog/databrain/index.md b/src/connections/destinations/catalog/databrain/index.md deleted file mode 100644 index f5f2ad1a83..0000000000 --- a/src/connections/destinations/catalog/databrain/index.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: DataBrain Destination -rewrite: true -redirect_from: '/connections/destinations/catalog/supervised-ai/' -id: 5e0e30c894764f0b78f89912 ---- -[DataBrain](https://usedatabrain.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a tool for product-led companies that helps Sales and Customer Success teams close deals, increase product adoption, and retain customers. DataBrain ingests data from Segment and leverages machine learning techniques to send users automated alerts, and predict churn, conversion, and retention on any event you need to track. - -This destination is maintained by DataBrain. For any issues with the destination, [contact the DataBrain Support team](mailto:support@usedatabrain.com). - -## Getting Started - -{% include content/connection-modes.md %} - -1. From the Segment App's Destinations catalog page, click **Add Destination**. -2. Search for "DataBrain" in the Destinations Catalog, and select the DataBrain destination. -3. Go to your DataBrain dashboard, and copy your "API Key". -4. Back in the Segment app, paste the API key into the settings for the DataBrain destination. - -> info "" -> You should see data in DataBrain within 48 hours. DataBrain notifies you by email when your model is generated. - -*Optional:* You can use Segment [Replays](/docs/guides/what-is-replay/) to sync your past events which were sent through Segment into your DataBrain instance. - -## Page - -If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: - -```js -analytics.page() -``` - -Segment sends Page calls to DataBrain as a `pageview`. - -## Identify - -If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: - -```js -analytics.identify('userId123', { - email: 'john.doe@example.com' -}); -``` - -Segment sends Identify calls to DataBrain as an `identify` event. - -## Track - -If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: - -```js -analytics.track('Login Button Clicked') -``` - -Segment sends Track calls to DataBrain as a `track` event. - -## Screen - -If you're not familiar with the Segment Specs, take a look to understand what the [Screen method](/docs/connections/spec/screen/) does. Below are two example calls: - -```objc -[[SEGAnalytics sharedAnalytics] screen:@"Home"]; -``` - -```js -{ - "type": "screen", - "name": "Home", - "properties": { - "Feed Type": "private" - } -} -``` -Segment sends Screen calls to DataBrain as a `screenview`. - -## Group - -If you're not familiar with the Segment Specs, take a look to understand what the [Group method](/docs/connections/spec/group/) does. An example call would look like: - -```js -{ - "type": "group", - "groupId": "0e8c78ea9d97a7b8185e8632", - "traits": { - "name": "FooBar", - "industry": "Insurance", - "employees": 329, - "plan": "enterprise", - "total billed": 830 - } -} -``` -Segment sends Group calls to DataBrain as a `group` event. diff --git a/src/connections/destinations/catalog/help-scout/index.md b/src/connections/destinations/catalog/help-scout/index.md index e7d8c15c15..6461e8a7a9 100644 --- a/src/connections/destinations/catalog/help-scout/index.md +++ b/src/connections/destinations/catalog/help-scout/index.md @@ -30,4 +30,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th You can use the Identify call to create or update customers in your Help Scout account. -A `name` and an `email` are required by Help Scout to complete the request. You can set the userId as the `email`, although this is [not recommended](/docs/connections/spec/identify/#user-id). You can also specify `firstName` and `lastName` traits instead of a single `name` trait. You can learn more about which properties Help Scout will accept [here](https://developer.helpscout.com/mailbox-api/endpoints/customers/create/). +Help Scout requires a `name` and an `email` to complete the request. You can set the userId as the `email`, although this is [not recommended](/docs/connections/spec/identify/#user-id). You can also specify `firstName` and `lastName` traits instead of a single `name` trait. You can learn more about which properties Help Scout accepts [here](https://developer.helpscout.com/mailbox-api/endpoints/customers/create/){:target="_blank"}. + +> info "" +> This destination doesn't allow you to send custom properties to Help Scout. Use [Destination Functions](/docs/connections/functions/destination-functions/#create-a-destination-function) to send any non-standard properties to Help Scout. diff --git a/src/connections/destinations/catalog/personas-facebook-custom-audiences/index.md b/src/connections/destinations/catalog/personas-facebook-custom-audiences/index.md index 93ce341621..d72329059e 100644 --- a/src/connections/destinations/catalog/personas-facebook-custom-audiences/index.md +++ b/src/connections/destinations/catalog/personas-facebook-custom-audiences/index.md @@ -1,8 +1,7 @@ --- -title: 'Personas Facebook Custom Audiences Destination' -beta: true +title: 'Facebook Custom Audiences Destination' +strat: facebook hide-boilerplate: true -hide-dossier: true redirect_from: '/connections/destinations/catalog/personas-facebook-ads/' id: 5a4d24dcc5836400017188f6 --- diff --git a/src/connections/destinations/destination-filters.md b/src/connections/destinations/destination-filters.md index 82a182ee47..6831afb445 100644 --- a/src/connections/destinations/destination-filters.md +++ b/src/connections/destinations/destination-filters.md @@ -25,7 +25,7 @@ Keep the following limitations in mind when you use Destination Filters: - You can't apply Destination Filters to Warehouses or S3 destinations. - Each filter can only apply to one source-destination pair. -[Contact Segment](https://segment.com/help/contact/) if these limitations impact your use case. +[Contact Segment](https://segment.com/help/contact/){:target="_blank"} if these limitations impact your use case. ## Create a Destination Filter @@ -53,7 +53,7 @@ The Destination Filters API offers four different filter types: | `whitelist_fields` | Only send whitelisted properties to the destination. | | `blocklist_fields` | Don't send blocklisted properties to the destination. | -To learn more, read Segment's [Destination Filters API docs](https://reference.segmentapis.com/#6c12fbe8-9f84-4a6c-848e-76a2325cb3c5). +To learn more, read Segment's [Destination Filters API docs](https://reference.segmentapis.com/#6c12fbe8-9f84-4a6c-848e-76a2325cb3c5){:target="_blank"}. ## Examples @@ -66,37 +66,37 @@ Example: Remove email addresses from `context` and `properties`: Property-level allowlisting is available with Segment's API. Using Destination Filters, you can configure a rule that removes email addresses from `context` and `properties`. As a result, Segment only sends traits without PII to the destination. -![](images/destination-filters/pii_example.png) +![PII management example](images/destination-filters/pii_example.png) ### Control Event Volume This example shows a filter that controls event volume by only sending `User Signed Up` and `Demo Requested` events. -![](images/destination-filters/drop_example.png) +![Example of a filter that controls event volume](images/destination-filters/drop_example.png) ### Cleaner Data This example shows a rule that only sends track calls to Google Analytics. -![](images/destination-filters/clean_example.png) +![Example of a filter that only sends track calls to Google Analytics](images/destination-filters/clean_example.png) ### Remove Internal and Test Events From Production Tools This rule targets email addresses with internal domains to stop test events from reaching Destinations. -![](images/destination-filters/internal_example.png) +![Example of a filter that removes internal and test events from production tools](images/destination-filters/internal_example.png) This rule prevents an event from sending if `Order Completed` and `properties.email` contain an internal `@segment.com` email address. -![](images/destination-filters/internal_example2.png) +![Internal domain filter example](images/destination-filters/internal_example2.png) ### Sample a Percentage of Events -Using the [Destination Filters API](https://reference.segmentapis.com/#6c12fbe8-9f84-4a6c-848e-76a2325cb3c5), you can create a rule to randomly sample video heartbeat events. +Using the [Destination Filters API](https://reference.segmentapis.com/#6c12fbe8-9f84-4a6c-848e-76a2325cb3c5){:target="_blank"}, you can create a rule to randomly sample video heartbeat events. ### Drop Events -[Watch this Destination Filters walkthrough](https://www.youtube.com/watch?v=47dhAF1Hoco) to learn how to use event names to filter events sent to destinations. +[Watch this Destination Filters walkthrough](https://www.youtube.com/watch?v=47dhAF1Hoco){:target="_blank"} to learn how to use event names to filter events sent to destinations. ## Important Notes @@ -108,27 +108,31 @@ In the example in the video above, if you have a Destination Filter that filters **Error handling** -Segment makes effort to ensure that destination filters handle unexpected situations. For example, if you use the `contains()` FQL function on `null` field, Segment returns `false` instead of returning an error. If Segment can't infer your intent, Segment logs an internal error and drops the event. Segment defaults to this behavior to prevent sensitive information, like a PII filter, from getting through. +Segment makes effort to ensure that Destination Filters handle unexpected situations. For example, if you use the `contains()` FQL function on `null` field, Segment returns `false` instead of returning an error. If Segment can't infer your intent, Segment logs an internal error and drops the event. Segment defaults to this behavior to prevent sensitive information, like a PII filter, from getting through. -Errors aren't exposed in your Destination's Event Deliverability tab. For help diagnosing missing destination filter events, [contact Segment](https://segment.com/help/contact/). +Errors aren't exposed in your Destination's Event Deliverability tab. For help diagnosing missing destination filter events, [contact Segment](https://segment.com/help/contact/){:target="_blank"}. ## FAQ **How do Destination Filters work with array properties?** -Destination filters can filter properties out of objects nested in an array. For example, you can filter out the `price` property of every object in an array at `properties.products`. You can also filter out an entire array from the payload. However, you can't drop nested objects in an array or filter properties out of a single object in an array. +Destination Filters can filter properties out of objects nested in an array. For example, you can filter out the `price` property of every object in an array at `properties.products`. You can also filter out an entire array from the payload. However, you can't drop nested objects in an array or filter properties out of a single object in an array. To block a specific property from all of the objects within a properties array, set the filter using the following the format: `..​`. For example, the `properties.products.newElement` filter blocks all `newElement` property fields from each `products` object of an array within the `properties` object of a Track event. -![](images/destination-filters/filter-array-properties.png) +![Filter array properties](images/destination-filters/filter-array-properties.png) To block the Identify event trait `products.newElement`, select the option under the **User Traits** list instead. To block a context object field `products.newElement`, select it from the **Context Fields** list. **How many filters can I create?** -Segment supports 10 filters per destination. If you need help consolidating filters or would like to discuss your use case, [contact Segment](https://segment.com/help/contact/). +Segment supports 10 filters per destination. If you need help consolidating filters or would like to discuss your use case, [contact Segment](https://segment.com/help/contact/){:target="_blank"}. + +**Can I set multiple `Only Send` Destination Filters?** + +Segment evaluates multiple `Only Send` filters against each other and resolves Destination Filters in order. If multiple `Only Send` filters conflict with each other, Segment won't send information downstream. **How many properties can I view in the filter dropdown?** diff --git a/src/connections/functions/source-functions.md b/src/connections/functions/source-functions.md index a72a8374f2..d080de8049 100644 --- a/src/connections/functions/source-functions.md +++ b/src/connections/functions/source-functions.md @@ -12,20 +12,20 @@ Source functions allow you to gather data from any third-party applications with All functions are scoped to your workspace, so members of other workspaces cannot view or use them. > info "" -> Functions is available to all customer plan types with a free allotment of usage hours. Read more about [Functions usage limits](/docs/connections/functions/usage/), or see [your workspace's Functions usage stats](https://app.segment.com/goto-my-workspace/settings/usage?metric=functions). +> Functions is available to all customer plan types with a free allotment of usage hours. Read more about [Functions usage limits](/docs/connections/functions/usage/), or see [your workspace's Functions usage stats](https://app.segment.com/goto-my-workspace/settings/usage?metric=functions){:target="_blank"}. -![](images/source_functions_overview.png) +![A graphic illustrating Segment source functions](images/source_functions_overview.png) ## Create a source function -1. From your workspace, go to the Catalog and click the [Functions tab](https://app.segment.com/goto-my-workspace/functions/catalog). +1. From your workspace, go to the Catalog and click the [Functions tab](https://app.segment.com/goto-my-workspace/functions/catalog){:target="_blank"}. 2. Click **New Function**. 4. Select **Source Function** and click **Build**. > success "" -> **Tip:** Want to see some example functions? Check out the templates available in the Functions UI, or in the open-source [Segment Functions Library](https://github.com/segmentio/functions-library). (Contributions welcome!) +> **Tip:** Want to see some example functions? Check out the templates available in the Functions UI, or in the open-source [Segment Functions Library](https://github.com/segmentio/functions-library){:target="_blank"}. (Contributions welcome!) When you click **Build**, a code editor appears. Use the editor to write the code for your function, configure settings, and test the function's behavior. @@ -34,7 +34,7 @@ When you click **Build**, a code editor appears. Use the editor to write the cod ## Code the source function Source functions must have an `onRequest()` function defined. -This function is executed by Segment for each HTTP request sent to this function's webhook. +This function is executed by Segment for each HTTPS request sent to this function's webhook. ```js async function onRequest(request, settings) { @@ -44,12 +44,12 @@ async function onRequest(request, settings) { The `onRequest()` function receives two arguments: -- `request` - an object describing the incoming HTTP request. +- `request` - an object describing the incoming HTTPS request. - `settings` - set of [settings](#create-️settings-and-secrets) for this function. -We'll learn more about settings later, let's dive into how we can process the incoming request first. +### Request processing -To parse the JSON body of the request, use `request.json()` method as in the example below. +To parse the JSON body of the request, use the `request.json()` method, as in the following example: ```js async function onRequest(request) { @@ -59,7 +59,7 @@ async function onRequest(request) { ``` Use the `request.headers` object to get values of request headers. -Since it's an instance of [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers), the API is the same in both the browser and in Node.js. +Since it's an instance of [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers){:target="_blank"}, the API is the same in both the browser and in Node.js. ```js async function onRequest(request) { @@ -68,7 +68,7 @@ async function onRequest(request) { } ``` -To access the URL details, refer to `request.url` object, which is an instance of [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL). +To access the URL details, refer to `request.url` object, which is an instance of [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL){:target="_blank"}. ```js async function onRequest(request) { @@ -117,7 +117,7 @@ async function onRequest(request) { ##### Identify -Use [Identify calls](/docs/connections/spec/identify/) to connect user with their actions, and to record traits about them. +Use [Identify calls](/docs/connections/spec/identify/) to connect users with their actions, and to record traits about them. ```js @@ -160,7 +160,7 @@ The `Segment.track()` method accepts an object with the following fields: ##### Group -[Group calls](/docs/connections/spec/group/) associate user with a group - be it a company, organization, account, project, team or other. +[Group calls](/docs/connections/spec/group/) associate users with a group, like a company, organization, account, project, or team. ```js @@ -269,13 +269,13 @@ The `Segment.set()` method accepts an object with the following fields: {% include content/functions/settings.md %} -Next, fill out this setting's value in **Test** tab, so that we can run our function and verify correct setting value is being passed. +Next, fill out this setting's value in **Test** tab, so that you can run the function and check the setting values being passed. Note, this value is only for testing your function. ![Test Value For Setting](images/setting-in-test-tab.png){:width="500"} -Now that we have our setting set up and test value filled in, we can add code to read its value and run our function: +Now that you've configured a setting and filled in a test value, you can add code to read its value and run the function: ```js async function onRequest(request, settings) { @@ -290,21 +290,21 @@ When you deploy a source function in your workspace, you are prompted to fill ou ## Test the source function -You can test your code directly from the editor in two ways: either by receiving real HTTP requests through a webhook, or by manually constructing an HTTP request from within the editor. +You can test your code directly from the editor in two ways: either by receiving real HTTPS requests through a webhook, or by manually constructing an HTTPS request from within the editor. The advantage of testing your source function with webhooks is that all incoming data is real, so you can test behavior while closely mimicking the production conditions. ### Testing source functions with a webhook -You can use webhooks to test the source function either by sending requests manually (using any HTTP client such as cURL or Insomnia), or by pasting the webhook into an external server that supports webhooks (such as Slack). +You can use webhooks to test the source function either by sending requests manually (using any HTTP client such as cURL or Insomnia) or by pasting the webhook into an external server that supports webhooks (such as Slack). From the source function editor, copy the webhook URL from the "Auto-fill via Webhook" dialog. To trigger the source function, send the request using the `POST` method, with the `Content-Type` header set to `application/json` or `application/x-www-form-urlencoded`. ### Testing source functions manually -You can also manually construct headers and body of an HTTP request right inside the editor and test with this data, without using webhooks. +You can also manually construct the headers and body of an HTTPS request right inside the editor and test with this data without using webhooks. -![Test HTTP Request](images/test-manual.png){:width="500"} +![Test HTTPS Request](images/test-manual.png){:width="500"} ## Save and deploy the function @@ -318,13 +318,13 @@ You can also choose to **Save & Deploy** to save the changes, and then choose wh ## Source functions logs and errors -Your function might encounter errors that you missed during testing, or you might intentionally throw errors in your code (for example if the incoming request is missing required fields). +Your function might encounter errors that you missed during testing, or you might intentionally throw errors in your code (for example, if the incoming request is missing required fields). -If your function throws an error, execution halts immediately. Segment captures the incoming request, any console logs the function printed, and the error, and displays the this information in the function's **Errors** tab. You can use this tab to find and fix unexpected errors. +If your function throws an error, execution halts immediately. Segment captures the incoming request, any console logs the function printed, and the error, and displays this information in the function's **Errors** tab. You can use this tab to find and fix unexpected errors. ![Source Function Error Logs](images/error-logs-source.png) -Functions can throw [an Error or custom Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error), and you can also add additional helpful context in logs using the [`console` API](https://developer.mozilla.org/en-US/docs/Web/API/console). +Functions can throw [an Error or custom Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error){:target="_blank"}, and you can also add additional helpful context in logs using the [`console` API](https://developer.mozilla.org/en-US/docs/Web/API/console){:target="_blank"}. For example: ```js @@ -348,7 +348,7 @@ async function onRequest(request, settings) { ### Error types - **Bad Request** is any error thrown by your code not covered by the other errors. -- **Invalid Settings**: A configuration error prevented Segment from executing your code. If this error persists for more than an hour, [contact Segment Support](https://segment.com/help/contact/). +- **Invalid Settings**: A configuration error prevented Segment from executing your code. If this error persists for more than an hour, [contact Segment Support](https://segment.com/help/contact/){:target="_blank"}. - **Message Rejected**: Your code threw `InvalidEventPayload` or `ValidationError` due to invalid input. - **Unsupported Event Type**: Your code does not implement a specific event type (`onTrack()`, etc.) or threw a `EventNotSupported` error. - **Retry** - Your code threw `RetryError` indicating that the function should be retried. @@ -365,14 +365,14 @@ Segment only attempts to run your source function again if a **Retry** error occ ### Editing and deleting source functions -If you are a **Workspace Owner** or **Functions Admin**, you can manage your source function from the [Functions](https://app.segment.com/goto-my-workspace/functions/catalog) tab in the catalog. +If you are a **Workspace Owner** or **Functions Admin**, you can manage your source function from the [Functions](https://app.segment.com/goto-my-workspace/functions/catalog){:target="_blank"} tab in the catalog. ### Connecting source functions > note "" > You must be a **Workspace Owner** or **Source Admin** to connect an instance of your function in your workspace. -From the [Functions tab](https://app.segment.com/goto-my-workspace/functions/catalog), click **Connect Source** and follow the prompts to set it up in your workspace. +From the [Functions tab](https://app.segment.com/goto-my-workspace/functions/catalog){:target="_blank"}, click **Connect Source** and follow the prompts to set it up in your workspace. Once configured, find the webhook URL - either on the **Overview** or **Settings → Endpoint** page. @@ -390,4 +390,4 @@ The maximum payload size for an incoming webhook payload is 512 KiB. ##### What is the timeout for a function to execute? -The execution time limit is 5 seconds, however Segment strongly recommends that you keep execution time as low as possible. If you are making multiple external requests you can use async / await to make them concurrently, which will help keep your execution time low. +The execution time limit is five seconds, however Segment strongly recommends that you keep execution time as low as possible. If you are making multiple external requests you can use async / await to make them concurrently, which will help keep your execution time low. diff --git a/src/connections/sources/catalog/libraries/website/javascript/index.md b/src/connections/sources/catalog/libraries/website/javascript/index.md index 136e1d87af..dfcc39f0a6 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/index.md +++ b/src/connections/sources/catalog/libraries/website/javascript/index.md @@ -76,7 +76,7 @@ Field | | Type | Description `userId` | optional | String | The database ID for the user. If you don't know who the user is yet, you can omit the `userId` and just record `traits`. You can read more about identities in the [identify reference](/docs/connections/spec/identify). `traits` | optional | Object | A dictionary of traits you know about the user, like `email` or `name`. You can read more about traits in the [identify reference](/docs/connections/spec/identify/). `options` | optional | Object | A dictionary of options. For example, [enable or disable specific destinations](#managing-data-flow-with-the-integrations-object) for the call. _Note: If you do not pass a `traits` object, pass an empty object (as an '{}') before `options`._ -`callback` | optional | Function | A function executed after a short timeout, giving the browser time to make outbound requests first. +`callback` | optional | Function | A function executed after a timeout of 300 ms, giving the browser time to make outbound requests first. By default, Analytics.js caches traits in the browser's `localStorage` and attaches them to each Identify call. @@ -126,7 +126,7 @@ Field | | Type | Description `event`| | String | The name of the event you're tracking. You can read more about the [track method](/docs/connections/spec/track) and recommended event names. `properties` | optional | Object | A dictionary of [properties](/docs/connections/spec/track#properties) for the event. If the event was `'Added to Cart'`, it might have properties like `price` and `productType`. `options` | optional | Object | A dictionary of options. For example, [enable or disable specific destinations](#managing-data-flow-with-the-integrations-object) for the call. _Note: If you do not pass a `properties` object, pass an empty object (like '{}') before `options`_. -`callback` | optional | Function | A function that runs after a short timeout, giving the browser time to make outbound requests first. +`callback` | optional | Function | A function that runs after a timeout of 300 ms, giving the browser time to make outbound requests first. The only required argument in Analytics.js is an _event name string_. You can read more about [how Segment recommends you name events](/docs/connections/spec/track#event). @@ -139,7 +139,7 @@ analytics.track('Article Completed', { }); ``` -For more information about choosing which events to track, event naming and more, check out [Analytics Academy](https://segment.com/academy/). +For more information about choosing which events to track, event naming, and more, check out [Analytics Academy](https://segment.com/academy/){:target="_blank"}. The only required argument on Track calls in Analytics.js is an `event` name string. Read more about how Segment recommends [naming your events](/docs/connections/spec/track#event). @@ -147,7 +147,7 @@ The only required argument on Track calls in Analytics.js is an `event` name str #### Track Link `trackLink` is a helper method that attaches the `track` call as a handler to a link. -With `trackLink`, Analytics.js inserts a short timeout (300 ms) to give the `track` call more time. This is useful when a page would redirect before the `track` method could complete all requests. +With `trackLink`, Analytics.js inserts a timeout of 300 ms to give the `track` call more time. This is useful when a page would redirect before the `track` method could complete all requests. The `trackLink` method follows the format below. @@ -174,7 +174,7 @@ analytics.trackLink(link, 'Clicked Free-Trial Link', { #### Track Form `trackForm` is a helper method that binds a `track` call to a form submission. -The `trackForm` method inserts a short timeout (300 ms) to give the `track` call more time to complete. This is useful to prevent a page from redirecting before the `track` method could complete all requests. +The `trackForm` method inserts a timeout of 300 ms to give the `track` call more time to complete. This is useful to prevent a page from redirecting before the `track` method could complete all requests. The `trackForm` method follows the format below. @@ -222,7 +222,7 @@ Field | | Type | Description `name` | optional | String | The name of the page. `properties` | optional | Object | A dictionary of properties of the page. Note: Analytics.js collects `url`, `title`, `referrer` and `path` are automatically. This defaults to a `canonical url`, if available, and falls back to `document.location.href`. `options` | optional | Object | A dictionary of options. For example, [enable or disable specific destinations](#managing-data-flow-with-the-integrations-object) for the call. _Note: If you do not pass a `properties` object, pass an empty object (like '{}') before `options`_. -`callback` | optional | Function | A function that runs after a short timeout, giving the browser time to make outbound requests first. +`callback` | optional | Function | A function that runs after a timeout of 300 ms, giving the browser time to make outbound requests first. #### Default Page Properties @@ -266,7 +266,7 @@ analytics.page('Pricing', { The Group method associates an [identified user](/docs/connections/sources/catalog/libraries/website/javascript/#identify) with a company, organization, project, workspace, team, tribe, platoon, assemblage, cluster, troop, gang, party, society or any other collective noun you come up with for the same concept. -This is useful for tools like [Intercom](/docs/connections/destinations/catalog/intercom/), [Preact](/docs/connections/destinations/catalog/preact/) and [Totango](/docs/connections/destinations/catalog/totango/), as it ties the user to a **group** of other users. +This is useful for tools like [Intercom](/docs/connections/destinations/catalog/intercom/), [Preact](/docs/connections/destinations/catalog/preact/), and [Totango](/docs/connections/destinations/catalog/totango/), as it ties the user to a **group** of other users. The Group method follows the format below. @@ -281,7 +281,7 @@ Field | | Type | Description `groupId` | | String | The Group ID to associate with the current user. `traits` | optional | Object | A dictionary of [traits](/docs/connections/spec/group#traits) for the group. Example traits for a group include `address`, `website`, and `employees`. `options` | optional | Object | A dictionary of options. For example, [enable or disable specific destinations](#managing-data-flow-with-the-integrations-object) for the call. _Note: If you do not pass a `properties` object, pass an empty object (like '{}') before `options`_. -`callback` | optional | Function | A function that runs after a short timeout, giving the browser time to make outbound requests first. +`callback` | optional | Function | A function that runs after a timeout of 300 ms, giving the browser time to make outbound requests first. Example `group` call: @@ -302,7 +302,7 @@ Find more details about `group`, including the `group` payload, in [the Group Sp The Alias method combines two unassociated user identities. Segment usually handles aliasing automatically when you call `identify` on a user, however some tools require an explicit `alias` call. -This is an advanced method, but it is required to manage user identities successfully in *some* Segment destinations like [Kissmetrics](/docs/connections/destinations/catalog/kissmetrics/#alias) and [Mixpanel](/docs/connections/destinations/catalog/mixpanel/#alias). +This is an advanced method, but it's required to manage user identities successfully in *some* Segment destinations like [Kissmetrics](/docs/connections/destinations/catalog/kissmetrics/#alias) and [Mixpanel](/docs/connections/destinations/catalog/mixpanel/#alias). The Alias method follows the format below: @@ -317,7 +317,7 @@ Field | | Type | Description `userId` | | String | The new user ID you want to associate with the user. `previousId` | optional | String | The previous ID that the user was recognized by. This defaults to the currently identified user's ID. `options` | optional | Object | A dictionary of options. For example, [enable or disable specific destinations](#managing-data-flow-with-the-integrations-object) for the call. -`callback` | optional | Function | A function that is executed after a short timeout, giving the browser time to make outbound requests first. +`callback` | optional | Function | A function that is executed after a timeout of 300 ms, giving the browser time to make outbound requests first. For more details about Alias, including the **`alias` call payload**, check out the [Segment Spec](/docs/connections/spec/alias/). @@ -334,9 +334,9 @@ The Analytics.js utility methods help you change how Segment loads on your page. ### Ready -The `ready` method allows you to pass in a method that is called once Analytics.js finishes initializing, and once all enabled device-mode destinations load. It's like [jQuery's `ready` method](https://api.jquery.com/ready/), except for Destinations. +The `ready` method allows you to pass in a method that is called once Analytics.js finishes initializing, and once all enabled device-mode destinations load. It's like [jQuery's `ready` method](https://api.jquery.com/ready/){:target="_blank"}, except for Destinations. -The `ready` method is not invoked if any Destination throws an error (for example, for an expired API key, incorrect settings configuration, or when a Destination is blocked by the browser) during initialization. +The `ready` method isn't invoked if any Destination throws an error (for example, for an expired API key, incorrect settings configuration, or when a Destination is blocked by the browser) during initialization. The code in the `ready` function only executes after `ready` is emitted. @@ -378,9 +378,9 @@ analytics.debug(false); ### Emitter -The global `analytics` object emits events whenever you call `alias`, `group`, `identify`, `track` or `page`. +The global `analytics` object emits events whenever you call `alias`, `group`, `identify`, `track`, or `page`. -Use the `on` method to set listeners for these events and run your own custom code. This can be useful if you want to send data to a service for which Segment does not have a destination. +Use the `on` method to set listeners for these events and run your own custom code. This can be useful if you want to send data to a service for which Segment doesn't have a destination. ```js analytics.on(method, callback); @@ -411,14 +411,14 @@ This method emits events _before_ they are processed by the Segment integration, The `timeout` method sets the length (in milliseconds) of callbacks and helper functions. This is useful if you have multiple scripts that need to fire in your callback or `trackLink`, `trackForm` helper function. -The example below sets the timeout to 500ms. +The example below sets the timeout to 500 ms. ```js analytics.timeout(500); ``` > success "Tip" -> If you're triggering ad network conversion pixels, Segment recommends extending timeout to 500ms to account for slow load times. +> If you're triggering ad network conversion pixels, Segment recommends extending timeout to 500 ms to account for slow load times. ### Reset or Logout @@ -429,9 +429,9 @@ Calling `reset` resets the `id`, including `anonymousId`, and clears `traits` fo analytics.reset(); ``` -The `reset` method only clears the cookies and `localStorage` created by Segment. It does not clear data from other integrated tools, as those native libraries might set their own cookies to manage user tracking, sessions, and manage state. To completely clear out the user session, see the documentation provided by those tools. +The `reset` method only clears the cookies and `localStorage` created by Segment. It doesn't clear data from other integrated tools, as those native libraries might set their own cookies to manage user tracking, sessions, and manage state. To completely clear out the user session, see the documentation provided by those tools. -Segment does not share `localStorage` across subdomains. If you use Segment tracking on multiple subdomains, you must call `analytics.reset()` for each subdomain to completely clear out the user session. +Segment doesn't share `localStorage` across subdomains. If you use Segment tracking on multiple subdomains, you must call `analytics.reset()` for each subdomain to completely clear out the user session. @@ -473,7 +473,7 @@ analytics.identify('user_123', { }); ``` -You don't need to include `'All': true` in this call because it is implied as the default behavior. Instead, only list the destinations that you want to exclude, with a `false` flag for each. +You don't need to include `'All': true` in this call because it's implied as the default behavior. Instead, only list the destinations that you want to exclude, with a `false` flag for each. Destination flags are **case sensitive** and match [the destination's name in the docs](/docs/connections/destinations/) (for example, "AdLearn Open Platform", "awe.sm", "Mailchimp", etc). If a Destination has more than one acceptable name, this appears in the documentation for that destination. @@ -488,7 +488,7 @@ Destination flags are **case sensitive** and match [the destination's name in th 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 (matching the format [above](#selecting-destinations-with-the-integrations-object)), then Segment only loads the integrations in that dictionary that are marked as enabled with the boolean value `true`. -You can only call `.load` on page load, or reload (refresh). If you modify the `.load` method between page loads, it does not have any effect until the page is reloaded. +You can only call `.load` on page load, or reload (refresh). If you modify the `.load` method between page loads, it doesn't have any effect until the page is reloaded. For example: @@ -570,7 +570,7 @@ Upon receiving the `beforeunload` browser event, Analytics.js attempts to flush No. Batching is only supported as part of Analytics.js 2.0. #### Can other destinations receive batched events? -No, this batching only impacts events sent to Segment. Once the batch reaches Segment, it is split up and follows the normal path of an event. +No, this batching only impacts events sent to Segment. Once the batch reaches Segment, it's split up and follows the normal path of an event. #### Will batching impact billing or throughput? No, batching won't impact billing or throughput. @@ -732,13 +732,13 @@ Analytics.js tracks across subdomains out of the box; all Segment destinations f ## Analytics.js Performance -The Analytics.js library and all Destination libraries are loaded with the [HTML script `async` tag](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-async). This also means that Segment fires methods asynchronously, so you should adjust your code accordingly if you require that events be sent from the browser in a specific order. +The Analytics.js library and all Destination libraries are loaded with the [HTML script `async` tag](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-async){:target="_blank"}. This also means that Segment fires methods asynchronously, so you should adjust your code accordingly if you require that events be sent from the browser in a specific order. -While many tools require access to the DOM or cookies, for the Zendesk, Salesforce, and Mailchimp destinations, Segment does not need to load a native JavaScript library. Instead, Segment's servers send data to the end-tools. +While many tools require access to the DOM or cookies, for the Zendesk, Salesforce, and Mailchimp destinations, Segment doesn't need to load a native JavaScript library. Instead, Segment's servers send data to the end-tools. Segment loads the libraries required for your **enabled** Destinations. When you disable a destination, the custom version of Analytics.js loaded on your site stops requesting that library. -Using Analytics.js does not offer a large performance benefit, but is more performant than installing each of the destinations individually. And as more destinations move to accept data directly from Segment, you'll receive more performance benefits automatically. +Using Analytics.js doesn't offer a large performance benefit, but is more performant than installing each of the destinations individually. And as more destinations move to accept data directly from Segment, you'll receive more performance benefits automatically. One option, if you don't want to use any bundled third-party tools, is to use the browserify'd [analytics-node](https://github.com/segmentio/analytics-node) package. @@ -757,7 +757,7 @@ Analytics.js uses `localstorage` cookies if you have retries enabled, to keep tr - The `reclaimStart` and `reclaimEnd` cookies determine if a tab takes over the queue from another tab. - The `inProgress` and `queue` cookies track events in progress, and events queued for retry. -For more information, visit the [Segment localstorage-retry library](https://github.com/segmentio/localstorage-retry). +For more information, visit the [Segment localstorage-retry library](https://github.com/segmentio/localstorage-retry){:target="_blank"}. You can set the `debug` cookie to `analytics.js` to log debug messages from Analytics.js to the console. diff --git a/src/engage/profiles/csv-upload.md b/src/engage/profiles/csv-upload.md index c3c81b9f14..ddaedc8e4a 100644 --- a/src/engage/profiles/csv-upload.md +++ b/src/engage/profiles/csv-upload.md @@ -72,8 +72,8 @@ Use the CSV Uploader to set subscription states for user email addresses and pho > Each user profile in a Segment workspace can have multiple email addresses and phone numbers, all with different subscription states. For each CSV file, Engage adds: -- An `email_subscription_status` column next to **Email** columns. -- An `sms_subscription_status` column next to **SMS** columns. +- An `email_subscription_status` column next to the **Email** column. +- An `sms_subscription_status` column next to the **Phone** column. In the `email_subscription_status` and `sms_subscription_status` columns, set subscription states for email and phone numbers with the following values: @@ -95,11 +95,7 @@ Please note the following limits as you upload CSV files to Twilio Engage: - Upload CSV files with up to 1 million rows (plus one header row). - You can only upload one file at a time. - The CSV file size can't exceed 15 MB. - -> warning "" -> At this time, the following beta limitations apply: -> - Email addresses and phone numbers that unsubscribe from your campaigns can't be re-subscribed. -> - If you upload the same email or phone number with different subscription states in a CSV file, the resulting subscription status isn't guaranteed. +- If you upload the same email or phone number with different subscription states in a CSV file, Engage doesn't guarantee the subscription status result. ## Message consent diff --git a/src/personas/profile-api.md b/src/personas/profile-api.md index 735b00a815..ebeb3259c1 100644 --- a/src/personas/profile-api.md +++ b/src/personas/profile-api.md @@ -4,7 +4,7 @@ title: Personas Profile API > info "Plan Requirements" -> To use the Profile API, you'll need Personas Advanced on your plan. +> To use the Profile API, you'll need Personas Advanced on your plan. The Segment Profile API provides a single API to read user-level and account-level customer data. Segment now allows you to query the entire user or account object programmatically, including the `external_ids` , `traits` , and `events` that make up a user's journey through your product. @@ -40,28 +40,36 @@ This document has four parts… Your access token enables you to call the Profile API and access customer data. +> info "European Union requirements" +> To implement the Profile API in the European Union, you must complete the following steps within an EU workspace. View the [regional Segment documentation](/docs/guides/regional-segment/#create-a-new-workspace-with-a-different-region) for more information. + 1. Navigate to the API Access settings page *Personas > > Settings > API Access*. 2. Create your **Access Token** with a name that describes your use case, for example `testing/development`. Take note of the **space ID** value, you'll pass this into the Profile API request URL in a later step. - ![](images/1516309197043.png) + ![Generating an API access token in Personas](images/1516309197043.png) 3. Click **Generate token**. Copy the resulting **Access Token** and store it in a file on your computer. You'll pass in the **Access Token** into the Profile API for authorization as an HTTP Basic Auth username in a later step. - ![](images/1526362840437.png) + ![Copying an API access token in Personas](images/1526362840437.png) ### Find a user's external id 1. Navigate to Personas > *personas_space* > Explorer and select the user you want to query through the API. 2. Take note of the user's available identifiers. For example, this user has a `user_id` with the value `9800664881`. The Profile API requires both the type of ID and the value separated by a colon. For example, `user_id:9800664881`. -![](images/profile_api_user_id.png) +![Retrieving a user's identifiers with the Personas Explorer](images/profile_api_user_id.png) ### Query the user's event traits 1. From the HTTP API testing application of your choice, configure the authentication as described above. 2. Prepare the request URL by replacing `` and `` in the request URL: `https://profiles.segment.com/v1/spaces//collections/users/profiles//traits` -3. Send a GET request to the URL. + + + If you're using the Profile API in the EU, use the following URL for all requests: + + `https://profiles.euw1.segment.com/v1/spaces//collections/users/profiles//traits` +3. Send a `GET` request to the URL. ### Explore the user's traits in the response @@ -142,14 +150,18 @@ The Segment API is organized around [REST](http://en.wikipedia.org/wiki/Represen https://profiles.segment.com +**European Union endpoint** + + https://profiles.euw1.segment.com + ### Authentication -The Profile API uses basic authentication for authorization — with the **Access Token** as the authorization key. Your **Access Token** carries access to all of your customer data, so be sure to keep them secret! Do not share your Access Token in publicly accessible areas such as GitHub or client-side code. +The Profile API uses basic authentication for authorization — with the **Access Token** as the authorization key. Your **Access Token** carries access to all of your customer data, so be sure to keep them secret. Do not share your Access Token in publicly accessible areas such as GitHub or client-side code. You can create your Access Secret in your Personas Settings page. Segment recommends that you name your tokens with the name of your app and its environment, such as `marketing_site/production`. Access tokens are shown once — you won't be able to see it again. In the event of a security incident, you can revoke and cycle the access token. -![](images/1515109834051.png) +![Copying an API access token in Personas](images/1515109834051.png) When you make requests to the Profile API, use the Access Token as the basic authentication username and keep the password blank. diff --git a/src/protocols/schema.md b/src/protocols/schema.md index fba307be42..aab4a59928 100644 --- a/src/protocols/schema.md +++ b/src/protocols/schema.md @@ -9,11 +9,14 @@ Segment Business plan customers can use Schema Controls to manage which events a ## Event filters -If you no longer want to track a specific event, you can either remove it from your code or, if you're on the Business plan, you can block track calls right from the Segment UI. To do so, click on the Schema tab in a Source and toggle the event to enable or block an event. +If you no longer want to track a specific event, you can either remove it from your code or, if you're on the Business plan and don't have a Tracking Plan connected, you can block track calls from the Segment UI. To do so, click on the Schema tab in a Source and toggle the event to enable or block an event. ![Event filters](images/event-filters.png "Event filters in Segment") +> info "" +> For sources with a connected Tracking Plan, use Protocols to block unplanned events. + Once you block an event, Segment stops forwarding it to all of your Cloud and Device-mode Destinations, including your warehouses. You can remove the events from your code at your leisure. In addition to blocking track calls, Business plan customers can block all Page and Screen calls, as well as Identify traits and Group properties. diff --git a/src/utils/vale-test.md b/src/utils/vale-test.md index 24c100f961..a3ff6531eb 100644 --- a/src/utils/vale-test.md +++ b/src/utils/vale-test.md @@ -2,13 +2,10 @@ title: Vale test hidden: true --- -This file will test various Vale styles we have installed (e.g. this exclamation point!) Neat! +sdfsdfd -Links to docs should be relative, for example [here](https://www.segment.com/docs/connections). +Slave should flag, and so should grandfather. -For example, like [this](/docs/connections) +## Sentence Case Here -segment.com/docs -Here's an update. -![alt tag](/diagram-library/Elements.png) diff --git a/vale-styles/segment/headings.yml b/vale-styles/segment/headings.yml new file mode 100644 index 0000000000..7c6d14d08c --- /dev/null +++ b/vale-styles/segment/headings.yml @@ -0,0 +1,5 @@ +extends: capitalization +message: "'%s' should be in sentence case" +level: warning +scope: heading +match: $sentence diff --git a/vale-styles/segment/inclusivity.yml b/vale-styles/segment/inclusivity.yml new file mode 100644 index 0000000000..ffb9046404 --- /dev/null +++ b/vale-styles/segment/inclusivity.yml @@ -0,0 +1,20 @@ +extends: existence +message: Avoid the term '%s' +level: warning +code: false +ignorecase: true +tokens: + - appears to be + - arguably + - grandfather + - powow + - blacklist + - whitelist + - blackhat + - whitehat + - manned + - man-made + - master + - slave + - sanity check + - dummy \ No newline at end of file diff --git a/vale-styles/segment/links.yml b/vale-styles/segment/links.yml index 2e9653d53b..9847e1054e 100644 --- a/vale-styles/segment/links.yml +++ b/vale-styles/segment/links.yml @@ -1,6 +1,5 @@ extends: existence message: "Write meaningful link text." -link: https://docs.microsoft.com/en-us/style-guide/urls-web-addresses level: warning scope: link raw: