diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index c35eb9430f..b4025887c0 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-06-26 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 27a1ad5dac..652be0168a 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-24 +# destination data last updated 2025-06-26 items: - id: 637e8d185e2dec264895ea89 display_name: 1Flow @@ -22981,7 +22981,7 @@ items: hidden: false defaultTrigger: type = "identify" fields: - - id: 7D52sshqeGKc93QxdSes6a + - id: 8gX8PuHbeDVGpN8tEE2K8W sortOrder: 0 fieldKey: external_id label: External User ID @@ -22995,7 +22995,7 @@ items: choices: null dynamic: false allowNull: false - - id: GPzn5npufu3XRJAVVZZ3Z + - id: cac3FktXkcLHSBdPunvtLg sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -23009,7 +23009,7 @@ items: choices: null dynamic: false allowNull: false - - id: 9eVowxaWfmfxZKpfcMatEm + - id: oTcy2j5T7NvQZfcPVbqLiC sortOrder: 2 fieldKey: braze_id label: Braze User Identifier @@ -23023,7 +23023,7 @@ items: choices: null dynamic: false allowNull: true - - id: i1U9z9FVV9e8Zh4FpzpMos + - id: 56b7mVUwQfCcuJ6DDX7orN sortOrder: 3 fieldKey: country label: Country @@ -23037,7 +23037,7 @@ items: choices: null dynamic: false allowNull: true - - id: rAD8wypjQo52HZ9ZP58Zv7 + - id: odgKx8MS4igb2yyJD8DeF7 sortOrder: 4 fieldKey: current_location label: Current Location @@ -23054,7 +23054,7 @@ items: choices: null dynamic: false allowNull: true - - id: vaKjs9L1Z9rVmZCFwJCwHr + - 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: 8JgDgtbDmPkjYVqVjFtZCP + - 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: uxYJdHzFUsAsPAv3Ju5pGn + - id: 5upMphfPzM59UWHLphRf5z sortOrder: 7 fieldKey: dob label: Date of Birth @@ -23090,7 +23090,7 @@ items: choices: null dynamic: false allowNull: true - - id: eg5PwVgoyxG965XEcBeUG + - id: gzJ966i8keusXz3AeqDwQb sortOrder: 8 fieldKey: email label: Email @@ -23104,7 +23104,7 @@ items: choices: null dynamic: false allowNull: true - - id: eHcbBUYSPQVYv4CSvi2Br7 + - id: aNbJQfG7nKM3nrLxFNG2K7 sortOrder: 9 fieldKey: email_subscribe label: Email Subscribe @@ -23119,7 +23119,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6DKrxS6sQT17xc8PYaGHUV + - 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: tiSvSqji5eAE5csZYDqyjV + - 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: aT2FRqdbQewqq5o8CdAmkf + - id: 7KCnsiws3wz83svzyQfdzG sortOrder: 12 fieldKey: facebook label: Facebook Attribution Data @@ -23161,7 +23161,7 @@ items: choices: null dynamic: false allowNull: false - - id: bKeVycHxVkcmbnkBVdpxRX + - id: tcALMvwJGF7wA2kTt977Ct sortOrder: 13 fieldKey: first_name label: First Name @@ -23175,7 +23175,7 @@ items: choices: null dynamic: false allowNull: true - - id: sz5ZZCiDdcN6DzhoJpqN76 + - id: 8auhrzwNeFoNKS5DYtboqZ sortOrder: 14 fieldKey: gender label: Gender @@ -23191,7 +23191,7 @@ items: choices: null dynamic: false allowNull: true - - id: 6VcU3UcKjnYH6i5FLiwo1J + - id: qHH1WdCGFustdvJr4C9XJx sortOrder: 15 fieldKey: home_city label: Home City @@ -23205,7 +23205,7 @@ items: choices: null dynamic: false allowNull: true - - id: pQyksUAhQTT76Czp4DXMkD + - id: 3wL1YQKTJBfzF8vNRv7bT9 sortOrder: 16 fieldKey: image_url label: Image URL @@ -23219,7 +23219,7 @@ items: choices: null dynamic: false allowNull: true - - id: etwRLzKDuNAQLnELuUn7u5 + - id: k1CCjyoZHDu9ELTpY6eyZr sortOrder: 17 fieldKey: language label: Language @@ -23231,7 +23231,7 @@ items: choices: null dynamic: false allowNull: true - - id: kSWj93FmLNvVGwK2wKtzhX + - id: jGpCPMUjHoZrqNXMqAB37C sortOrder: 18 fieldKey: last_name label: Last Name @@ -23245,7 +23245,7 @@ items: choices: null dynamic: false allowNull: false - - id: ud5V9kEhZivKmTmeEYtUvZ + - 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: bQpbE4kNNGCEu3ZKcSWD5A + - id: 4VuavCBLrrnWRQywddRFNH sortOrder: 20 fieldKey: phone label: Phone Number @@ -23271,7 +23271,7 @@ items: choices: null dynamic: false allowNull: true - - id: e5JJFegnjEFYASgTCdBvt1 + - id: hxcaTLhkyKQKspdRB4SFT6 sortOrder: 21 fieldKey: push_subscribe label: Push Subscribe @@ -23286,7 +23286,7 @@ items: choices: null dynamic: false allowNull: false - - id: msKU15gTUpCVQohSwt7MgK + - id: xdfVhRPCPYsQcNYo6xaAM6 sortOrder: 22 fieldKey: push_tokens label: Push Tokens @@ -23303,7 +23303,7 @@ items: choices: null dynamic: false allowNull: false - - id: mSpKEX3wXRsygd1N3acZAu + - id: 2cCQ2RzyUVQn1kC7fS9xSb sortOrder: 23 fieldKey: time_zone label: Time zone @@ -23318,7 +23318,7 @@ items: choices: null dynamic: false allowNull: false - - id: j7Z4A4vgBWofeXDje1YuXP + - id: itUirR4aqqMt2pBvWKKZFq sortOrder: 24 fieldKey: twitter label: Twitter Attribution Data @@ -23333,7 +23333,7 @@ items: choices: null dynamic: false allowNull: false - - id: h8PvQzc9xkcPxkNyYp5CaK + - id: aMCLbNeg2te71SuqmfuhE8 sortOrder: 25 fieldKey: custom_attributes label: Custom Attributes @@ -23347,7 +23347,7 @@ items: choices: null dynamic: false allowNull: false - - id: ge6cpuJStAa5k4UsYKMyeM + - id: xbA2nukUTac9WZo8kawVVz sortOrder: 26 fieldKey: _update_existing_only label: Update Existing Only @@ -23362,7 +23362,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3VoCEtSrjf359aU7Zjuwdf + - 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: wQhyD6jhLpnjTeZhAUZKFZ + - id: nKLN6pQVjuKeSKdShPTK7s sortOrder: 0 fieldKey: external_id label: External User ID @@ -23399,7 +23399,7 @@ items: choices: null dynamic: false allowNull: false - - id: mVgitfey16XCavqAmWu4JK + - id: qto5WXER1SE2hXwxMCGA2f sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -23413,7 +23413,7 @@ items: choices: null dynamic: false allowNull: false - - id: nVyU7TytKE5T9D7uvQWPTD + - id: jD7UGzEsVn3HEu4R6f2C7A sortOrder: 2 fieldKey: email label: Email @@ -23433,7 +23433,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8H3PRc11kp7pEsUGanQDoG + - id: fvug1cyFVoQ9fruvAXgPqb sortOrder: 3 fieldKey: braze_id label: Braze User Identifier @@ -23447,7 +23447,7 @@ items: choices: null dynamic: false allowNull: true - - id: ms8v4dNJ7vaeGWDuBDQmrU + - id: fDvkaQqyWFkLuNqDx26jTJ sortOrder: 4 fieldKey: name label: Event Name @@ -23461,7 +23461,7 @@ items: choices: null dynamic: false allowNull: false - - id: vt9Qhx441WZMz8yyndrxRY + - id: tYNazWYN1iVGJDh3zHPqNb sortOrder: 5 fieldKey: time label: Time @@ -23475,7 +23475,7 @@ items: choices: null dynamic: false allowNull: false - - id: pXKock3fSjHQmHmLJX8rHP + - id: 46oxx1fWVgNDFkkwBkDtbJ sortOrder: 6 fieldKey: properties label: Event Properties @@ -23489,7 +23489,7 @@ items: choices: null dynamic: false allowNull: false - - id: tr9s2UYZqMgginTwBV5yx2 + - id: e46WFudaCJs2VXokqFRa8p sortOrder: 7 fieldKey: _update_existing_only label: Update Existing Only @@ -23504,7 +23504,7 @@ items: choices: null dynamic: false allowNull: false - - id: bDyxikSqXCVdsfMzoSwMFa + - 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: nmQjEgM21v1FMyjh6jjTEa + - id: mrrnFhquS33faw2qc9NK9x sortOrder: 0 fieldKey: external_id label: External User ID @@ -23541,7 +23541,7 @@ items: choices: null dynamic: false allowNull: false - - id: iQxTBVaU3v399dESHoFdLD + - id: fq38bLNayyF3WNWB6nLt3H sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -23555,7 +23555,7 @@ items: choices: null dynamic: false allowNull: false - - id: wAswWmSH4oFxMEyaP1TrWr + - id: 3kJF4tqyGqC4rdPJdbu28B sortOrder: 2 fieldKey: email label: Email @@ -23569,7 +23569,7 @@ items: choices: null dynamic: false allowNull: false - - id: 7GHennZN9fEcno4wvLze9d + - id: uQZotzJYD7A1k9SGq55BfC sortOrder: 3 fieldKey: braze_id label: Braze User Identifier @@ -23583,7 +23583,7 @@ items: choices: null dynamic: false allowNull: true - - id: r1faJnVeKTF1uMSk2ahxp9 + - id: nACMMntuFmvRtaWmJVD7Tn sortOrder: 4 fieldKey: time label: Time @@ -23597,7 +23597,7 @@ items: choices: null dynamic: false allowNull: false - - id: d61Yxn3DrHNqAzECwmcmZ1 + - id: rCV4BpjS4D2jWRfmncoAPH sortOrder: 5 fieldKey: products label: Products @@ -23611,7 +23611,7 @@ items: choices: null dynamic: false allowNull: false - - id: czM5i5jv9qsVHDsChA5a1X + - id: kkWnfKvyAvqNWVKgyRQDbY sortOrder: 6 fieldKey: properties label: Event Properties @@ -23625,7 +23625,7 @@ items: choices: null dynamic: false allowNull: false - - id: fco3iGcJLN5WYiPEZH6XZc + - id: gRXtMbPhYMJwxCDrNae34D sortOrder: 7 fieldKey: _update_existing_only label: Update Existing Only @@ -23640,7 +23640,7 @@ items: choices: null dynamic: false allowNull: false - - id: 37bkHhgRpu2mPq4kxGdZmR + - id: vzp7wCUde51BT74GzjDEir sortOrder: 8 fieldKey: enable_batching label: Batch Data to Braze @@ -23677,7 +23677,7 @@ items: hidden: false defaultTrigger: null fields: - - id: 7wAKnZr6664Bthucnm3ZQj + - id: 8xjP1mApdm1wxCrhviUEwy sortOrder: 0 fieldKey: external_id label: External ID @@ -23689,7 +23689,7 @@ items: choices: null dynamic: false allowNull: false - - id: sk1oszwK89BKqaBqJbkDPr + - id: 5iCuaJ1hGWbXT1QEgM39Kf sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -23703,7 +23703,7 @@ items: choices: null dynamic: false allowNull: false - - id: ia3PkBWqFYzqQ6Q1PogRvE + - id: 9j9bQ2WDWgFuifRfRyb3XH sortOrder: 2 fieldKey: merge_behavior label: Merge Behavior @@ -23732,7 +23732,7 @@ items: hidden: false defaultTrigger: event = "Create Alias" fields: - - id: jwjWpUqLuXYxLmLyhSij9L + - id: 4UVSEu4QpueE1VuzTLCLi sortOrder: 0 fieldKey: external_id label: External ID @@ -23744,7 +23744,7 @@ items: choices: null dynamic: false allowNull: true - - id: 3J3pcNHjV1ebT4QbBtSFsY + - id: hAFE7SxzkkZ2iPLJEeB9W3 sortOrder: 1 fieldKey: alias_name label: Alias Name @@ -23756,7 +23756,7 @@ items: choices: null dynamic: false allowNull: false - - id: fJSVZKap8ZFaUzax5vFu2R + - id: nbJNe1F5p9pJHC4FTbvyYq sortOrder: 2 fieldKey: alias_label label: Alias Label @@ -23776,7 +23776,7 @@ items: hidden: false defaultTrigger: type = "identify" fields: - - id: 73W4JCdbFGGwWYJFT9ozux + - id: n3EG4xYvjRAtiuALegspWx sortOrder: 0 fieldKey: external_id label: External User ID @@ -23790,7 +23790,7 @@ items: choices: null dynamic: false allowNull: false - - id: hf2PbivozqvbBnYCZF19x9 + - id: fkqaqmwkxiFtnjJjZfRrgi sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -23804,7 +23804,7 @@ items: choices: null dynamic: false allowNull: false - - id: eGXuT7ifEi6huiMrXA7mtH + - id: kUbEWn784NDtLeQz1qbhBn sortOrder: 2 fieldKey: braze_id label: Braze User Identifier @@ -23818,7 +23818,7 @@ items: choices: null dynamic: false allowNull: true - - id: sJzXQEyZWv2GSiwnqt7YGj + - id: 7aY1YuNVV9SbMKyATMDckg sortOrder: 3 fieldKey: country label: Country @@ -23832,7 +23832,7 @@ items: choices: null dynamic: false allowNull: true - - id: iXeFjzENDPypdVk84RaRfF + - id: 9bSLdCTEE66QrtMoFLBhew sortOrder: 4 fieldKey: current_location label: Current Location @@ -23849,7 +23849,7 @@ items: choices: null dynamic: false allowNull: true - - id: xhvVBjr8FB7sRM5i3LQfys + - 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: 9wLXd53AYP1vehdDexqZA5 + - 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: wJrJktCCM2b5pf7i279zbw + - id: 79sAumGUio1QHLLvWMp1k7 sortOrder: 7 fieldKey: dob label: Date of Birth @@ -23885,7 +23885,7 @@ items: choices: null dynamic: false allowNull: true - - id: 6UMEgUtYP3PdjWyqJNhK2G + - id: tx7b2ehX8dXzFrQCJqShKE sortOrder: 8 fieldKey: email label: Email @@ -23899,7 +23899,7 @@ items: choices: null dynamic: false allowNull: true - - id: Ywic4AQkhsa74BvHSXt5p + - id: bYVMjUSbxKHqyYoi8RVBYj sortOrder: 9 fieldKey: email_subscribe label: Email Subscribe @@ -23914,7 +23914,7 @@ items: choices: null dynamic: false allowNull: false - - id: wvLfVTnwYed8r3duVA17Xk + - 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: w3RhagRGKeRdP8HcTdbzUw + - 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: wti8BaHp3C9Z5yc5evv1iB + - id: d4xru2vRjEi4RT5TmWgb1y sortOrder: 12 fieldKey: facebook label: Facebook Attribution Data @@ -23956,7 +23956,7 @@ items: choices: null dynamic: false allowNull: false - - id: i5WUyMTvfMQ3Sn466Kg8U9 + - id: sWnUjpm5UwcNWUuWxy2sgN sortOrder: 13 fieldKey: first_name label: First Name @@ -23970,7 +23970,7 @@ items: choices: null dynamic: false allowNull: true - - id: eYcgrssN9E3ja4KdS7B3Kp + - id: pEv9iR95xz8rKF8J4mQhbq sortOrder: 14 fieldKey: gender label: Gender @@ -23986,7 +23986,7 @@ items: choices: null dynamic: false allowNull: true - - id: duPiSBdahmSC9Nba5YMqHQ + - id: m3W7fjjiHMadQf9StMrwv5 sortOrder: 15 fieldKey: home_city label: Home City @@ -24000,7 +24000,7 @@ items: choices: null dynamic: false allowNull: true - - id: kAzuB3rxqeFYfJ4qn5eN6s + - id: pNrVJ4pLT2zYGzAB48WvZr sortOrder: 16 fieldKey: image_url label: Image URL @@ -24014,7 +24014,7 @@ items: choices: null dynamic: false allowNull: true - - id: jXCBXvcBx9K68Te54C8m2t + - id: f3fCwV3BdPFWkbNrYqM3bK sortOrder: 17 fieldKey: language label: Language @@ -24026,7 +24026,7 @@ items: choices: null dynamic: false allowNull: true - - id: pUPadBHai8sogJYd2KGMuu + - id: egAthtxhyoYdweeajB19HG sortOrder: 18 fieldKey: last_name label: Last Name @@ -24040,7 +24040,7 @@ items: choices: null dynamic: false allowNull: false - - id: hZwBuqr7xFyBPC7n7RjNbn + - 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: b9DqG3S9KD6zHGFxvDG7aZ + - id: ksGYS9vjjHVd3JzXG4sGEU sortOrder: 20 fieldKey: phone label: Phone Number @@ -24066,7 +24066,7 @@ items: choices: null dynamic: false allowNull: true - - id: hu6ycTCSBh6WjGF3F3rV5e + - id: bJGaRahSiHqR93TYJe7aGR sortOrder: 21 fieldKey: push_subscribe label: Push Subscribe @@ -24081,7 +24081,7 @@ items: choices: null dynamic: false allowNull: false - - id: qimfMGkj27DMRCinoTerdY + - id: gQq2pFMa4qvnXVvjEy6tEi sortOrder: 22 fieldKey: push_tokens label: Push Tokens @@ -24098,7 +24098,7 @@ items: choices: null dynamic: false allowNull: false - - id: 5NEvLp37XTMZTB2WTGJyBH + - id: iPRoGkEJBLqh7Ru9xXzAab sortOrder: 23 fieldKey: time_zone label: Time zone @@ -24113,7 +24113,7 @@ items: choices: null dynamic: false allowNull: false - - id: eEPfhdMVPXqA3brG4s5NNa + - id: d4QPmoVqTXDr9UySgeqQbz sortOrder: 24 fieldKey: twitter label: Twitter Attribution Data @@ -24128,7 +24128,7 @@ items: choices: null dynamic: false allowNull: false - - id: kNVSEUduJ4HVH5BSzjLVzW + - id: jgfmowc82NGJkFDUCgoqPE sortOrder: 25 fieldKey: custom_attributes label: Custom Attributes @@ -24142,7 +24142,7 @@ items: choices: null dynamic: false allowNull: false - - id: guj6bxBhqCnWJLDURGi2yC + - 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: nQpuSNMvbTYC4tiP5vuCM3 + - id: gZzZN2a45MBk5Uo6i92iff sortOrder: 0 fieldKey: external_id label: External User ID @@ -24179,7 +24179,7 @@ items: choices: null dynamic: false allowNull: false - - id: vXyDaJmu7tECwDCdazx8qM + - id: t7tpxYcuuwAYGYoCkAgHQw sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -24193,7 +24193,7 @@ items: choices: null dynamic: false allowNull: false - - id: wCgCskVonTYaDeAvgXHHhA + - id: cJHVALuf3RTmiJVbYmbN84 sortOrder: 2 fieldKey: email label: Email @@ -24213,7 +24213,7 @@ items: choices: null dynamic: false allowNull: false - - id: dRKg2tMusnKuizBeRSxid4 + - id: ngcrSeqf11PmsicHuFPsZu sortOrder: 3 fieldKey: braze_id label: Braze User Identifier @@ -24227,7 +24227,7 @@ items: choices: null dynamic: false allowNull: true - - id: sZVpeeH4kqAMNLKnsCmg4Y + - id: dKpZ6DZCCpBPrNH3q3ExKR sortOrder: 4 fieldKey: name label: Event Name @@ -24241,7 +24241,7 @@ items: choices: null dynamic: false allowNull: false - - id: 5iUHDVJ72MWsdLsJHPkQVi + - id: nwcRbxKFbsDCQnVodqKo1q sortOrder: 5 fieldKey: time label: Time @@ -24255,7 +24255,7 @@ items: choices: null dynamic: false allowNull: false - - id: 5b61pZ4mwAotr394tuzfeS + - id: 5ovNWXiCcnyX81UQHpoNYS sortOrder: 6 fieldKey: properties label: Event Properties @@ -24269,7 +24269,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3zXZSJNBvp9MCD6qFAFmr8 + - id: EvkGVvvF3w41vrSfZcu3F sortOrder: 7 fieldKey: enable_batching label: Batch Data to Braze @@ -24294,7 +24294,7 @@ items: hidden: false defaultTrigger: null fields: - - id: eHz3d4e84JS3kmwF3ZPHfd + - id: eUPVg59Ppmw58zM8FLQoBH sortOrder: 0 fieldKey: external_id label: External ID @@ -24306,7 +24306,7 @@ items: choices: null dynamic: false allowNull: false - - id: rxDhtjPqqX48Xcc1RY4BrU + - 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: 6apsAkpFFFWh9FMAChH7yL + - 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: 4UTqMYrJtcFdtcRugKAFhm + - id: gk6NPK8An1b7BxAknnHrMy sortOrder: 0 fieldKey: external_id label: External ID @@ -24361,7 +24387,7 @@ items: choices: null dynamic: false allowNull: true - - id: wsgRaFBx5SAurQTrmF9tev + - id: oZuRPP81EkoHskVzeWB9ER sortOrder: 1 fieldKey: alias_name label: Alias Name @@ -24373,7 +24399,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8oj3TvVtzVRimKKx5rjqA4 + - id: bQ14DxHoEsszTFLGn8zgAN sortOrder: 2 fieldKey: alias_label label: Alias Label @@ -24393,7 +24419,7 @@ items: hidden: false defaultTrigger: event = "Order Completed" fields: - - id: ebLdUvgUbigeB1hAr12xoM + - id: mttbcYqew3xmFCCJasxHtw sortOrder: 0 fieldKey: external_id label: External User ID @@ -24407,7 +24433,7 @@ items: choices: null dynamic: false allowNull: false - - id: aViyPeKH8qzqT9zy3SEhDg + - id: mo57jytve23656fUQRZNhn sortOrder: 1 fieldKey: user_alias label: User Alias Object @@ -24421,7 +24447,7 @@ items: choices: null dynamic: false allowNull: false - - id: myYDc2sNPWQFxyLQBDsfb5 + - id: jVX3F4nkCrEW3NEa5zRqxw sortOrder: 2 fieldKey: email label: Email @@ -24435,7 +24461,7 @@ items: choices: null dynamic: false allowNull: false - - id: ohRg8GdXWAED8HavXrUfx8 + - id: qCiDffY8q4X8neFkzX2ABz sortOrder: 3 fieldKey: braze_id label: Braze User Identifier @@ -24449,7 +24475,7 @@ items: choices: null dynamic: false allowNull: true - - id: ry7cUGYjV3FQ2bvzTwYidm + - id: kTqTnf262x7oy1xD9jaE5N sortOrder: 4 fieldKey: time label: Time @@ -24463,7 +24489,7 @@ items: choices: null dynamic: false allowNull: false - - id: 2LpWSU9Ly4aMiaY2C8z4dB + - id: mDYwdEDPMLxCxxsJoTqxjR sortOrder: 5 fieldKey: products label: Products @@ -24477,7 +24503,7 @@ items: choices: null dynamic: false allowNull: false - - id: 773Jwv1SGVCfysGJUssYcH + - id: iUbxoDYMtNHMw1TxR5S7QK sortOrder: 6 fieldKey: properties label: Event Properties @@ -24491,7 +24517,7 @@ items: choices: null dynamic: false allowNull: false - - id: 3V4dPMDH7sJzqHw1xkqrgN + - id: 2cERam8KHiVE96obMoE2TH sortOrder: 7 fieldKey: enable_batching label: Batch Data to Braze @@ -24514,7 +24540,7 @@ items: hidden: false defaultTrigger: type = "track" fields: - - id: frVxjjng97px27kMgWPkgA + - id: adEtxVM6wzmkGPVTs7pDnN sortOrder: 0 fieldKey: campaign_id label: Campaign ID @@ -24528,7 +24554,7 @@ items: choices: null dynamic: true allowNull: false - - id: hzf8gAqF5dzYEnW4qm28gh + - id: oQYCj5zPnSS5g2LEsnLGUx sortOrder: 1 fieldKey: send_id label: Send ID @@ -24542,7 +24568,7 @@ items: choices: null dynamic: false allowNull: false - - id: evjms8z9F3mT1AmkKFFqZv + - id: aE5Tt6xMYURADXk1VtzRrV sortOrder: 2 fieldKey: trigger_properties label: Trigger Properties @@ -24559,7 +24585,7 @@ items: choices: null dynamic: false allowNull: false - - id: v2EQEDbxsXrtEU73SKwVMd + - id: 9z7i5SUG97D2A7q6cjyMnu sortOrder: 3 fieldKey: broadcast label: Broadcast @@ -24574,7 +24600,7 @@ items: choices: null dynamic: false allowNull: false - - id: qzU9tkUdebo3ez8xgqbNJq + - id: 9Zp4r9YkWzUevMHJBfmTh8 sortOrder: 4 fieldKey: attachments label: Attachments @@ -24586,7 +24612,7 @@ items: choices: null dynamic: false allowNull: false - - id: cU7Zn8PNVCCUgSdKWgqWcu + - id: kFEo7HU6ckwdyGLKqFguEq sortOrder: 5 fieldKey: recipients label: Recipients @@ -24600,7 +24626,7 @@ items: choices: null dynamic: false allowNull: false - - id: 7FqZXBLiyfFZZVvEdfGiTZ + - id: 83BHy4g9rgBf8x4JxZrjmV sortOrder: 6 fieldKey: prioritization label: Prioritization @@ -24614,7 +24640,7 @@ items: choices: null dynamic: false allowNull: false - - id: fh4Dpnn5wQNCLdeARBUvNw + - id: kfFurhvjDuAMmefgFQntV7 sortOrder: 7 fieldKey: audience label: Audience @@ -24628,26 +24654,138 @@ items: choices: null dynamic: false allowNull: false - presets: - - actionId: vE7Gf9yobj2gTuMBhwmg7g - name: Order Completed Calls + - id: 3rHZERwR6c55kFDYDFmu5V + name: Upsert Catalog Item + slug: upsertCatalogItem + description: Upserts or deletes items in a catalog + platform: CLOUD + hidden: false + defaultTrigger: null 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 - _update_existing_only: false - enable_batching: true - batch_size: 75 - trigger: event = "Order Completed" + - 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: 2P24zUSAL8BUpyGYNGmD7M name: Identify Calls fields: @@ -24707,6 +24845,25 @@ items: enable_batching: true batch_size: 75 trigger: type = "track" and event != "Order Completed" + - actionId: vE7Gf9yobj2gTuMBhwmg7g + name: Order Completed 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 + _update_existing_only: false + enable_batching: true + batch_size: 75 + trigger: event = "Order Completed" partnerOwned: false - id: 63872c01c0c112b9b4d75412 display_name: Braze Cohorts diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml index 5c270665c6..a13018ddb2 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-06-26 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..eedd4f30ed 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-06-26 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..5805cf96c0 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-06-26 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 f518b83825..52e5900904 100644 --- a/src/_data/sidenav/main.yml +++ b/src/_data/sidenav/main.yml @@ -210,6 +210,8 @@ sections: title: BigQuery Reverse ETL Setup - path: /connections/reverse-etl/reverse-etl-source-setup-guides/databricks-setup title: Databricks Reverse ETL Setup + - path: /connections/reverse-etl/reverse-etl-source-setup-guides/db2-setup + title: Db2 Reverse ETL Setup - path: /connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup title: Postgres Reverse ETL Setup - path: /connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup @@ -223,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 @@ -479,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: @@ -500,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/_includes/content/destination-dossier.html b/src/_includes/content/destination-dossier.html index f25787e7e0..e312be91fd 100644 --- a/src/_includes/content/destination-dossier.html +++ b/src/_includes/content/destination-dossier.html @@ -108,4 +108,17 @@
Connection Modes {% endunless %} {% endif %} + +{% unless page.id == '66b1f528d26440823fb27af9' %} +{% if destinationInfo.partnerOwned == true %} +
+
Partner Owned
+
    +
  • This integration is partner owned. Please reach out to the partner's support for any issues.
  • +
