diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index c35eb9430f..512cc1368f 100644 --- a/src/_data/catalog/destination_categories.yml +++ b/src/_data/catalog/destination_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination categories last updated 2025-06-20 +# destination categories last updated 2025-07-03 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 49a555327e..df0ac9c3af 100644 --- a/src/_data/catalog/destinations.yml +++ b/src/_data/catalog/destinations.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2025-06-20 +# destination data last updated 2025-07-03 items: - id: 637e8d185e2dec264895ea89 display_name: 1Flow @@ -22981,7 +22981,7 @@ items: hidden: false defaultTrigger: type = "identify" fields: - - id: 4SZLfMZWauRsjZLZ5vbmQi + - id: 8gX8PuHbeDVGpN8tEE2K8W sortOrder: 0 fieldKey: external_id label: External User ID @@ -22995,7 +22995,7 @@ items: choices: null dynamic: false allowNull: false - - id: 2hjzkBBxYk6qCuDTyUuMBT + - id: cac3FktXkcLHSBdPunvtLg sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -23009,7 +23009,7 @@ items: choices: null dynamic: false allowNull: false - - id: pKUo2zUobMheqCsYF5DLgT + - id: oTcy2j5T7NvQZfcPVbqLiC sortOrder: 2 fieldKey: braze_id label: Braze User Identifier @@ -23023,7 +23023,7 @@ items: choices: null dynamic: false allowNull: true - - id: ecQGykv2mQR23xymLncKXE + - id: 56b7mVUwQfCcuJ6DDX7orN sortOrder: 3 fieldKey: country label: Country @@ -23037,7 +23037,7 @@ items: choices: null dynamic: false allowNull: true - - id: wGzdUBqVKRPitvJsNDBKPN + - id: odgKx8MS4igb2yyJD8DeF7 sortOrder: 4 fieldKey: current_location label: Current Location @@ -23054,7 +23054,7 @@ items: choices: null dynamic: false allowNull: true - - id: j92mMtWjdxH3hTDW5QjjyL + - id: 4dUnq4A3xEr4Am6SWqGaNC sortOrder: 5 fieldKey: date_of_first_session label: Date of First Session @@ -23066,7 +23066,7 @@ items: choices: null dynamic: false allowNull: true - - id: mYYVgXRCASZtcZV3dPUcx8 + - id: 6JdsJ8Kig3r25Tm5CM1yL3 sortOrder: 6 fieldKey: date_of_last_session label: Date of Last Session @@ -23078,7 +23078,7 @@ items: choices: null dynamic: false allowNull: true - - id: v93j3URCHV4tDAZraMHQ4F + - id: 5upMphfPzM59UWHLphRf5z sortOrder: 7 fieldKey: dob label: Date of Birth @@ -23090,7 +23090,7 @@ items: choices: null dynamic: false allowNull: true - - id: hRAHX5eakVo5Q4bwYUgYPb + - id: gzJ966i8keusXz3AeqDwQb sortOrder: 8 fieldKey: email label: Email @@ -23104,7 +23104,7 @@ items: choices: null dynamic: false allowNull: true - - id: eYoYEQv9ubyU2FqvyhBRKB + - id: aNbJQfG7nKM3nrLxFNG2K7 sortOrder: 9 fieldKey: email_subscribe label: Email Subscribe @@ -23119,7 +23119,7 @@ items: choices: null dynamic: false allowNull: false - - id: ccuLRfCp356pAx3LabXLom + - id: hz5Z3LVWHc2CedpV51dLbB sortOrder: 10 fieldKey: email_open_tracking_disabled label: Email Open Tracking Disabled @@ -23133,7 +23133,7 @@ items: choices: null dynamic: false allowNull: false - - id: xe2vM6S9kZgaagFG9v4YcE + - id: poQtZPxjFEN9HBstJ6Hor5 sortOrder: 11 fieldKey: email_click_tracking_disabled label: Email Click Tracking Disabled @@ -23147,7 +23147,7 @@ items: choices: null dynamic: false allowNull: false - - id: tX1phHcgpfgqVTNMfsDcsS + - id: 7KCnsiws3wz83svzyQfdzG sortOrder: 12 fieldKey: facebook label: Facebook Attribution Data @@ -23161,7 +23161,7 @@ items: choices: null dynamic: false allowNull: false - - id: 4uZ1xgNqNzdPiWgBXEFLi2 + - id: tcALMvwJGF7wA2kTt977Ct sortOrder: 13 fieldKey: first_name label: First Name @@ -23175,7 +23175,7 @@ items: choices: null dynamic: false allowNull: true - - id: 57oVwoa9wijrHeos3M4Ehk + - id: 8auhrzwNeFoNKS5DYtboqZ sortOrder: 14 fieldKey: gender label: Gender @@ -23191,7 +23191,7 @@ items: choices: null dynamic: false allowNull: true - - id: oJndpzi8NQdpAvZEKMXoxW + - id: qHH1WdCGFustdvJr4C9XJx sortOrder: 15 fieldKey: home_city label: Home City @@ -23205,7 +23205,7 @@ items: choices: null dynamic: false allowNull: true - - id: 8rwF5WYg4rEG1Kxiub1MR1 + - id: 3wL1YQKTJBfzF8vNRv7bT9 sortOrder: 16 fieldKey: image_url label: Image URL @@ -23219,7 +23219,7 @@ items: choices: null dynamic: false allowNull: true - - id: vbqjF1abBkFZvzFLSBeJHB + - id: k1CCjyoZHDu9ELTpY6eyZr sortOrder: 17 fieldKey: language label: Language @@ -23231,7 +23231,7 @@ items: choices: null dynamic: false allowNull: true - - id: aj24j482KuXfak3adAtc9Q + - id: jGpCPMUjHoZrqNXMqAB37C sortOrder: 18 fieldKey: last_name label: Last Name @@ -23245,7 +23245,7 @@ items: choices: null dynamic: false allowNull: false - - id: itZcJ4gvmqjj9yT7mRyUuz + - id: c6nAJXpq7tKTye1adsoyjn sortOrder: 19 fieldKey: marked_email_as_spam_at label: Marked Email as Spam At @@ -23257,7 +23257,7 @@ items: choices: null dynamic: false allowNull: true - - id: rSvvnQ3Vr3enCZPw2eoUY3 + - id: 4VuavCBLrrnWRQywddRFNH sortOrder: 20 fieldKey: phone label: Phone Number @@ -23271,7 +23271,7 @@ items: choices: null dynamic: false allowNull: true - - id: 3bV8oZRzk4BgUwFMpuUbm6 + - id: hxcaTLhkyKQKspdRB4SFT6 sortOrder: 21 fieldKey: push_subscribe label: Push Subscribe @@ -23286,7 +23286,7 @@ items: choices: null dynamic: false allowNull: false - - id: qfSXBq9F9ZVy8UmsjBvamc + - id: xdfVhRPCPYsQcNYo6xaAM6 sortOrder: 22 fieldKey: push_tokens label: Push Tokens @@ -23303,7 +23303,7 @@ items: choices: null dynamic: false allowNull: false - - id: eMAfNw5Sfwa4HY33q3mbiU + - id: 2cCQ2RzyUVQn1kC7fS9xSb sortOrder: 23 fieldKey: time_zone label: Time zone @@ -23318,7 +23318,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3ygYjwwmQAcg7oPJ1MysFG + - id: itUirR4aqqMt2pBvWKKZFq sortOrder: 24 fieldKey: twitter label: Twitter Attribution Data @@ -23333,7 +23333,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6xbjHGrsoYVTFYaMwd6dMt + - id: aMCLbNeg2te71SuqmfuhE8 sortOrder: 25 fieldKey: custom_attributes label: Custom Attributes @@ -23347,7 +23347,7 @@ items: choices: null dynamic: false allowNull: false - - id: hyhKzxhDcGUs789x9Ta4C5 + - id: xbA2nukUTac9WZo8kawVVz sortOrder: 26 fieldKey: _update_existing_only label: Update Existing Only @@ -23362,7 +23362,7 @@ items: choices: null dynamic: false allowNull: false - - id: nZsyPH2Nc8pcTTvYUrGDuR + - id: bLteNtLAfrZHYVApQtRZUm sortOrder: 27 fieldKey: enable_batching label: Batch Data to Braze @@ -23385,7 +23385,7 @@ items: hidden: false defaultTrigger: type = "track" and event != "Order Completed" fields: - - id: eKVK7HZhzSQZ94cDYGQDj6 + - id: nKLN6pQVjuKeSKdShPTK7s sortOrder: 0 fieldKey: external_id label: External User ID @@ -23399,7 +23399,7 @@ items: choices: null dynamic: false allowNull: false - - id: eGVDpzBNXD89ZVjjeEmzSL + - id: qto5WXER1SE2hXwxMCGA2f sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -23413,7 +23413,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6J7BfhTX7CExc4USxbsUTS + - id: jD7UGzEsVn3HEu4R6f2C7A sortOrder: 2 fieldKey: email label: Email @@ -23433,7 +23433,7 @@ items: choices: null dynamic: false allowNull: false - - id: hwXrUZXZYLnRr7219AMyhJ + - id: fvug1cyFVoQ9fruvAXgPqb sortOrder: 3 fieldKey: braze_id label: Braze User Identifier @@ -23447,7 +23447,7 @@ items: choices: null dynamic: false allowNull: true - - id: t92fxYyrAJxZnLDCRwq7Vz + - id: fDvkaQqyWFkLuNqDx26jTJ sortOrder: 4 fieldKey: name label: Event Name @@ -23461,7 +23461,7 @@ items: choices: null dynamic: false allowNull: false - - id: hmQzrpFonxysbhaYfuurxG + - id: tYNazWYN1iVGJDh3zHPqNb sortOrder: 5 fieldKey: time label: Time @@ -23475,7 +23475,7 @@ items: choices: null dynamic: false allowNull: false - - id: oz4zEp8Nrnp39xGyL4uvm7 + - id: 46oxx1fWVgNDFkkwBkDtbJ sortOrder: 6 fieldKey: properties label: Event Properties @@ -23489,7 +23489,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6U2fRgdQnWVMtXRSQc1xnR + - id: e46WFudaCJs2VXokqFRa8p sortOrder: 7 fieldKey: _update_existing_only label: Update Existing Only @@ -23504,7 +23504,7 @@ items: choices: null dynamic: false allowNull: false - - id: kAYeu1gEtcJDAoEjfzXNJZ + - id: 3R86e4WY7N92Fi2DP6PsCF sortOrder: 8 fieldKey: enable_batching label: Batch Data to Braze @@ -23527,7 +23527,7 @@ items: hidden: false defaultTrigger: event = "Order Completed" fields: - - id: 3iHCY7pEXbLgRc7ha8jXEu + - id: mrrnFhquS33faw2qc9NK9x sortOrder: 0 fieldKey: external_id label: External User ID @@ -23541,7 +23541,7 @@ items: choices: null dynamic: false allowNull: false - - id: ts9FV5yDZbcwTJVLTcDXdn + - id: fq38bLNayyF3WNWB6nLt3H sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -23555,7 +23555,7 @@ items: choices: null dynamic: false allowNull: false - - id: qzmvBgLmNhG6UctydRTmyN + - id: 3kJF4tqyGqC4rdPJdbu28B sortOrder: 2 fieldKey: email label: Email @@ -23569,7 +23569,7 @@ items: choices: null dynamic: false allowNull: false - - id: ohGKWa2F2gq58CDvJTnRa9 + - id: uQZotzJYD7A1k9SGq55BfC sortOrder: 3 fieldKey: braze_id label: Braze User Identifier @@ -23583,7 +23583,7 @@ items: choices: null dynamic: false allowNull: true - - id: iSTbsArgHqknDKSV2Pj7P1 + - id: nACMMntuFmvRtaWmJVD7Tn sortOrder: 4 fieldKey: time label: Time @@ -23597,7 +23597,7 @@ items: choices: null dynamic: false allowNull: false - - id: kRAPSaT2253FsBiB3FSrgd + - id: rCV4BpjS4D2jWRfmncoAPH sortOrder: 5 fieldKey: products label: Products @@ -23611,7 +23611,7 @@ items: choices: null dynamic: false allowNull: false - - id: gwRK6CsMKJdXnW6NwCEQZW + - id: kkWnfKvyAvqNWVKgyRQDbY sortOrder: 6 fieldKey: properties label: Event Properties @@ -23625,7 +23625,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8fciCUNZsuTkdaADgf2mvG + - id: gRXtMbPhYMJwxCDrNae34D sortOrder: 7 fieldKey: _update_existing_only label: Update Existing Only @@ -23640,7 +23640,7 @@ items: choices: null dynamic: false allowNull: false - - id: v8CL9eUkogvXRzPnxWKFTL + - id: vzp7wCUde51BT74GzjDEir sortOrder: 8 fieldKey: enable_batching label: Batch Data to Braze @@ -23677,7 +23677,7 @@ items: hidden: false defaultTrigger: null fields: - - id: 52rdoB1FTQPFQwSMnTd5Yn + - id: 8xjP1mApdm1wxCrhviUEwy sortOrder: 0 fieldKey: external_id label: External ID @@ -23689,7 +23689,7 @@ items: choices: null dynamic: false allowNull: false - - id: vuFAwyJj3dRTVQQoxHEXp + - id: 5iCuaJ1hGWbXT1QEgM39Kf sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -23703,7 +23703,7 @@ items: choices: null dynamic: false allowNull: false - - id: uuisUF3EgMd4LYMmbKCFFj + - id: 9j9bQ2WDWgFuifRfRyb3XH sortOrder: 2 fieldKey: merge_behavior label: Merge Behavior @@ -23732,7 +23732,7 @@ items: hidden: false defaultTrigger: event = "Create Alias" fields: - - id: rxUcVZubWGaHjpfxGv397U + - id: 4UVSEu4QpueE1VuzTLCLi sortOrder: 0 fieldKey: external_id label: External ID @@ -23744,7 +23744,7 @@ items: choices: null dynamic: false allowNull: true - - id: qzTfrqukKo3HpiemkY6ZTd + - id: hAFE7SxzkkZ2iPLJEeB9W3 sortOrder: 1 fieldKey: alias_name label: Alias Name @@ -23756,7 +23756,7 @@ items: choices: null dynamic: false allowNull: false - - id: sJ5AQ44tK2aLxyv6asidx3 + - id: nbJNe1F5p9pJHC4FTbvyYq sortOrder: 2 fieldKey: alias_label label: Alias Label @@ -23776,7 +23776,7 @@ items: hidden: false defaultTrigger: type = "identify" fields: - - id: nNbRHTfivkbHKtVYjSyDX1 + - id: n3EG4xYvjRAtiuALegspWx sortOrder: 0 fieldKey: external_id label: External User ID @@ -23790,7 +23790,7 @@ items: choices: null dynamic: false allowNull: false - - id: epRvFSvVcCMHHdLtGd5cSV + - id: fkqaqmwkxiFtnjJjZfRrgi sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -23804,7 +23804,7 @@ items: choices: null dynamic: false allowNull: false - - id: fcGi7U9UFFwPSKQkSu3ZCe + - id: kUbEWn784NDtLeQz1qbhBn sortOrder: 2 fieldKey: braze_id label: Braze User Identifier @@ -23818,7 +23818,7 @@ items: choices: null dynamic: false allowNull: true - - id: pdXAK2KiLXFV2x2ySsA7RG + - id: 7aY1YuNVV9SbMKyATMDckg sortOrder: 3 fieldKey: country label: Country @@ -23832,7 +23832,7 @@ items: choices: null dynamic: false allowNull: true - - id: 5V3isSzkWUCgSzvAFXSYD7 + - id: 9bSLdCTEE66QrtMoFLBhew sortOrder: 4 fieldKey: current_location label: Current Location @@ -23849,7 +23849,7 @@ items: choices: null dynamic: false allowNull: true - - id: dpfdq4mtkJGUozf6WDmt7a + - id: jf9p8VZgZo9LS1CbmE71B7 sortOrder: 5 fieldKey: date_of_first_session label: Date of First Session @@ -23861,7 +23861,7 @@ items: choices: null dynamic: false allowNull: true - - id: 8jSHxiGN4RD1Fjxy49spsS + - id: Db5NGdfFWEUs4bjsrbbsV sortOrder: 6 fieldKey: date_of_last_session label: Date of Last Session @@ -23873,7 +23873,7 @@ items: choices: null dynamic: false allowNull: true - - id: 8GL1ZMyRWu5r4Ma6Km3BTQ + - id: 79sAumGUio1QHLLvWMp1k7 sortOrder: 7 fieldKey: dob label: Date of Birth @@ -23885,7 +23885,7 @@ items: choices: null dynamic: false allowNull: true - - id: nLhGAZs6LHdZE3TXUi4ux8 + - id: tx7b2ehX8dXzFrQCJqShKE sortOrder: 8 fieldKey: email label: Email @@ -23899,7 +23899,7 @@ items: choices: null dynamic: false allowNull: true - - id: r33ZMFYevEsUwGqyWZwoow + - id: bYVMjUSbxKHqyYoi8RVBYj sortOrder: 9 fieldKey: email_subscribe label: Email Subscribe @@ -23914,7 +23914,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3fCr9Tk1TLq2EibJ3vZ8Uz + - id: mJ1NpBdNCPzsnoYe94K8et sortOrder: 10 fieldKey: email_open_tracking_disabled label: Email Open Tracking Disabled @@ -23928,7 +23928,7 @@ items: choices: null dynamic: false allowNull: false - - id: pHu3vrFDC1ZB3cWJmCymoo + - id: uMYyFgpJF3vyj4BTgbvEEu sortOrder: 11 fieldKey: email_click_tracking_disabled label: Email Click Tracking Disabled @@ -23942,7 +23942,7 @@ items: choices: null dynamic: false allowNull: false - - id: hcZDHoeceZWXyf1FoAhCTP + - id: d4xru2vRjEi4RT5TmWgb1y sortOrder: 12 fieldKey: facebook label: Facebook Attribution Data @@ -23956,7 +23956,7 @@ items: choices: null dynamic: false allowNull: false - - id: fqsNFme8AtJLf2oSavwFZi + - id: sWnUjpm5UwcNWUuWxy2sgN sortOrder: 13 fieldKey: first_name label: First Name @@ -23970,7 +23970,7 @@ items: choices: null dynamic: false allowNull: true - - id: 51FCQ2iFzFWLHF5HFc6qFP + - id: pEv9iR95xz8rKF8J4mQhbq sortOrder: 14 fieldKey: gender label: Gender @@ -23986,7 +23986,7 @@ items: choices: null dynamic: false allowNull: true - - id: k8BkV6HFKzUo3MrfNgJZet + - id: m3W7fjjiHMadQf9StMrwv5 sortOrder: 15 fieldKey: home_city label: Home City @@ -24000,7 +24000,7 @@ items: choices: null dynamic: false allowNull: true - - id: tfd4wVgvBQXnrVCXY6ffey + - id: pNrVJ4pLT2zYGzAB48WvZr sortOrder: 16 fieldKey: image_url label: Image URL @@ -24014,7 +24014,7 @@ items: choices: null dynamic: false allowNull: true - - id: aVsj6td2y9Kx4Wxmvjhjum + - id: f3fCwV3BdPFWkbNrYqM3bK sortOrder: 17 fieldKey: language label: Language @@ -24026,7 +24026,7 @@ items: choices: null dynamic: false allowNull: true - - id: hpAPbmskessh2xLCNaZ5xS + - id: egAthtxhyoYdweeajB19HG sortOrder: 18 fieldKey: last_name label: Last Name @@ -24040,7 +24040,7 @@ items: choices: null dynamic: false allowNull: false - - id: i7VYfqNfSRyY4ijRG8RGqD + - id: qcNhSQmPKpyaPuexHd1m1Z sortOrder: 19 fieldKey: marked_email_as_spam_at label: Marked Email as Spam At @@ -24052,7 +24052,7 @@ items: choices: null dynamic: false allowNull: true - - id: 4AMhs5AqmJxD7iHNjfa4jh + - id: ksGYS9vjjHVd3JzXG4sGEU sortOrder: 20 fieldKey: phone label: Phone Number @@ -24066,7 +24066,7 @@ items: choices: null dynamic: false allowNull: true - - id: fN3XyfDt85Wo9XF13o2mp3 + - id: bJGaRahSiHqR93TYJe7aGR sortOrder: 21 fieldKey: push_subscribe label: Push Subscribe @@ -24081,7 +24081,7 @@ items: choices: null dynamic: false allowNull: false - - id: 9W7YnSGEYXdFHSDp8Eqyfk + - id: gQq2pFMa4qvnXVvjEy6tEi sortOrder: 22 fieldKey: push_tokens label: Push Tokens @@ -24098,7 +24098,7 @@ items: choices: null dynamic: false allowNull: false - - id: h1KzAQkghErMParVQYmVP4 + - id: iPRoGkEJBLqh7Ru9xXzAab sortOrder: 23 fieldKey: time_zone label: Time zone @@ -24113,7 +24113,7 @@ items: choices: null dynamic: false allowNull: false - - id: mWegeLrK1pSRfdz7ndxmNG + - id: d4QPmoVqTXDr9UySgeqQbz sortOrder: 24 fieldKey: twitter label: Twitter Attribution Data @@ -24128,7 +24128,7 @@ items: choices: null dynamic: false allowNull: false - - id: j8FFbyFeAMCF4VaaZdNpBB + - id: jgfmowc82NGJkFDUCgoqPE sortOrder: 25 fieldKey: custom_attributes label: Custom Attributes @@ -24142,7 +24142,7 @@ items: choices: null dynamic: false allowNull: false - - id: rH4ZqgqLx5oRh2q1FMkPg2 + - id: tmBXZ9aaRzwqHkF5eauSXw sortOrder: 26 fieldKey: enable_batching label: Batch Data to Braze @@ -24165,7 +24165,7 @@ items: hidden: false defaultTrigger: type = "track" and event != "Order Completed" fields: - - id: wNMiNfNuZU2kdZMAjPRsvC + - id: gZzZN2a45MBk5Uo6i92iff sortOrder: 0 fieldKey: external_id label: External User ID @@ -24179,7 +24179,7 @@ items: choices: null dynamic: false allowNull: false - - id: f6jVmEXzhAU1mBGinrCQ5M + - id: t7tpxYcuuwAYGYoCkAgHQw sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -24193,7 +24193,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8TtMhkjC1NT58rYS4PqMYz + - id: cJHVALuf3RTmiJVbYmbN84 sortOrder: 2 fieldKey: email label: Email @@ -24213,7 +24213,7 @@ items: choices: null dynamic: false allowNull: false - - id: sHUGG93hPPxjTdKgb8Ua2p + - id: ngcrSeqf11PmsicHuFPsZu sortOrder: 3 fieldKey: braze_id label: Braze User Identifier @@ -24227,7 +24227,7 @@ items: choices: null dynamic: false allowNull: true - - id: 7XYCRe2CSrXrXisXbM9hAc + - id: dKpZ6DZCCpBPrNH3q3ExKR sortOrder: 4 fieldKey: name label: Event Name @@ -24241,7 +24241,7 @@ items: choices: null dynamic: false allowNull: false - - id: vC6N79oJAxsJArd94fVMrA + - id: nwcRbxKFbsDCQnVodqKo1q sortOrder: 5 fieldKey: time label: Time @@ -24255,7 +24255,7 @@ items: choices: null dynamic: false allowNull: false - - id: iMDoAEEEiYnpc4pshjfBVN + - id: 5ovNWXiCcnyX81UQHpoNYS sortOrder: 6 fieldKey: properties label: Event Properties @@ -24269,7 +24269,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3o7wEge8FK42GmjHXDEs3Z + - id: EvkGVvvF3w41vrSfZcu3F sortOrder: 7 fieldKey: enable_batching label: Batch Data to Braze @@ -24294,7 +24294,7 @@ items: hidden: false defaultTrigger: null fields: - - id: x6GrKzuaL3iWfSHHRdW92c + - id: eUPVg59Ppmw58zM8FLQoBH sortOrder: 0 fieldKey: external_id label: External ID @@ -24306,7 +24306,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6NkrDEeN6jBqGQwWSv2cmT + - id: qYgkfPix86B1WTjXHc8iKW sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -24315,13 +24315,39 @@ items: A user alias object. See [the docs](https://www.braze.com/docs/api/objects_filters/user_alias_object/). placeholder: '' - required: true + required: false multiple: false choices: null dynamic: false allowNull: false - - id: p9VBieeyFttdrFD3QJkSGD + - id: 7kUHwB3XP4wWExzy4zoQWv sortOrder: 2 + fieldKey: email_to_identify + label: Email to Identify + type: STRING + description: Email address to identify user. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mxQ5Mg6v7N9tmaWsHgVfAP + sortOrder: 3 + fieldKey: prioritization + label: Prioritization + type: OBJECT + description: >- + Prioritization settings for user merging if multiple users are found. + Required when email_to_identify is provided. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5yosK2mzwkpfdZ1hq7vW6k + sortOrder: 4 fieldKey: merge_behavior label: Merge Behavior type: STRING @@ -24349,7 +24375,7 @@ items: hidden: false defaultTrigger: event = "Create Alias" fields: - - id: adHLBMSsY27yiyEzzC3Hcv + - id: gk6NPK8An1b7BxAknnHrMy sortOrder: 0 fieldKey: external_id label: External ID @@ -24361,7 +24387,7 @@ items: choices: null dynamic: false allowNull: true - - id: i2WpNqbcXFRYtjvYyhKd5B + - id: oZuRPP81EkoHskVzeWB9ER sortOrder: 1 fieldKey: alias_name label: Alias Name @@ -24373,7 +24399,7 @@ items: choices: null dynamic: false allowNull: false - - id: qutsqQZtcz44YbvNpFsctL + - id: bQ14DxHoEsszTFLGn8zgAN sortOrder: 2 fieldKey: alias_label label: Alias Label @@ -24393,7 +24419,7 @@ items: hidden: false defaultTrigger: event = "Order Completed" fields: - - id: 26qNY11A6C3VheuaVnvo8V + - id: mttbcYqew3xmFCCJasxHtw sortOrder: 0 fieldKey: external_id label: External User ID @@ -24407,7 +24433,7 @@ items: choices: null dynamic: false allowNull: false - - id: mdxMKbj8bd32Y1HkcnP1ji + - id: mo57jytve23656fUQRZNhn sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -24421,7 +24447,7 @@ items: choices: null dynamic: false allowNull: false - - id: uvsztKoHtSCLe8qpUTWqZE + - id: jVX3F4nkCrEW3NEa5zRqxw sortOrder: 2 fieldKey: email label: Email @@ -24435,7 +24461,7 @@ items: choices: null dynamic: false allowNull: false - - id: kGJ6m6V9TzsFKw4aaDuDgQ + - id: qCiDffY8q4X8neFkzX2ABz sortOrder: 3 fieldKey: braze_id label: Braze User Identifier @@ -24449,7 +24475,7 @@ items: choices: null dynamic: false allowNull: true - - id: nyekkWNegAjeJ2jso5dDjJ + - id: kTqTnf262x7oy1xD9jaE5N sortOrder: 4 fieldKey: time label: Time @@ -24463,7 +24489,7 @@ items: choices: null dynamic: false allowNull: false - - id: dMzmXiBdmcv6dNj8iaiMZQ + - id: mDYwdEDPMLxCxxsJoTqxjR sortOrder: 5 fieldKey: products label: Products @@ -24477,7 +24503,7 @@ items: choices: null dynamic: false allowNull: false - - id: Yc8AoWAHGVbLWadENkafY + - id: iUbxoDYMtNHMw1TxR5S7QK sortOrder: 6 fieldKey: properties label: Event Properties @@ -24491,7 +24517,7 @@ items: choices: null dynamic: false allowNull: false - - id: PaCg9Qj9dXtHPPWA7YAcW + - id: 2cERam8KHiVE96obMoE2TH sortOrder: 7 fieldKey: enable_batching label: Batch Data to Braze @@ -24506,26 +24532,294 @@ items: choices: null dynamic: false allowNull: false + - id: bzGprD8nXKT6wAnbz4LuHA + name: Trigger Campaign + slug: triggerCampaign + description: Trigger a Braze Campaign via API-triggered delivery + platform: CLOUD + hidden: false + defaultTrigger: type = "track" + fields: + - id: adEtxVM6wzmkGPVTs7pDnN + sortOrder: 0 + fieldKey: campaign_id + label: Campaign ID + type: STRING + description: >- + The ID of the Braze campaign to trigger. The campaign must be an + API-triggered campaign created in Braze. + placeholder: '' + required: true + multiple: false + choices: null + dynamic: true + allowNull: false + - id: oQYCj5zPnSS5g2LEsnLGUx + sortOrder: 1 + fieldKey: send_id + label: Send ID + type: STRING + description: >- + Optional string to identify the send. This can be used for send level + analytics, or to cancel a send. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: aE5Tt6xMYURADXk1VtzRrV + sortOrder: 2 + fieldKey: trigger_properties + label: Trigger Properties + type: OBJECT + description: >- + Optional data that will be used to personalize the campaign message. + Personalization key-value pairs that will apply to all users in this + request. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9z7i5SUG97D2A7q6cjyMnu + sortOrder: 3 + fieldKey: broadcast + label: Broadcast + type: BOOLEAN + description: >- + If set to true, and if the audience is not provided, the campaign will + be sent to all the users in the segment targeted by the campaign. It can + not be used with "recipients". + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9Zp4r9YkWzUevMHJBfmTh8 + sortOrder: 4 + fieldKey: attachments + label: Attachments + type: OBJECT + description: Attachments to send along with the campaign. Limited to 2MB per file. + placeholder: '' + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: kFEo7HU6ckwdyGLKqFguEq + sortOrder: 5 + fieldKey: recipients + label: Recipients + type: OBJECT + description: >- + An array of user identifiers to send the campaign to. It can not be used + with "broadcast". + placeholder: '' + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: 83BHy4g9rgBf8x4JxZrjmV + sortOrder: 6 + fieldKey: prioritization + label: Prioritization + type: OBJECT + description: >- + Prioritization settings; required when using email in recipients. This + prioritization will be applied to all recipients. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kfFurhvjDuAMmefgFQntV7 + sortOrder: 7 + fieldKey: audience + label: Audience + type: OBJECT + description: >- + A standard audience object to specify the users to send the campaign to. + Including "audience" will only send to users in the audience + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3rHZERwR6c55kFDYDFmu5V + name: Upsert Catalog Item + slug: upsertCatalogItem + description: Upserts or deletes items in a catalog + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: 59HU4ZUhnof1G2MiE4skL9 + sortOrder: 0 + fieldKey: item + label: Catalog item to upsert + type: OBJECT + description: >- + The item to upsert in the catalog. The item object should contain fields + that exist in the catalog. The item object should not contain the id + field. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: vQCbvam4EkU1qm4PM1QT4i + sortOrder: 1 + fieldKey: item_id + label: Item ID + type: STRING + description: >- + The unique identifier for the item. Maximum 250 characters. Supported + characters: letters, numbers, hyphens, and underscores. + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qNWbQUexLXhAUWvmiQKwoX + sortOrder: 2 + fieldKey: enable_batching + label: Batch Data to Braze? + type: BOOLEAN + description: If true, Segment will batch events before sending to Braze. + placeholder: '' + defaultValue: true + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mSGiauTj8drV2vwKLXBjTk + sortOrder: 4 + fieldKey: operation + label: Operation + type: STRING + description: Whether to select an existing catalog or create a new one in Braze. + placeholder: '' + required: true + multiple: false + choices: + - label: Create a new catalog + value: create + - label: Select an existing catalog + value: select + dynamic: false + allowNull: false + - id: 9toFUV9t35CQuECg5MFkrC + sortOrder: 5 + fieldKey: selected_catalog_name + label: Catalog Name + type: STRING + description: The unique name of the catalog. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: 9vkcqkSQM3EepRX42a5fwB + sortOrder: 6 + fieldKey: created_catalog_name + label: Catalog Name + type: STRING + description: >- + The name of the catalog. Must be unique. Maximum 250 characters. + Supported characters: letters, numbers, hyphens, and underscores. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 21e8DxEuq6J5W5BiZAmPz7 + sortOrder: 7 + fieldKey: description + label: Catalog Description + type: STRING + description: The description of the catalog. Maximum 250 characters. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: piHv7yYnnmxnqQwYbdMu6j + sortOrder: 8 + fieldKey: columns + label: Catalog Fields + type: OBJECT + description: >- + A list of fields to create in the catalog. Maximum 500 fields. ID field + is added by default. + placeholder: '' + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: ssPVpKxgR3G5JKKDMC3j1K + sortOrder: 9 + fieldKey: onMappingSave + label: Select or Create a Catalog + type: OBJECT + description: Select an existing catalog or create a new one in Braze. + defaultValue: null + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + hidden: false presets: - - actionId: vE7Gf9yobj2gTuMBhwmg7g - name: Order Completed Calls + - actionId: 2P24zUSAL8BUpyGYNGmD7M + name: Identify Calls fields: external_id: '@path': $.userId - email: - '@path': $.traits.email braze_id: '@path': $.properties.braze_id - time: - '@path': $.receivedAt - products: - '@path': $.properties.products - properties: - '@path': $.properties + country: + '@path': $.context.location.country + current_location: + latitude: + '@path': $.context.location.latitude + longitude: + '@path': $.context.location.longitude + email: + '@path': $.traits.email + first_name: + '@path': $.traits.firstName + gender: + '@path': $.traits.gender + home_city: + '@path': $.traits.address.city + image_url: + '@path': $.traits.avatar + last_name: + '@path': $.traits.lastName + phone: + '@path': $.traits.phone + custom_attributes: + '@path': $.traits _update_existing_only: false enable_batching: true batch_size: 75 - trigger: event = "Order Completed" + trigger: type = "identify" - actionId: 3pnc4QJvUjWGi2bp6EnDt name: Track Calls fields: @@ -24551,40 +24845,25 @@ items: enable_batching: true batch_size: 75 trigger: type = "track" and event != "Order Completed" - - actionId: 2P24zUSAL8BUpyGYNGmD7M - name: Identify Calls + - actionId: vE7Gf9yobj2gTuMBhwmg7g + name: Order Completed Calls fields: external_id: '@path': $.userId - braze_id: - '@path': $.properties.braze_id - country: - '@path': $.context.location.country - current_location: - latitude: - '@path': $.context.location.latitude - longitude: - '@path': $.context.location.longitude email: '@path': $.traits.email - first_name: - '@path': $.traits.firstName - gender: - '@path': $.traits.gender - home_city: - '@path': $.traits.address.city - image_url: - '@path': $.traits.avatar - last_name: - '@path': $.traits.lastName - phone: - '@path': $.traits.phone - custom_attributes: - '@path': $.traits + braze_id: + '@path': $.properties.braze_id + time: + '@path': $.receivedAt + products: + '@path': $.properties.products + properties: + '@path': $.properties _update_existing_only: false enable_batching: true batch_size: 75 - trigger: type = "identify" + trigger: event = "Order Completed" partnerOwned: false - id: 63872c01c0c112b9b4d75412 display_name: Braze Cohorts @@ -33296,6 +33575,322 @@ items: allowNull: false presets: [] partnerOwned: false +- id: 68370e58cb330586908573b7 + display_name: Dotdigital + name: Dotdigital + slug: dotdigital + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/dotdigital + previous_names: + - Dotdigital + website: https://dotdigital.com/ + status: PUBLIC_BETA + categories: + - Email Marketing + - Marketing Automation + logo: + url: https://cdn-devcenter.segment.com/7746b31d-bf00-4b09-95a5-458a79412b96.svg + mark: + url: https://cdn-devcenter.segment.com/8c6dbc6d-a068-470f-8dea-fbf5e018d664.svg + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: false + cloudAppObject: false + linkedAudiences: true + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: api_host + type: select + defaultValue: https://r1-api.dotdigital.com + description: The region your account is in + required: true + label: Region + - name: password + type: password + defaultValue: '' + description: Your Dotdigital password. + required: true + label: Password + - name: username + type: string + defaultValue: '' + description: Your Dotdigital username + required: true + label: Username + actions: + - id: gPhNLHKkj8juUjvjrLfTNX + name: Enrol Contact to Program + slug: enrolContact + description: Creates a program enrolment. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Enrol Contact to Program" + fields: + - id: nyJjxsud3vwEM7K1vog7X4 + sortOrder: 0 + fieldKey: channelIdentifier + label: Contact Identifier type + type: STRING + description: Select the field to identify contacts. + placeholder: '' + defaultValue: email + required: true + multiple: false + choices: + - label: Email address + value: email + - label: Mobile number + value: mobileNumber + dynamic: false + allowNull: false + - id: 5g6R4KYNv9bEMABYmmUAYD + sortOrder: 1 + fieldKey: emailIdentifier + label: Email Address + type: STRING + description: The Contact's email address. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.properties.email + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 8x8hdrSE1F9VKJzoBxL4gB + sortOrder: 2 + fieldKey: mobileNumberIdentifier + label: Mobile Number + type: STRING + description: The Contact's mobile number. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.phone + then: + '@path': $.traits.phone + else: + '@path': $.properties.phone + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3gCkXs3WQBXs2QtbjsY84 + sortOrder: 3 + fieldKey: programId + label: Program + type: STRING + description: List of active programs + placeholder: '' + required: true + multiple: false + choices: null + dynamic: true + allowNull: false + - id: gg5BDRAQ9wDMy7kS9MtBQM + name: Remove Contact from List + slug: removeContactFromList + description: Removes a Contact from a List. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Remove Contact from List" + fields: + - id: uHkRrAKMcF81snVg6RvG4L + sortOrder: 0 + fieldKey: channelIdentifier + label: Contact Identifier type + type: STRING + description: Select the field to identify contacts. + placeholder: '' + defaultValue: email + required: true + multiple: false + choices: + - label: Email address + value: email + - label: Mobile number + value: mobileNumber + dynamic: false + allowNull: false + - id: 4zfS1HuKzNWBtB8RN6SUw7 + sortOrder: 1 + fieldKey: emailIdentifier + label: Email Address + type: STRING + description: The Contact's email address. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.properties.email + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: igbS3Lk1zNCoZybmJBg8Pv + sortOrder: 2 + fieldKey: mobileNumberIdentifier + label: Mobile Number + type: STRING + description: The Contact's mobile number. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.phone + then: + '@path': $.traits.phone + else: + '@path': $.properties.phone + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ww24d7Tk5CQs814VomTCUq + sortOrder: 3 + fieldKey: listId + label: List + type: NUMBER + description: The List to remove the Contact from. + placeholder: '' + required: true + multiple: false + choices: null + dynamic: true + allowNull: false + - id: mXqbgqEAfWG1MRz8cBHzS4 + name: Add Contact to List + slug: addContactToList + description: Adds a Contact to a list. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Add Contact to List" + fields: + - id: 8yfiKY51TS8CFcEffgrbdE + sortOrder: 0 + fieldKey: channelIdentifier + label: Contact Identifier type + type: STRING + description: Select the field to identify contacts. + placeholder: '' + defaultValue: email + required: true + multiple: false + choices: + - label: Email address + value: email + - label: Mobile number + value: mobileNumber + dynamic: false + allowNull: false + - id: 3R4n1rdxf48wxpaCNXsGBx + sortOrder: 1 + fieldKey: emailIdentifier + label: Email Address + type: STRING + description: The Contact's email address. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.properties.email + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sNx4UZZxtTuF9toi8rVobG + sortOrder: 2 + fieldKey: mobileNumberIdentifier + label: Mobile Number + type: STRING + description: The Contact's mobile number. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.phone + then: + '@path': $.traits.phone + else: + '@path': $.properties.phone + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hqe1EJtkmpiVoVeUZsPsqB + sortOrder: 3 + fieldKey: listId + label: List + type: NUMBER + description: The list to add the contact to. + placeholder: '' + required: true + multiple: false + choices: null + dynamic: true + allowNull: false + - id: nYZ96z4YLhtHtukyAQwWbQ + sortOrder: 4 + fieldKey: dataFields + label: Data Fields + type: OBJECT + description: >- + An object containing key/value pairs for data fields assigned to this + Contact. Custom Data Fields must already be defined in Dotdigital. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + presets: [] + partnerOwned: true - id: 57ab9dfc80412f644ff2004c display_name: DoubleClick Floodlight name: DoubleClick Floodlight @@ -36688,7 +37283,7 @@ items: previous_names: - Extensible Webhook website: http://www.segment.com - status: PUBLIC_BETA + status: PUBLIC categories: - Raw Data logo: @@ -36828,7 +37423,7 @@ items: dynamic: false allowNull: false presets: [] - partnerOwned: true + partnerOwned: false - id: 5e79ef31929aef3bdfbc53a5 display_name: Extole Platform name: Extole Platform @@ -98579,7 +99174,7 @@ items: previous_names: - Reddit Audiences website: https://business.reddithelp.com/s/article/custom-audiences - status: PUBLIC_BETA + status: PUBLIC categories: - Advertising logo: diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml index 5c270665c6..89b24aa164 100644 --- a/src/_data/catalog/destinations_private.yml +++ b/src/_data/catalog/destinations_private.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2025-06-20 +# destination data last updated 2025-07-03 items: - id: 54521fd925e721e32a72eee1 display_name: Pardot diff --git a/src/_data/catalog/regional-supported.yml b/src/_data/catalog/regional-supported.yml index fdfd71f47f..d9a080135a 100644 --- a/src/_data/catalog/regional-supported.yml +++ b/src/_data/catalog/regional-supported.yml @@ -258,6 +258,15 @@ sources: - us endpoints: - us + - id: fUGdCkAF8f + display_name: DB2 + hidden: false + slug: db2 + url: connections/sources/catalog/cloud-apps/db2 + regions: + - us + endpoints: + - us - id: 3yeoUP8E3Y display_name: Delighted hidden: false diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml index aee7fe1347..1aa783ddfa 100644 --- a/src/_data/catalog/source_categories.yml +++ b/src/_data/catalog/source_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# source categories last updated 2025-06-20 +# source categories last updated 2025-07-03 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 c5fe7d2bea..6ee745cfed 100644 --- a/src/_data/catalog/sources.yml +++ b/src/_data/catalog/sources.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# sources last updated 2025-06-20 +# sources last updated 2025-07-03 items: - id: 8HWbgPTt3k display_name: .NET @@ -591,6 +591,25 @@ items: - Warehouse status: PUBLIC partnerOwned: false + - id: fUGdCkAF8f + display_name: DB2 + isCloudEventSource: false + slug: db2 + url: connections/sources/catalog/cloud-apps/db2 + hidden: false + regions: + - us + endpoints: + - us + source_type: cloud-app + description: Use DB2 as a Warehouse Source for Reverse ETL + logo: + url: >- + https://cdn-devcenter.segment.com/9e78b3e6-9d60-4cba-9273-110e7d31b6f4.svg + categories: + - Warehouse + status: PUBLIC_BETA + partnerOwned: false - id: 3yeoUP8E3Y display_name: Delighted isCloudEventSource: true @@ -1244,7 +1263,7 @@ items: categories: - Email Marketing status: PUBLIC - partnerOwned: false + partnerOwned: true - id: D6h3UEduNW display_name: Klenty isCloudEventSource: true diff --git a/src/_data/sidenav/main.yml b/src/_data/sidenav/main.yml index c992a84ee8..52e5900904 100644 --- a/src/_data/sidenav/main.yml +++ b/src/_data/sidenav/main.yml @@ -225,6 +225,8 @@ sections: title: Functions Overview - path: /connections/functions/source-functions title: Source Functions + - path: /connections/functions/source-insert-functions + title: Source Insert Functions - path: /connections/functions/destination-functions title: Destination Functions - path: /connections/functions/insert-functions @@ -481,6 +483,8 @@ sections: title: 'Journey Step Types' - path: '/engage/journeys/v1/send-data' title: Send Data to Destinations + - path: '/engage/journeys/v1/journeys-logic' + title: Understand Journeys Logic - section_title: Journeys V2 slug: '/engage/journeys/v2' section: @@ -502,8 +506,6 @@ sections: title: Journeys Analytics - path: '/engage/journeys/faq-best-practices' title: Journeys Best Practices and FAQ - - path: '/engage/journeys/journeys-logic' - title: Understand Journeys Logic - path: '/engage/journeys/key-terms' title: Journeys Glossary - section_title: Content diff --git a/src/_sass/components/_accordion.scss b/src/_sass/components/_accordion.scss index 67dc317578..bba537b688 100644 --- a/src/_sass/components/_accordion.scss +++ b/src/_sass/components/_accordion.scss @@ -13,7 +13,7 @@ &__heading { padding-right: 20px; font-size: 16px; - font-weight: 600; + font-weight: 500; color: color(gray-800); line-height: 1.71; position: relative; @@ -38,7 +38,7 @@ display: inline-block; margin-top: 7px; font-size: 14px; - font-weight: 600; + font-weight: 500; text-decoration: underline; } diff --git a/src/_sass/components/_button.scss b/src/_sass/components/_button.scss index f3a0532daa..2303116ed6 100644 --- a/src/_sass/components/_button.scss +++ b/src/_sass/components/_button.scss @@ -1,6 +1,6 @@ .button { font-size: 12px; - font-weight: 600; + font-weight: 500; line-height: 1.5; text-align: center; padding: 8px 12px; diff --git a/src/_sass/components/_code-example.scss b/src/_sass/components/_code-example.scss index 3d1a1344eb..dba324aaf7 100644 --- a/src/_sass/components/_code-example.scss +++ b/src/_sass/components/_code-example.scss @@ -26,7 +26,7 @@ color: color(gray-700); font-size: 12px; line-height: 16px; - font-weight: 600; + font-weight: 500; &:hover { color: color(primary); diff --git a/src/_sass/components/_destination-menu.scss b/src/_sass/components/_destination-menu.scss index 8e48146169..f5544f8186 100644 --- a/src/_sass/components/_destination-menu.scss +++ b/src/_sass/components/_destination-menu.scss @@ -1,6 +1,6 @@ .destination-menu { &__title { - font-weight: 600; + font-weight: 500; padding-bottom: 10px; font-size: 14px; } diff --git a/src/_sass/components/_list-steps.scss b/src/_sass/components/_list-steps.scss index f7f0ce69f5..71bf71d497 100644 --- a/src/_sass/components/_list-steps.scss +++ b/src/_sass/components/_list-steps.scss @@ -9,7 +9,7 @@ height: 40px; border-radius: 50%; background-color: color(primary-lighter); - font-weight: 600; + font-weight: 500; color: color(primary); } diff --git a/src/_sass/components/_markdown.scss b/src/_sass/components/_markdown.scss index 6a3e144465..8dd7e9e16c 100644 --- a/src/_sass/components/_markdown.scss +++ b/src/_sass/components/_markdown.scss @@ -183,7 +183,7 @@ &::before { content: counter(list-items) ". "; color: color(primary); - font-weight: 600; + font-weight: 500; transform: translate(-23px, 0); } } @@ -227,7 +227,7 @@ th { color: color(gray-700); - font-weight: 600; + font-weight: 500; padding: 12px; @include breakpoint(medium up) { @@ -240,7 +240,7 @@ } th > code { color: #696f8c; - font-weight: 600; + font-weight: 500; font-size: 10px; background-color: inherit; } @@ -392,7 +392,7 @@ tr.show { padding: 0px 6px; border-radius: 4px; height: 16px; - font-weight: 600; + font-weight: 500; text-transform: uppercase; color: rgb(71, 77, 102); opacity: 0.65; diff --git a/src/_sass/components/_mobile-menu-side.scss b/src/_sass/components/_mobile-menu-side.scss index 7c02248795..4e80a8d787 100644 --- a/src/_sass/components/_mobile-menu-side.scss +++ b/src/_sass/components/_mobile-menu-side.scss @@ -14,7 +14,7 @@ } &__title { - font-weight: 600; + font-weight: 500; } &__list { diff --git a/src/_sass/components/_quickinfo.scss b/src/_sass/components/_quickinfo.scss index 3fe4e5a579..bc3db22f35 100644 --- a/src/_sass/components/_quickinfo.scss +++ b/src/_sass/components/_quickinfo.scss @@ -14,7 +14,7 @@ background-color:#E7E4F9; color: #6E62B6; text-transform: uppercase; - font-weight: 600; + font-weight: 500; padding: 0px 6px; border-radius: 4px @@ -35,7 +35,7 @@ margin-top: 12px; th { font-size: 14px; - font-weight: 600; + font-weight: 500; padding: 5px 13px; background-color: #F4F6FA; text-transform: none; diff --git a/src/_sass/components/_thumbnail-integration.scss b/src/_sass/components/_thumbnail-integration.scss index ee08180946..c2e1c05639 100644 --- a/src/_sass/components/_thumbnail-integration.scss +++ b/src/_sass/components/_thumbnail-integration.scss @@ -56,7 +56,7 @@ border-radius: 4px; font-size: 11px; line-height: 16px; - font-weight: 600; + font-weight: 500; text-transform: uppercase; letter-spacing: 0.2px; color: #6E62B6; diff --git a/src/_sass/components/_widget.scss b/src/_sass/components/_widget.scss index 88733076cf..f91417834c 100644 --- a/src/_sass/components/_widget.scss +++ b/src/_sass/components/_widget.scss @@ -12,7 +12,7 @@ a { text-decoration: underline; - font-weight: 600; + font-weight: 500; } } diff --git a/src/_sass/generics/_typography.scss b/src/_sass/generics/_typography.scss index d881e09ddb..f81c3fe816 100644 --- a/src/_sass/generics/_typography.scss +++ b/src/_sass/generics/_typography.scss @@ -19,5 +19,5 @@ samp { } strong { - font-weight: 600; + font-weight: 500; } diff --git a/src/_sass/vendors/_premonition.scss b/src/_sass/vendors/_premonition.scss index 7a99092854..da9fdb883c 100644 --- a/src/_sass/vendors/_premonition.scss +++ b/src/_sass/vendors/_premonition.scss @@ -94,7 +94,7 @@ .header { font-size: 14px; - font-weight: 600; + font-weight: 500; line-height: 24px; } diff --git a/src/connections/destinations/actions.md b/src/connections/destinations/actions.md index 66062e79d4..68dd8bef64 100644 --- a/src/connections/destinations/actions.md +++ b/src/connections/destinations/actions.md @@ -183,7 +183,7 @@ If necessary, click **New Mapping** to create a new, blank action. This step looks for events that match the criteria in the [debugger queue](/docs/connections/sources/debugger/), so you might need to Trigger some events with the expected criteria to test your conditions. You can skip the test step if needed, and re-try it at any time. 3. Select data models to [enrich your events](/docs/unify/linked-profiles/linked-events/) with. 4. Set up the data mapping from the Segment format to the destination tool format. -- You can click the Source field, then select the **Enrichments** tab to view and select Enrichments to use. +- You can click the Source field, then select previously configured Enrichments from the Event Properties tab. 5. Test the mapping with data from a sample event. The edit panel shows you the mapping output in the format for the destination tool. The **Select Object** option sends the entire object from the event, while the **Edit Object** option lets you map each individual property. You can change your mapping as needed and re-test. 6. When you're satisfied with the mapping, click **Save**. Segment returns you to the Mappings table. @@ -200,29 +200,45 @@ If necessary, click **New Mapping** to create a new, blank action. Segment offers suggested mappings that automatically propose relevant destination fields for both model columns and payload elements. For example, if your model includes a column or payload field named `transaction_amount`, the feature might suggest mapping it to a destination field like `Amount` or `TransactionValue`. This automation, powered by intelligent autocompletion, matches and identifies near-matching field names to streamline the setup. For more information, see [Segment's suggested mappings blogpost](https://segment.com/blog/ai-assisted-magical-mappings/){:target="_blank”} and the [Suggested Mappings Nutrition Label](/docs/connections/reverse-etl/suggested-mappings-nutrition-facts). > warning "" -> Review the suggested mappings for accuracy before finalizing them as the suggestions aren't guaranteed to be 100% accurate. +> Review the suggested mappings for accuracy before finalizing them as the suggestions aren't guaranteed to be 100% accurate. + +## Static values +Segment supports 4 static value types in Destination Actions mappings: string, boolean, number, and null. +* To create a string static value, type the string directly into the input field. +* To create boolean, number, and null values, use the **Static values** tab to create the appropriate static value based on its type. + +## Functions +In Destination Actions mappings, functions transform event data before it sends to the destination. This enables custom data handling, such as selecting non-null values or formatting fields. ### Coalesce function The coalesce function takes a primary value and uses it if it is available. If the value isn't available, the function uses the fallback value instead. +### Case function + +The case function allows you to change the casing of a given string value. + +### JSON function + +The JSON function allows you to convert an object or array to a JSON encoded string, or to convert from JSON to objects. + +### Flatten function + +The flatten function allows you to flatten a nested object to an object with a depth of 1. Keys are delimited by the configured separator. For example, an object like {a: { b: { c: 1 }, d: 2 } } will be converted to { 'a.b.c': 1, 'a.d': 2 }. + ### Replace function The replace function allows you to replace a string, integer, or boolean with a new value. You have the option to replace up to two values within a single field. ### Concatenate function -To combine two values in the event variable field, you can concatenate them using plain text and variables together. For example, to prepend the country code to a phone number, enter `+1{{Phone Number}}`. +To combine 2 values in the event variable field, you can concatenate them using plain text and variables together. For example, to prepend the country code to a phone number, enter `+1{{Phone Number}}`. Segment evaluates this field as a string, so placing text next to a variable automatically concatenates them. -Segment evaluates this field as a string, so placing text next to a variable automatically concatenates them. +You can't concatenate event variables and plain text with static values and functions. Adding a static value or function into an input field replaces any previously added event variables and plain text. ![Mapping UI showing two concatenated fields: "+1 phone" and "context.page.url context.page.path"](images/mapping-concatenation.png) -### Flatten function - -The flatten function allows you to flatten a nested object to an object with a depth of 1. Keys are delimited by the configured separator. For example, an object like {a: { b: { c: 1 }, d: 2 } } will be converted to { 'a.b.c': 1, 'a.d': 2 }. - -### Conditions +## Conditions > info "" > Self-service users can add a maximum of two conditions per Trigger. diff --git a/src/connections/destinations/catalog/actions-attentive/index.md b/src/connections/destinations/catalog/actions-attentive/index.md index e954a5639e..7d053f518d 100644 --- a/src/connections/destinations/catalog/actions-attentive/index.md +++ b/src/connections/destinations/catalog/actions-attentive/index.md @@ -1,6 +1,8 @@ --- title: Attentive (Actions) Destination id: 674f2453916dadbd36d899dc +beta: true +hidden: true --- [Attentive](https://www.attentive.com/?utm_source=partner-generated&utm_medium=partner-marketing-&utm_campaign=partner-generated-4.15.22-segment.io){:target="_blank"} with Segment makes it easy to sync customer and event data from Segment to Attentive so that you can send highly personalized and timely messages. diff --git a/src/connections/destinations/catalog/actions-linkedin-conversions/index.md b/src/connections/destinations/catalog/actions-linkedin-conversions/index.md index 699679051e..f794bfbf00 100644 --- a/src/connections/destinations/catalog/actions-linkedin-conversions/index.md +++ b/src/connections/destinations/catalog/actions-linkedin-conversions/index.md @@ -43,6 +43,10 @@ Your inputs must meet the following criteria: - `LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID` - `ACXIOM_ID` - `ORACLE_MOAT_ID` -- `conversionHappenedAt` must be a valid timestamp (milliseconds since epoch) and must have happened in the past 90 days +- `conversionHappenedAt` must be a valid epoch timestamp (milliseconds since epoch) and must have happened in the past 90 days. Segment additionally accepts [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601){:target="_blank"} formatted timestamps, and converts it to a valid epoch timestamp. Any deviations from this specification might lead to failed inputs. + +### Why does LinkedIn show "no integration data" after I successfully sent the data? + +One possible reason is that your events are missing the **currency** and **amount** fields. LinkedIn’s API won't reject events due to the lack of currency and amount data, but their platform will silently drop these events later during processing. Please ensure your payload includes those fields with valid values. diff --git a/src/connections/destinations/catalog/actions-ortto/index.md b/src/connections/destinations/catalog/actions-ortto/index.md index 9ededd79b2..421c5dd5e1 100644 --- a/src/connections/destinations/catalog/actions-ortto/index.md +++ b/src/connections/destinations/catalog/actions-ortto/index.md @@ -46,6 +46,8 @@ This destination is maintained by Ortto. For support or questions, [contact the **Ortto (Actions)** allows you to sync your Segment users with an Ortto Audience, enabling precise activation of rich, behavior-based segments—perfect for lifecycle marketing, retargeting, and large-scale personalization. You can manually create new audiences or use existing ones in Ortto, and dynamically add or remove contacts through profile upserts or activity tracking. This gives you real-time control over audience membership. +To define which audience the contact should be linked to, enter the **Audience Name** in the "**Associate Audience**" section. + Ortto blocks rapid audience re-entry to avoid undesirable side-effects from asynchronous updates. If a contact exits an audience and then re-enters the audience within 1 minute, Ortto blocks the update that causes them to rejoin the audience. Ortto uses a daily synchronization to make sure the result of any rapid updates is correctly applied. Ortto updates the Segment member audience field as normal, and any audience re-entries throughout the day that are longer than 1 minute after the last exit are processed in real time. diff --git a/src/connections/destinations/catalog/actions-reddit-audiences/index.md b/src/connections/destinations/catalog/actions-reddit-audiences/index.md index a12eac4470..5ab3d680ad 100644 --- a/src/connections/destinations/catalog/actions-reddit-audiences/index.md +++ b/src/connections/destinations/catalog/actions-reddit-audiences/index.md @@ -11,7 +11,7 @@ The Reddit Audiences destination allows advertisers to send Engage audiences fro This destination is maintained by Reddit. For any issues with the destination, [contact their Support team](mailto:adsapi-partner-support@reddit.com). ### Reddit Requirements -* Create a Reddit Ads account. * Find your ad account ID in [Accounts](https://ads.reddit.com/accounts). +- **Create a Reddit Ads account.** Find your ad account ID in [Accounts](https://ads.reddit.com/accounts){:target="_blank"}. ### Connect Reddit Ads to your workspace diff --git a/src/connections/destinations/catalog/actions-the-trade-desk-crm/index.md b/src/connections/destinations/catalog/actions-the-trade-desk-crm/index.md index e31ea194e0..a8ea1fe31f 100644 --- a/src/connections/destinations/catalog/actions-the-trade-desk-crm/index.md +++ b/src/connections/destinations/catalog/actions-the-trade-desk-crm/index.md @@ -53,6 +53,7 @@ To sync additional Audiences from your Engage space, create a separate instance ## Limitations +* Audiences up to 100 million profiles in size will be synced. * An audience must have at least 1500 unique members; otherwise, the destination fails, and the data won't sync. * Audience attempts to sync once per day. * Audience sync is a full sync. diff --git a/src/connections/destinations/catalog/actions-webhook-extensible/amazon-ads-integration-recipe.md b/src/connections/destinations/catalog/actions-webhook-extensible/amazon-ads-integration-recipe.md new file mode 100644 index 0000000000..0416601a3d --- /dev/null +++ b/src/connections/destinations/catalog/actions-webhook-extensible/amazon-ads-integration-recipe.md @@ -0,0 +1,146 @@ +--- +title: Amazon Ads Audience Sync Integration Recipe + +--- + +This recipe will guide you through how to set up a custom destination for [Amazon Ads](https://advertising.amazon.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} using Twilio Segment's [Extensible Webhooks](https://segment.com/docs/connections/destinations/catalog/actions-webhook-extensible/){:target="_blank"} feature and how to sync customer data into an Audience list. By following these steps, you can integrate your data source with Amazon Ads. + +## Prerequisites + +To integrate Amazon Ads with Segment, ensure you have the following: + +- A Segment Account: an account with the Extensible Webhooks feature enabled (private beta access). +- An Amazon Ads Account: an active account or API access to Amazon Ads. +- Authentication Credentials: the necessary credentials for authentication. These are OAuth endpoints, Client ID, Secret, Scopes. +- Data mapping information: Knowledge of the data fields required by Amazon Ads. + +## Getting started + +### 1. Set up the Extensible Webhook destination + +To set up your destination in Segment: + +1. In your Segment workspace, go to **Catalog** > **Destinations**. +2. Search for Extensible Webhook and select **Add destination**. + +### 2. Select the data source + +1. Choose the source from which you want to send data to Amazon Ads. +2. Click **Next** to proceed. + +### 3. Specify the instance details + +1. Enter a recognizable name for your webhook instance (like "Segment to Amazon Integration"). +2. (Optional) Add a brief description of the integration. + +### 4. Select the authentication type + +An Amazon Client Application has to be created which requires approval. For steps on how to complete Amazon API onboarding, see the [Amazon documentation](https://advertising.amazon.com/API/docs/en-us/guides/onboarding/overview){:target="_blank"}. + +The LwA (Login with Amazon) application that you create should have `advertising::audiences` as the scope. For Campaign management, like marking conversions, the scope should be `advertising::campaign_management`. + +Once a LwA app has been created, you will need to add the redirect URI `https://app.segment.com/oauth-service/webhook/callback` to the list of Allowed Return URLs. For more detail on this, see the [Amazon documentation](https://advertising.amazon.com/API/docs/en-us/guides/get-started/create-authorization-grant#allow-a-return-url){:target="_blank"}. + +Note down the Client ID and Secret, available in the Login with Amazon section on the [Amazon Developer site](https://developer.amazon.com/){:target="_blank"}. These will be used to set up authentication with Segment. + +#### Authentication + +To set up authentication: +1. Select OAuth 2.0 from the list of options and select **Authorization Code**. +2. Enter the following credential details as listed below or given in the web app: + - Client ID + - Client secret + - Authorize URL: `https://www.amazon.com/ap/oa` + - Token URL: `https://api.amazon.com/auth/o2/token` + - Refresh URL: `https://api.amazon.com/auth/o2/token` + - Scope: `advertising::audiences` + + The authorization URL is available in [Amazon's authorization guide](https://advertising.amazon.com/API/docs/en-us/guides/get-started/create-authorization-grant#determine-the-url-prefix-for-your-region){:target="_blank"}, and the access/refresh token URL can also be found in [Amazon's guide on access tokens](https://advertising.amazon.com/API/docs/en-us/guides/get-started/retrieve-access-token#call-the-authorization-url-to-request-access-and-refresh-tokens){:target="_blank"}, depending on your region. + +3. Once you create the destination instance, you will then be redirected to the Settings section. Click **Connect** to set up the OAuth connection with Amazon Ads. +4. You will be redirected to Amazon Ads. Log in and click **Allow** to complete the authentication flow. + +Once done redirected back to the destination settings page, authentication is completed and you’re now ready to send events to Amazon Ads. + +### 5. Perform Data Mapping + +#### Data transformation + +Amazon Ads expects data to be in a certain format with nested fields. This format cannot be mapped with the mappings functionality and will need to be transformed within an insert function. + +You will need to write an insert function that appends a property, for example one called “body”, to the event which would then have nested fields. For the Amazon Ads Audience API, a sample expected payload is of the following structure: + +``` +{ + "records": [ + { + "hashedPII": [ + { + "firstname": "sdstdsdsaring", + "address": "scdcadscstring", + "phone": "sadtrdsaidng", + "city": "ssatring", + "state": "strccaing", + "postal": "staccaring", + "email": "stracaing", + "lastname": "stacaddacring" + } + ], + "externalUserId": "A12346sgd", + "action": "CREATE" + } + ], + "targetResource": { + "connectionId": "", + "targetTypes": [ + "DSP" + ] + }, + "audienceId": 371552318001631924 +} +``` + +The Amazon Ads Audience API's expected fields are: +- `Records` is an array of objects. For the beta, Segment doesn’t support batching to iterate over this object yet. The required parameters are: + - `hashedPII`: A list of SHA-256 hashed PII that will be matched with Amazon entities. + - `firstname` + - `lastname` + - `address` + - `phone` + - `city` + - `state` + - `postal` + - `email` + - `externalUserId`: The ID used by external systems to identify customers. + - `action`: Can be “CREATE” or “DELETE” based on whether you want to add or remove the user from the list. +- `audienceID` is the ID of the Audience list to which the data should be either added or deleted. You can get the audienceID from within the Amazon Ads console or when creating an Audience from the API. + +#### Data mapping + +1. Create a new Mapping in the Mappings tab and select the **Send** HTTP action. +2. Choose which events you want to send to Amazon Ads Audience API using the Event filters. +3. Fill out mapping fields: + - Specify the URL: + - The API endpoint is based on region. + - Include the suffix with the Audience API Endpoint: `/amc/audiences/records` + - Specify the header: + - `Amazon-Advertising-API-ClientId`: The Client ID from Login with Amazon Account. +4. Use the mapping interface and search for the “body” parameter that was created in the insert function to select the transformed object that can be sent as the event body. +5. Turn off batching for this operation. + +### 6. Test the output and connection + +1. Click **Test Connection** to send a sample payload. +2. In Amazon Ads, verify that the test data has been received and processed correctly. + +#### Troubleshooting + +If the test fails: +- Review the authentication details and data mappings. +- Check for error messages in Segment and Amazon Ads. + +### 7. Save and enable the destination + +1. Once the test is successful, click **Save** to store your configuration. +2. Toggle the destination to Enable to start sending live data to Amazon Ads Audience API. +3. Monitor the data flow to ensure that events are being delivered as expected. diff --git a/src/connections/destinations/catalog/actions-webhook-extensible/google-search-ads-integration-recipe.md b/src/connections/destinations/catalog/actions-webhook-extensible/google-search-ads-integration-recipe.md new file mode 100644 index 0000000000..9e599077d4 --- /dev/null +++ b/src/connections/destinations/catalog/actions-webhook-extensible/google-search-ads-integration-recipe.md @@ -0,0 +1,113 @@ +--- +title: Google Search Ads 360 Conversion API Integration Recipe +--- + +This recipe will guide you through how to set up a custom destination for [Google Search Ads 360](https://marketingplatform.google.com/intl/en_uk/about/search-ads-360/){:target="_blank"} conversions using Twilio Segment’s [Extensible Webhooks](https://segment.com/docs/connections/destinations/catalog/actions-webhook-extensible/){:target="_blank"} feature. + +## Prerequisites + +To integrate Search Ads 360 with Twilio Segment, ensure you have the following: + +- A Segment account: an account with the Extensible Webhooks feature enabled (private beta access). +- A Search Ads account: an active account and API access to Google Search Ads 360. +- Authentication credentials: necessary credentials for authentication, for example, API keys and tokens. +- Data mapping information: knowledge of the data fields required by Search Ads 360. + +## Getting started + +### 1. Configure Extensible Webhook as a destination + +1. In your Segment workspace, navigate to **Connections** > **Catalog** > **Destinations**. +2. Use the search bar to search for "Extensible Webhook" and select **Add destination**. + +### 2. Select the data source + +1. Choose the source that you want to send data from to Google Search Ads 360. +2. Click **Next** to proceed. +3. Give your destination a name and create your destination. + +### 3. Specify the instance details + +1. Enter a recognizable name for your webhook instance, for example, Segment to Search Ads Integration. +2. (Optional) Add a brief description of the integration. + +### 4. Select the authentication type + +As a prerequisite to authenticate APIs, you need to create OAuth credentials. Once generated, note down the Client ID and Secret. They are required to set up authentication between Segment and Google Search Ads. + +You will also need to add the following redirect URI to the list of allowed return URLs: `https://app.segment.com/oauth-service/webhook/callback`. + +#### Authentication + +1. Select OAuth 2.0 and select Authorization Code. +2. Enter the following credentials details from your project: + - Client ID + - Client secret + - Authorize URL: `https://accounts.google.com/o/oauth2/v2/auth` + - Token URL: `https://oauth2.googleapis.com/token` + - Refresh URL: `https://oauth2.googleapis.com/token` + - Scope: `https://www.googleapis.com/auth/doubleclicksearch` +3. Once you have created the destination instance, you will be redirected to the Settings section. Click **Connect** to set up the OAuth connection with Google Search Ads 360. +4. Log in to your Google Search Ads account and click **Allow** to complete authentication. + +If authentication is completed successfully, you will be redirected to the destination settings page. At this point, you are ready to send events to Google Search Ads. + +### 5. Data mapping + +#### Data transformation + +Google Search Ads 360 expects data to be in a certain format with nested fields. This format cannot be mapped with the mappings functionality and will need to be transformed within an insert function. + +You will need to write an insert function that appends a property, for example one called “body”, to the event which would then have nested fields. For the Google Search Ads 360 Conversion API, an expected sample payload is of the following structure: + +``` +{ + "kind": "doubleclicksearch#conversionList", + "conversion" : [{ + "clickId" : "COiYmPDTv7kCFcP0KgodOzQAAA", // Replace with a click ID from your site + "conversionId" : "test_20130906_04", + "conversionTimestamp" : "1378710000000", + "segmentationType" : "FLOODLIGHT", + "segmentationName" : "Test", + "type": "TRANSACTION", + "revenueMicros": "10000000", // 10 million revenueMicros is equivalent to $10 of revenue + "currencyCode": "USD" + }] + } +``` + +The Google Search Ads 360 Conversion API's required fields are: +- `kind` which is `doubleclicksearch#conversionList`. Conversion is an array. While in beta, Segment doesn’t support batching to iterate over this. +- `clickId` which is the ID of a specific click on an ad that the customer clicked on. +- `conversionId` is a unique ID that tracks the particular conversion. +- `conversionTimestamp` is date and time in epoch milliseconds on when the conversion took place. +- `segmentationType` should be `FLOODLIGHT`. +- `segmentationName` is the floodlight activity to report this conversion to. +- `type` which can be `action` or `transaction` to indicate whether the conversion had a monetary value or not. + +#### Data mapping + +1. Create a new Mapping in the Mappings tab and select the **Send** HTTP action. +2. Choose which events you want to send to Google Search Ads 360 API using the Event filters. +3. Fill out mapping fields: + - Specify the URL: `https://www.googleapis.com/doubleclicksearch/v2/conversion` +4. Use the mapping interface and search for the “body” parameter that was created in the insert function to select the transformed object that can be sent as the event body. +5. Turn off batching for this operation. + +### 6. Test the output and connection + +1. Click **Test Connection** to send a sample payload. +2. In Google Search Ads 360 Conversion, verify that the test data has been received and processed correctly. + +#### Troubleshooting + +If the test fails: +- Review the authentication details and data mappings. +- Check for error messages in Segment and Search Ads. + +### 7. Save and enable the destination + +1. Once the test is successful, click **Save** to store your configuration. +2. Toggle the destination to Enable to start sending live data to Google Search Ads 360 Conversion API. +3. Monitor the data flow to ensure that events are being delivered as expected. + diff --git a/src/connections/destinations/catalog/actions-webhook-extensible/index.md b/src/connections/destinations/catalog/actions-webhook-extensible/index.md index 3df2563d8d..173cfbadd3 100644 --- a/src/connections/destinations/catalog/actions-webhook-extensible/index.md +++ b/src/connections/destinations/catalog/actions-webhook-extensible/index.md @@ -4,7 +4,6 @@ id: 66b1f528d26440823fb27af9 hidden: true redirect_from: '/connections/destinations/catalog/extensible-webhook/' --- - {% include content/plan-grid.md name="actions" %} Segment's Extensible Webhooks destination lets you send custom data payloads to any webhook endpoint. With support for flexible payload configuration, multiple authentication methods, and real-time data flow, Extensible Webhooks can help you integrate with internal systems or tools not covered by Segment’s standard destinations. diff --git a/src/connections/destinations/catalog/actions-webhook-extensible/microsoft-integration-recipe.md b/src/connections/destinations/catalog/actions-webhook-extensible/microsoft-integration-recipe.md new file mode 100644 index 0000000000..1b017824b6 --- /dev/null +++ b/src/connections/destinations/catalog/actions-webhook-extensible/microsoft-integration-recipe.md @@ -0,0 +1,114 @@ +--- +title: Microsoft Dynamics 365 (Sales Hub) Integration Recipe +--- + +This recipe will guide you through how to set up a custom destination for [Microsoft Dynamics 365 (Sales)](https://www.microsoft.com/en-us/dynamics-365/products/sales){:target="_blank"} using Twilio Segment’s [Extensible Webhooks](https://segment.com/docs/connections/destinations/catalog/actions-webhook-extensible/){:target="_blank"} feature. + +## Prerequisites + +To integrate Microsoft Dynamics 365 with Twilio Segment, ensure you have the following: + +- A Segment account: an account with the Extensible Webhooks feature enabled (private beta access). +- An Azure application: an Azure application is required for authentication. +- Authentication credentials: necessary credentials for authentication, for example, endpoints and scopes. +- Data mapping information: knowledge of the data fields required by Microsoft Dynamics 365. + +## Getting started + +### 1. Configure Extensible Webhook as a destination + +1. In your Segment workspace, navigate to **Connections** > **Catalog** > **Destinations**. +2. Use the search bar to search for "Extensible Webhook" and select **Add destination**. + +### 2. Select the data source + +1. Choose the source that you want to send data from to Microsoft Dynamics 365.. +2. Click **Next** to proceed. +3. Give your destination a name and create your destination. + +### 3. Specify the instance details + +1. Enter a recognizable name for your webhook instance, for example, Segment to Microsoft Dynamics Integration. +2. (Optional) Add a brief description of the integration. + +### 4. Select the authentication type + +For authentication, you need to first create an Azure application that can authenticate users to provide access to Microsoft Dynamics API. See [Microsoft's documentation](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app?tabs=client-secret){:target="_blank"} for details on how to create an application and how to get the client secret that will later be used for authentication. + +The redirect URI for your application is `https://app.segment.com/oauth-service/webhook/callback`. + +To connect the Azure app with the Dynamics instance, go to the Power Platform Admin Center. Here you will need to create new app users associated with a business unit, and provide security roles. + +Once you have successfully created an Azure web application and associated it with a Dynamics environment, you can proceed to authentication in Segment. + +1. Navigate to the settings page of the webhook destination in Segment. +2. Select **OAuth 2.0** and select **Authorization Code**. +3. Enter the following credential details from your web app or as listed below: + - Client ID + - Client secret + - Access Token URL: `https://login.microsoftonline.com//oauth2/v2.0/token`. Replace `` with your Azure AD tenant ID. You can be find this in the Entra admin center. For detailed steps, see [Microsoft's guide](https://learn.microsoft.com/en-us/entra/fundamentals/how-to-find-tenant){:target="_blank"}. + - Example URL with a sample directory UUID: `https://login.microsoftonline.com/861e4762-e528-4faf-ad95-70847a9efbe7/oauth2/v2.0/token` + - Scope: `https:///.default`. Replace `` with the domain of your Dynamics 365 instance. This appears in your web browser's address bar when using your app. + - Example URL for a Dynamics 365 instance: `https://org2fd4b414.crm.dynamics.com/.default`. +4. Click **Connect** to set up the OAuth connection with Microsoft. + +Authentication will take place if the configurations are correct and the access token will automatically be generated without the need for user login. + +### 5. Data mapping + +#### Data transformation (optional) + +Microsoft Dynamics 365 can create and update multiple entities all at once with a nested object structure. For example, with a single API call to the `accounts` entity, you can create a new account, contact and a related opportunity in a single shot. + +You will need to write an insert function that appends a property, for example one called “body”, to the event which would then have nested fields. For the Create New Account API, an expected sample payload is of the following structure: + +``` +{ + "name": "Sample Account", + "primarycontactid": + { + "firstname": "John", + "lastname": "Smith" + }, + "opportunity_customer_accounts": + [ + { + "name": "Opportunity associated to Sample Account", + "Opportunity_Tasks": + [ + { "subject": "Task associated to opportunity" } + ] + } + ] +} +``` + +The Create New Account API’s expected fields are listed in [Microsoft's documentation](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/reference/account?view=dataverse-latest){:target="_blank"}. + +To create or update the Account entity only, you can skip this step and directly use mappings to map properties and keys. + +#### Data mapping + +1. Create a new mapping in the Mappings tab and select the **Send** HTTP action. +2. Choose which events you want to send to Google Search Ads 360 API using the Event filters. +3. Fill out mapping fields: + - Specify the URL: `[Organization URI]/api/data/v9.2/accounts` (this is for creating new accounts) +4. Use the mapping interface and search for the “body” parameter that was created in the insert function to select the transformed object that can be sent as the event body. +5. Turn off batching for this operation. + +### 6. Test the output and connection + +1. Click **Test Connection** to send a sample payload. +2. In Microsoft Dynamics 365, verify that the test data has been received and processed correctly. + +#### Troubleshooting + +If the test fails: +- Review the authentication details and data mappings. +- Check for error messages in Segment and Search Ads. + +### 7. Save and enable the destination + +1. Once the test is successful, click **Save** to store your configuration. +2. Toggle the destination to Enable to start sending live data to Microsoft Dynamics 365. +3. Monitor the data flow to ensure that events are being delivered as expected. diff --git a/src/connections/destinations/catalog/actions-webhook-extensible/reddit-ads-audience-integration-recipe.md b/src/connections/destinations/catalog/actions-webhook-extensible/reddit-ads-audience-integration-recipe.md new file mode 100644 index 0000000000..b49552894b --- /dev/null +++ b/src/connections/destinations/catalog/actions-webhook-extensible/reddit-ads-audience-integration-recipe.md @@ -0,0 +1,131 @@ +--- +title: Reddit Ads (Audience) Integration Recipe +--- + +This recipe will guide you through setting up a custom destination for [Reddit Ads (Audiences)](https://ads.reddit.com/){:target="_blank"} using Twilio Segment's [Extensible Webhooks](https://segment.com/docs/connections/destinations/catalog/actions-webhook-extensible/){:target="_blank"} feature. By following these steps, you will be able to integrate your data source with Reddit Ads (Audiences). + +## Prerequisites + +To integrate Reddit Ads with Segment, ensure you have the following: + +- A Segment account: an account with the Extensible Webhooks feature enabled (private beta access). +- A Reddit Ads (Audiences) account: an active account or API access to Reddit Ads (Audiences). +- Authentication credentials: necessary credentials for authentication, for example, API keys and tokens. +- Data mapping information: knowledge of the data fields required by Reddit Ads (Audiences). + +## Getting started + +### 1. Configure Extensible Webhooks as a destination + +1. In your Segment workspace, navigate to **Connections** > **Catalog** > **Destinations**. +2. Use the search bar to search for "Extensible Webhooks" and select **Add destination**. + +### 2. Select the data source + +1. Choose the source that you want to send data from to Reddit Ads (Audiences). +2. Click **Next** to proceed. +3. Give your destination a name and create your destination. + +### 3. Specify the instance details + +In Reddit Ads, create an app. For steps on how to do this, see the [Reddit documentation](https://ads-api.reddit.com/docs/v3/#create-a-developer-application){:target="_blank"}. + +When creating your app, specify the following details: + +- Name: Give your webhook instance a recognizable name. +- Description (optional): Add a brief description of the integration. +- Endpoint URL: Provide the webhook URL or endpoint provided by Reddit Ads (Audiences). + +> info "Redirect URI" +> The redirect URI used when creating a Reddit web app is `https://app.segment.com/oauth-service/webhook/callback`. + +### 4. Select the authentication type + +Reddit provides developers with an option to create a web application to set up OAuth 2.0 for the Ads API to be authenticated. Once a web app has been created, you will need to note down the Client ID and Secret provided by Reddit. These will be used to set up authentication on Segment. + +To set up OAuth: + +1. Go to **Authentication Method** and select **OAuth 2.0**. +2. Enter the following credentials as required: + - Client ID: This can be found in your the Reddit web app. + - Secret: This can be found in your the Reddit web app. + - Authorize URL: `https://www.reddit.com/api/v1/authorize` + - Token URL: `https://www.reddit.com/api/v1/access_token ` + - Refresh URL: `https://www.reddit.com/api/v1/access_token` + - Scope: To update Audiences, you will need to add ‘adsedit’ as a scope. To add multiple scopes, separate the values by commas. + +You can also find the Authorize URL, Token URL, and Refresh URL in the [Reddit documentation](https://ads-api.reddit.com/docs/v3/operations/Update%20Custom%20Audience%20Users){:target="_blank"}. + +3. Once you create the destination instance, you will be redirected to Settings. Click on **Connect** to set up the OAuth connection with Reddit and you’ll be redirected to reddit. Click on “Allow” to complete the authentication flow. +4. Once you’re redirected back to the destination settings page, this means that authentication is completed and you’re now ready to send events to Reddit. + +### 5. Perform data mapping + +#### Data transformation + +The Reddit Custom Audience API expects data in a nested format. To format the payload correctly, you will have to write an insert function that appends a new property, such as "body". + +This will have the following structure: + +``` +{ + "data": { + "action_type": "ADD", + "column_order": [ + "EMAIL_SHA256", + "MAID_SHA256" + ], + "user_data": [ + [ + "d7ef2e7b2a3663c25284a3d6d13b1ca727fc8c659474b81afe0cec997a4737d2", + "510870d7b3e47a28a2b2f3aef27a4c81aab0b2eefda27dea50bc4c991d9e5435" + ] + ] + } +} +``` + +The required parameters are: + +- `action_type` which can take values `ADD` or `REMOVE` depending on whether a customer has to be added or removed from the list. +- `column_order` which can take two values, `EMAIL_SHA256` and `MAID_SHA256`. The order indicates the column order of the data being synced inside `user_data`. +- `user_data` is an array of values which has hashed `email_id` or `MAID_id` or both. While in beta, Segment doesn’t support batching to iterate just over this array yet. + +#### Data mapping + +In this recipe, as an example, users are added to the existing audience but you can use one or multiple mappings to perform any `PUT`, `PATCH` or `POST` action types. + +1. Create a new mapping from the Mappings tab, click on **Add Mapping** and select the **Send** HTTP action. +2. Select events to send. Define the event triggers to send to Reddit Ads (Audiences) using the event filters. +3. Fill out mapping fields: + 1. Specify the URL and method. + - For example, using the following URL: `https://ads-api.reddit.com/api/v3/custom_audiences/{audience_id}/users` + 1. Replace `audience_id` with the actual audience ID you want to edit. You can find the ID below the name of the Audience List to be modified on Audience Manager. + 2. Select **`PATCH`** as the HTTP method. The API expects a `PATCH` operation on the endpoint. +4. Use the mapping interface and search for the “body” parameter that was created in the insert function to select the transformed object that can be sent as the event body. +5. Turn off batching for this operation. + +Reddit supports three types of actions that can be performed via Extensible Webhooks. + +- Audiences + - Manage Audiences: Create a new audience or manage existing ones. + - Manage Audience Users: `PATCH` users in existing audiences or create a new audience and add users to it. +- Campaigns + - Manage Campaigns: Create a new campaign or manage existing ones. + +### 6. Test the output and connection + +1. Click **Test Connection** to send a sample payload. +2. Verify in Reddit Ads (Audiences) that the test data has been received and processed correctly. + +Troubleshooting: + +If the test fails: +- Review the authentication details and data mappings. +- Check for error messages in Segment and Reddit Ads (Audiences). + +### 7. Save and enable the destination + +1. Once the test is successful, click **Save** to store your configuration. +2. Toggle the destination to Enabled to start sending live data. +3. Monitor the data flow to ensure events are being delivered as expected. diff --git a/src/connections/destinations/catalog/actions-webhook-extensible/reddit-ads-conversion-api-integration-recipe.md b/src/connections/destinations/catalog/actions-webhook-extensible/reddit-ads-conversion-api-integration-recipe.md new file mode 100644 index 0000000000..59fb150aea --- /dev/null +++ b/src/connections/destinations/catalog/actions-webhook-extensible/reddit-ads-conversion-api-integration-recipe.md @@ -0,0 +1,155 @@ +--- +title: Reddit Ads Conversion API Integration Recipe +--- + +This recipe will guide you through setting up a custom destination for [Reddit Ads Conversion API](https://ads.reddit.com/){:target="_blank"} using Segment’s [Extensible Webhooks](https://segment.com/docs/connections/destinations/catalog/actions-webhook-extensible/){:target="_blank"} feature. By following these steps, you can integrate your data source with Reddit Ads Conversion API without writing any code. + +## Prerequisites + +To integrate Reddit Ads Conversion with Segment, ensure you have the following: + +- A Segment account: an account with the Extensible Webhooks feature enabled. +- Reddit Ads Conversion API account: an active account or API access to Reddit Ads Conversion API. +- Authentication credentials: necessary credentials for authentication, for example, API keys and tokens. +- Data mapping information: knowledge of the data fields required by Reddit Ads Conversion API. + +## Getting started + +### 1. Configure Extensible Webhook as a destination + +1. In your Segment workspace, go to **Catalog** > **Destinations**. +2. Use the search bar to search for "Extensible Webhook" and select **Add destination**. + +### 2. Select the data source + +1. Choose the source that you want to send data from to Reddit Ads Conversion API. +2. Click **Next** to proceed. +3. Give your destination a name and create your destination. + +### 3. Specify the instance details + +In Reddit Ads, create an app. For steps on how to do this, see the [Reddit documentation](https://business.reddithelp.com/s/article/Create-a-Reddit-Application){:target="_blank"}. + +When creating your app, specify the following details: + +- Name: Give your webhook instance a recognizable name. +- Description (optional): Add a brief description of the integration. +- Endpoint URL: Provide the webhook URL or endpoint provided by Reddit Ads Conversion API. + +### 4. Select the authentication type + +Reddit provides two methods for authentication: +- Creating an app. +- Using the conversion access token. + +The conversion access token provides a bearer token that can be added to the header. To get the conversion access token from Reddit Ads: + +1. In your Reddit Ads account and navigate to **Events Manager**. +2. Select **Conversions API**. +3. Click **Generate Access Token** to generate your token. Copy and make a note of it. + +Once you have the conversion token, go back to your destination in your Segment workspace. In Settings, go to **Authorization Settings** and select **No Auth** as the authentication method. + +### 5. Perform data mapping + +#### Data transformation + +The Reddit Conversion API expects data in a nested format. To format the payload correctly, you will need to write an insert function that appends a new property, for example "body". + +This will have the following structure: + +``` +{ + "events": [ + { + "click_id": "3184742045291813272", + "event_at": "2018-01-01T00:00:00Z", + "event_at_ms": 1514764800000, + "event_type": { + "tracking_type": "Purchase", + "custom_event_name": "string" + }, + "event_metadata": { + "item_count": 5, + "currency": "USD", + "value": 1099, + "value_decimal": 10.99, + "conversion_id": "H72B9A4YXQ", + "products": [ + { + "id": "item-213", + "name": "Carne Asada Burrito", + "category": "Food Items" + } + ] + }, + "user": { + "email": "snoo@example.com", + "external_id": "7c73f2ae-a433-4d7b-9838-f467da98f48e", + "uuid": "1684189007728.7c73f2ae-a433-4d7b-9838-f467da98f48e", + "ip_address": "192.0.2.1", + "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0", + "idfa": "EA7583CD-A667-48BC-B806-42ECB2B48606", + "aaid": "cdda802e-fb9c-47ad-9866-0794d394c912", + "opt_out": true, + "screen_dimensions": { + "width": 3440, + "height": 1440 + }, + "data_processing_options": { + "modes": [ + "LDU" + ], + "country": "US", + "region": "US-CA" + } + } + } + ] +} +``` + +The conversions payload consists of three core components: + +- `event_type`: This classifies the conversion event used for aggregating data in reporting. +- `event_metadata`: This contains information associated with specific actions or conversion events shared to Reddit. +- `user`: This includes attribution and advanced matching signals that improve conversion measurement. + +These components are separated into various parameters, some of which are required: +- `event_at` +- `tracking_type` +- `conversion_id` + +It’s also recommended that you include the `email`, `ip_address`, `uuid`, and `click_id` parameters. + +### Data mapping + +To map data from your destination to Reddit Ads: + +1. Create a new mapping in the Mappings tab, select the **Send** action. +2. Define the event trigger by selecting the events you want to send to Reddit Ads Conversion API using the Event name filters. +3. (Optional) Add enrichment entities as needed. +4. Fill out mapping fields: + 1. To specify the URL, go to your Reddit Ads account, navigate to **Pixel configuration** to find your Pixel ID. The format of the URL should be `https://ads-api.reddit.com/api/v2.0/conversions/events/{{YOURPIXEL_ID}}`, with your pixel ID being at the end of the URL. + 2. Specify the headers: + - Set up Authorization using the bearer token generated in the previous step. + - Specify the content type that the Conversion API expects. +5. Use the mapping interface and search for the “body” parameter that was created in the insert function to select the transformed object that can be sent as the event body. +6. Turn off batching for this operation. + +### 6. Test the output and connection + +1. Click **Test Connection** to send a sample payload. +2. In the Reddit Ads Conversion API, verify that the test data has been received and processed correctly. + +#### Troubleshooting + +If the test fails: +- Review the authentication details and data mappings. +- Check for error messages in Segment and the Reddit Ads Conversion API. + +### 7. Save and enable the destination + +1. Once the test is successful, click **Save** to store your configuration. +2. Toggle the destination to Enable to start sending live data to Reddit Ads Conversion API. +3. Monitor the data flow to ensure that events are being delivered as expected. diff --git a/src/connections/destinations/catalog/adjust/index.md b/src/connections/destinations/catalog/adjust/index.md index f01340d82f..68660c6a4e 100644 --- a/src/connections/destinations/catalog/adjust/index.md +++ b/src/connections/destinations/catalog/adjust/index.md @@ -231,6 +231,14 @@ The destination will automatically recognize the spec'd `orderId` property, and If you're using Adjust's iOS SDK, it will automatically takes care of duplicate purchase events. Segment uses Adjust's default deduplication (using `transactionId`) when you send an `orderId` (see the [ecommerce spec](/docs/connections/spec/ecommerce/v2/#order-completed)). +### Sending in-app events from Adjust to Segment + +Customers can forward in-app events from Adjust to Segment by following these steps: + +1. Navigate to the Segment module within the Adjust dashboard. +2. Go to the **Data sharing** section. +3. Use the **Map your events** option to select and map the in-app events you'd like to forward to Segment. + ### In-app purchase receipts The destination does not currently support in-app purchase receipts. If this is important to you, [reach out to support](https://segment.com/help/contact/){:target="_blank”}. @@ -246,3 +254,4 @@ By default, our destination enables event buffering for Adjust. This saves your ### Deep linking The destination does not automatically support deep linking out of the box (you'd need to write code here regardless). This means you can use [Adjust's deep-linking](https://github.com/adjust/ios_sdk#7-set-up-deep-link-reattributions){:target="_blank"} by accessing [the Adjust SDK directly](/docs/connections/sources/catalog/libraries/mobile/ios/#faq). + diff --git a/src/connections/destinations/catalog/dotdigital/index.md b/src/connections/destinations/catalog/dotdigital/index.md new file mode 100644 index 0000000000..afee218011 --- /dev/null +++ b/src/connections/destinations/catalog/dotdigital/index.md @@ -0,0 +1,34 @@ +--- +title: Dotdigital Destination +id: 68370e58cb330586908573b7 +beta: true +redirect_from: "/docs/connections/destinations/catalog/actions-dotdigital/" +--- +{% include content/plan-grid.md name="actions" %} + +[Dotdigital](https://dotdigital.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an all-in-one customer experience and data platform (CXDP) that empowers marketing teams to exceed customer expectations with highly personalized cross-channel journeys. + +This destination is maintained by Dotdigital. For any issues with the destination, [contact the Dotdigital Support team](mailto:support@dotdigital.com). + +## Getting started + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for "Dotdigital". +2. Select Dotdigital and click **Add Destination**. +3. Select an existing Source to connect to Dotdigital (Actions). +4. Log in to your [Dotdigital account](https://login.dotdigital.com/){:target="_blank"}. Expand the User menu in the bottom left and go to Settings > Access > API users. +5. Note your API region (r1, r2 or r3) for step 7. +6. Create a [new API user](https://developer.dotdigital.com/docs/setting-up-an-api-user) {:target="_blank”}. +7. In Segment, select your Dotdigital account region and paste the **API user** and **API password** in the Dotdigital destination settings. + +{% include components/actions-fields.html %} + +## Additional context + +### Add Contact to List +Before using the Add Context to List Action, complete the following prerequisites: + +- **Lists**: [Create a contact list in Dotdigital](https://support.dotdigital.com/en/articles/8198769-create-a-contact-list) {:target="_blank”}. After you've created a list in Dotdigital, return to the Segment app and select your list from the dropdown in the Segment event mapping. +- **Data Fields**: [Create or edit your data fields in Dotdigital](https://support.dotdigital.com/en/articles/8198833-create-delete-and-edit-custom-data-fields){:target="_blank”}, then return to the Segment app, open the event mapping, and map Segment properties to Dotdigital data fields. + +### Enroll Contact to Program +When you use the Enroll Contact to Program action, Dotdigital creates a contact for the identifier you provide, if the contact doesn't already exist. \ No newline at end of file diff --git a/src/connections/destinations/catalog/podsights/index.md b/src/connections/destinations/catalog/podsights/index.md index edd44cefeb..767cae93d3 100644 --- a/src/connections/destinations/catalog/podsights/index.md +++ b/src/connections/destinations/catalog/podsights/index.md @@ -3,37 +3,35 @@ rewrite: true title: Podsights Destination id: 5d25eddde3ff660001b3adda --- -[Podsights](https://podsights.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} measures the effectiveness of podcast advertising. Through integrations with podcast hosting providers, matches downloads with on-site actions, providing advertisers household-level attribution. - -This destination is maintained by Podsights. For any issues with the destination, [contact the Podsights Support team](mailto:hello@podights.com). - - -## Getting Started +[Podsights](https://podsights.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} measures the effectiveness of podcast advertising. Through integrations with podcast hosting providers, Podsights matches podcast downloads with on-site actions to provide household-level attribution. +This destination is maintained by Podsights. For any issues with the destination, [contact the Podsights/Spotify support team](https://adshelp.spotify.com/HelpCenter/s/contactsupport?language=en_US){:target="_blank”}. +## Getting started 1. From the Segment web app, click **Catalog**. -2. Search for "Podsights" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Visit your [Podsights dashboard](https://analytics.podsights.com){:target="_blank"} and navigate to Manage > Pixels. Copy your Pixel ID which will be your Segment "API Key". -4. Drop the Pixel ID in the "API Key" field in your Segment Settings UI. - +2. Search for "Podsights", select it, and choose the source you'd like to connect. +3. Visit your [Podsights dashboard](https://analytics.podsights.com){:target="_blank"}, go to **Manage > Pixels**, then copy your Pixel ID. This is your Segment API Key. +4. Paste the Pixel ID into the **API Key** field in your Segment destination settings. Once you start sending data to the Podsights' Destination it will take up to 20 minutes to appear in the Podsights pixel debugger. ## 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: +If you're not familiar with the Segment Spec, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: ```js analytics.page() ``` -Page calls will be sent to Podsights as a `view` event. +Segment sends Page events to Podsights as `view` events. -Podsights is an attribution platform, and as such, we need more context about the visitor than just a User ID. Analytics.js [automatically collects context fields](/docs/connections/spec/common/#context-fields-automatically-collected). Podsights requires certain context fields and properties for page calls. Below is an example of a raw JSON payload that contains the minimum requirements. +Podsights needs additional context for attribution, including certain fields inside the `context` and `properties` objects. Analytics.js [automatically collects these fields](/docs/connections/spec/common/#context-fields-automatically-collected), but you must provide them manually when sending events server-side. -```js +Here’s the minimum required structure for a Page call: + +```json { "type": "page", "context": { @@ -49,14 +47,14 @@ Podsights is an attribution platform, and as such, we need more context about th } ``` -For page events Podsights requires a `context` object that contains a `userAgent` and an `ip` field and a `properties` object that contains a `referrer` and a `url` field. -As you can see in the page event's raw JSON payload above. +For page events, Podsights requires a `context` object that contains a `userAgent` and an `ip` field and a `properties` object that contains a `referrer` and a `url` field. +As you can see in the page event's raw JSON payload. -The `context` and `properties` object are required, along with the fields in them. If you're using Segment server-side you must send these attributes. Otherwise Podsights will return a `400 HTTP Error`. +If any of these required fields are missing (especially if you're sending events server-side), Podsights will return a `400` HTTP error. ## 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: +If you're not familiar with the Segment Spec, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: ```js analytics.track('Order Completed', { @@ -67,8 +65,7 @@ analytics.track('Order Completed', { }); ``` -Track calls will be mapped to Podsights events. Podsights' support the following from the Segment Spec: - +Track calls will be mapped to Podsights events. Podsights supports the following from the Segment Spec: * [Signed Up](/docs/connections/spec/b2b-saas/#signed-up) as `lead` * [Product Viewed](/docs/connections/spec/ecommerce/v2/#product-viewed) as `product` @@ -76,10 +73,14 @@ Track calls will be mapped to Podsights events. Podsights' support the following * [Checkout Started](/docs/connections/spec/ecommerce/v2/#checkout-started) as `checkout` * [Order Completed](/docs/connections/spec/ecommerce/v2/#order-completed) as `purchase` -For track events Podsights requires a `context` object that contains a `userAgent` and an `ip` Podsights also requires a `page` object that contains a `referrer` and a `url` field. -Analytics.js [automatically collects context fields](/docs/connections/spec/common/#context-fields-automatically-collected). Podsights requires certain context fields for track calls. Below is an example of a raw JSON payload that contains the minimum requirements. +Track calls must include: -```js +- a `context` object with `userAgent` and `ip` +- a `context.page` object with `referrer` and `url` + +These fields are required whether they're sent through Analytics.js or server-side. Here’s a minimum working example: + +```json { "type": "track", "context": { @@ -97,7 +98,7 @@ Analytics.js [automatically collects context fields](/docs/connections/spec/comm } ``` -The `context` and `page` object are required, along with the fields in them. If you're using Segment server-side you must send these attributes. Otherwise Podsights will return a `400 HTTP Error`. +If you're using Segment server-side, you must send these attributes. Otherwise, Podsights will return a `400` HTTP error. ## Server -Podsights does not support server-side events out of the box, but you can send server-side events if you follow the requirements of page and track events outlined in the sections for each call. +Podsights doesn’t support server-side events by default. However, you can send server-side events as long as you include all the required context and page fields described in the Page and Track sections on this page. \ No newline at end of file diff --git a/src/connections/functions/source-insert-functions.md b/src/connections/functions/source-insert-functions.md new file mode 100644 index 0000000000..e95a942626 --- /dev/null +++ b/src/connections/functions/source-insert-functions.md @@ -0,0 +1,121 @@ +--- +title: Source Insert Functions +--- + +Use Source Insert Functions to enrich, transform, or filter your data before it flows downstream to destinations. + +> info "Source Insert Function is in public beta" +> Source Insert Function is in public beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. + +There are two ways you can access source insert functions from your Segment workspace: +- From the Connections catalog. +- From the Sources tab. + +## Create a Source Insert Function + +To create a source insert function from Segment’s catalog: + +1. Navigate to **Connections > Catalog > Functions** and click **New Function**. + +2. In the Select Function Type screen, select **Source Insert** and click **Next: Build Function**. + +3. Write and test your function code. Enter a sample event and click **Run** to test the function. + +4. Click **Next: Configure & Create** to add a function name, description (optional), and function logo (optional). + +5. Click **Create Function** to save your insert function. The new source insert function displays in the Functions tab. + +You can also go to **Conections** > **Sources** to create a source insert function in the Sources tab. + +### Coding the source insert function + +Insert functions can define handlers for the following message types: +- `onIdentity` +- `onTrack` +- `onPage` +- `onScreen` +- `onGroup` +- `onAlias` +- `onDelete` + +The default source code template includes handlers for all event types. Implement the types you need. For event types you want to send through, return the event in the respective event handler. + +### Settings + +You can add and edit settings for source insert functions in the code editor. Settings allow you to configure the behavior of your source insert function, which changes how it is displayed to anyone using your function. To set up: + +1. Go to the **Settings** tab in the code editor and click **Add Setting**. +2. Add the details about this setting. +3. Click **Add Setting** to save the configuration. + +As you change values, such as **Label**, **Name**, **Type**, and **Description**, a preview updates showing how your setting will look and work. Once saved, the new setting appears in the **Settings** tab of the function. Here, you can edit or delete the setting. + +### Testing + +You can test your source insert function with sample events or a manual configuration in the code editor. This allows you to test the functions behavior with real incoming data. To do this: + +1. Go to the **Test** tab in the code editor and click **Use Sample Event** or **customize the event yourself** to set up your test data. +2. Click **Run** to execute the test. + +Test results appear under **Output**, showing whether the function ran successfully or failed. + + +### Connect a source insert function to a source + +For data to flow downstream after transformation, connect your source insert function to a source. To do this: + +1. Select the insert function you want to connect to the source. You can edit, delete, and connect the insert function on the side pane. +2. Click **Connect a source**. +3. Select the source you want to connect to and click **Connect to Source**. + +### Errors and error handling + +Segment considers a function’s execution successful if it completes without error. You can `throw` an error to create a failure on purpose. Use these errors to validate event data before processing to make sure the function works as expected. + +You can `throw` the following pre-defined error types to indicate that the function ran successfully, but the data was not deliverable: + +- `EventNotSupported` +- `InvalidEventPayload` +- `ValidationError` +- `RetryError` +- `DropEvent` + +This is similar to Source, Destination, and Insert Functions. + +The errors listed are all permanent errors, except `RetryError`. When a `RetryError` is thrown, Segment reattempts to run the function a set number of times before permanently erroring out. + +## FAQs + +##### Why does the Delivery Overview tab not display any errors that occur within the source insert function? + +Errors in the Delivery Overview tab are not yet visible and is a work in progress. + +##### Can I test the function with different event types? + +You can test the function with different event types from the **Test** tab in the code editor, similar to other functions. + +##### Can I use source insert functions for all types of sources? + +Source insert functions only work for event sources, not object sources or rETL. + +##### What is the expected latency for a source insert function? + +The source insert function typically completes in 200 milliseconds to 5 seconds, depending on its complexity. The default timeout is 5 seconds but can be increased to 60 seconds. + +##### What is the runtime environment? + +Segment supports Node.js V18 and installs the dependencies listed [here](https://segment.com/docs/connections/functions/insert-functions/#runtime-and-dependencies){:target=”_blank”} in the function. Segment also installs the following dependencies: +- `@azure/identity` exposed as `azure.identity` +- `@azure/event-hubs` exposed as `azure.eventHubs` +- `@azure/synapse` exposed as `azure.synapse` +- `jsftp` exposed as `jsftp` +- `crypto-js` exposed as `cryptojslib.cryptojs` +- `akeyless` exposed as `akeylessLabs.akeyless` +- `akeyless-cloud-id` exposed as `akeylessLabs.akeylessCloudId` +- `@onesignal/node-onesignal` exposed as `oneSignal.oneSignal` +- `pg` exposed as `pg.pg` +- `snowflake-sdk` exposed as `snowflakesdk.snowflakesdk` +- `@clickhouse/client` exposed as `clickHouseClient.clickHouseClient` +- `aws4` exposed as `aws4.aws4` +- `@sentry/node` exposed as `sentrylib.sentry` + diff --git a/src/connections/reverse-etl/reverse-etl-source-setup-guides/db2-setup.md b/src/connections/reverse-etl/reverse-etl-source-setup-guides/db2-setup.md index 915a9d71bc..f67904d3c7 100644 --- a/src/connections/reverse-etl/reverse-etl-source-setup-guides/db2-setup.md +++ b/src/connections/reverse-etl/reverse-etl-source-setup-guides/db2-setup.md @@ -2,6 +2,9 @@ title: Db2 Reverse ETL Setup --- +> info "Db2 Reverse ETL Private Beta" +> Db2 Reverse ETL is currently in Private Beta and is governed by Segment's [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank"}. + Set up Db2 as your Reverse ETL source. At a high level, when you set up Db2 for Reverse ETL, the configured database user must have read permissions on any tables involved in the query and write permissions on a managed schema (`SEGMENT_REVERSE_ETL`) that Segment uses to track sync progress. Segment authenticates with your Db2 instance through a username and password. @@ -67,3 +70,31 @@ To set up Db2 as your Reverse ETL source: 8. If the connection is successful, click **Add source**. After successfully adding your Db2 source, [add a model](/docs/connections/reverse-etl/setup/#step-2-add-a-model) and follow the rest of the steps in the Reverse ETL setup guide. + +## Array and JSON support + +Db2 doesn't have native `ARRAY` or `JSON` data types, but Segment supports a naming-based convention to work around this limitation. + +### JSON columns + +Store JSON values in `VARCHAR` or `CLOB` columns. Segment detects them as JSON if the column name or alias ends with `_JSON`, like in this example: + +```sql +SELECT data AS data_JSON FROM my_table; +``` + +### Array columns + +Use `VARCHAR` columns with names ending in `_ARRAY` to represent arrays. The values can be either: + +- JSON-encoded arrays, like '["red", "green", "blue"]' +- Comma-separated strings, like 'red,green,blue' + +Here’s how you might format array values in a query: + +```sql +SELECT colors AS colors_ARRAY FROM items; +``` + +> info "" +> Segment uses column names to infer data types. For best results, follow the `_JSON` and `_ARRAY` naming conventions exactly. 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 bc065aca90..bfa0b8968b 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 @@ -24,8 +24,8 @@ Run `pod install` after the installation to autolink the Firebase SDK. See [React Native Firebase](https://rnfirebase.io) and [React Native Firebase Analytics](https://rnfirebase.io/analytics/usage) for more details of Firebase packages. -> info "rnfirebase dependency" -> You will need to follow the [install guide](/docs/connections/sources/catalog/libraries/mobile/react-native/classic) for the rnfirebase dependency too. This may include adding the `GoogleService-Info.plist` and the `google-services.json` file. +> info "Installation" +> You will need to follow the install guide for [Android](https://rnfirebase.io/analytics/usage/installation/android){:target="_blank”} and/or [iOS](https://rnfirebase.io/analytics/usage/installation/ios){:target="_blank”}. This includes adding the `GoogleService-Info.plist` and the `google-services.json` file. ## Using the Plugin in your App diff --git a/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md b/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md index 7cdf4f4312..660a3b627f 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md +++ b/src/connections/sources/catalog/libraries/website/javascript/troubleshooting.md @@ -22,9 +22,14 @@ Segment also provides a Chrome web extension, [Segment Inspector](/docs/connecti To learn more, follow the [Analytics.js Quickstart Guide](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/). -## Are you loading two instances of Analytics.js? +## Loading multiple instances of Analytics.js -Note that you *cannot* load Analytics.js twice on the same page, even if you're using different write keys. If you do, you might encounter `Uncaught RangeError: Maximum call stack size exceeded`. Instead, you can conditionally set the write key based on an environment variable. + +### Analytics.js snippet loaded more than once + +You cannot load the Analytics.js snippet twice on the same page, even if different write keys are used. Doing so might result in errors like `Uncaught RangeError: Maximum call stack size exceeded`. + +However, you can conditionally set the write key based on an environment variable: Example: ```js @@ -32,6 +37,15 @@ var writeKey; ENV === 'production' ? writeKey = 'A' : writeKey = 'B'; ``` +### Multiple Versions of Analytics.js + +You can load multiple versions of Analytics.js in the same environment. For example, you could have both a snippet version and an npm version on one page, each with different write keys. This allows the npm library and the browser snippet to coexist without conflicting. + +Keep the following limitations in mind: + +- **Device-Mode Destination Conflicts**: If you are using the same device-mode destination in both instances (for example, across different write keys), conflicts may occur. This is due to third-party scripts that don't support global instances. To avoid issues, ensure you are not using the same device-mode destination with different write keys. +- **CDN URL Customization:** Segment does not support overriding the CDNURL when using multiple instances of Analytics.js. + ## How do I resolve the 'Failed to Load Analytics.js ChunkLoadError'? The error can occur for different reasons: @@ -44,6 +58,7 @@ The error can occur for different reasons: - Cloudflare caching: If you use Cloudflare to proxy Segment, disable caching for the Segment JS file. + ## Do you see events appear in your debugger? When you reload the page, does your debugger show a new [Page call](/docs/connections/spec/page)? You can also check the JavaScript console in the browser and manually fire an event, like an Identify call, which would show up in the debugger. diff --git a/src/engage/audiences/linked-audiences.md b/src/engage/audiences/linked-audiences.md index 54baf1c245..fb810e4aad 100644 --- a/src/engage/audiences/linked-audiences.md +++ b/src/engage/audiences/linked-audiences.md @@ -53,6 +53,7 @@ To build a Linked Audience: **Note:** If you cannot select **Linked audience**, ensure you’ve [set up your Data Graph](/docs/unify/linked-profiles/data-graph/) in Unify. 4. Select the [conditions](#Linked-Audience-conditions) on which to build your audience. 5. Click **Preview** to view your audience selection and see a count and list of audience members who meet the criteria. +6. Select the **Entities** tab on the preview side sheet to select an entity tied to your audience definition. You can view a preview of the entity count and a sample list of the selected entity. 6. When your audience is complete and accurate, click **Next**. 7. Enter an audience name and description to identify this configuration. Optionally, select a folder to add this audience. diff --git a/src/engage/journeys/journeys-logic.md b/src/engage/journeys/v1/journeys-logic.md similarity index 99% rename from src/engage/journeys/journeys-logic.md rename to src/engage/journeys/v1/journeys-logic.md index f07e8fc70c..72134b0f14 100644 --- a/src/engage/journeys/journeys-logic.md +++ b/src/engage/journeys/v1/journeys-logic.md @@ -3,6 +3,7 @@ title: Understanding Journeys Logic plan: engage-foundations redirect_from: - "/personas/journeys/journeys-logic" + - "/engage/journeys/journeys-logic" --- diff --git a/src/engage/journeys/v2/event-triggered-journeys-steps.md b/src/engage/journeys/v2/event-triggered-journeys-steps.md index 63c19ef59e..5115506dd0 100644 --- a/src/engage/journeys/v2/event-triggered-journeys-steps.md +++ b/src/engage/journeys/v2/event-triggered-journeys-steps.md @@ -7,7 +7,7 @@ redirect_from: [Event-Triggered Journeys](/docs/engage/journeys/event-triggered-journeys/) in Engage use steps to control how users move through a journey based on their actions or predefined conditions. -Steps are the building blocks of a journey. This page explains the **Hold Until**, **Send to Destination**, and **Data split** steps, which enable precise control over journey progression and data delivery. +Steps are the building blocks of a journey. This page explains the **Hold until**, **Delay**, **Data split**, **Randomized split**, and **Send to Destination** steps, which enable precise control over journey progression and data delivery. ## Hold Until: smart pauses in journeys @@ -51,7 +51,7 @@ Enable this feature by selecting **Send profiles back to the beginning of this s Segment recommends putting branches for recurring events at the top of the list to improve readability. -![Flow diagram of an Event-Triggered Journey for an abandoned cart scenario. The journey starts with a trigger event labeled 'Cart_Modified,' followed by a 'Hold Until' step checking if the user buys within two hours. The Hold Until step includes three branches: 'User updated cart, reset timer' for additional cart modifications, 'User purchased' triggered by an 'Order_Confirmation' event, and a 'Maximum hold duration' fallback set to two hours, which leads to a 'Send Abandonment Nudge' step. The flow ends with a 'Completed' state.](images/hold_until.png) +![Flow diagram of an Event-Triggered Journey for an abandoned cart scenario. The journey starts with a trigger event labeled 'Cart_Modified,' followed by a 'Hold Until' step checking if the user buys within two hours. The Hold Until step includes three branches: 'User updated cart, reset timer' for additional cart modifications, 'User purchased' triggered by an 'Order_Confirmation' event, and a 'Maximum hold duration' fallback set to two hours, which leads to a 'Send Abandonment Nudge' step. The flow ends with a 'Completed' state.](../images/hold_until.png) In this example, users enter the journey when they modify their cart and wait for either a purchase or two hours to pass. If the user modifies their cart again during those two hours, the cart contents are updated, and the two-hour timer resets. As a result, follow-ups reflect the latest information. diff --git a/src/engage/journeys/v2/exit-rules.md b/src/engage/journeys/v2/exit-rules.md index 0a12787ddf..229c4c2e18 100644 --- a/src/engage/journeys/v2/exit-rules.md +++ b/src/engage/journeys/v2/exit-rules.md @@ -17,7 +17,7 @@ Exit rules don't wait for a profile to reach a specific step; they apply globall ## Configuring exit rules -You'll set up exit rules in the journey’s settings panel. By default, journeys don’t have any exit conditions, but you can choose to add up to five exit events. +You'll set up exit rules in the journey’s settings panel. By default, journeys don’t have any exit conditions, but you can choose to add up ten five exit events. ## Basic setup @@ -31,8 +31,6 @@ For each exit rule, choose the event that should trigger the exit. You can also You can optionally require that the exit event matches the same identifier used in the entry event. This helps tie the two together, like if a journey starts with a `Cart_Modified` event and should exit only when `Order_Purchased.cart_id` matches the same cart. -Each exit rule must be mutually exclusive. - > success "Exit rules Analytics" > You can track how exit rules are performing from the journey overview, which shows total exits per rule, and from individual step details, which show where users exited. @@ -73,6 +71,6 @@ Follow these tips to make sure your exit rules behave as expected: As you work with exit rules, keep the following in mind: -- You can configure up to 5 exit events per journey. +- You can configure up to 10 exit events per journey. - Journeys support only one destination send for exit events. - If an exit rule is triggered, it overrides all other steps. The user exits immediately, even if they’re mid-delay or hold. diff --git a/src/engage/journeys/v2/journey-context.md b/src/engage/journeys/v2/journey-context.md index c739180709..3af03577c6 100644 --- a/src/engage/journeys/v2/journey-context.md +++ b/src/engage/journeys/v2/journey-context.md @@ -13,11 +13,11 @@ This page explains Journey context, which can help you dynamically adapt each jo Unlike traditional audience-based journeys, which rely solely on user progress through predefined steps, event-triggered journeys capture and store the details of user-triggered events. This shift allows you to access the data that caused users to reach a specific step and use it to make more precise decisions throughout the journey. -With journey context, you can: +With journey context you can personalize customer experiences using real-time event data. - + For example: diff --git a/src/engage/journeys/v2/limits.md b/src/engage/journeys/v2/limits.md index ac298de5c5..ab0269f8d0 100644 --- a/src/engage/journeys/v2/limits.md +++ b/src/engage/journeys/v2/limits.md @@ -14,17 +14,17 @@ This page outlines product limitations for Event-Triggered (V2) Journeys. | Step name | 73 characters | Maximum length for step names. | | Branch name | 73 characters | Maximum length for branch names within a split step. Branch names must be unique across the journey. | | Additional branches | 5 | Maximum number of branches supported in a split or Hold Until step. | -| Delay duration | Minimum: 5 minutes
Maximum: 6 months | Allowed time range for Delay and Hold Until steps. | +| Delay duration | Minimum: 5 minutes
Maximum: 182 days | Allowed time range for Delay and Hold Until steps. | | Unique identifier | 500 characters | For “Re-enter every time event occurs” rules, you must define a unique identifier. The value is limited to 500 characters. | ## Throughput -| Name | Limit | Description | -| ------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | -| Requests per second (RPS) | 25 events/sec/profile | Maximum events per second per Segment ID. Timer events are excluded. Excess events get dropped. | -| Instances per profile | 25 concurrent instances | Maximum concurrent Journey instances per profile. | -| Loop back branch | 100 instances | Maximum instances that can pass through a Wait Until loop-back. | +| Name | Limit | Description | +| ------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| Requests per second (RPS) | 25 events/sec/profile | Maximum events per second per Segment ID. Timer events are excluded. Excess events get dropped. | +| Instances per profile | 25 concurrent instances | Maximum concurrent Journey instances per profile. | +| Send profiles back branch | 100 instances | Maximum count a single journey instance can pass through a Wait Until Send profiles back to the beginning of this step' branch. | ## Journey context diff --git a/src/privacy/consent-management/consent-faq.md b/src/privacy/consent-management/consent-faq.md index cfd3e55f69..00f55710e0 100644 --- a/src/privacy/consent-management/consent-faq.md +++ b/src/privacy/consent-management/consent-faq.md @@ -17,7 +17,15 @@ All event streams destinations, with the exception of AWS S3 and Engage destinat You can use the [Destination Actions framework](/docs/connections/destinations/actions/) to share the current status of your end-users' consent with your Actions destinations. -For more information, see the [Sharing consent with Actions destinations](/docs/privacy/consent-management/consent-in-unify/#sharing-consent-with-actions-destinations) documentation. +For more information, see the [Sharing consent with Actions destinations](/docs/privacy/consent-management/consent-in-unify/#sharing-consent-with-actions-destinations) documentation. + +## Why shouldn't I use Consent Management for managing communication preferences? + +Segment designed Consent Management for cookie and data collection consent use cases, not communication preferences. Segment doesn't recommend using Consent Management for managing communication preferences, as multiple data use categories attached to one destination can block legitimate communication to your users and might limit your ability to handle user communication preferences at a more granular level. + +For example, if you create 3 separate consent categories for "Product Newsletter," "News Updates," and "Promotional Emails" and all of these are sent through the same destination (like SendGrid,) then Consent Management only forwards data to SendGrid if the user has **opted-in to all 3 categories**. This behavior can block legitimate communication the user might have opted into, making it less flexible for nuanced email preference enforcement. + +For managing communication preferences, Segment recommends using [custom traits](/docs/unify/Traits/custom-traits/) and then acting on these traits in [Twilio Engage](/docs/engage/) or a third-party tool. ## Why is my event failing ingestion with the error "context.consent.categoryPreferences object is required"? diff --git a/src/privacy/consent-management/consent-in-retl.md b/src/privacy/consent-management/consent-in-retl.md index 2a9240ea1b..6212dc02b7 100644 --- a/src/privacy/consent-management/consent-in-retl.md +++ b/src/privacy/consent-management/consent-in-retl.md @@ -146,4 +146,4 @@ Open the [Profile Explorer](/docs/unify/#profile-explorer) and verify that your ### Reverse ETL Actions destinations Segment automatically filters out data from users who have not consented to the category mapped to your destination. -To verify that this behavior is working as intended, open [Delivery Overview](/docs/connections/delivery-overview) for a Reverse ETL-supported Actions destination and view the events that were successfully delivered to the destination. The events in your destination should only come from users that consented to send data to the category that your supported Actions destination belongs to. \ No newline at end of file +To verify that this behavior is working as intended, open [Delivery Overview](/docs/connections/delivery-overview) for a Reverse ETL-supported Actions destination and view the events that were successfully delivered to the destination. The events in your destination should only come from users that consented to send data to the category that your supported Actions destination belongs to. diff --git a/src/privacy/consent-management/consent-in-unify.md b/src/privacy/consent-management/consent-in-unify.md index bcae9b9169..5ed25b9b31 100644 --- a/src/privacy/consent-management/consent-in-unify.md +++ b/src/privacy/consent-management/consent-in-unify.md @@ -83,12 +83,14 @@ In addition to enforcing consent in Connections, you may want these preferences If you use Destination Actions to send consent information to your destinations, the Segment Consent Preference Updated event should **only** include information about a user's consent preferences because this event is sent regardless of an end-user's consent preferences. -> info "Sharing consent with Classic Destinations is not available" +> info "Sharing consent with Classic Destinations isn't available" > Segment only supports sharing consent with Actions Destinations. ## Storing consent preferences on the Profile Segment stamps consent preference on every Segment event from streaming and Reverse ETL sources to store them on the Profile. +If you're using Consent Management and Profiles, you shouldn't give your customers a Custom Trait value that matches one of the consent categories that you set up in the Segment app, as this can lead to unexpected Audience behavior. For example, if your end user consented to the "Marketing" destination category, you shouldn't give them a custom trait of `segment_consent_preference.categories.marketing.`, as this can lead your user to unexpectedly enter or leave an Audience. + > warning "Storing consent on the Profile is in private beta" > Reach out to your sales contact or [request a demo](https://segment.com/contact/demo){:target="_blank"} to participate in the private beta. diff --git a/src/privacy/consent-management/index.md b/src/privacy/consent-management/index.md index 7f8c3698e2..197744eb8d 100644 --- a/src/privacy/consent-management/index.md +++ b/src/privacy/consent-management/index.md @@ -1,9 +1,15 @@ --- title: Consent Management Overview plan: consent-management +hide-toc: true --- -When an end user visits your web or mobile app, they set **consent preferences**, or make decisions about the types of data they want you to collect, use, and share. These consent preferences are typically presented as a set list of categories that describe how your company intends to use that data. Some common categories include personalization, advertising, and site performance. +When an end user visits your web or mobile app, they set **consent preferences**, or make decisions about the types of data they want you to collect, use, and share. These consent preferences are typically presented as a set list of categories that describe how your company intends to use that data. Some common categories include personalization, advertising, and site performance. + +> info "Segment recommends using Consent Management to enforce end-user preferences related to cookies and data collection consent" +> Segment doesn't recommend using Consent Management for managing communication opt-ins and opt-outs, as using it for this purpose might limit your ability to handle user preferences at a more granular level. For more information, see [Why shouldn’t I use Consent Management for managing communication preferences?](/docs/privacy/consent-management/consent-faq/#why-shouldnt-i-use-consent-management-for-managing-communication-preferences). +> +> To manage your end users' communication preferences, Segment recommends using [custom traits](/docs/unify/Traits/custom-traits/) and then acting on these traits in [Twilio Engage](/docs/engage/) or a third-party tool. Segment integrates with your commercial third-party or bespoke consent management platform (CMP) that captures an end user's consent preferences and enforces those preferences by only routing events to the categories consented to by an end user. @@ -18,4 +24,4 @@ The events, stamped with the consent object, are then sent downstream to any des For more information about consent in Segment Connections, see the [Consent in Segment Connections](/docs/privacy/consent-management/consent-in-segment-connections) documentation. -If you are a Unify user, you can also see the [Consent in Unify](/docs/privacy/consent-management/consent-in-unify) for more information about the Segment Consent Preference Updated event, which Segment uses to add consent preference to the Profile. +If you are a Unify user, you can also see the [Consent in Unify](/docs/privacy/consent-management/consent-in-unify) for more information about the Segment Consent Preference Updated event, which Segment uses to add consent preference to the Profile. \ No newline at end of file diff --git a/src/unify/Traits/predictions/index.md b/src/unify/Traits/predictions/index.md index f9fc14f291..00e4a0e461 100644 --- a/src/unify/Traits/predictions/index.md +++ b/src/unify/Traits/predictions/index.md @@ -25,7 +25,7 @@ Follow these steps to build a prediction: - (For custom Predictive Goals) Add a condition(s) and event(s) to predict. - Select the event and (optional) property that you want to use to make a prediction. 5. Select a time period for the prediction. -6. (Optional) In **Include all events**, uncheck any events you don't want Segment to factor into the prediction. +6. (Optional) In **Include all events** and **Include all new traits** uncheck any events or traits you don't want Segment to factor into the prediction. 7. Click **Calculate**. If you're satisfied with the available data, click **Next**. 5. (Optional) Connect a Destination, then click **Next**. 6. Add a name and description for the Trait, then click **Create Trait**. @@ -34,7 +34,7 @@ Keep the following in mind when you build a prediction: - Segment lets you predict the likelihood of a customer performing multiple events. - You can choose a time period of 15, 30, 60, 90, or 120 days. -- You have granular control over the events Segment factors into the predictive model. By default, Segment's model makes predictions on all events sent to Engage. Segment lets you exclude events you don't want included by unselecting **Include all events**, then filtering out any events you want excluded from the model. +- You have granular control over the events Segment factors into the predictive model. By default, Segment's model makes predictions on all events and custom traits sent to Engage. Segment lets you exclude events or traits you don't want included by unselecting **Include all events** or **Include all new traits**. In the next section, you'll learn more about the four available predictions. @@ -95,6 +95,13 @@ This table lists the requirements for a trait to compute successfully: Some customers want to specifically include or exclude events that get fed into the model. For example, if you track different events from an EU storefront compared to a US storefront and you only want to make predictions using data from the US, you could unselect the events from the EU space. This step is optional, Segment only recommends using it if you have a clear reason in mind for removing events from becoming a factor in the model. +#### Selecting traits (optional) +You can choose which traits to include or exclude from your prediction model. Segment supports only numerical and boolean custom traits. + +In the UI, you can deselect traits you don’t want the model to use. Selecting a trait means Segment will attempt to include it in the model, but it may be excluded during training if it doesn’t improve model performance. + +If you keep Include all new traits selected, Segment will automatically consider any new traits you start tracking. If you deselect this option, new traits won’t be included in future model calculations unless you manually add them. + > info "Predictive Traits and anonymous events" > Predictive Traits are limited to non-anonymous events, which means you'll need to include an additional `external_id` other than `anonymousId` in the targeted events. If want to create Predictive Traits based on anonymous events, reach out to your CSM with your use case for creating an anonymous Predictive Trait and the conditions for trait.