+
+{% endif %} +{% endunless %} + + {% endif %} \ No newline at end of file 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-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 aa99008ed4..3df2563d8d 100644 --- a/src/connections/destinations/catalog/actions-webhook-extensible/index.md +++ b/src/connections/destinations/catalog/actions-webhook-extensible/index.md @@ -1,7 +1,6 @@ --- title: Extensible Webhooks Destination id: 66b1f528d26440823fb27af9 -beta: true hidden: true redirect_from: '/connections/destinations/catalog/extensible-webhook/' --- @@ -10,10 +9,9 @@ redirect_from: '/connections/destinations/catalog/extensible-webhook/' 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. -Segment maintains this destination. For any issues, [contact Segment Support](friends@segment.com). +This destination is not currently available in EU regions. -> info "Public beta" -> Extensible Webhooks is in public beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. +Segment maintains this destination. For any issues, [contact Segment Support](friends@segment.com). ## Overview 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..6b4faceebb --- /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/eagleeye-actions/index.md b/src/connections/destinations/catalog/eagleeye-actions/index.md new file mode 100644 index 0000000000..f6a1347d34 --- /dev/null +++ b/src/connections/destinations/catalog/eagleeye-actions/index.md @@ -0,0 +1,44 @@ +--- +title: Eagle Eye (Actions) Destination +id: 682db61f6c600fdb90251392 +--- + +{% include content/plan-grid.md name="actions" %} + +[Eagle Eye](https://eagleeye.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} delivers real-time loyalty and promotions solutions for enterprise brands, enabling seamless integration with leading customer data platforms and marketing activation tools. The platform connects digital and in-store experiences, accelerating personalization and campaign delivery through extensible APIs and pre-built connectors. + +This integration requires both an Eagle Eye Source and Destination. The source sends events into Segment, and the destination processes those events to trigger specific behaviorial actions in Eagle Eye. + +> warning "" +> This destination must be used in tandem with a corresponding Eagle Eye Source to trigger behaviorial actions in Eagle Eye. + +This destination is maintained by Eagle Eye. For any issues with the destination, [contact their Support team](mailto:support@eagleeye.com). + +## Getting started + +To set up the Eagle Eye (Actions) destination in Segment: + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for "Eagle Eye". +2. Select "Eagle Eye (Actions)" and click **Add Destination**. +3. Select an existing Source to connect to Eagle Eye (Actions). +4. Set up your EE Connector for Segment by following the [CDP and MAP Connectors guide](https://developer.eagleeye.com/eagleeye-developer/docs/eagle-eye-connect-cdp-map){:target="_blank”}. You'll also need to refer to the [Segment-specific page](https://developer.eagleeye.com/docs/segment){:target="_blank”} for additional information required during setup. +5. Go to the Eagle Eye (Actions) destination settings in Segment and enter the **Connector URL** and **Connector External Key** obtained in the previous step. + +{% include components/actions-fields.html %} + +### Define mappings to trigger Behavioral Actions + +This guide assumes you're using the Eagle Eye Connector for Segment to send events. Any event is considered valid as long as it includes the properties "User identity value" and (optionally) "Wallet transaction reference". + +To set this up, you must first configure [Social Behavioral Action Triggers](https://developer.eagleeye.com/eagleeye-developer/docs/segment#set-up-social-behavioural-action-triggers){:target="_blank”} within the Eagle Eye AIR dashboard. You can find this under **Triggers > Search** / **Create Behavioral Action**. + +To map incoming event data and trigger behavioral actions in the Eagle Eye AIR dashboard, follow these steps: + +1. In the Eagle Eye (Actions) destination, go to the Mappings tab and click **New Mapping**. +2. From the action list, select **Trigger Behavioral Action**. +3. Define your event trigger conditions. For example, if you want to trigger an action only for customers who just joined the program, select "Event Type is Track" and "Event Name is EE Loyalty Program Joined" (or any other event that contains the information you need). +4. Under **Map fields**, ensure that at least "User identity value" and "Behavioral Action trigger reference" are mapped. The trigger reference will be the same as the one set within the Eagle Eye AIR dashboard when creating the behavioral action. +5. (Optional) If your behavioral action requires a "Wallet transaction reference", you can pull it from one of the event fields. For example, an event property that may contain the transaction reference, such as `properties.order_id`. +6. Click **Next**, give the mapping a name and hit **Save** or **Save and enable**. + +For more information on events sent through the Eagle Eye Connector for Segment and their properties, refer to the [Data Model](https://developer.eagleeye.com/eagleeye-developer/docs/segment#data-model){:target="_blank”} documentation. 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 new file mode 100644 index 0000000000..f67904d3c7 --- /dev/null +++ b/src/connections/reverse-etl/reverse-etl-source-setup-guides/db2-setup.md @@ -0,0 +1,100 @@ +--- +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. + + + +## Required permissions + +In order to run a Reverse ETL sync in your Db2 warehouse, you'll create a user with the following permissions: + +* **Permission to read from all tables used in the model**: The user must be able to access all tables included in your SELECT query. +* **Permission to create and manage a schema**: Segment creates and manages a schema in your warehouse to track sync metadata. +* **Permission to create tables in the database**: Segment creates metadata tables in your warehouse. + + +> info "Create a dedicated user for Segment's Reverse ETL connection" +> Segment recommends that you create a dedicated Db2 user for when setting up Reverse ETL. This user should only have access to the relevant schemas and tables you'll need to access during syncs between Segment and your warehouse. + +1. In IBM Cloud, go to your Db2 instance and navigate to **Administration > User management**. +2. Click **Add**. +3. Create a new user with *user* privileges. Note the username and password of the user you created, as you'll need this information to set up the Segment source connection in a later step. + + +> info "" +> Segment creates and manages the `SEGMENT_REVERSE_ETL` schema to track the status of each sync. +> You can also choose to create this schema yourself by running: +> `CREATE SCHEMA SEGMENT_REVERSE_ETL` +> After you've created the schema, grant Segment the appropriate privileges. + + + +Run the following SQL commands to grant Segment the required permissions: + +```sql +-- Grant permissions to create and manage objects within the SEGMENT_REVERSE_ETL schema +GRANT CREATEIN, DROPIN ON SCHEMA SEGMENT_REVERSE_ETL TO USER ; + +-- Grant permission to create tables in the database +GRANT CREATETAB ON DATABASE TO USER ; + +-- Grant read access on each table used in the model +GRANT SELECT ON TABLE . TO USER ; +-- Repeat the above command for all tables involved in your model +``` + + +## Set up guide + +To set up Db2 as your Reverse ETL source: + +1. Confirm that your Db2 database is network-accessible from the [IP address that Segment uses to connect to your warehouse](/docs/connections/storage/warehouses/faq/#which-ips-should-i-allowlist). +2. Open [your Segment workspace](https://app.segment.com/workspaces){:target="_blank"}. +3. Navigate to **Connections > Sources** then select the **Reverse ETL** tab. +4. Click **+ Add Reverse ETL source**. +5. Select **Db2** and click **Add Source**. +6. Fill in the following Db2 connection settings: + * Hostname: `` + * Port: `` + * Database: `` + * Username: `` + * Password: `` +7. Click **Test Connection** to validate the setup. +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/reverse-etl/setup.md b/src/connections/reverse-etl/setup.md index 0fdd98bd7c..4172e6e281 100644 --- a/src/connections/reverse-etl/setup.md +++ b/src/connections/reverse-etl/setup.md @@ -28,6 +28,7 @@ To add your warehouse as a source: - [Azure Reverse ETL setup guide](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/azure-setup) - [BigQuery Reverse ETL setup guide](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/bigquery-setup) - [Databricks Reverse ETL setup guide](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/databricks-setup) + - [Db2 Reverse ETL setup guide](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/db2-setup) - [Postgres Reverse ETL setup guide](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup) - [Redshift Reverse ETL setup guide](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup) - [Snowflake Reverse ETL setup guide](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/snowflake-setup) 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/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.