From 9df9a785216f04c42e6af8b99f5732fcdda3d63b Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 26 Jan 2022 12:26:14 -0500 Subject: [PATCH 01/17] Updating limited access banner --- src/connections/storage/catalog/amazon-s3/index.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/connections/storage/catalog/amazon-s3/index.md b/src/connections/storage/catalog/amazon-s3/index.md index e830f76573..d477d1d267 100644 --- a/src/connections/storage/catalog/amazon-s3/index.md +++ b/src/connections/storage/catalog/amazon-s3/index.md @@ -6,10 +6,8 @@ redirect_from: hide-personas-partial: true --- -> warning "The Amazon S3 destination will enter Limited Access in February 2022" -> After the Amazon S3 destination enters Limited Access, you will no longer be able to modify existing Amazon S3 destination instances, create new Amazon S3 instances, or re-enable a disabled Amazon S3 instance. -> -> Migrate to the AWS S3 destination to continue storing data in AWS. For more information about migration to AWS S3, see the [AWS S3 destination documentation](/docs/connections/storage/catalog/aws-s3/#migrate-an-existing-destination). +> warning "The Amazon S3 destination will enter Limited Access on February 8, 2022" +> After the Amazon S3 destination enters Limited Access, you will no longer be able to modify existing Amazon S3 destination instances, create new Amazon S3 instances, or re-enable a disabled Amazon S3 instance. Existing Amazon S3 instances will continue to receive data.

Migrate to the AWS S3 destination to continue storing data in AWS. For more information about migration to AWS S3, see the [AWS S3 destination documentation](/docs/connections/storage/catalog/aws-s3/#migrate-an-existing-destination). ## Migrating from Amazon S3 to AWS S3 From d8e8b42abedae11f188d35aae0601b1fec637d37 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Wed, 26 Jan 2022 12:39:27 -0500 Subject: [PATCH 02/17] [netlify-build] --- src/connections/storage/catalog/amazon-s3/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/connections/storage/catalog/amazon-s3/index.md b/src/connections/storage/catalog/amazon-s3/index.md index d477d1d267..8cb59966a4 100644 --- a/src/connections/storage/catalog/amazon-s3/index.md +++ b/src/connections/storage/catalog/amazon-s3/index.md @@ -244,4 +244,5 @@ For user-property destinations, Segment sends an [identify](/docs/connections/sp When you first create an audience, Personas sends an Identify call for every user in that audience. Later audience syncs send updates for users whose membership has changed since the last sync. + {% include content/destination-footer.md %} \ No newline at end of file From a33f6d87d9a4497ba88a92075e2f4d2ff74474ae Mon Sep 17 00:00:00 2001 From: Wenxi Zeng Date: Tue, 1 Feb 2022 09:17:39 -0800 Subject: [PATCH 03/17] complete after examples --- .../mobile/kotlin-android/migration.md | 396 +++++++++++++++--- 1 file changed, 339 insertions(+), 57 deletions(-) diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md index a39319a29a..dcf3cbb517 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md @@ -21,37 +21,55 @@ If you’re using a different library such as Analytics-Android, follow these st Segment recommends you to install the library with a build system like Gradle, as it simplifies the process of upgrading versions and adding integrations. The library is distributed via [Jitpack](https://jitpack.io/){:target="_blank"}. Add the analytics module to your build.gradle.
Before example: - ```swift + ```groovy dependencies { implementation 'com.segment.analytics.android:analytics:4.+' } ```
After example: - ```swift + ```groovy repositories { - maven { url 'https://jitpack.io' } + mavenCentral() } dependencies { - implementation 'com.github.segmentio.analytics-kotlin:android:+' + implementation 'com.segment.analytics.kotlin:android:' } ``` 3. Modify your initialized instance.
Before example: - ```swift + ```java Analytics analytics = new Analytics.Builder(context, "YOUR_WRITE_KEY") .trackApplicationLifecycleEvents() .build(); ```
After example: - ```swift + + {% codeexample %} + {% codeexampletab Java %} + ```java + // Initialize an Analytics object with the Kotlin Analytics method + Analytics androidAnalytics = AndroidAnalyticsKt.Analytics("YOUR_WRITE_KEY", context, configuration -> { + configuration.setTrackApplicationLifecycleEvents(true); + return Unit.INSTANCE; + }); + + // Wrap the object with JavaAnalytics to bring Java Compatibility. + // You can also choose not to wrap the object, but some of the Analytics methods may not be accessible. + JavaAnalytics analytics = new JavaAnalytics(androidAnalytics); + ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin Analytics("YOUR_WRITE_KEY", context) { - analyticsScope = applicationCoroutineScope trackApplicationLifecycleEvents = true } ``` + {% endcodeexampletab %} + {% endcodeexample %} + 4. Add a middleware. Middlewares are a powerful mechanism that can augment the events collected by the SDK. A middleware is a function that the Segment SDK invokes and can be used to monitor, modify, augment or reject events. @@ -59,7 +77,7 @@ If you’re using a different library such as Analytics-Android, follow these st
As middlewares have the same function as [enrichment plugins](/docs/connections/sources/catalog/libraries/mobile/kotlin-android#plugin-architecture), you need to write an enrichment plugin to add a middleware.
Before example: - ```swift + ```java builder .useSourceMiddleware(new Middleware() { @Override @@ -84,29 +102,70 @@ If you’re using a different library such as Analytics-Android, follow these st ```
After example: - ```swift + + {% codeexample %} + {% codeexampletab Java %} + ```java + analytics.add(new Plugin() { + private Analytics analytics; + + @Override + public BaseEvent execute(@NonNull BaseEvent event) { + // Set the device year class on the context object. + int year = YearClass.get(getApplicationContext()); + EventTransformer.putInContext(event, "device_year_class", year); + return event; + } + + @Override + public void setup(@NonNull Analytics analytics) { + setAnalytics(analytics); + } + + @NonNull + @Override + public Type getType() { + return Plugin.Type.Enrichment; + } + + @NonNull + @Override + public Analytics getAnalytics() { + return analytics; + } + + @Override + public void setAnalytics(@NonNull Analytics analytics) { + this.analytics = analytics; + } + }); + ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin analytics.add(object: Plugin { override lateinit var analytics: Analytics override val type = Plugin.Type.Enrichment override fun execute(event: BaseEvent): BaseEvent? { // Set the device year class on the context object. - int year = YearClass.get(getApplicationContext()); - Map context = new LinkedHashMap<>(payload.context()); - event.context = buildJsonObject { - putAll(event.context) - put("device_year_class", year) + val year = YearClass.get(getApplicationContext()); + event.context = updateJsonObject(event.context) { + it["device_year_class"] = year } return event } }) ``` + {% endcodeexampletab %} + {% endcodeexample %} + 5. Add a destination middleware. If you don’t need to transform all of your Segment calls, and only want to transform the calls going to specific destinations, use Destination middleware instead of Source middleware. Destination middleware is available for device-mode destinations only.
Before example: - ```swift + ```java builder .useDestinationMiddleware("Segment.io", new Middleware() { @Override @@ -131,7 +190,49 @@ If you’re using a different library such as Analytics-Android, follow these st ```
After example: - ```swift + + {% codeexample %} + {% codeexampletab Java %} + ```java + SegmentDestination segmentDestination = analytics.find(SegmentDestination.class); + + segmentDestination.add(new Plugin() { + private Analytics analytics; + + @Override + public BaseEvent execute(@NonNull BaseEvent event) { + // Set the device year class on the context object. + int year = YearClass.get(getApplicationContext()); + EventTransformer.putInContext(event, "device_year_class", year); + return event; + } + + @Override + public void setup(@NonNull Analytics analytics) { + setAnalytics(analytics); + } + + @NonNull + @Override + public Type getType() { + return Plugin.Type.Enrichment; + } + + @NonNull + @Override + public Analytics getAnalytics() { + return analytics; + } + + @Override + public void setAnalytics(@NonNull Analytics analytics) { + this.analytics = analytics; + } + }); + ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin val segmentDestination: DestinationPlugin = analytics.find(SegmentDestination::class) segmentDestination.add(object: Plugin { @@ -140,16 +241,17 @@ If you’re using a different library such as Analytics-Android, follow these st override fun execute(event: BaseEvent): BaseEvent? { // Set the device year class on the context object. - int year = YearClass.get(getApplicationContext()); - Map context = new LinkedHashMap<>(payload.context()); - event.context = buildJsonObject { - putAll(event.context) - put("device_year_class", year) + val year = YearClass.get(getApplicationContext()); + event.context = updateJsonObject(event.context) { + it["device_year_class"] = year } return event } }) ``` + {% endcodeexampletab %} + {% endcodeexample %} + 6. Set your config options.
Segment changed these config options: @@ -183,36 +285,85 @@ If you’re using a different library such as Analytics-Android, follow these st Segment previously used Factories to initialize destinations. With Analytics Kotlin, Segment treats destinations similar to plugins and simplifies the process in adding them.
Before example: - ```swift + ```java // Previously we used to use Factories to initialize destinations analytics.use(FooIntegration.FACTORY) ```
After example: - ```swift + + {% codeexample %} + {% codeexampletab Java %} + ```java // Now destinations are treated similar to plugins and thus are simpler to add - val destination = /* initialize your desired destination */ + YourDestination destination = new YourDestination(); + analytics.add(destination); + ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + // Now destinations are treated similar to plugins and thus are simpler to add + val destination = YourDestination() analytics.add(destination) ``` + {% endcodeexampletab %} + {% endcodeexample %} + 8. Modify your tracking methods for Identify, Track, Group, Screen, and Alias. - Identify
Before example: - ```kotlin + ```java analytics.identify("a user's id", new Traits().putName("John Doe"), null); ```
After example: - ```kotlin + + {% codeexample %} + {% codeexampletab Java %} + ```java // The newer APIs promote the use of strongly typed structures to keep codebases legible - @Serializable - data class UserTraits( - var firstName: String, - var lastName: String - ) + class UserTraits implements JsonSerializable { + private String firstName; + private String lastName; + + public JsonObject serialize() { + return Builders.buildJsonObject(o -> { + o.put("firstName", firstName) + .put("lastName", lastName); + })); + } + } + + analytics.identify("a user's id", new UserTraits()); - analytics.identify("a user's id", UserTraits(firstName = "John", lastName = "Doe")) + // Or you could use the JSON builder if you have some unstructured data + analytics.identify("a user's id", Builders.buildJsonObject(o -> { + o.put("firstName", "John") + .put("lastName", "Doe"); + })); ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + // The newer APIs promote the use of strongly typed structures to keep codebases legible + @Serializable + data class UserTraits( + var firstName: String, + var lastName: String + ) + + analytics.identify("a user's id", UserTraits(firstName = "John", lastName = "Doe")) + + + // Or you could use the JSON builder if you have some unstructured data + analytics.identify("a user's id", buildJsonObject { + put("firstName", "John") + put("lastName", "Doe") + })); + ``` + {% endcodeexampletab %} + {% endcodeexample %} - Track @@ -222,52 +373,163 @@ If you’re using a different library such as Analytics-Android, follow these st ```
After example: - ```kotlin - // The newer APIs promote the use of strongly typed structures to keep codebases legible - @Serializable - data class ProductViewedProperties( - var productName: String, - var brand: String, - var category: String, - var price: Double, - var currency: String - ) - analytics.track( - "Product Viewed", - ProductViewedProperties( - productName = "Moto 360", - brand = "Motorola", - category = "smart watch", - price = 300.00 - currency = "USD" - ) - ) - ``` + {% codeexample %} + {% codeexampletab Java %} + ```java + // The newer APIs promote the use of strongly typed structures to keep codebases legible + class ProductViewedProperties implements JsonSerializable { + private String productName; + private String brand; + private String category; + private String price; + private String currency; + + public JsonObject serialize() { + return Builders.buildJsonObject(o -> { + o.put("productName", productName) + .put("brand", brand) + .put("category", category) + .put("price", price) + .put("currency", currency); + })); + } + } + + analytics.track("Product Viewed", new ProductViewedProperties()); + + // Or you could use the JSON builder if you have some unstructured data + analytics.track("Product Viewed", Builders.buildJsonObject(o -> { + o.put("productName", productName) + .put("brand", brand) + .put("category", category) + .put("price", price) + .put("currency", currency); + })); + ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + // The newer APIs promote the use of strongly typed structures to keep codebases legible + @Serializable + data class ProductViewedProperties( + var productName: String, + var brand: String, + var category: String, + var price: Double, + var currency: String + ) + + analytics.track( + "Product Viewed", + ProductViewedProperties( + productName = "Moto 360", + brand = "Motorola", + category = "smart watch", + price = 300.00 + currency = "USD" + ) + ) + + // Or you could use the JSON builder if you have some unstructured data + analytics.track( + "Product Viewed", + buildJsonObject { + put("productName", "Moto 360"), + put("brand", "Motorola"), + put("category", "smart watch"), + put("price", 300.00), + put("currency", "USD") + } + ) + ``` + {% endcodeexampletab %} + {% endcodeexample %} + - Group
Before example: - ```kotlin + ```java analytics.group("a user's id", "a group id", new Traits().putEmployees(20)); ```
After example: - ```kotlin + + {% codeexample %} + {% codeexampletab Java %} + ```java + // The newer APIs promote the use of strongly typed structures to keep codebases legible + class GroupTraits implements JsonSerializable { + private int employeeCount; + + public JsonObject serialize() { + return Builders.buildJsonObject(o -> { + o.put("employeeCount", employeeCount); + })); + } + } + + analytics.group("a group id", new GroupTraits()); + + // Or you could use the JSON builder if you have some unstructured data + analytics.group("a group id", Builders.buildJsonObject(o -> { + o.put("employeeCount", 20); + })); + + ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + // The newer APIs promote the use of strongly typed structures to keep codebases legible @Serializable data class GroupTraits( var employeeCount: Int ) analytics.group("a group id", GroupTraits(employeeCount = 20)) + + + // Or you could use the JSON builder if you have some unstructured data + analytics.group("a group id", buildJsonObject{ + put("employeeCount", 20) + }) ``` + {% endcodeexampletab %} + {% endcodeexample %} - Screen
Before example: - ```kotlin + ```java analytics.screen("Feed", new Properties().putValue("Feed Length", "26")); ```
After example: + + {% codeexample %} + {% codeexampletab Java %} + ```java + // The newer APIs promote the use of strongly typed structures to keep codebases legible + class FeedScreenProperties implements JsonSerializable { + private int feedLength; + + public JsonObject serialize() { + return Builders.buildJsonObject(o -> { + o.put("Feed Length", feedLength); + })); + } + } + + analytics.screen("Feed", new FeedScreenProperties()); + + // Or you could use the JSON builder if you have some unstructured data + analytics.screen("Feed", Builders.buildJsonObject(o -> { + o.put("Feed Length", 26); + })); + + ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} ```kotlin + // The newer APIs promote the use of strongly typed structures to keep codebases legible @Serializable data class FeedScreenProperties( @SerialName("Feed Length") @@ -275,15 +537,35 @@ If you’re using a different library such as Analytics-Android, follow these st ) analytics.screen("Feed", FeedScreenProperties(feedLength = 26)) + + + // Or you could use the JSON builder if you have some unstructured data + analytics.screen("Feed", buildJsonObject{ + put("feedLength", 26) + }) ``` + {% endcodeexampletab %} + {% endcodeexample %} + - Alias
Before example: - ```kotlin + ```java analytics.alias("new id"); ```
After example: + + {% codeexample %} + {% codeexampletab Java %} + ```java + analytics.alias("new id"); + ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} ```kotlin analytics.alias("new id") ``` + {% endcodeexampletab %} + {% endcodeexample %} + From 4a14d665be1e6e879991f7b1c438489f3797d59e Mon Sep 17 00:00:00 2001 From: Wenxi Zeng Date: Tue, 1 Feb 2022 10:05:33 -0800 Subject: [PATCH 04/17] complete before examples --- .../mobile/kotlin-android/migration.md | 140 +++++++++++++++++- 1 file changed, 136 insertions(+), 4 deletions(-) diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md index dcf3cbb517..adac6f817d 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md @@ -39,11 +39,23 @@ If you’re using a different library such as Analytics-Android, follow these st 3. Modify your initialized instance.
Before example: + {% codeexample %} + {% codeexampletab Java %} ```java Analytics analytics = new Analytics.Builder(context, "YOUR_WRITE_KEY") .trackApplicationLifecycleEvents() .build(); ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + val analytics = Analytics.Builder(context, "YOUR_WRITE_KEY") + .trackApplicationLifecycleEvents() + .build() + ``` + {% endcodeexampletab %} + {% endcodeexample %} +
After example: @@ -77,6 +89,9 @@ If you’re using a different library such as Analytics-Android, follow these st
As middlewares have the same function as [enrichment plugins](/docs/connections/sources/catalog/libraries/mobile/kotlin-android#plugin-architecture), you need to write an enrichment plugin to add a middleware.
Before example: + + {% codeexample %} + {% codeexampletab Java %} ```java builder .useSourceMiddleware(new Middleware() { @@ -100,6 +115,32 @@ If you’re using a different library such as Analytics-Android, follow these st } }) ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + builder + .useSourceMiddleware( + Middleware { chain -> + // Get the payload. + val payload = chain.payload() + + // Set the device year class on the context object. + val year = YearClass.get(getApplicationContext()) + val context = LinkedHashMap(payload.context()) + context.put("device_year_class", year) + + // Build our new payload. + val newPayload = payload.toBuilder() + .context(context) + .build(); + + // Continue with the new payload. + chain.proceed(newPayload) + }) + ``` + {% endcodeexampletab %} + {% endcodeexample %} +
After example: @@ -149,7 +190,7 @@ If you’re using a different library such as Analytics-Android, follow these st override fun execute(event: BaseEvent): BaseEvent? { // Set the device year class on the context object. - val year = YearClass.get(getApplicationContext()); + val year = YearClass.get(getApplicationContext()) event.context = updateJsonObject(event.context) { it["device_year_class"] = year } @@ -165,6 +206,9 @@ If you’re using a different library such as Analytics-Android, follow these st If you don’t need to transform all of your Segment calls, and only want to transform the calls going to specific destinations, use Destination middleware instead of Source middleware. Destination middleware is available for device-mode destinations only.
Before example: + + {% codeexample %} + {% codeexampletab Java %} ```java builder .useDestinationMiddleware("Segment.io", new Middleware() { @@ -188,6 +232,32 @@ If you’re using a different library such as Analytics-Android, follow these st } }) ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + builder + .useDestinationMiddleware( + "Segment.io", + Middleware { chain -> + // Get the payload. + val payload = chain.payload() + + // Set the device year class on the context object. + val year = YearClass.get(getApplicationContext()) + val context = LinkedHashMap(payload.context()) + context.put("device_year_class", year) + + // Build our new payload. + val newPayload = payload.toBuilder() + .context(context) + .build(); + + // Continue with the new payload. + chain.proceed(newPayload) + }) + ``` + {% endcodeexampletab %} + {% endcodeexample %}
After example: @@ -241,7 +311,7 @@ If you’re using a different library such as Analytics-Android, follow these st override fun execute(event: BaseEvent): BaseEvent? { // Set the device year class on the context object. - val year = YearClass.get(getApplicationContext()); + val year = YearClass.get(getApplicationContext()) event.context = updateJsonObject(event.context) { it["device_year_class"] = year } @@ -285,10 +355,21 @@ If you’re using a different library such as Analytics-Android, follow these st Segment previously used Factories to initialize destinations. With Analytics Kotlin, Segment treats destinations similar to plugins and simplifies the process in adding them.
Before example: + + {% codeexample %} + {% codeexampletab Java %} ```java // Previously we used to use Factories to initialize destinations + analytics.use(FooIntegration.FACTORY); + ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + // Previously we used to use Factories to initialize destinations analytics.use(FooIntegration.FACTORY) ``` + {% endcodeexampletab %} + {% endcodeexample %}
After example: @@ -313,9 +394,20 @@ If you’re using a different library such as Analytics-Android, follow these st - Identify
Before example: + + {% codeexample %} + {% codeexampletab Java %} ```java analytics.identify("a user's id", new Traits().putName("John Doe"), null); ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + analytics.identify("a user's id", Traits().putName("John Doe"), null) + ``` + {% endcodeexampletab %} + {% endcodeexample %} +
After example: @@ -368,9 +460,19 @@ If you’re using a different library such as Analytics-Android, follow these st - Track
Before example: - ```kotlin + + {% codeexample %} + {% codeexampletab Java %} + ```java analytics.track("Product Viewed", new Properties().putValue("name", "Moto 360")); ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + analytics.track("Product Viewed", Properties().putValue("name", "Moto 360")) + ``` + {% endcodeexampletab %} + {% endcodeexample %}
After example: @@ -427,7 +529,7 @@ If you’re using a different library such as Analytics-Android, follow these st productName = "Moto 360", brand = "Motorola", category = "smart watch", - price = 300.00 + price = 300.00, currency = "USD" ) ) @@ -449,9 +551,19 @@ If you’re using a different library such as Analytics-Android, follow these st - Group
Before example: + + {% codeexample %} + {% codeexampletab Java %} ```java analytics.group("a user's id", "a group id", new Traits().putEmployees(20)); ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + analytics.group("a user's id", "a group id", Traits().putEmployees(20)) + ``` + {% endcodeexampletab %} + {% endcodeexample %}
After example: @@ -498,9 +610,19 @@ If you’re using a different library such as Analytics-Android, follow these st - Screen
Before example: + + {% codeexample %} + {% codeexampletab Java %} ```java analytics.screen("Feed", new Properties().putValue("Feed Length", "26")); ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + analytics.screen("Feed", Properties().putValue("Feed Length", "26")) + ``` + {% endcodeexampletab %} + {% endcodeexample %}
After example: @@ -550,9 +672,19 @@ If you’re using a different library such as Analytics-Android, follow these st - Alias
Before example: + + {% codeexample %} + {% codeexampletab Java %} ```java analytics.alias("new id"); ``` + {% endcodeexampletab %} + {% codeexampletab Kotlin %} + ```kotlin + analytics.alias("new id") + ``` + {% endcodeexampletab %} + {% endcodeexample %}
After example: From 7300d4e4fa409a224698fc159e09044802af98d6 Mon Sep 17 00:00:00 2001 From: stayseesong Date: Wed, 2 Feb 2022 10:52:22 -0800 Subject: [PATCH 05/17] format fix [netlify-build] --- .../mobile/kotlin-android/migration.md | 671 ++++++++++++------ 1 file changed, 458 insertions(+), 213 deletions(-) diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md index adac6f817d..0a4b9f1926 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md @@ -11,7 +11,6 @@ If you’re using a different library such as Analytics-Android, follow these st > success "" > You can continue to use your Android source write key for the migration to view historical events. - 1. Create a Kotlin Source in Segment. 1. Go to **Connections > Sources > Add Source**. 2. Search for **Kotlin** and click **Add source**. @@ -38,60 +37,96 @@ If you’re using a different library such as Analytics-Android, follow these st ``` 3. Modify your initialized instance. -
Before example: - {% codeexample %} - {% codeexampletab Java %} + + + + + + + + + + + + + + + + + +
Before
Java ```java Analytics analytics = new Analytics.Builder(context, "YOUR_WRITE_KEY") .trackApplicationLifecycleEvents() .build(); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin ```kotlin val analytics = Analytics.Builder(context, "YOUR_WRITE_KEY") - .trackApplicationLifecycleEvents() - .build() + .trackApplicationLifecycleEvents() + .build() ``` - {% endcodeexampletab %} - {% endcodeexample %} - - -
After example: +
+ + + + + + + + + + + + + + + + + + + +
After
Java - {% codeexample %} - {% codeexampletab Java %} ```java - // Initialize an Analytics object with the Kotlin Analytics method + // Initialize an Analytics object with the Kotlin Analytics method Analytics androidAnalytics = AndroidAnalyticsKt.Analytics("YOUR_WRITE_KEY", context, configuration -> { - configuration.setTrackApplicationLifecycleEvents(true); - return Unit.INSTANCE; - }); + configuration.setTrackApplicationLifecycleEvents(true); + return Unit.INSTANCE; + } + ); // Wrap the object with JavaAnalytics to bring Java Compatibility. // You can also choose not to wrap the object, but some of the Analytics methods may not be accessible. JavaAnalytics analytics = new JavaAnalytics(androidAnalytics); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin + ```kotlin Analytics("YOUR_WRITE_KEY", context) { - trackApplicationLifecycleEvents = true + trackApplicationLifecycleEvents = true } ``` - {% endcodeexampletab %} - {% endcodeexample %} - +
+ + 4. Add a middleware. Middlewares are a powerful mechanism that can augment the events collected by the SDK. A middleware is a function that the Segment SDK invokes and can be used to monitor, modify, augment or reject events.
As middlewares have the same function as [enrichment plugins](/docs/connections/sources/catalog/libraries/mobile/kotlin-android#plugin-architecture), you need to write an enrichment plugin to add a middleware. -
Before example: - - {% codeexample %} - {% codeexampletab Java %} + + + + + + + + + + + + + + + + + +
Before
Java ```java builder .useSourceMiddleware(new Middleware() { @@ -115,8 +150,11 @@ If you’re using a different library such as Analytics-Android, follow these st } }) ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin ```kotlin builder .useSourceMiddleware( @@ -138,14 +176,24 @@ If you’re using a different library such as Analytics-Android, follow these st chain.proceed(newPayload) }) ``` - {% endcodeexampletab %} - {% endcodeexample %} - - -
After example: +
+ + + + + + + + + + + + + + + + + + + +
After
Java - {% codeexample %} - {% codeexampletab Java %} ```java analytics.add(new Plugin() { private Analytics analytics; @@ -181,8 +229,12 @@ If you’re using a different library such as Analytics-Android, follow these st } }); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin + ```kotlin analytics.add(object: Plugin { override lateinit var analytics: Analytics @@ -198,17 +250,27 @@ If you’re using a different library such as Analytics-Android, follow these st } }) ``` - {% endcodeexampletab %} - {% endcodeexample %} +
+ 5. Add a destination middleware. If you don’t need to transform all of your Segment calls, and only want to transform the calls going to specific destinations, use Destination middleware instead of Source middleware. Destination middleware is available for device-mode destinations only. -
Before example: - - {% codeexample %} - {% codeexampletab Java %} + + + + + + + + + + + + + + + + + +
Before
Java ```java builder .useDestinationMiddleware("Segment.io", new Middleware() { @@ -232,8 +294,11 @@ If you’re using a different library such as Analytics-Android, follow these st } }) ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin ```kotlin builder .useDestinationMiddleware( @@ -256,13 +321,24 @@ If you’re using a different library such as Analytics-Android, follow these st chain.proceed(newPayload) }) ``` - {% endcodeexampletab %} - {% endcodeexample %} +
+ + + + + + + + + + + + + + + + + + + +
After
Java -
After example: - - {% codeexample %} - {% codeexampletab Java %} ```java SegmentDestination segmentDestination = analytics.find(SegmentDestination.class); @@ -300,8 +376,12 @@ If you’re using a different library such as Analytics-Android, follow these st } }); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin + ```kotlin val segmentDestination: DestinationPlugin = analytics.find(SegmentDestination::class) @@ -319,9 +399,12 @@ If you’re using a different library such as Analytics-Android, follow these st } }) ``` - {% endcodeexampletab %} - {% endcodeexample %} - +
+ + 6. Set your config options.
Segment changed these config options: @@ -354,65 +437,113 @@ If you’re using a different library such as Analytics-Android, follow these st Segment previously used Factories to initialize destinations. With Analytics Kotlin, Segment treats destinations similar to plugins and simplifies the process in adding them. -
Before example: - - {% codeexample %} - {% codeexampletab Java %} + + + + + + + + + + + + + + + + + +
Before
Java ```java // Previously we used to use Factories to initialize destinations analytics.use(FooIntegration.FACTORY); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin ```kotlin // Previously we used to use Factories to initialize destinations analytics.use(FooIntegration.FACTORY) ``` - {% endcodeexampletab %} - {% endcodeexample %} +
+ + + + + + + + + + + + + + + + + + + +
After
Java -
After example: - - {% codeexample %} - {% codeexampletab Java %} ```java // Now destinations are treated similar to plugins and thus are simpler to add YourDestination destination = new YourDestination(); analytics.add(destination); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin + ```kotlin // Now destinations are treated similar to plugins and thus are simpler to add val destination = YourDestination() analytics.add(destination) ``` - {% endcodeexampletab %} - {% endcodeexample %} +
+ 8. Modify your tracking methods for Identify, Track, Group, Screen, and Alias. - Identify -
Before example: - - {% codeexample %} - {% codeexampletab Java %} + + + + + + + + + + + + + + + + + +
Before
Java ```java analytics.identify("a user's id", new Traits().putName("John Doe"), null); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin ```kotlin analytics.identify("a user's id", Traits().putName("John Doe"), null) ``` - {% endcodeexampletab %} - {% endcodeexample %} - +
+ + + + + + + + + + + + + + + + + + + +
After
Java -
After example: - - {% codeexample %} - {% codeexampletab Java %} ```java // The newer APIs promote the use of strongly typed structures to keep codebases legible class UserTraits implements JsonSerializable { @@ -433,51 +564,78 @@ If you’re using a different library such as Analytics-Android, follow these st analytics.identify("a user's id", Builders.buildJsonObject(o -> { o.put("firstName", "John") .put("lastName", "Doe"); - })); + })); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} - ```kotlin - // The newer APIs promote the use of strongly typed structures to keep codebases legible - @Serializable - data class UserTraits( - var firstName: String, - var lastName: String - ) +
Kotlin - analytics.identify("a user's id", UserTraits(firstName = "John", lastName = "Doe")) + ```kotlin + // The newer APIs promote the use of strongly typed structures to keep codebases legible + @Serializable + data class UserTraits( + var firstName: String, + var lastName: String + ) + analytics.identify("a user's id", UserTraits(firstName = "John", lastName = "Doe")) - // Or you could use the JSON builder if you have some unstructured data - analytics.identify("a user's id", buildJsonObject { - put("firstName", "John") - put("lastName", "Doe") - })); - ``` - {% endcodeexampletab %} - {% endcodeexample %} - - Track + // Or you could use the JSON builder if you have some unstructured data + analytics.identify("a user's id", buildJsonObject { + put("firstName", "John") + put("lastName", "Doe") + })); + ``` +
-
Before example: + - Track - {% codeexample %} - {% codeexampletab Java %} + + + + + + + + + + + + + + + + + +
Before
Java ```java analytics.track("Product Viewed", new Properties().putValue("name", "Moto 360")); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin ```kotlin analytics.track("Product Viewed", Properties().putValue("name", "Moto 360")) ``` - {% endcodeexampletab %} - {% endcodeexample %} - -
After example: +
+ + + + + + + + + + + + + + + + + + + +
After
Java - {% codeexample %} - {% codeexampletab Java %} ```java // The newer APIs promote the use of strongly typed structures to keep codebases legible class ProductViewedProperties implements JsonSerializable { @@ -497,9 +655,9 @@ If you’re using a different library such as Analytics-Android, follow these st })); } } - + analytics.track("Product Viewed", new ProductViewedProperties()); - + // Or you could use the JSON builder if you have some unstructured data analytics.track("Product Viewed", Builders.buildJsonObject(o -> { o.put("productName", productName) @@ -510,65 +668,93 @@ If you’re using a different library such as Analytics-Android, follow these st })); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} - ```kotlin - // The newer APIs promote the use of strongly typed structures to keep codebases legible - @Serializable - data class ProductViewedProperties( - var productName: String, - var brand: String, - var category: String, - var price: Double, - var currency: String - ) - - analytics.track( - "Product Viewed", - ProductViewedProperties( - productName = "Moto 360", - brand = "Motorola", - category = "smart watch", - price = 300.00, - currency = "USD" - ) - ) - - // Or you could use the JSON builder if you have some unstructured data - analytics.track( - "Product Viewed", - buildJsonObject { - put("productName", "Moto 360"), - put("brand", "Motorola"), - put("category", "smart watch"), - put("price", 300.00), - put("currency", "USD") - } - ) - ``` - {% endcodeexampletab %} - {% endcodeexample %} - +
Kotlin + + ```kotlin + // The newer APIs promote the use of strongly typed structures to keep codebases legible + @Serializable + data class ProductViewedProperties( + var productName: String, + var brand: String, + var category: String, + var price: Double, + var currency: String + ) + + analytics.track( + "Product Viewed", + ProductViewedProperties( + productName = "Moto 360", + brand = "Motorola", + category = "smart watch", + price = 300.00, + currency = "USD" + ) + ) + + // Or you could use the JSON builder if you have some unstructured data + analytics.track( + "Product Viewed", + buildJsonObject { + put("productName", "Moto 360"), + put("brand", "Motorola"), + put("category", "smart watch"), + put("price", 300.00), + put("currency", "USD") + } + ) + ``` +
+ - Group -
Before example: - {% codeexample %} - {% codeexampletab Java %} + + + + + + + + + + + + + + + + + +
Before
Java ```java analytics.group("a user's id", "a group id", new Traits().putEmployees(20)); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin ```kotlin analytics.group("a user's id", "a group id", Traits().putEmployees(20)) ``` - {% endcodeexampletab %} - {% endcodeexample %} +
+ + + + + + + + + + + + + + + + + + + +
After
Java -
After example: - - {% codeexample %} - {% codeexampletab Java %} ```java // The newer APIs promote the use of strongly typed structures to keep codebases legible class GroupTraits implements JsonSerializable { @@ -587,12 +773,16 @@ If you’re using a different library such as Analytics-Android, follow these st analytics.group("a group id", Builders.buildJsonObject(o -> { o.put("employeeCount", 20); })); - + ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin + ```kotlin - // The newer APIs promote the use of strongly typed structures to keep codebases legible + // The newer APIs promote the use of strongly typed structures to keep codebases legible @Serializable data class GroupTraits( var employeeCount: Int @@ -605,31 +795,55 @@ If you’re using a different library such as Analytics-Android, follow these st put("employeeCount", 20) }) ``` - {% endcodeexampletab %} - {% endcodeexample %} +
- Screen -
Before example: - {% codeexample %} - {% codeexampletab Java %} + + + + + + + + + + + + + + + + + +
Before
Java ```java analytics.screen("Feed", new Properties().putValue("Feed Length", "26")); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin ```kotlin analytics.screen("Feed", Properties().putValue("Feed Length", "26")) ``` - {% endcodeexampletab %} - {% endcodeexample %} +
+ + + + + + + + + + + + + + + + + + + +
After
Java -
After example: - - {% codeexample %} - {% codeexampletab Java %} ```java - // The newer APIs promote the use of strongly typed structures to keep codebases legible + // The newer APIs promote the use of strongly typed structures to keep codebases legible class FeedScreenProperties implements JsonSerializable { private int feedLength; @@ -646,12 +860,15 @@ If you’re using a different library such as Analytics-Android, follow these st analytics.screen("Feed", Builders.buildJsonObject(o -> { o.put("Feed Length", 26); })); - ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin + ```kotlin - // The newer APIs promote the use of strongly typed structures to keep codebases legible + // The newer APIs promote the use of strongly typed structures to keep codebases legible @Serializable data class FeedScreenProperties( @SerialName("Feed Length") @@ -666,38 +883,66 @@ If you’re using a different library such as Analytics-Android, follow these st put("feedLength", 26) }) ``` - {% endcodeexampletab %} - {% endcodeexample %} - - - Alias +
-
Before example: + - Alias - {% codeexample %} - {% codeexampletab Java %} + + + + + + + + + + + + + + + + + +
Before
Java ```java analytics.alias("new id"); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin ```kotlin analytics.alias("new id") ``` - {% endcodeexampletab %} - {% endcodeexample %} +
+ + + + + + + + + + + + + + + + + + + +
After
Java -
After example: - - {% codeexample %} - {% codeexampletab Java %} ```java analytics.alias("new id"); ``` - {% endcodeexampletab %} - {% codeexampletab Kotlin %} +
Kotlin + ```kotlin analytics.alias("new id") ``` - {% endcodeexampletab %} - {% endcodeexample %} - +
From c0862ce54b82af9d6757eba448229a19b708088b Mon Sep 17 00:00:00 2001 From: kdaswani <49517136+kdaswani@users.noreply.github.com> Date: Thu, 3 Feb 2022 15:22:24 -0800 Subject: [PATCH 06/17] remove salesforce DMP from salesforce list (#2457) * remove salesforce DMP from salesforce list * Remove from strat for cleanliness Co-authored-by: markzegarelli --- src/_data/sidenav/strat.yml | 4 ++-- src/connections/destinations/catalog/salesforce-dmp/index.md | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/_data/sidenav/strat.yml b/src/_data/sidenav/strat.yml index 1dbf73b991..ed2dff9431 100644 --- a/src/_data/sidenav/strat.yml +++ b/src/_data/sidenav/strat.yml @@ -80,8 +80,8 @@ sections: # title: Salesforce Live Agent destination - path: /connections/destinations/catalog/salesforce-marketing-cloud title: Salesforce Marketing Cloud destination - - path: /connections/destinations/catalog/salesforce-dmp - title: Salesforce DMP destination (beta) + # - path: /connections/destinations/catalog/salesforce-dmp + # title: Salesforce DMP destination (beta) - path: /connections/destinations/catalog/pardot title: Salesforce Pardot destination - path: /connections/sources/catalog/cloud-apps/salesforce diff --git a/src/connections/destinations/catalog/salesforce-dmp/index.md b/src/connections/destinations/catalog/salesforce-dmp/index.md index 54028431b5..6e7f5cdd0d 100644 --- a/src/connections/destinations/catalog/salesforce-dmp/index.md +++ b/src/connections/destinations/catalog/salesforce-dmp/index.md @@ -1,6 +1,5 @@ --- title: Salesforce DMP Destination -strat: salesforce rewrite: true beta: true hidden: true From 938412b6e4e840a4e4b5f22ea574ba7fd2b1f82c Mon Sep 17 00:00:00 2001 From: kdaswani <49517136+kdaswani@users.noreply.github.com> Date: Thu, 3 Feb 2022 16:09:48 -0800 Subject: [PATCH 07/17] add more to ga4 docs --- .../catalog/actions-google-analytics-4/index.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/connections/destinations/catalog/actions-google-analytics-4/index.md b/src/connections/destinations/catalog/actions-google-analytics-4/index.md index ce1b9b2078..7ebfee4b8f 100644 --- a/src/connections/destinations/catalog/actions-google-analytics-4/index.md +++ b/src/connections/destinations/catalog/actions-google-analytics-4/index.md @@ -40,7 +40,7 @@ To add the Google Analytics 4 destination: {% include components/actions-fields.html %} -## Troubleshooting +## FAQ & Troubleshooting ### Custom Event Naming @@ -48,12 +48,22 @@ Google Analytics 4 does not accept custom event names that include spaces. Segme Google Analytics 4 is also case sensitive. If you would like all event names lowercased, use the `Lowercase Event Name` setting in the Custom Event action. If this setting is disabled, Google will treat event names with different casing as distinct events. For more information, see [Google Analytics 4 Event name rules](https://support.google.com/analytics/answer/10085872?hl=en&ref_topic=9756175#event-name-rules&zippy=%2Cin-this-article.%2Cin-this-article){:target="_blank"}. +### Custom Dimensions & Metrics + +With Google Analytics 4, you must create custom dimensions and metrics within the Google Analytics 4 interface and link event parameters to the corresponding dimension or metric. When creating the dimension or metric, you can either select a parameter from the list of already collected fields or enter the name of the parameter you plan to collect in the future. For more information, see [Google Analytics 4 Custom dimensions and metrics](https://support.google.com/analytics/answer/10075209?hl=en) + +### Debug Mode + +The Google Analytics 4 [debug mode](https://support.google.com/analytics/answer/7201382?hl=en){:target="_blank"} only works with a client-side implementation through gtag.js, Google Tag Manager, or Firebase. Because Segment’s Google Analytics 4 integration is server-side and uses the Measurement Protocol API, debug mode is not supported. + +### Mobile Data + +The Google Analytics 4 Measurement Protocol API is only compatible with web streams. Google requires use of their Firebase SDKs to send mobile data to Google Analytics 4. For more information on linking Google Analytics 4 properties to Firebase, see [Google Analytics 4 Firebase integration](https://support.google.com/analytics/answer/9289234?hl=en){:target="_blank"}. + ### User Metrics & Sessions Segment sends a Google `clientId` in requests to the Measurement Protocol API, alongside other required API fields. However, user sessions are [not currently supported by the Measurement Protocol API](https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference/limitations){:target="_blank"}, so user metrics might not appear on the Google Analytics 4 Realtime report or several other reports. To validate your implementation, check users and events on the Events report and User Explorer. -### Debug Mode -The Google Analytics 4 [debug mode](https://support.google.com/analytics/answer/7201382?hl=en){:target="_blank"} only works with a client-side implementation through gtag.js, Google Tag Manager, or Firebase. Because Segment’s Google Analytics 4 integration is server-side and uses the Measurement Protocol API, debug mode is not supported. From 23d30a9600c74f9447b36478fb6424ad6b655adc Mon Sep 17 00:00:00 2001 From: stayseesong Date: Mon, 7 Feb 2022 10:45:13 -0800 Subject: [PATCH 08/17] table code inline css into class --- src/_sass/components/_markdown.scss | 10 ++- .../mobile/kotlin-android/migration.md | 90 +++++++++---------- 2 files changed, 52 insertions(+), 48 deletions(-) diff --git a/src/_sass/components/_markdown.scss b/src/_sass/components/_markdown.scss index e2ad8e7574..71d7764625 100644 --- a/src/_sass/components/_markdown.scss +++ b/src/_sass/components/_markdown.scss @@ -132,7 +132,7 @@ margin: 0 auto; border-radius: 0px; } - + ul, ol { @@ -294,7 +294,7 @@ } } - // remove reference button margins when it's inside the flex component (flex with waffle has its own margins) + // remove reference button margins when it's inside the flex component (flex with waffle has its own margins) .flex { &.waffle { .reference-button { @@ -425,4 +425,8 @@ div.highlighter-rouge { background-color: #BAE5D5; content: "copied!"; } -} \ No newline at end of file +} + +.table-code-snippet { + max-width: 450px; +} diff --git a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md index 0a4b9f1926..4d11e34ae7 100644 --- a/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md +++ b/src/connections/sources/catalog/libraries/mobile/kotlin-android/migration.md @@ -47,7 +47,7 @@ If you’re using a different library such as Analytics-Android, follow these st Java - + ```java Analytics analytics = new Analytics.Builder(context, "YOUR_WRITE_KEY") .trackApplicationLifecycleEvents() @@ -57,7 +57,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin val analytics = Analytics.Builder(context, "YOUR_WRITE_KEY") .trackApplicationLifecycleEvents() @@ -76,10 +76,10 @@ If you’re using a different library such as Analytics-Android, follow these st - + Java - + ```java // Initialize an Analytics object with the Kotlin Analytics method @@ -97,7 +97,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin Analytics("YOUR_WRITE_KEY", context) { @@ -126,7 +126,7 @@ If you’re using a different library such as Analytics-Android, follow these st Java - + ```java builder .useSourceMiddleware(new Middleware() { @@ -154,7 +154,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin builder .useSourceMiddleware( @@ -189,10 +189,10 @@ If you’re using a different library such as Analytics-Android, follow these st - + Java - + ```java analytics.add(new Plugin() { @@ -233,7 +233,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin analytics.add(object: Plugin { @@ -270,7 +270,7 @@ If you’re using a different library such as Analytics-Android, follow these st Java - + ```java builder .useDestinationMiddleware("Segment.io", new Middleware() { @@ -298,7 +298,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin builder .useDestinationMiddleware( @@ -334,10 +334,10 @@ If you’re using a different library such as Analytics-Android, follow these st - + Java - + ```java SegmentDestination segmentDestination = analytics.find(SegmentDestination.class); @@ -380,7 +380,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin val segmentDestination: DestinationPlugin = analytics.find(SegmentDestination::class) @@ -447,7 +447,7 @@ If you’re using a different library such as Analytics-Android, follow these st Java - + ```java // Previously we used to use Factories to initialize destinations analytics.use(FooIntegration.FACTORY); @@ -456,7 +456,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin // Previously we used to use Factories to initialize destinations analytics.use(FooIntegration.FACTORY) @@ -474,10 +474,10 @@ If you’re using a different library such as Analytics-Android, follow these st - + Java - + ```java // Now destinations are treated similar to plugins and thus are simpler to add @@ -488,7 +488,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin // Now destinations are treated similar to plugins and thus are simpler to add @@ -514,7 +514,7 @@ If you’re using a different library such as Analytics-Android, follow these st Java - + ```java analytics.identify("a user's id", new Traits().putName("John Doe"), null); ``` @@ -522,7 +522,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin analytics.identify("a user's id", Traits().putName("John Doe"), null) ``` @@ -539,10 +539,10 @@ If you’re using a different library such as Analytics-Android, follow these st - + Java - + ```java // The newer APIs promote the use of strongly typed structures to keep codebases legible @@ -570,7 +570,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin // The newer APIs promote the use of strongly typed structures to keep codebases legible @@ -606,7 +606,7 @@ If you’re using a different library such as Analytics-Android, follow these st Java - + ```java analytics.track("Product Viewed", new Properties().putValue("name", "Moto 360")); ``` @@ -614,7 +614,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin analytics.track("Product Viewed", Properties().putValue("name", "Moto 360")) ``` @@ -631,10 +631,10 @@ If you’re using a different library such as Analytics-Android, follow these st - + Java - + ```java // The newer APIs promote the use of strongly typed structures to keep codebases legible @@ -672,7 +672,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin // The newer APIs promote the use of strongly typed structures to keep codebases legible @@ -725,7 +725,7 @@ If you’re using a different library such as Analytics-Android, follow these st Java - + ```java analytics.group("a user's id", "a group id", new Traits().putEmployees(20)); ``` @@ -733,7 +733,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin analytics.group("a user's id", "a group id", Traits().putEmployees(20)) ``` @@ -750,10 +750,10 @@ If you’re using a different library such as Analytics-Android, follow these st - + Java - + ```java // The newer APIs promote the use of strongly typed structures to keep codebases legible @@ -779,7 +779,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin // The newer APIs promote the use of strongly typed structures to keep codebases legible @@ -812,7 +812,7 @@ If you’re using a different library such as Analytics-Android, follow these st Java - + ```java analytics.screen("Feed", new Properties().putValue("Feed Length", "26")); ``` @@ -820,7 +820,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin analytics.screen("Feed", Properties().putValue("Feed Length", "26")) ``` @@ -837,10 +837,10 @@ If you’re using a different library such as Analytics-Android, follow these st - + Java - + ```java // The newer APIs promote the use of strongly typed structures to keep codebases legible @@ -865,7 +865,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin // The newer APIs promote the use of strongly typed structures to keep codebases legible @@ -900,7 +900,7 @@ If you’re using a different library such as Analytics-Android, follow these st Java - + ```java analytics.alias("new id"); ``` @@ -908,7 +908,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin analytics.alias("new id") ``` @@ -925,10 +925,10 @@ If you’re using a different library such as Analytics-Android, follow these st - + Java - + ```java analytics.alias("new id"); @@ -937,7 +937,7 @@ If you’re using a different library such as Analytics-Android, follow these st Kotlin - + ```kotlin analytics.alias("new id") From cada8dcb32e89042c5321abf663d38b7c684ae86 Mon Sep 17 00:00:00 2001 From: pwseg Date: Tue, 8 Feb 2022 10:38:46 -0600 Subject: [PATCH 09/17] Journeys FAQ update --- src/personas/journeys/faq-best-practices.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/personas/journeys/faq-best-practices.md b/src/personas/journeys/faq-best-practices.md index 775c45f554..c831f920d8 100644 --- a/src/personas/journeys/faq-best-practices.md +++ b/src/personas/journeys/faq-best-practices.md @@ -41,14 +41,14 @@ When you do this, the key used for syncing to destinations will be different fro Aside from the entry condition, all Journey step conditions are triggered by future events and existing trait memberships. Event-based conditions only evaluate events that occur *after* the Journey is published. -When you [include historical data](/docs/personas/journeys/build-journey/#using-historical-data-for-the-entry-step) in a Journey's entry condition, Personas identifies users who previously satisfied the entry condition and adds them to entry. For example, to evaluate if a user has ever used a discount code mid-Journey, create and configure a [Computed Trait](/docs/personas/computed-traits/#conditions) to select for `discount_used = true` to use in your Journey. +When you [include historical data](/docs/personas/journeys/build-journey/#using-historical-data-for-the-entry-step) in a Journey's entry condition, Personas identifies users who previously satisfied the entry condition and adds them to entry. For example, to evaluate if a user has ever used a discount code mid-Journey, create and configure a [Computed Trait](/docs/personas/computed-traits/#conditions) to select for `discount_used = true` to use in your Journey. Including historical data doesn't impact any additional Journey steps, however. To include historical data in post-entry conditions, use the following table to identify which conditions will automatically include historical data: -| Condition Type | Automatic Historical Data Inclusion | +| Condition Type | Automatic Historical Data Inclusion | | ------------------ | ----------------------------------- | -| Computed Trait | Yes | | Audience Reference | Yes | +| Computed Trait | No | | Event | No | | Custom Trait | No | @@ -67,11 +67,11 @@ Using the **Part of Audience** condition, Journeys then populates the custom tra Follow these best practices to test your journeys: -- While in the process of configuring a journey, use dev Personas spaces to model that journey without affecting production data. -- Connect a data warehouse to each step of the journey to test for success or failure of that step. +- While in the process of configuring a journey, use dev Personas spaces to model that journey without affecting production data. +- Connect a data warehouse to each step of the journey to test for success or failure of that step. - For early version journeys, scaffold Send to Destination steps without connecting to your production advertising or messaging destinations. - Verify individual users' progress through the Journey in the Personas Explorer view. - + ## Frequently asked questions ### How often do Journeys run? @@ -94,11 +94,11 @@ Once published, Journeys displays the number of users are in each step of the Jo ### How are users sent to downstream destinations? -The data type you send to a destination depends on whether the destination is an Event Destination or a List Destination. +The data type you send to a destination depends on whether the destination is an Event Destination or a List Destination. ### Which roles can access Journeys? For Personas Advanced customers, users with either the Personas User or Personas Admin roles can create, edit, and delete journeys. Users with the Personas Read-only role are restricted to view-only access. ### Why am I seeing duplicate entry or exit events? -Journeys triggers audience or trait-related events for each email `external_id` on a profile. If a profile has two email addresses, you'll see two Audience Entered and two Audience Exited events for each Journey step. Journeys sends both email addresses to downstream destinations. +Journeys triggers audience or trait-related events for each email `external_id` on a profile. If a profile has two email addresses, you'll see two Audience Entered and two Audience Exited events for each Journey step. Journeys sends both email addresses to downstream destinations. From 7edec144b1f4620bc3cc4b572b3466930c10e523 Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 8 Feb 2022 11:46:33 -0500 Subject: [PATCH 10/17] DOC-393 Updating note from Jira feedback --- .../catalog/libraries/website/javascript/upgrade-to-ajs2.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/connections/sources/catalog/libraries/website/javascript/upgrade-to-ajs2.md b/src/connections/sources/catalog/libraries/website/javascript/upgrade-to-ajs2.md index 7d27ff659c..30f7f83cfc 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/upgrade-to-ajs2.md +++ b/src/connections/sources/catalog/libraries/website/javascript/upgrade-to-ajs2.md @@ -50,7 +50,9 @@ If the source you intend to upgrade uses the in-domain instrumentation as well a ### Relying on Analytics.js Classic's `ajs_anonymous_id` cookie format -Analytics.js 2.0 removes inbuilt quotes from cookie values, resulting in a different format for the `ajs_anonymous_id` value when compared to Analytics.js Classic. Though you can retrieve cookie values with [standard supported functions](/docs/connections/sources/catalog/libraries/website/javascript/identity/#retrieve-the-anonymous-id), you'll need to configure your environment to accept the new format using the `utility` [plugin](/docs/connections/sources/catalog/libraries/website/javascript/index/#example-plugins) if your implementation relies on accessing the cookie value directly. +Analytics.js 2.0 removes inbuilt quotes from cookie values, resulting in a different format for the `ajs_anonymous_id` value when compared to Analytics.js Classic. Though you can retrieve cookie values with [standard supported functions](/docs/connections/sources/catalog/libraries/website/javascript/identity/#retrieve-the-anonymous-id), you'll need to configure your environment to accept the new format if your implementation relies on accessing the cookie value directly. + +If you have configured different sources for different subdomains of your website, ensure that you switch them to Analytics 2.0 at the same time - this will guarantee that subdomain tracking will not break. In cases when you need to gradually update to Analytics 2.0, the `utility` [plugin](/docs/connections/sources/catalog/libraries/website/javascript/index/#example-plugins) will help match the ajs_anonymous_id cookie format and ensure that users are consistently identified across your subdomains. ### Using a strict content security policy on the page From 22f459b8a838c38bdd7c8e8b72299370a052e2d1 Mon Sep 17 00:00:00 2001 From: markzegarelli Date: Tue, 8 Feb 2022 09:06:44 -0800 Subject: [PATCH 11/17] Make Sprig Web (Actions) documentation visbile (#2466) --- scripts/catalog_papi.js | 2 +- src/_data/catalog/destination_categories.yml | 2 +- src/_data/catalog/destinations.yml | 2352 +++++++++-------- src/_data/catalog/regional-supported.yml | 34 +- src/_data/catalog/source_categories.yml | 2 +- src/_data/catalog/sources.yml | 2 +- .../catalog/actions-sprig-web/index.md | 25 +- .../destinations/catalog/sprig-web/index.md | 53 + 8 files changed, 1373 insertions(+), 1099 deletions(-) create mode 100644 src/connections/destinations/catalog/sprig-web/index.md diff --git a/scripts/catalog_papi.js b/scripts/catalog_papi.js index dcf0fab524..614e7d5b19 100644 --- a/scripts/catalog_papi.js +++ b/scripts/catalog_papi.js @@ -330,7 +330,7 @@ const updateDestinations = async () => { let regional = ['us-west'] // We need to be able to keep the system slug in some cases. - const slugOverrides = ['actions-google-enhanced-conversions', 'actions-google-analytics-4', 'actions-facebook-conversions-api', 'actions-friendbuy-cloud'] + const slugOverrides = ['actions-google-enhanced-conversions', 'actions-google-analytics-4', 'actions-facebook-conversions-api', 'actions-friendbuy-cloud', 'sprig-web'] let slug = slugify(destination.name) if (slugOverrides.includes(destination.slug)) { slug = destination.slug diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index 9e4cd0db04..7e793646c5 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 2022-02-01 +# destination categories last updated 2022-02-07 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 9df51bda42..f12972ab2c 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 2022-02-01 +# destination data last updated 2022-02-07 items: - destination_id: 60b5d0a01f3726b85dc05aab display_name: 2mee @@ -13975,98 +13975,24 @@ items: label: Freshsales subdomain actions: [] presets: [] -- destination_id: 59ce9468cf711e00014a9c12 - display_name: Friendbuy - name: Friendbuy - slug: friendbuy - hidden: false - regional: - - us-west - url: connections/destinations/catalog/friendbuy - previous_names: - - FriendBuy - - Friendbuy - website: http://www.friendbuy.com - status: PUBLIC - categories: - - Referrals - logo: - url: https://cdn.filepicker.io/api/file/ZkStZnT0qg7CyY2wiVgi - mark: - url: https://cdn.filepicker.io/api/file/rRjOUuTtRePNf1AAgnkA - methods: - track: true - identify: true - group: false - alias: false - page: true - platforms: - browser: true - mobile: false - server: false - components: - - code: https://github.com/segment-integrations/analytics.js-integration-friendbuy - type: BROWSER - browserUnbundlingSupported: false - browserUnbundlingPublic: true - replay: false - connection_modes: - device: - web: true - mobile: false - server: false - cloud: - web: false - mobile: false - server: false - settings: - - name: siteId - type: string - defaultValue: '' - description: >- - This is your **Site ID**. It is used to identify your account in our - platform so we can properly attribute referral data. You can find your - Site ID in the in Friendbuy web application at **Settings > Integration - Code** - required: true - label: Site ID - - name: siteWideWidgets - type: mixed - defaultValue: [] - description: >- - By default, Friendbuy recommends you add a site wide overlay widget. You - can enter any of these site wide widgets here and we will load them any - time we receive a `.page()` call. *Note*: If you have custom widgets - mapped to named pages in the *Widgets* setting and you have provided a - site wide widget, we will load both. - required: false - label: Site Wide Widgets - - name: widgets - type: mixed - defaultValue: [] - description: Map your page calls to specific FriendBuy Widgets. - required: false - label: Page Widgets - actions: [] - presets: [] -- destination_id: 6170a348128093cd0245e0ea - display_name: Friendbuy (Actions) - name: Friendbuy (Actions) - slug: actions-friendbuy +- destination_id: 61dde0dc77eb0db0392649d3 + display_name: Friendbuy (Cloud Destination) + name: Friendbuy (Cloud Destination) + slug: actions-friendbuy-cloud hidden: false regional: - us-west - url: connections/destinations/catalog/actions-friendbuy + url: connections/destinations/catalog/actions-friendbuy-cloud previous_names: - - Friendbuy (Actions) - website: http://www.friendbuy.com + - Friendbuy (Cloud Destination) + website: http://www.segment.com status: PUBLIC categories: - Referrals logo: - url: https://cdn.filepicker.io/api/file/0OV3XmHVQi3n8PrFREPQ + url: https://cdn.filepicker.io/api/file/Lv1D71xoTOH6BxY6wcd4 mark: - url: https://cdn.filepicker.io/api/file/3BbFIi2bSsi08ig1RYgQ + url: https://cdn.filepicker.io/api/file/vVMZxAaTomw7iyVlgSo9 methods: track: true identify: true @@ -14076,7 +14002,7 @@ items: platforms: browser: true mobile: false - server: false + server: true components: [] browserUnbundlingSupported: false browserUnbundlingPublic: false @@ -14091,77 +14017,30 @@ items: mobile: false server: false settings: - - name: merchantId + - name: authKey type: string defaultValue: '' description: >- - Find your Friendbuy Merchant ID by logging in to your [Friendbuy - account](https://retailer.friendbuy.io/) and going to Developer Center > - Friendbuy Code. + Contact your Friendbuy account manager to generate your Friendbuy MAPI key + and secret. required: true - label: Friendbuy Merchant ID + label: Friendbuy MAPI Key + - name: authSecret + type: string + defaultValue: '' + description: See Friendbuy MAPI Key. + required: true + label: Friendbuy MAPI Secret actions: - - id: fk2xKEXiXd9qEkQb24nzXh - name: Track Page - slug: trackPage - description: >- - Record when a customer visits a new page. Allow Friendbuy widget targeting - by Page Name instead of URL. - platform: WEB - hidden: false - defaultTrigger: type = "page" - fields: - - id: e49CUAczWNodafjNEkGVLa - sortOrder: 0 - fieldKey: name - label: Page Name - type: STRING - description: The page name. - placeholder: '' - defaultValue: - '@path': $.name - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: neQAzqaMjCLWQ1QAt82tDb - sortOrder: 1 - fieldKey: category - label: Page Category - type: STRING - description: The page category. - placeholder: '' - defaultValue: - '@path': $.category - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: 49oECrHAo9dQiUp2cMY5cw - sortOrder: 2 - fieldKey: title - label: Page Title - type: STRING - description: The page title. - placeholder: '' - defaultValue: - '@path': $.properties.title - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: jK3iMvwwXbgAz1EBm9Akq6 + - id: jGiVy4jyhXLyWfCbu4t9Rg name: Track Custom Event slug: trackCustomEvent description: Record when a customer completes any custom event that you define. - platform: WEB + platform: CLOUD hidden: false defaultTrigger: null fields: - - id: shTHGLkieU1eHuJcSdeLRB + - id: oowkcUpVHmzkBJrJFjy7Gx sortOrder: 0 fieldKey: eventType label: Event Type @@ -14175,7 +14054,7 @@ items: choices: null dynamic: false allowNull: false - - id: 98zxb1CV5o2ke9JngvWEqY + - id: 5fE31vDVwcyJ7STwddGtoc sortOrder: 1 fieldKey: eventProperties label: Event Properties @@ -14192,7 +14071,7 @@ items: choices: null dynamic: false allowNull: false - - id: 43bqAQttGP3YDk6Apnn2Ht + - id: vc2q1ZTU9LURMdNS5oZ5jj sortOrder: 2 fieldKey: deduplicationId label: Event ID @@ -14208,7 +14087,7 @@ items: choices: null dynamic: false allowNull: false - - id: bh1Tzs9mGXTvuDGNC6hYHB + - id: 6KyKwR3v5R1stV8Ai1yWyL sortOrder: 3 fieldKey: customerId label: Customer ID @@ -14228,7 +14107,7 @@ items: choices: null dynamic: false allowNull: false - - id: nk3aufvDqae12iG2gwC6VP + - id: nTza4zUtt7J9inTLaCGBHn sortOrder: 4 fieldKey: anonymousId label: Anonymous ID @@ -14242,7 +14121,7 @@ items: choices: null dynamic: false allowNull: false - - id: vmZWyCzHXzKA4jxaHU5hwr + - id: dnm8AgTE6jcgvXTJuVm5v2 sortOrder: 5 fieldKey: email label: Email @@ -14251,20 +14130,76 @@ items: placeholder: '' defaultValue: '@path': $.properties.email + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 8E22wrRB5nm2Bh5rVaqVvv + sortOrder: 6 + fieldKey: pageUrl + label: Page URL + type: STRING + description: The URL of the web page the event was generated on. + placeholder: '' + defaultValue: + '@path': $.context.page.url required: false multiple: false choices: null dynamic: false allowNull: false - - id: otSYqZFafJi5aae1yTwynq + - id: JU9ksPnAeWWotgb7TtCWY + sortOrder: 7 + fieldKey: pageTitle + label: Page Title + type: STRING + description: The title of the web page the event was generated on. + placeholder: '' + defaultValue: + '@path': $.context.page.title + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wZNieDhsTwfjgsTYYuMJhj + sortOrder: 8 + fieldKey: userAgent + label: User Agent + type: STRING + description: The browser's User-Agent string. + placeholder: '' + defaultValue: + '@path': $.context.userAgent + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: g21v8UnT2NgMTqtXy6txS8 + sortOrder: 9 + fieldKey: ipAddress + label: IP Address + type: STRING + description: The users's IP address. + placeholder: '' + defaultValue: + '@path': $.context.ip + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mgg3vBV3yyXq7GxGdWpsPS name: Track Sign Up slug: trackSignUp description: Record when a customer signs up for a service. - platform: WEB + platform: CLOUD hidden: false - defaultTrigger: event = "Signed Up" + defaultTrigger: null fields: - - id: 2gjjqzPLDWN9KLXbM3vu9F + - id: mVpzx1Nx2sFdX725PMNfwc sortOrder: 0 fieldKey: customerId label: Customer ID @@ -14284,7 +14219,7 @@ items: choices: null dynamic: false allowNull: false - - id: di1f8nNefQ7nVLdzBPfqAQ + - id: iDeMAoiX8dBqvZfVCtRpGu sortOrder: 1 fieldKey: anonymousId label: Anonymous ID @@ -14298,7 +14233,7 @@ items: choices: null dynamic: false allowNull: false - - id: 6MU84EwciUiTufPf97csEs + - id: bb81Q5qU2wDxDHJNCftRHt sortOrder: 2 fieldKey: email label: Email @@ -14312,7 +14247,7 @@ items: choices: null dynamic: false allowNull: false - - id: 64C5Xdb6PxU4D9pEav5QDU + - id: p12B9pSzPXh7GiF7YT84t7 sortOrder: 3 fieldKey: isNewCustomer label: New Customer Flag @@ -14326,7 +14261,7 @@ items: choices: null dynamic: false allowNull: false - - id: uNAEn545vDrLmwEdGtKKzK + - id: nnRLte19g1zXhEnTVjMbmB sortOrder: 4 fieldKey: loyaltyStatus label: Loyalty Program Status @@ -14342,7 +14277,7 @@ items: choices: null dynamic: false allowNull: false - - id: kbmgdNcJwLGhfu1x5JDyNy + - id: uXezUiDYVX19rXwpkoPGqU sortOrder: 5 fieldKey: firstName label: First Name @@ -14356,7 +14291,7 @@ items: choices: null dynamic: false allowNull: false - - id: d8M4Wav1wd1kEgr5nz3djv + - id: c5tDaGSBMCt8GcHeWc31Bf sortOrder: 6 fieldKey: lastName label: Last Name @@ -14370,7 +14305,7 @@ items: choices: null dynamic: false allowNull: false - - id: kiNVPyiWJao7H7i2d5vd3P + - id: ed6ZW4TgiebaxNnxLHyuyx sortOrder: 7 fieldKey: name label: Name @@ -14384,7 +14319,7 @@ items: choices: null dynamic: false allowNull: false - - id: jAsUxchPn4dLrtJessdjvP + - id: oox5BrvQnKTUwuouCnHCuW sortOrder: 8 fieldKey: age label: Age @@ -14398,7 +14333,7 @@ items: choices: null dynamic: false allowNull: false - - id: bBwvh1FU6hTx7sZAv9Z4SY + - id: 52RrowQ2EFo5i8dJtAjbg5 sortOrder: 9 fieldKey: birthday label: Birthday @@ -14414,7 +14349,7 @@ items: choices: null dynamic: false allowNull: false - - id: 4PjMfC53zf7q4Dweg3n8jQ + - id: v8Xt9wQFrXQsNeHmcCBY9P sortOrder: 10 fieldKey: coupon label: Coupon Code @@ -14428,7 +14363,7 @@ items: choices: null dynamic: false allowNull: false - - id: kvzmQoZeSmWcBsZBDcVdqH + - id: g1Wn5fsKa3UKjo6KFXiS8a sortOrder: 11 fieldKey: attributionId label: Friendbuy Attribution ID @@ -14444,7 +14379,7 @@ items: choices: null dynamic: false allowNull: false - - id: 8drKi2r5mUiqpxy7uHo2bB + - id: t3fjGpemyUBqP6Hgdd7QdY sortOrder: 12 fieldKey: referralCode label: Friendbuy Referral ID @@ -14460,7 +14395,7 @@ items: choices: null dynamic: false allowNull: false - - id: vBQ96ZiNZ2vejqxaxYdriJ + - id: mdxKmKcDYpwbhhG84qRvjV sortOrder: 13 fieldKey: friendbuyAttributes label: Custom Attributes @@ -14477,538 +14412,650 @@ items: choices: null dynamic: false allowNull: false - - id: vj1sYaj9saWmcRUVbFaPf5 - name: Track Purchase - slug: trackPurchase - description: Record when a customer makes a purchase. - platform: WEB + - id: s6y497EuoSozVqCMzwYKDj + sortOrder: 14 + fieldKey: pageUrl + label: Page URL + type: STRING + description: The URL of the web page the event was generated on. + placeholder: '' + defaultValue: + '@path': $.context.page.url + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9MY994crHiwQBd2tZ6N1pL + sortOrder: 15 + fieldKey: pageTitle + label: Page Title + type: STRING + description: The title of the web page the event was generated on. + placeholder: '' + defaultValue: + '@path': $.context.page.title + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 23oANDtBoWVKmwo7SMKBFL + sortOrder: 16 + fieldKey: userAgent + label: User Agent + type: STRING + description: The browser's User-Agent string. + placeholder: '' + defaultValue: + '@path': $.context.userAgent + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jv4wtdTbrJj2WYZ1DymdiV + sortOrder: 17 + fieldKey: ipAddress + label: IP Address + type: STRING + description: The users's IP address. + placeholder: '' + defaultValue: + '@path': $.context.ip + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qXnqSX3hkPFkzQRR8K5YJp + name: Track Customer + slug: trackCustomer + description: Create a new customer profile or update an existing customer profile. + platform: CLOUD hidden: false - defaultTrigger: event = "Order Completed" + defaultTrigger: null fields: - - id: jtDk7HdbW3h775XotYX7RW + - id: hyufZTKzkhVVYrbFqzKApD sortOrder: 0 - fieldKey: orderId - label: Order ID + fieldKey: customerId + label: Customer ID type: STRING - description: The order ID. + description: The user's customer ID. placeholder: '' defaultValue: - '@path': $.properties.order_id + '@path': $.userId required: true multiple: false choices: null dynamic: false allowNull: false - - id: seyRHj3Jhhsk7kTxXRSLoF + - id: tpxUYtNM6RgnvNZJfcC8DE sortOrder: 1 - fieldKey: amount - label: Amount Source - type: NUMBER - description: Purchase amount to be considered when evaluating reward rules. + fieldKey: anonymousId + label: Anonymous ID + type: STRING + description: The user's anonymous id. placeholder: '' defaultValue: - '@path': $.properties.total - required: true + '@path': $.anonymousId + required: false multiple: false choices: null dynamic: false allowNull: false - - id: erbhwHHEtPwPT7s9GDwC3H + - id: im1MDJmjPihfzjXBiqTTAu sortOrder: 2 - fieldKey: currency - label: Currency + fieldKey: email + label: Email type: STRING - description: The currency of the purchase amount. + description: The user's email address. placeholder: '' defaultValue: - '@path': $.properties.currency + '@path': $.traits.email required: true multiple: false choices: null dynamic: false allowNull: false - - id: apJrPW1frbeo6RF79E1eFs + - id: ih1KaVRRyWrJjiVMpoBNBz sortOrder: 3 - fieldKey: coupon - label: Coupon + fieldKey: firstName + label: First Name type: STRING - description: The coupon code of any coupon redeemed with the order. + description: The user's given name. placeholder: '' defaultValue: - '@path': $.properties.coupon + '@path': $.traits.firstName required: false multiple: false choices: null dynamic: false allowNull: false - - id: nbSRtQ5F7vNxhtEuLymfW + - id: dGYeLsMuqPLsqViv6ozqWz sortOrder: 4 - fieldKey: attributionId - label: Friendbuy Attribution ID + fieldKey: lastName + label: Last Name type: STRING - description: >- - Friendbuy attribution ID that associates the purchase with the advocate - who referred the purchaser. + description: The user's surname. placeholder: '' defaultValue: - '@path': $.properties.attributionId + '@path': $.traits.lastName required: false multiple: false choices: null dynamic: false allowNull: false - - id: x59iiXF7PXj4qX7Z1hXbva + - id: 5or25ohrdDqT31ZrRDtocE sortOrder: 5 - fieldKey: referralCode - label: Friendbuy Referral ID + fieldKey: name + label: Name type: STRING description: >- - Friendbuy referral code that associates the purchase with the advocate - who referred the purchaser. + The user's full name. If the name trait doesn't exist then it will be + automatically derived from the firstName and lastName traits if they are + defined. placeholder: '' defaultValue: - '@path': $.properties.referralCode + '@path': $.traits.name required: false multiple: false choices: null dynamic: false allowNull: false - - id: heQRdcwstpsku192obDNRo + - id: vFFWALL8gYvTQSVwQPTHsY sortOrder: 6 - fieldKey: giftCardCodes - label: Gift Card Codes - type: STRING - description: An array of gift card codes applied to the order. + fieldKey: age + label: Age + type: NUMBER + description: The user's age. placeholder: '' defaultValue: - '@path': $.properties.giftCardCodes + '@path': $.traits.age required: false - multiple: true + multiple: false choices: null dynamic: false allowNull: false - - id: jvZjKtMx75aR6DNQa817c + - id: oCLaaUerUXZVKRX2ZEQ4N4 sortOrder: 7 - fieldKey: products - label: Products - type: OBJECT - description: Products purchased. + fieldKey: birthday + label: Birthday + type: STRING + description: >- + The user's birthday in the format "YYYY-MM-DD", or "0000-MM-DD" to omit + the year. placeholder: '' defaultValue: - '@path': $.properties.products + '@path': $.traits.birthday required: false - multiple: true + multiple: false choices: null dynamic: false allowNull: false - - id: e49BnvXt9CdvsHP3gUddny + - id: fm5y5BWYpHvgRLxk8QcyR7 sortOrder: 8 - fieldKey: customerId - label: Customer ID + fieldKey: language + label: Language type: STRING - description: The user's customer ID. + description: The user's language. placeholder: '' defaultValue: - '@if': - exists: - '@path': $.properties.customerId - then: - '@path': $.properties.customerId - else: - '@path': $.userId + '@path': $.traits.language required: false multiple: false choices: null dynamic: false allowNull: false - - id: 7yu3J3PxaUyg3tuidJ7UaK + - id: 7aEAcqmizMXvrrMPYaWPMD sortOrder: 9 - fieldKey: anonymousId - label: Anonymous ID + fieldKey: addressCountry + label: Country type: STRING - description: The user's anonymous ID. + description: The user's country. placeholder: '' defaultValue: - '@path': $.anonymousId + '@path': $.traits.address.country required: false multiple: false choices: null dynamic: false allowNull: false - - id: pKJ7PkJzLJPmvHaa276pue + - id: kSfc4sggqPfW2LAoS86YpA sortOrder: 10 - fieldKey: email - label: Email + fieldKey: addressState + label: State type: STRING - description: The user's email address. + description: The user's state. placeholder: '' defaultValue: - '@path': $.properties.email + '@path': $.traits.address.state required: false multiple: false choices: null dynamic: false allowNull: false - - id: cxk2hBGqKivvjVi9ppjibC + - id: 5QT67XaNzBvD2bP5BWviGN sortOrder: 11 - fieldKey: isNewCustomer - label: New Customer Flag - type: BOOLEAN - description: Flag to indicate whether the user is a new customer. + fieldKey: addressCity + label: City + type: STRING + description: The user's city. placeholder: '' defaultValue: - '@path': $.properties.isNewCustomer + '@path': $.traits.address.city required: false multiple: false choices: null dynamic: false allowNull: false - - id: aQMFpBXqLfA3PDzRuFtduM + - id: 7jvw8ogMPSYoUh7e2b5o8q sortOrder: 12 - fieldKey: loyaltyStatus - label: Loyalty Program Status + fieldKey: addressPostalCode + label: State type: STRING - description: >- - The status of the user in your loyalty program. Valid values are "in", - "out", or "blocked". + description: The user's postal code. placeholder: '' defaultValue: - '@path': $.properties.loyaltyStatus + '@path': $.traits.address.postalCode required: false multiple: false choices: null dynamic: false allowNull: false - - id: rrpKTJgzEBSzCPg2vyjG9D + - id: nqCK3EhBEExK543hvjT1QW sortOrder: 13 - fieldKey: firstName - label: First Name + fieldKey: customerSince + label: Customer Since type: STRING - description: The user's given name. + description: The date the user became a customer. placeholder: '' defaultValue: - '@path': $.properties.firstName + '@path': $.traits.customerSince required: false multiple: false choices: null dynamic: false allowNull: false - - id: 3GDjggth5iTiT2dqGK7zGP + - id: 7ck4mtXS7pM17qVJPXYbd1 sortOrder: 14 - fieldKey: lastName - label: Last Name + fieldKey: loyaltyStatus + label: Loyalty Status type: STRING - description: The user's surname. + description: >- + The status of the user in your loyalty program. Valid values are "in", + "out", or "blocked". placeholder: '' defaultValue: - '@path': $.properties.lastName + '@path': $.traits.loyaltyStatus required: false multiple: false choices: null dynamic: false allowNull: false - - id: Xd4epHNN3sYt48neN9bN3 + - id: f882GLMrfrr4RCBGLvMT38 sortOrder: 15 - fieldKey: name - label: Name - type: STRING - description: The user's full name. + fieldKey: isNewCustomer + label: New Customer Flag + type: BOOLEAN + description: Flag to indicate whether the user is a new customer. placeholder: '' defaultValue: - '@path': $.properties.name + '@path': $.traits.isNewCustomer required: false multiple: false choices: null dynamic: false allowNull: false - - id: bSx5kxfkJoQ1vvcmXm6Ut2 + - id: 4RKrCbou8QR7vWNU9QZNpq sortOrder: 16 - fieldKey: age - label: Age - type: NUMBER - description: The user's age. + fieldKey: friendbuyAttributes + label: Custom Attributes + type: OBJECT + description: >- + Custom attributes to send to Friendbuy. You should pass an object whose + keys are the names of the custom attributes and whose values are + strings. Non-string-valued attributes will be dropped. placeholder: '' defaultValue: - '@path': $.properties.age + '@path': $.traits.friendbuyAttributes required: false multiple: false choices: null dynamic: false allowNull: false - - id: hzg7x9k2QSCiBWzBxmwybk + - id: bRraNNAivMUoy5xi1B7qcH sortOrder: 17 - fieldKey: birthday - label: Birthday + fieldKey: pageUrl + label: Page URL type: STRING - description: >- - The user's birthday in the format "YYYY-MM-DD", or "0000-MM-DD" to omit - the year. + description: The URL of the web page the event was generated on. placeholder: '' defaultValue: - '@path': $.properties.birthday + '@path': $.context.page.url required: false multiple: false choices: null dynamic: false allowNull: false - - id: uQbbmFxFGAQJFhBzcHesbB + - id: 98taXo3A2L7qBLp2n6vv3U sortOrder: 18 - fieldKey: friendbuyAttributes - label: Custom Attributes - type: OBJECT - description: >- - Custom attributes to send to Friendbuy. You should pass an object whose - keys are the names of the custom attributes and whose values are - strings. Non-string-valued attributes will be dropped. + fieldKey: pageTitle + label: Page Title + type: STRING + description: The title of the web page the event was generated on. placeholder: '' defaultValue: - '@path': $.properties.friendbuyAttributes + '@path': $.context.page.title required: false multiple: false choices: null dynamic: false allowNull: false - - id: wTBkHZFw3Mh66G65UkMXBL - name: Track Customer - slug: trackCustomer - description: Create a new customer profile or update an existing customer profile. - platform: WEB + - id: pHYgnkLb6aNpYeBUh86NaW + sortOrder: 19 + fieldKey: userAgent + label: User Agent + type: STRING + description: The browser's User-Agent string. + placeholder: '' + defaultValue: + '@path': $.context.userAgent + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: boje7ArY6dFCB4jc27VEin + sortOrder: 20 + fieldKey: ipAddress + label: IP Address + type: STRING + description: The users's IP address. + placeholder: '' + defaultValue: + '@path': $.context.ip + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rHduKcyr8ptDrQnFupicxd + name: Track Purchase + slug: trackPurchase + description: Record when a customer makes a purchase. + platform: CLOUD hidden: false - defaultTrigger: type = "identify" + defaultTrigger: null fields: - - id: AkJRqp7x2vwUdqe97reZD + - id: wqe6KdE5WKF22aUQ89YbBk sortOrder: 0 - fieldKey: customerId - label: Customer ID + fieldKey: orderId + label: Order ID type: STRING - description: The user's customer ID. + description: The order ID. placeholder: '' defaultValue: - '@path': $.userId + '@path': $.properties.order_id required: true multiple: false choices: null dynamic: false allowNull: false - - id: xuoGFMgo6dDoMgFiUiK8dy + - id: qWq2mTDVazLgkUMyJgBoqG sortOrder: 1 - fieldKey: anonymousId - label: Anonymous ID - type: STRING - description: The user's anonymous id. + fieldKey: amount + label: Amount Source + type: NUMBER + description: Purchase amount to be considered when evaluating reward rules. placeholder: '' defaultValue: - '@path': $.anonymousId - required: false + '@path': $.properties.total + required: true multiple: false choices: null dynamic: false allowNull: false - - id: rQ91c85WpwF2cA4U8d59i + - id: r3tCWiMg4TkJeVnumM61kR sortOrder: 2 - fieldKey: email - label: Email + fieldKey: currency + label: Currency type: STRING - description: The user's email address. + description: The currency of the purchase amount. placeholder: '' defaultValue: - '@path': $.traits.email + '@path': $.properties.currency required: true multiple: false choices: null dynamic: false allowNull: false - - id: dgVNf5a6rpAbzBgK6B4MWA + - id: sUptyXAjZWNTpp3XRz4oFn sortOrder: 3 - fieldKey: firstName - label: First Name + fieldKey: coupon + label: Coupon type: STRING - description: The user's given name. + description: The coupon code of any coupon redeemed with the order. placeholder: '' defaultValue: - '@path': $.traits.firstName + '@path': $.properties.coupon required: false multiple: false choices: null dynamic: false allowNull: false - - id: sQQ5Q5QFveS1sr6anuYpTV + - id: 6G1UDvw4eSeH4PAKcDfKjg sortOrder: 4 - fieldKey: lastName - label: Last Name + fieldKey: attributionId + label: Friendbuy Attribution ID type: STRING - description: The user's surname. + description: >- + Friendbuy attribution ID that associates the purchase with the advocate + who referred the purchaser. placeholder: '' defaultValue: - '@path': $.traits.lastName + '@path': $.properties.attributionId required: false multiple: false choices: null dynamic: false allowNull: false - - id: miD4YPZSSJAvKashuwP9UK + - id: wdVUENe5YATHcU9mRoVVXU sortOrder: 5 - fieldKey: name - label: Name + fieldKey: referralCode + label: Friendbuy Referral ID type: STRING description: >- - The user's full name. If the name trait doesn't exist then it will be - automatically derived from the firstName and lastName traits if they are - defined. + Friendbuy referral code that associates the purchase with the advocate + who referred the purchaser. placeholder: '' defaultValue: - '@path': $.traits.name + '@path': $.properties.referralCode required: false multiple: false choices: null dynamic: false allowNull: false - - id: 2PGj2M8YErv7Ssz7M9FdCW + - id: bhWQtNmRgCHKAoW74H8h2J sortOrder: 6 - fieldKey: age - label: Age - type: NUMBER - description: The user's age. + fieldKey: giftCardCodes + label: Gift Card Codes + type: STRING + description: An array of gift card codes applied to the order. placeholder: '' defaultValue: - '@path': $.traits.age + '@path': $.properties.giftCardCodes required: false - multiple: false + multiple: true choices: null dynamic: false allowNull: false - - id: 9eutB7uWDAz8eucRfdqTGS + - id: aYi9MVMXoRozMekSzXuPwb sortOrder: 7 - fieldKey: birthday - label: Birthday - type: STRING - description: >- - The user's birthday in the format "YYYY-MM-DD", or "0000-MM-DD" to omit - the year. + fieldKey: products + label: Products + type: OBJECT + description: Products purchased. placeholder: '' defaultValue: - '@path': $.traits.birthday + '@path': $.properties.products required: false - multiple: false + multiple: true choices: null dynamic: false allowNull: false - - id: dLF9tZ39SShVVdoPzxV3Hv + - id: i76YK79Z6FdtNstg2wR1mP sortOrder: 8 - fieldKey: language - label: Language + fieldKey: customerId + label: Customer ID type: STRING - description: The user's language. + description: The user's customer ID. placeholder: '' defaultValue: - '@path': $.traits.language + '@if': + exists: + '@path': $.properties.customerId + then: + '@path': $.properties.customerId + else: + '@path': $.userId required: false multiple: false choices: null dynamic: false allowNull: false - - id: wQR61gJCRoK3TrcM5PdZZg + - id: mT7Di85ZgXTMJi3n7RxG5X sortOrder: 9 - fieldKey: addressCountry - label: Country + fieldKey: anonymousId + label: Anonymous ID type: STRING - description: The user's country. + description: The user's anonymous ID. placeholder: '' defaultValue: - '@path': $.traits.address.country + '@path': $.anonymousId required: false multiple: false choices: null dynamic: false allowNull: false - - id: t4kb37hYMbbNc4vCjGwKXn + - id: bUYzGk6i1CVBZoB53TySfS sortOrder: 10 - fieldKey: addressState - label: State + fieldKey: email + label: Email type: STRING - description: The user's state. + description: The user's email address. placeholder: '' defaultValue: - '@path': $.traits.address.state + '@path': $.properties.email required: false multiple: false choices: null dynamic: false allowNull: false - - id: nhW4J81o75BkVC5oHV5QeR + - id: imjDbTMEmYbpBT2TmX5FY8 sortOrder: 11 - fieldKey: addressCity - label: City - type: STRING - description: The user's city. + fieldKey: isNewCustomer + label: New Customer Flag + type: BOOLEAN + description: Flag to indicate whether the user is a new customer. placeholder: '' defaultValue: - '@path': $.traits.address.city + '@path': $.properties.isNewCustomer required: false multiple: false choices: null dynamic: false allowNull: false - - id: tN4BGwdF3QwVThS899pYKG + - id: LrpY891pMfaoM3EZoCinc sortOrder: 12 - fieldKey: addressPostalCode - label: State + fieldKey: loyaltyStatus + label: Loyalty Program Status type: STRING - description: The user's postal code. + description: >- + The status of the user in your loyalty program. Valid values are "in", + "out", or "blocked". placeholder: '' defaultValue: - '@path': $.traits.address.postalCode + '@path': $.properties.loyaltyStatus required: false multiple: false choices: null dynamic: false allowNull: false - - id: 4j9sK8W15BqpywxbBKazQM + - id: sNkavPa5RSnet4eWWbENQF sortOrder: 13 - fieldKey: customerSince - label: Customer Since + fieldKey: firstName + label: First Name type: STRING - description: The date the user became a customer. + description: The user's given name. placeholder: '' defaultValue: - '@path': $.traits.customerSince + '@path': $.properties.firstName required: false multiple: false choices: null dynamic: false allowNull: false - - id: 4W9aSb3uMBiFo4wixQ1BR7 + - id: v1SY9oFpwEPDkQEar37beY sortOrder: 14 - fieldKey: loyaltyStatus - label: Loyalty Status + fieldKey: lastName + label: Last Name type: STRING - description: >- - The status of the user in your loyalty program. Valid values are "in", - "out", or "blocked". + description: The user's surname. placeholder: '' defaultValue: - '@path': $.traits.loyaltyStatus + '@path': $.properties.lastName required: false multiple: false choices: null dynamic: false allowNull: false - - id: jVnqS7vnxv4BiVFRAgQ93P + - id: pWJgQR3w92hSvuAvPCift8 sortOrder: 15 - fieldKey: isNewCustomer - label: New Customer Flag - type: BOOLEAN - description: Flag to indicate whether the user is a new customer. + fieldKey: name + label: Name + type: STRING + description: The user's full name. placeholder: '' defaultValue: - '@path': $.traits.isNewCustomer + '@path': $.properties.name required: false multiple: false choices: null dynamic: false allowNull: false - - id: po4r4NNZhHZkukEoqWZc1s + - id: ua2vy95ckMFNXXEF2eDWqj sortOrder: 16 + fieldKey: age + label: Age + type: NUMBER + description: The user's age. + placeholder: '' + defaultValue: + '@path': $.properties.age + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: umTCW6h1TVzLBmr53N8Fgf + sortOrder: 17 + fieldKey: birthday + label: Birthday + type: STRING + description: >- + The user's birthday in the format "YYYY-MM-DD", or "0000-MM-DD" to omit + the year. + placeholder: '' + defaultValue: + '@path': $.properties.birthday + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3VYELbeHb2Y86LRQ9GRxJ2 + sortOrder: 18 fieldKey: friendbuyAttributes label: Custom Attributes type: OBJECT @@ -15018,165 +15065,164 @@ items: strings. Non-string-valued attributes will be dropped. placeholder: '' defaultValue: - '@path': $.traits.friendbuyAttributes + '@path': $.properties.friendbuyAttributes required: false multiple: false choices: null dynamic: false allowNull: false - presets: - - actionId: vj1sYaj9saWmcRUVbFaPf5 - name: Track Purchase - fields: - orderId: - '@path': $.properties.order_id - amount: - '@path': $.properties.total - currency: - '@path': $.properties.currency - coupon: - '@path': $.properties.coupon - attributionId: - '@path': $.properties.attributionId - referralCode: - '@path': $.properties.referralCode - giftCardCodes: - '@path': $.properties.giftCardCodes - products: - '@path': $.properties.products - customerId: - '@if': - exists: - '@path': $.properties.customerId - then: - '@path': $.properties.customerId - else: - '@path': $.userId - anonymousId: - '@path': $.anonymousId - email: - '@path': $.properties.email - isNewCustomer: - '@path': $.properties.isNewCustomer - loyaltyStatus: - '@path': $.properties.loyaltyStatus - firstName: - '@path': $.properties.firstName - lastName: - '@path': $.properties.lastName - name: - '@path': $.properties.name - age: - '@path': $.properties.age - birthday: - '@path': $.properties.birthday - friendbuyAttributes: - '@path': $.properties.friendbuyAttributes - trigger: event = "Order Completed" - - actionId: wTBkHZFw3Mh66G65UkMXBL - name: Track Customer - fields: - customerId: - '@path': $.userId - anonymousId: - '@path': $.anonymousId - email: - '@path': $.traits.email - firstName: - '@path': $.traits.firstName - lastName: - '@path': $.traits.lastName - name: - '@path': $.traits.name - age: - '@path': $.traits.age - birthday: - '@path': $.traits.birthday - language: - '@path': $.traits.language - addressCountry: - '@path': $.traits.address.country - addressState: - '@path': $.traits.address.state - addressCity: - '@path': $.traits.address.city - addressPostalCode: - '@path': $.traits.address.postalCode - customerSince: - '@path': $.traits.customerSince - loyaltyStatus: - '@path': $.traits.loyaltyStatus - isNewCustomer: - '@path': $.traits.isNewCustomer - friendbuyAttributes: - '@path': $.traits.friendbuyAttributes - trigger: type = "identify" - - actionId: otSYqZFafJi5aae1yTwynq - name: Track Sign Up - fields: - customerId: - '@if': - exists: - '@path': $.properties.customerId - then: - '@path': $.properties.customerId - else: - '@path': $.userId - anonymousId: - '@path': $.anonymousId - email: - '@path': $.properties.email - isNewCustomer: - '@path': $.properties.isNewCustomer - loyaltyStatus: - '@path': $.properties.loyaltyStatus - firstName: - '@path': $.properties.firstName - lastName: - '@path': $.properties.lastName - name: - '@path': $.properties.name - age: - '@path': $.properties.age - birthday: - '@path': $.properties.birthday - coupon: - '@path': $.properties.coupon - attributionId: - '@path': $.properties.attributionId - referralCode: - '@path': $.properties.referralCode - friendbuyAttributes: - '@path': $.properties.friendbuyAttributes - trigger: event = "Signed Up" - - actionId: fk2xKEXiXd9qEkQb24nzXh - name: Track Page - fields: - name: - '@path': $.name - category: - '@path': $.category - title: - '@path': $.properties.title - trigger: type = "page" -- destination_id: 61dde0dc77eb0db0392649d3 - display_name: Friendbuy (Cloud Destination) - name: Friendbuy (Cloud Destination) - slug: actions-friendbuy-cloud + - id: msLckf49ZEaf1KsPfQ4x91 + sortOrder: 19 + fieldKey: pageUrl + label: Page URL + type: STRING + description: The URL of the web page the event was generated on. + placeholder: '' + defaultValue: + '@path': $.context.page.url + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hoZJWaYBJQ9YhvQSJRF66f + sortOrder: 20 + fieldKey: pageTitle + label: Page Title + type: STRING + description: The title of the web page the event was generated on. + placeholder: '' + defaultValue: + '@path': $.context.page.title + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iVx6fQYSn1TNrdmteTBr5w + sortOrder: 21 + fieldKey: userAgent + label: User Agent + type: STRING + description: The browser's User-Agent string. + placeholder: '' + defaultValue: + '@path': $.context.userAgent + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sXZcFy1ehAgpDEJe2eo3zN + sortOrder: 22 + fieldKey: ipAddress + label: IP Address + type: STRING + description: The users's IP address. + placeholder: '' + defaultValue: + '@path': $.context.ip + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: [] +- destination_id: 59ce9468cf711e00014a9c12 + display_name: Friendbuy (Legacy) + name: Friendbuy (Legacy) + slug: friendbuy-legacy hidden: false regional: - us-west - url: connections/destinations/catalog/actions-friendbuy-cloud + url: connections/destinations/catalog/friendbuy-legacy previous_names: - - Friendbuy (Cloud Destination) - website: http://www.segment.com + - FriendBuy + - Friendbuy + - Friendbuy (Legacy) + website: http://www.friendbuy.com status: PUBLIC categories: - Referrals logo: - url: https://cdn.filepicker.io/api/file/Lv1D71xoTOH6BxY6wcd4 + url: https://cdn.filepicker.io/api/file/ZkStZnT0qg7CyY2wiVgi mark: - url: https://cdn.filepicker.io/api/file/vVMZxAaTomw7iyVlgSo9 + url: https://cdn.filepicker.io/api/file/rRjOUuTtRePNf1AAgnkA + methods: + track: true + identify: true + group: false + alias: false + page: true + platforms: + browser: true + mobile: false + server: false + components: + - code: https://github.com/segment-integrations/analytics.js-integration-friendbuy + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: siteId + type: string + defaultValue: '' + description: >- + This is your **Site ID**. It is used to identify your account in our + platform so we can properly attribute referral data. You can find your + Site ID in the in Friendbuy web application at **Settings > Integration + Code** + required: true + label: Site ID + - name: siteWideWidgets + type: mixed + defaultValue: [] + description: >- + By default, Friendbuy recommends you add a site wide overlay widget. You + can enter any of these site wide widgets here and we will load them any + time we receive a `.page()` call. *Note*: If you have custom widgets + mapped to named pages in the *Widgets* setting and you have provided a + site wide widget, we will load both. + required: false + label: Site Wide Widgets + - name: widgets + type: mixed + defaultValue: [] + description: Map your page calls to specific FriendBuy Widgets. + required: false + label: Page Widgets + actions: [] + presets: [] +- destination_id: 6170a348128093cd0245e0ea + display_name: Friendbuy (Web Destination) + name: Friendbuy (Web Destination) + slug: friendbuy-web-destination + hidden: false + regional: + - us-west + url: connections/destinations/catalog/friendbuy-web-destination + previous_names: + - Friendbuy (Actions) + - Friendbuy (Web Destinations) + - Friendbuy (Web Destination) + website: http://www.friendbuy.com + status: PUBLIC + categories: + - Referrals + logo: + url: https://cdn.filepicker.io/api/file/0OV3XmHVQi3n8PrFREPQ + mark: + url: https://cdn.filepicker.io/api/file/3BbFIi2bSsi08ig1RYgQ methods: track: true identify: true @@ -15186,7 +15232,7 @@ items: platforms: browser: true mobile: false - server: true + server: false components: [] browserUnbundlingSupported: false browserUnbundlingPublic: false @@ -15201,30 +15247,77 @@ items: mobile: false server: false settings: - - name: authKey + - name: merchantId type: string defaultValue: '' description: >- - Contact your Friendbuy account manager to generate your Friendbuy MAPI key - and secret. - required: true - label: Friendbuy MAPI Key - - name: authSecret - type: string - defaultValue: '' - description: See Friendbuy MAPI Key. + Find your Friendbuy Merchant ID by logging in to your [Friendbuy + account](https://retailer.friendbuy.io/) and going to Developer Center > + Friendbuy Code. required: true - label: Friendbuy MAPI Secret + label: Friendbuy Merchant ID actions: - - id: jGiVy4jyhXLyWfCbu4t9Rg + - id: fk2xKEXiXd9qEkQb24nzXh + name: Track Page + slug: trackPage + description: >- + Record when a customer visits a new page. Allow Friendbuy widget targeting + by Page Name instead of URL. + platform: WEB + hidden: false + defaultTrigger: type = "page" + fields: + - id: e49CUAczWNodafjNEkGVLa + sortOrder: 0 + fieldKey: name + label: Page Name + type: STRING + description: The page name. + placeholder: '' + defaultValue: + '@path': $.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: neQAzqaMjCLWQ1QAt82tDb + sortOrder: 1 + fieldKey: category + label: Page Category + type: STRING + description: The page category. + placeholder: '' + defaultValue: + '@path': $.category + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 49oECrHAo9dQiUp2cMY5cw + sortOrder: 2 + fieldKey: title + label: Page Title + type: STRING + description: The page title. + placeholder: '' + defaultValue: + '@path': $.properties.title + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jK3iMvwwXbgAz1EBm9Akq6 name: Track Custom Event slug: trackCustomEvent description: Record when a customer completes any custom event that you define. - platform: CLOUD + platform: WEB hidden: false defaultTrigger: null fields: - - id: oowkcUpVHmzkBJrJFjy7Gx + - id: shTHGLkieU1eHuJcSdeLRB sortOrder: 0 fieldKey: eventType label: Event Type @@ -15238,7 +15331,7 @@ items: choices: null dynamic: false allowNull: false - - id: 5fE31vDVwcyJ7STwddGtoc + - id: 98zxb1CV5o2ke9JngvWEqY sortOrder: 1 fieldKey: eventProperties label: Event Properties @@ -15255,7 +15348,7 @@ items: choices: null dynamic: false allowNull: false - - id: vc2q1ZTU9LURMdNS5oZ5jj + - id: 43bqAQttGP3YDk6Apnn2Ht sortOrder: 2 fieldKey: deduplicationId label: Event ID @@ -15271,119 +15364,63 @@ items: choices: null dynamic: false allowNull: false - - id: 6KyKwR3v5R1stV8Ai1yWyL - sortOrder: 3 - fieldKey: customerId - label: Customer ID - type: STRING - description: The user's customer ID. - placeholder: '' - defaultValue: - '@if': - exists: - '@path': $.properties.customerId - then: - '@path': $.properties.customerId - else: - '@path': $.userId - required: true - multiple: false - choices: null - dynamic: false - allowNull: false - - id: nTza4zUtt7J9inTLaCGBHn - sortOrder: 4 - fieldKey: anonymousId - label: Anonymous ID - type: STRING - description: The user's anonymous id - placeholder: '' - defaultValue: - '@path': $.anonymousId - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: dnm8AgTE6jcgvXTJuVm5v2 - sortOrder: 5 - fieldKey: email - label: Email - type: STRING - description: The user's email address. - placeholder: '' - defaultValue: - '@path': $.properties.email - required: true - multiple: false - choices: null - dynamic: false - allowNull: false - - id: 8E22wrRB5nm2Bh5rVaqVvv - sortOrder: 6 - fieldKey: pageUrl - label: Page URL - type: STRING - description: The URL of the web page the event was generated on. - placeholder: '' - defaultValue: - '@path': $.context.page.url - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: JU9ksPnAeWWotgb7TtCWY - sortOrder: 7 - fieldKey: pageTitle - label: Page Title + - id: bh1Tzs9mGXTvuDGNC6hYHB + sortOrder: 3 + fieldKey: customerId + label: Customer ID type: STRING - description: The title of the web page the event was generated on. + description: The user's customer ID. placeholder: '' defaultValue: - '@path': $.context.page.title - required: false + '@if': + exists: + '@path': $.properties.customerId + then: + '@path': $.properties.customerId + else: + '@path': $.userId + required: true multiple: false choices: null dynamic: false allowNull: false - - id: wZNieDhsTwfjgsTYYuMJhj - sortOrder: 8 - fieldKey: userAgent - label: User Agent + - id: nk3aufvDqae12iG2gwC6VP + sortOrder: 4 + fieldKey: anonymousId + label: Anonymous ID type: STRING - description: The browser's User-Agent string. + description: The user's anonymous id placeholder: '' defaultValue: - '@path': $.context.userAgent + '@path': $.anonymousId required: false multiple: false choices: null dynamic: false allowNull: false - - id: g21v8UnT2NgMTqtXy6txS8 - sortOrder: 9 - fieldKey: ipAddress - label: IP Address + - id: vmZWyCzHXzKA4jxaHU5hwr + sortOrder: 5 + fieldKey: email + label: Email type: STRING - description: The users's IP address. + description: The user's email address. placeholder: '' defaultValue: - '@path': $.context.ip + '@path': $.properties.email required: false multiple: false choices: null dynamic: false allowNull: false - - id: mgg3vBV3yyXq7GxGdWpsPS + - id: otSYqZFafJi5aae1yTwynq name: Track Sign Up slug: trackSignUp description: Record when a customer signs up for a service. - platform: CLOUD + platform: WEB hidden: false - defaultTrigger: null + defaultTrigger: event = "Signed Up" fields: - - id: mVpzx1Nx2sFdX725PMNfwc + - id: 2gjjqzPLDWN9KLXbM3vu9F sortOrder: 0 fieldKey: customerId label: Customer ID @@ -15403,7 +15440,7 @@ items: choices: null dynamic: false allowNull: false - - id: iDeMAoiX8dBqvZfVCtRpGu + - id: di1f8nNefQ7nVLdzBPfqAQ sortOrder: 1 fieldKey: anonymousId label: Anonymous ID @@ -15417,7 +15454,7 @@ items: choices: null dynamic: false allowNull: false - - id: bb81Q5qU2wDxDHJNCftRHt + - id: 6MU84EwciUiTufPf97csEs sortOrder: 2 fieldKey: email label: Email @@ -15431,7 +15468,7 @@ items: choices: null dynamic: false allowNull: false - - id: p12B9pSzPXh7GiF7YT84t7 + - id: 64C5Xdb6PxU4D9pEav5QDU sortOrder: 3 fieldKey: isNewCustomer label: New Customer Flag @@ -15445,7 +15482,7 @@ items: choices: null dynamic: false allowNull: false - - id: nnRLte19g1zXhEnTVjMbmB + - id: uNAEn545vDrLmwEdGtKKzK sortOrder: 4 fieldKey: loyaltyStatus label: Loyalty Program Status @@ -15461,7 +15498,7 @@ items: choices: null dynamic: false allowNull: false - - id: uXezUiDYVX19rXwpkoPGqU + - id: kbmgdNcJwLGhfu1x5JDyNy sortOrder: 5 fieldKey: firstName label: First Name @@ -15475,7 +15512,7 @@ items: choices: null dynamic: false allowNull: false - - id: c5tDaGSBMCt8GcHeWc31Bf + - id: d8M4Wav1wd1kEgr5nz3djv sortOrder: 6 fieldKey: lastName label: Last Name @@ -15489,7 +15526,7 @@ items: choices: null dynamic: false allowNull: false - - id: ed6ZW4TgiebaxNnxLHyuyx + - id: kiNVPyiWJao7H7i2d5vd3P sortOrder: 7 fieldKey: name label: Name @@ -15503,7 +15540,7 @@ items: choices: null dynamic: false allowNull: false - - id: oox5BrvQnKTUwuouCnHCuW + - id: jAsUxchPn4dLrtJessdjvP sortOrder: 8 fieldKey: age label: Age @@ -15517,7 +15554,7 @@ items: choices: null dynamic: false allowNull: false - - id: 52RrowQ2EFo5i8dJtAjbg5 + - id: bBwvh1FU6hTx7sZAv9Z4SY sortOrder: 9 fieldKey: birthday label: Birthday @@ -15533,7 +15570,7 @@ items: choices: null dynamic: false allowNull: false - - id: v8Xt9wQFrXQsNeHmcCBY9P + - id: 4PjMfC53zf7q4Dweg3n8jQ sortOrder: 10 fieldKey: coupon label: Coupon Code @@ -15547,7 +15584,7 @@ items: choices: null dynamic: false allowNull: false - - id: g1Wn5fsKa3UKjo6KFXiS8a + - id: kvzmQoZeSmWcBsZBDcVdqH sortOrder: 11 fieldKey: attributionId label: Friendbuy Attribution ID @@ -15563,7 +15600,7 @@ items: choices: null dynamic: false allowNull: false - - id: t3fjGpemyUBqP6Hgdd7QdY + - id: 8drKi2r5mUiqpxy7uHo2bB sortOrder: 12 fieldKey: referralCode label: Friendbuy Referral ID @@ -15579,7 +15616,7 @@ items: choices: null dynamic: false allowNull: false - - id: mdxKmKcDYpwbhhG84qRvjV + - id: vBQ96ZiNZ2vejqxaxYdriJ sortOrder: 13 fieldKey: friendbuyAttributes label: Custom Attributes @@ -15596,650 +15633,538 @@ items: choices: null dynamic: false allowNull: false - - id: s6y497EuoSozVqCMzwYKDj - sortOrder: 14 - fieldKey: pageUrl - label: Page URL - type: STRING - description: The URL of the web page the event was generated on. - placeholder: '' - defaultValue: - '@path': $.context.page.url - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: 9MY994crHiwQBd2tZ6N1pL - sortOrder: 15 - fieldKey: pageTitle - label: Page Title - type: STRING - description: The title of the web page the event was generated on. - placeholder: '' - defaultValue: - '@path': $.context.page.title - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: 23oANDtBoWVKmwo7SMKBFL - sortOrder: 16 - fieldKey: userAgent - label: User Agent - type: STRING - description: The browser's User-Agent string. - placeholder: '' - defaultValue: - '@path': $.context.userAgent - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: jv4wtdTbrJj2WYZ1DymdiV - sortOrder: 17 - fieldKey: ipAddress - label: IP Address - type: STRING - description: The users's IP address. - placeholder: '' - defaultValue: - '@path': $.context.ip - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: qXnqSX3hkPFkzQRR8K5YJp - name: Track Customer - slug: trackCustomer - description: Create a new customer profile or update an existing customer profile. - platform: CLOUD + - id: vj1sYaj9saWmcRUVbFaPf5 + name: Track Purchase + slug: trackPurchase + description: Record when a customer makes a purchase. + platform: WEB hidden: false - defaultTrigger: null + defaultTrigger: event = "Order Completed" fields: - - id: hyufZTKzkhVVYrbFqzKApD + - id: jtDk7HdbW3h775XotYX7RW sortOrder: 0 - fieldKey: customerId - label: Customer ID + fieldKey: orderId + label: Order ID type: STRING - description: The user's customer ID. + description: The order ID. placeholder: '' defaultValue: - '@path': $.userId + '@path': $.properties.order_id required: true multiple: false choices: null dynamic: false allowNull: false - - id: tpxUYtNM6RgnvNZJfcC8DE + - id: seyRHj3Jhhsk7kTxXRSLoF sortOrder: 1 - fieldKey: anonymousId - label: Anonymous ID - type: STRING - description: The user's anonymous id. + fieldKey: amount + label: Amount Source + type: NUMBER + description: Purchase amount to be considered when evaluating reward rules. placeholder: '' defaultValue: - '@path': $.anonymousId - required: false + '@path': $.properties.total + required: true multiple: false choices: null dynamic: false allowNull: false - - id: im1MDJmjPihfzjXBiqTTAu + - id: erbhwHHEtPwPT7s9GDwC3H sortOrder: 2 - fieldKey: email - label: Email + fieldKey: currency + label: Currency type: STRING - description: The user's email address. + description: The currency of the purchase amount. placeholder: '' defaultValue: - '@path': $.traits.email + '@path': $.properties.currency required: true multiple: false choices: null dynamic: false allowNull: false - - id: ih1KaVRRyWrJjiVMpoBNBz + - id: apJrPW1frbeo6RF79E1eFs sortOrder: 3 - fieldKey: firstName - label: First Name + fieldKey: coupon + label: Coupon type: STRING - description: The user's given name. + description: The coupon code of any coupon redeemed with the order. placeholder: '' defaultValue: - '@path': $.traits.firstName + '@path': $.properties.coupon required: false multiple: false choices: null dynamic: false allowNull: false - - id: dGYeLsMuqPLsqViv6ozqWz + - id: nbSRtQ5F7vNxhtEuLymfW sortOrder: 4 - fieldKey: lastName - label: Last Name + fieldKey: attributionId + label: Friendbuy Attribution ID type: STRING - description: The user's surname. + description: >- + Friendbuy attribution ID that associates the purchase with the advocate + who referred the purchaser. placeholder: '' defaultValue: - '@path': $.traits.lastName + '@path': $.properties.attributionId required: false multiple: false choices: null dynamic: false allowNull: false - - id: 5or25ohrdDqT31ZrRDtocE + - id: x59iiXF7PXj4qX7Z1hXbva sortOrder: 5 - fieldKey: name - label: Name + fieldKey: referralCode + label: Friendbuy Referral ID type: STRING description: >- - The user's full name. If the name trait doesn't exist then it will be - automatically derived from the firstName and lastName traits if they are - defined. + Friendbuy referral code that associates the purchase with the advocate + who referred the purchaser. placeholder: '' defaultValue: - '@path': $.traits.name + '@path': $.properties.referralCode required: false multiple: false choices: null dynamic: false allowNull: false - - id: vFFWALL8gYvTQSVwQPTHsY + - id: heQRdcwstpsku192obDNRo sortOrder: 6 - fieldKey: age - label: Age - type: NUMBER - description: The user's age. + fieldKey: giftCardCodes + label: Gift Card Codes + type: STRING + description: An array of gift card codes applied to the order. placeholder: '' defaultValue: - '@path': $.traits.age + '@path': $.properties.giftCardCodes required: false - multiple: false + multiple: true choices: null dynamic: false allowNull: false - - id: oCLaaUerUXZVKRX2ZEQ4N4 + - id: jvZjKtMx75aR6DNQa817c sortOrder: 7 - fieldKey: birthday - label: Birthday - type: STRING - description: >- - The user's birthday in the format "YYYY-MM-DD", or "0000-MM-DD" to omit - the year. + fieldKey: products + label: Products + type: OBJECT + description: Products purchased. placeholder: '' defaultValue: - '@path': $.traits.birthday + '@path': $.properties.products required: false - multiple: false + multiple: true choices: null dynamic: false allowNull: false - - id: fm5y5BWYpHvgRLxk8QcyR7 + - id: e49BnvXt9CdvsHP3gUddny sortOrder: 8 - fieldKey: language - label: Language + fieldKey: customerId + label: Customer ID type: STRING - description: The user's language. + description: The user's customer ID. placeholder: '' defaultValue: - '@path': $.traits.language + '@if': + exists: + '@path': $.properties.customerId + then: + '@path': $.properties.customerId + else: + '@path': $.userId required: false multiple: false choices: null dynamic: false allowNull: false - - id: 7aEAcqmizMXvrrMPYaWPMD + - id: 7yu3J3PxaUyg3tuidJ7UaK sortOrder: 9 - fieldKey: addressCountry - label: Country + fieldKey: anonymousId + label: Anonymous ID type: STRING - description: The user's country. + description: The user's anonymous ID. placeholder: '' defaultValue: - '@path': $.traits.address.country + '@path': $.anonymousId required: false multiple: false choices: null dynamic: false allowNull: false - - id: kSfc4sggqPfW2LAoS86YpA + - id: pKJ7PkJzLJPmvHaa276pue sortOrder: 10 - fieldKey: addressState - label: State + fieldKey: email + label: Email type: STRING - description: The user's state. + description: The user's email address. placeholder: '' defaultValue: - '@path': $.traits.address.state + '@path': $.properties.email required: false multiple: false choices: null dynamic: false allowNull: false - - id: 5QT67XaNzBvD2bP5BWviGN + - id: cxk2hBGqKivvjVi9ppjibC sortOrder: 11 - fieldKey: addressCity - label: City - type: STRING - description: The user's city. + fieldKey: isNewCustomer + label: New Customer Flag + type: BOOLEAN + description: Flag to indicate whether the user is a new customer. placeholder: '' defaultValue: - '@path': $.traits.address.city + '@path': $.properties.isNewCustomer required: false multiple: false choices: null dynamic: false allowNull: false - - id: 7jvw8ogMPSYoUh7e2b5o8q + - id: aQMFpBXqLfA3PDzRuFtduM sortOrder: 12 - fieldKey: addressPostalCode - label: State + fieldKey: loyaltyStatus + label: Loyalty Program Status type: STRING - description: The user's postal code. + description: >- + The status of the user in your loyalty program. Valid values are "in", + "out", or "blocked". placeholder: '' defaultValue: - '@path': $.traits.address.postalCode + '@path': $.properties.loyaltyStatus required: false multiple: false choices: null dynamic: false allowNull: false - - id: nqCK3EhBEExK543hvjT1QW + - id: rrpKTJgzEBSzCPg2vyjG9D sortOrder: 13 - fieldKey: customerSince - label: Customer Since + fieldKey: firstName + label: First Name type: STRING - description: The date the user became a customer. + description: The user's given name. placeholder: '' defaultValue: - '@path': $.traits.customerSince + '@path': $.properties.firstName required: false multiple: false choices: null dynamic: false allowNull: false - - id: 7ck4mtXS7pM17qVJPXYbd1 + - id: 3GDjggth5iTiT2dqGK7zGP sortOrder: 14 - fieldKey: loyaltyStatus - label: Loyalty Status + fieldKey: lastName + label: Last Name type: STRING - description: >- - The status of the user in your loyalty program. Valid values are "in", - "out", or "blocked". + description: The user's surname. placeholder: '' defaultValue: - '@path': $.traits.loyaltyStatus + '@path': $.properties.lastName required: false multiple: false choices: null dynamic: false allowNull: false - - id: f882GLMrfrr4RCBGLvMT38 + - id: Xd4epHNN3sYt48neN9bN3 sortOrder: 15 - fieldKey: isNewCustomer - label: New Customer Flag - type: BOOLEAN - description: Flag to indicate whether the user is a new customer. + fieldKey: name + label: Name + type: STRING + description: The user's full name. placeholder: '' defaultValue: - '@path': $.traits.isNewCustomer + '@path': $.properties.name required: false multiple: false choices: null dynamic: false allowNull: false - - id: 4RKrCbou8QR7vWNU9QZNpq + - id: bSx5kxfkJoQ1vvcmXm6Ut2 sortOrder: 16 - fieldKey: friendbuyAttributes - label: Custom Attributes - type: OBJECT - description: >- - Custom attributes to send to Friendbuy. You should pass an object whose - keys are the names of the custom attributes and whose values are - strings. Non-string-valued attributes will be dropped. + fieldKey: age + label: Age + type: NUMBER + description: The user's age. placeholder: '' defaultValue: - '@path': $.traits.friendbuyAttributes + '@path': $.properties.age required: false multiple: false choices: null dynamic: false allowNull: false - - id: bRraNNAivMUoy5xi1B7qcH + - id: hzg7x9k2QSCiBWzBxmwybk sortOrder: 17 - fieldKey: pageUrl - label: Page URL + fieldKey: birthday + label: Birthday type: STRING - description: The URL of the web page the event was generated on. + description: >- + The user's birthday in the format "YYYY-MM-DD", or "0000-MM-DD" to omit + the year. placeholder: '' defaultValue: - '@path': $.context.page.url + '@path': $.properties.birthday required: false multiple: false choices: null dynamic: false allowNull: false - - id: 98taXo3A2L7qBLp2n6vv3U + - id: uQbbmFxFGAQJFhBzcHesbB sortOrder: 18 - fieldKey: pageTitle - label: Page Title - type: STRING - description: The title of the web page the event was generated on. - placeholder: '' - defaultValue: - '@path': $.context.page.title - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: pHYgnkLb6aNpYeBUh86NaW - sortOrder: 19 - fieldKey: userAgent - label: User Agent - type: STRING - description: The browser's User-Agent string. - placeholder: '' - defaultValue: - '@path': $.context.userAgent - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: boje7ArY6dFCB4jc27VEin - sortOrder: 20 - fieldKey: ipAddress - label: IP Address - type: STRING - description: The users's IP address. + fieldKey: friendbuyAttributes + label: Custom Attributes + type: OBJECT + description: >- + Custom attributes to send to Friendbuy. You should pass an object whose + keys are the names of the custom attributes and whose values are + strings. Non-string-valued attributes will be dropped. placeholder: '' defaultValue: - '@path': $.context.ip + '@path': $.properties.friendbuyAttributes required: false multiple: false choices: null dynamic: false allowNull: false - - id: rHduKcyr8ptDrQnFupicxd - name: Track Purchase - slug: trackPurchase - description: Record when a customer makes a purchase. - platform: CLOUD + - id: wTBkHZFw3Mh66G65UkMXBL + name: Track Customer + slug: trackCustomer + description: Create a new customer profile or update an existing customer profile. + platform: WEB hidden: false - defaultTrigger: null + defaultTrigger: type = "identify" fields: - - id: wqe6KdE5WKF22aUQ89YbBk + - id: AkJRqp7x2vwUdqe97reZD sortOrder: 0 - fieldKey: orderId - label: Order ID + fieldKey: customerId + label: Customer ID type: STRING - description: The order ID. + description: The user's customer ID. placeholder: '' defaultValue: - '@path': $.properties.order_id + '@path': $.userId required: true multiple: false choices: null dynamic: false allowNull: false - - id: qWq2mTDVazLgkUMyJgBoqG + - id: xuoGFMgo6dDoMgFiUiK8dy sortOrder: 1 - fieldKey: amount - label: Amount Source - type: NUMBER - description: Purchase amount to be considered when evaluating reward rules. + fieldKey: anonymousId + label: Anonymous ID + type: STRING + description: The user's anonymous id. placeholder: '' defaultValue: - '@path': $.properties.total - required: true + '@path': $.anonymousId + required: false multiple: false choices: null dynamic: false allowNull: false - - id: r3tCWiMg4TkJeVnumM61kR + - id: rQ91c85WpwF2cA4U8d59i sortOrder: 2 - fieldKey: currency - label: Currency + fieldKey: email + label: Email type: STRING - description: The currency of the purchase amount. + description: The user's email address. placeholder: '' defaultValue: - '@path': $.properties.currency + '@path': $.traits.email required: true multiple: false choices: null dynamic: false allowNull: false - - id: sUptyXAjZWNTpp3XRz4oFn + - id: dgVNf5a6rpAbzBgK6B4MWA sortOrder: 3 - fieldKey: coupon - label: Coupon + fieldKey: firstName + label: First Name type: STRING - description: The coupon code of any coupon redeemed with the order. + description: The user's given name. placeholder: '' defaultValue: - '@path': $.properties.coupon + '@path': $.traits.firstName required: false multiple: false choices: null dynamic: false allowNull: false - - id: 6G1UDvw4eSeH4PAKcDfKjg + - id: sQQ5Q5QFveS1sr6anuYpTV sortOrder: 4 - fieldKey: attributionId - label: Friendbuy Attribution ID + fieldKey: lastName + label: Last Name type: STRING - description: >- - Friendbuy attribution ID that associates the purchase with the advocate - who referred the purchaser. + description: The user's surname. placeholder: '' defaultValue: - '@path': $.properties.attributionId + '@path': $.traits.lastName required: false multiple: false choices: null dynamic: false allowNull: false - - id: wdVUENe5YATHcU9mRoVVXU + - id: miD4YPZSSJAvKashuwP9UK sortOrder: 5 - fieldKey: referralCode - label: Friendbuy Referral ID + fieldKey: name + label: Name type: STRING description: >- - Friendbuy referral code that associates the purchase with the advocate - who referred the purchaser. + The user's full name. If the name trait doesn't exist then it will be + automatically derived from the firstName and lastName traits if they are + defined. placeholder: '' defaultValue: - '@path': $.properties.referralCode + '@path': $.traits.name required: false multiple: false choices: null dynamic: false allowNull: false - - id: bhWQtNmRgCHKAoW74H8h2J + - id: 2PGj2M8YErv7Ssz7M9FdCW sortOrder: 6 - fieldKey: giftCardCodes - label: Gift Card Codes - type: STRING - description: An array of gift card codes applied to the order. + fieldKey: age + label: Age + type: NUMBER + description: The user's age. placeholder: '' defaultValue: - '@path': $.properties.giftCardCodes + '@path': $.traits.age required: false - multiple: true + multiple: false choices: null dynamic: false allowNull: false - - id: aYi9MVMXoRozMekSzXuPwb + - id: 9eutB7uWDAz8eucRfdqTGS sortOrder: 7 - fieldKey: products - label: Products - type: OBJECT - description: Products purchased. + fieldKey: birthday + label: Birthday + type: STRING + description: >- + The user's birthday in the format "YYYY-MM-DD", or "0000-MM-DD" to omit + the year. placeholder: '' defaultValue: - '@path': $.properties.products + '@path': $.traits.birthday required: false - multiple: true + multiple: false choices: null dynamic: false allowNull: false - - id: i76YK79Z6FdtNstg2wR1mP + - id: dLF9tZ39SShVVdoPzxV3Hv sortOrder: 8 - fieldKey: customerId - label: Customer ID + fieldKey: language + label: Language type: STRING - description: The user's customer ID. + description: The user's language. placeholder: '' defaultValue: - '@if': - exists: - '@path': $.properties.customerId - then: - '@path': $.properties.customerId - else: - '@path': $.userId + '@path': $.traits.language required: false multiple: false choices: null dynamic: false allowNull: false - - id: mT7Di85ZgXTMJi3n7RxG5X + - id: wQR61gJCRoK3TrcM5PdZZg sortOrder: 9 - fieldKey: anonymousId - label: Anonymous ID + fieldKey: addressCountry + label: Country type: STRING - description: The user's anonymous ID. + description: The user's country. placeholder: '' defaultValue: - '@path': $.anonymousId + '@path': $.traits.address.country required: false multiple: false choices: null dynamic: false allowNull: false - - id: bUYzGk6i1CVBZoB53TySfS + - id: t4kb37hYMbbNc4vCjGwKXn sortOrder: 10 - fieldKey: email - label: Email + fieldKey: addressState + label: State type: STRING - description: The user's email address. + description: The user's state. placeholder: '' defaultValue: - '@path': $.properties.email + '@path': $.traits.address.state required: false multiple: false choices: null dynamic: false allowNull: false - - id: imjDbTMEmYbpBT2TmX5FY8 + - id: nhW4J81o75BkVC5oHV5QeR sortOrder: 11 - fieldKey: isNewCustomer - label: New Customer Flag - type: BOOLEAN - description: Flag to indicate whether the user is a new customer. + fieldKey: addressCity + label: City + type: STRING + description: The user's city. placeholder: '' defaultValue: - '@path': $.properties.isNewCustomer + '@path': $.traits.address.city required: false multiple: false choices: null dynamic: false allowNull: false - - id: LrpY891pMfaoM3EZoCinc + - id: tN4BGwdF3QwVThS899pYKG sortOrder: 12 - fieldKey: loyaltyStatus - label: Loyalty Program Status + fieldKey: addressPostalCode + label: State type: STRING - description: >- - The status of the user in your loyalty program. Valid values are "in", - "out", or "blocked". + description: The user's postal code. placeholder: '' defaultValue: - '@path': $.properties.loyaltyStatus + '@path': $.traits.address.postalCode required: false multiple: false choices: null dynamic: false allowNull: false - - id: sNkavPa5RSnet4eWWbENQF + - id: 4j9sK8W15BqpywxbBKazQM sortOrder: 13 - fieldKey: firstName - label: First Name + fieldKey: customerSince + label: Customer Since type: STRING - description: The user's given name. + description: The date the user became a customer. placeholder: '' defaultValue: - '@path': $.properties.firstName + '@path': $.traits.customerSince required: false multiple: false choices: null dynamic: false allowNull: false - - id: v1SY9oFpwEPDkQEar37beY + - id: 4W9aSb3uMBiFo4wixQ1BR7 sortOrder: 14 - fieldKey: lastName - label: Last Name + fieldKey: loyaltyStatus + label: Loyalty Status type: STRING - description: The user's surname. + description: >- + The status of the user in your loyalty program. Valid values are "in", + "out", or "blocked". placeholder: '' defaultValue: - '@path': $.properties.lastName + '@path': $.traits.loyaltyStatus required: false multiple: false choices: null dynamic: false allowNull: false - - id: pWJgQR3w92hSvuAvPCift8 + - id: jVnqS7vnxv4BiVFRAgQ93P sortOrder: 15 - fieldKey: name - label: Name - type: STRING - description: The user's full name. + fieldKey: isNewCustomer + label: New Customer Flag + type: BOOLEAN + description: Flag to indicate whether the user is a new customer. placeholder: '' defaultValue: - '@path': $.properties.name + '@path': $.traits.isNewCustomer required: false multiple: false choices: null dynamic: false allowNull: false - - id: ua2vy95ckMFNXXEF2eDWqj + - id: po4r4NNZhHZkukEoqWZc1s sortOrder: 16 - fieldKey: age - label: Age - type: NUMBER - description: The user's age. - placeholder: '' - defaultValue: - '@path': $.properties.age - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: umTCW6h1TVzLBmr53N8Fgf - sortOrder: 17 - fieldKey: birthday - label: Birthday - type: STRING - description: >- - The user's birthday in the format "YYYY-MM-DD", or "0000-MM-DD" to omit - the year. - placeholder: '' - defaultValue: - '@path': $.properties.birthday - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: 3VYELbeHb2Y86LRQ9GRxJ2 - sortOrder: 18 fieldKey: friendbuyAttributes label: Custom Attributes type: OBJECT @@ -16249,69 +16174,147 @@ items: strings. Non-string-valued attributes will be dropped. placeholder: '' defaultValue: + '@path': $.traits.friendbuyAttributes + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: vj1sYaj9saWmcRUVbFaPf5 + name: Track Purchase + fields: + orderId: + '@path': $.properties.order_id + amount: + '@path': $.properties.total + currency: + '@path': $.properties.currency + coupon: + '@path': $.properties.coupon + attributionId: + '@path': $.properties.attributionId + referralCode: + '@path': $.properties.referralCode + giftCardCodes: + '@path': $.properties.giftCardCodes + products: + '@path': $.properties.products + customerId: + '@if': + exists: + '@path': $.properties.customerId + then: + '@path': $.properties.customerId + else: + '@path': $.userId + anonymousId: + '@path': $.anonymousId + email: + '@path': $.properties.email + isNewCustomer: + '@path': $.properties.isNewCustomer + loyaltyStatus: + '@path': $.properties.loyaltyStatus + firstName: + '@path': $.properties.firstName + lastName: + '@path': $.properties.lastName + name: + '@path': $.properties.name + age: + '@path': $.properties.age + birthday: + '@path': $.properties.birthday + friendbuyAttributes: + '@path': $.properties.friendbuyAttributes + trigger: event = "Order Completed" + - actionId: wTBkHZFw3Mh66G65UkMXBL + name: Track Customer + fields: + customerId: + '@path': $.userId + anonymousId: + '@path': $.anonymousId + email: + '@path': $.traits.email + firstName: + '@path': $.traits.firstName + lastName: + '@path': $.traits.lastName + name: + '@path': $.traits.name + age: + '@path': $.traits.age + birthday: + '@path': $.traits.birthday + language: + '@path': $.traits.language + addressCountry: + '@path': $.traits.address.country + addressState: + '@path': $.traits.address.state + addressCity: + '@path': $.traits.address.city + addressPostalCode: + '@path': $.traits.address.postalCode + customerSince: + '@path': $.traits.customerSince + loyaltyStatus: + '@path': $.traits.loyaltyStatus + isNewCustomer: + '@path': $.traits.isNewCustomer + friendbuyAttributes: + '@path': $.traits.friendbuyAttributes + trigger: type = "identify" + - actionId: otSYqZFafJi5aae1yTwynq + name: Track Sign Up + fields: + customerId: + '@if': + exists: + '@path': $.properties.customerId + then: + '@path': $.properties.customerId + else: + '@path': $.userId + anonymousId: + '@path': $.anonymousId + email: + '@path': $.properties.email + isNewCustomer: + '@path': $.properties.isNewCustomer + loyaltyStatus: + '@path': $.properties.loyaltyStatus + firstName: + '@path': $.properties.firstName + lastName: + '@path': $.properties.lastName + name: + '@path': $.properties.name + age: + '@path': $.properties.age + birthday: + '@path': $.properties.birthday + coupon: + '@path': $.properties.coupon + attributionId: + '@path': $.properties.attributionId + referralCode: + '@path': $.properties.referralCode + friendbuyAttributes: '@path': $.properties.friendbuyAttributes - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: msLckf49ZEaf1KsPfQ4x91 - sortOrder: 19 - fieldKey: pageUrl - label: Page URL - type: STRING - description: The URL of the web page the event was generated on. - placeholder: '' - defaultValue: - '@path': $.context.page.url - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: hoZJWaYBJQ9YhvQSJRF66f - sortOrder: 20 - fieldKey: pageTitle - label: Page Title - type: STRING - description: The title of the web page the event was generated on. - placeholder: '' - defaultValue: - '@path': $.context.page.title - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: iVx6fQYSn1TNrdmteTBr5w - sortOrder: 21 - fieldKey: userAgent - label: User Agent - type: STRING - description: The browser's User-Agent string. - placeholder: '' - defaultValue: - '@path': $.context.userAgent - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - - id: sXZcFy1ehAgpDEJe2eo3zN - sortOrder: 22 - fieldKey: ipAddress - label: IP Address - type: STRING - description: The users's IP address. - placeholder: '' - defaultValue: - '@path': $.context.ip - required: false - multiple: false - choices: null - dynamic: false - allowNull: false - presets: [] + trigger: event = "Signed Up" + - actionId: fk2xKEXiXd9qEkQb24nzXh + name: Track Page + fields: + name: + '@path': $.name + category: + '@path': $.category + title: + '@path': $.properties.title + trigger: type = "page" - destination_id: 54521fd625e721e32a72eeb8 display_name: FullStory name: FullStory @@ -28258,7 +28261,7 @@ items: previous_names: - Refiner website: https://refiner.io - status: PUBLIC_BETA + status: PUBLIC categories: - Surveys - Enrichment @@ -31102,6 +31105,241 @@ items: label: API Key actions: [] presets: [] +- destination_id: 61d8c74d174a9acd0e138b31 + display_name: Sprig (Actions) + name: Sprig (Actions) + slug: sprig-web + hidden: false + regional: + - us-west + url: connections/destinations/catalog/sprig-web + previous_names: + - Sprig (Actions) + website: http://www.segment.com + status: PUBLIC + categories: [] + logo: + url: https://cdn.filepicker.io/api/file/ueZESNlpT4KuMqjhpz8j + mark: + url: https://cdn.filepicker.io/api/file/oKhe3lfbRGuJdK6E1UGb + methods: + track: true + identify: true + group: true + alias: true + page: true + platforms: + browser: true + mobile: false + server: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: debugMode + type: boolean + defaultValue: false + description: Enable debug mode for testing purposes. + required: true + label: Debug mode + - name: envId + type: string + defaultValue: '' + description: Your environment ID (production or development). + required: true + label: Environment ID + actions: + - id: 97HqiB5M476WiednY69xWk + name: Sign Out User + slug: signoutUser + description: >- + Clear stored user ID so that future events and traits are not associated + with this user. + platform: WEB + hidden: false + defaultTrigger: type = "track" and event = "Signed Out" + fields: [] + - id: ejUVPZC3Ry95eypqUbvsSf + name: Update User ID + slug: updateUserId + description: Set updated user ID. + platform: WEB + hidden: false + defaultTrigger: type = "alias" + fields: + - id: aBE76n9SuQFgDBGpbHmDtg + sortOrder: 0 + fieldKey: userId + label: User ID + type: STRING + description: New unique identifier for the user + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: bpxrrjxSegRfbGmp5MBjDa + sortOrder: 1 + fieldKey: anonymousId + label: Anonymous ID + type: STRING + description: New anonymous identifier for the user + placeholder: '' + defaultValue: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fM2KL8nJKHQPEVXdN9hxH5 + name: Track Event + slug: trackEvent + description: >- + Track event to potentially filter user studies (microsurveys) later, or + trigger a study now. + platform: WEB + hidden: false + defaultTrigger: type = "track" and event != "Signed Out" + fields: + - id: 7AyA2gRChRYdvwkbHmitHZ + sortOrder: 0 + fieldKey: name + label: Event name + type: STRING + description: The event name that will be shown on Sprig's dashboard + placeholder: '' + defaultValue: + '@path': $.event + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: v6Uihnc2ZbMt2uNWijAHiT + sortOrder: 1 + fieldKey: userId + label: User ID + type: STRING + description: Unique identifier for the user + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wuMfnNJJg2o5ReHKRu8owU + sortOrder: 2 + fieldKey: anonymousId + label: Anonymous ID + type: STRING + description: Anonymous identifier for the user + placeholder: '' + defaultValue: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: v824Xre4bGxg88RqE88iHQ + name: Identify User + slug: identifyUser + description: Set user ID and/or attributes. + platform: WEB + hidden: false + defaultTrigger: type = "identify" + fields: + - id: kyPWZ2gC45fxTKvMajQQVF + sortOrder: 0 + fieldKey: userId + label: User ID + type: STRING + description: Unique identifier for the user + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3GWX9a4CFagXhpgVaHAbaB + sortOrder: 1 + fieldKey: anonymousId + label: Anonymous ID + type: STRING + description: Anonymous identifier for the user + placeholder: '' + defaultValue: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iVLqFVS8hNomPQDkJviCpJ + sortOrder: 2 + fieldKey: traits + label: User Attributes + type: OBJECT + description: The Segment user traits to be forwarded to Sprig and set as attributes + placeholder: '' + defaultValue: + '@path': $.traits + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: v824Xre4bGxg88RqE88iHQ + name: Identify User + fields: + userId: + '@path': $.userId + anonymousId: + '@path': $.anonymousId + traits: + '@path': $.traits + trigger: type = "identify" + - actionId: ejUVPZC3Ry95eypqUbvsSf + name: Update User ID + fields: + userId: + '@path': $.userId + anonymousId: + '@path': $.anonymousId + trigger: type = "alias" + - actionId: 97HqiB5M476WiednY69xWk + name: Sign Out User + fields: {} + trigger: type = "track" and event = "Signed Out" + - actionId: fM2KL8nJKHQPEVXdN9hxH5 + name: Track Event + fields: + name: + '@path': $.event + userId: + '@path': $.userId + anonymousId: + '@path': $.anonymousId + trigger: type = "track" and event != "Signed Out" - destination_id: 5f2c35239094d175b6485eb1 display_name: Sprig Cloud name: Sprig Cloud diff --git a/src/_data/catalog/regional-supported.yml b/src/_data/catalog/regional-supported.yml index 0e4de476b6..90ba9989f9 100644 --- a/src/_data/catalog/regional-supported.yml +++ b/src/_data/catalog/regional-supported.yml @@ -1,5 +1,5 @@ # AUTOGENERATED LIST OF CONNECTIONS THAT SUPPORT REGIONAL -# Last updated 2022-02-01 +# Last updated 2022-02-07 warehouses: - id: WcjBCzUGff display_name: Azure SQL Data Warehouse @@ -51,7 +51,7 @@ warehouses: - us-west - eu-west # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# source cateogries last updated 2022-02-01 +# source cateogries last updated 2022-02-07 items: - display_name: A/B Testing slug: a-b-testing @@ -1259,24 +1259,24 @@ destinations: url: connections/destinations/catalog/freshsales regional: - us-west - - id: 59ce9468cf711e00014a9c12 - display_name: Friendbuy - slug: friendbuy - url: connections/destinations/catalog/friendbuy - regional: - - us-west - - id: 6170a348128093cd0245e0ea - display_name: Friendbuy (Actions) - slug: actions-friendbuy - url: connections/destinations/catalog/actions-friendbuy - regional: - - us-west - id: 61dde0dc77eb0db0392649d3 display_name: Friendbuy (Cloud Destination) slug: actions-friendbuy-cloud url: connections/destinations/catalog/actions-friendbuy-cloud regional: - us-west + - id: 59ce9468cf711e00014a9c12 + display_name: Friendbuy (Legacy) + slug: friendbuy-legacy + url: connections/destinations/catalog/friendbuy-legacy + regional: + - us-west + - id: 6170a348128093cd0245e0ea + display_name: Friendbuy (Web Destination) + slug: friendbuy-web-destination + url: connections/destinations/catalog/friendbuy-web-destination + regional: + - us-west - id: 54521fd625e721e32a72eeb8 display_name: FullStory slug: fullstory @@ -2292,6 +2292,12 @@ destinations: url: connections/destinations/catalog/split regional: - us-west + - id: 61d8c74d174a9acd0e138b31 + display_name: Sprig (Actions) + slug: sprig-web + url: connections/destinations/catalog/sprig-web + regional: + - us-west - id: 5f2c35239094d175b6485eb1 display_name: Sprig Cloud slug: sprig-cloud diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml index 15dfd1a818..a2a263d9e6 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 cateogries last updated 2022-02-01 +# source cateogries last updated 2022-02-07 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 c3f13a19da..7f997382e2 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 2022-02-01 +# sources last updated 2022-02-07 items: - id: 8HWbgPTt3k display_name: .NET diff --git a/src/connections/destinations/catalog/actions-sprig-web/index.md b/src/connections/destinations/catalog/actions-sprig-web/index.md index 1fc5e3bb80..d9a1becde0 100644 --- a/src/connections/destinations/catalog/actions-sprig-web/index.md +++ b/src/connections/destinations/catalog/actions-sprig-web/index.md @@ -4,8 +4,6 @@ title: Sprig (Actions) Destination hide-boilerplate: true hide-dossier: true hidden: true -redirect_from: - - '/connections/destinations/catalog/sprig-web' --- @@ -44,28 +42,7 @@ Sprig (Actions) provides the following benefits over the classic Sprig destinati -## Pre-built subscriptions - -By default, a new Sprig (Actions) destination comes with the following subscriptions. - -Select these subscriptions by choosing **Quick Setup** when you first configure the destination. You can enable, edit, or disable them from the screen that appears. - -| Subscription Name | Default Trigger | Sprig Action | -| ------------------ | ----------------------------------------- | ------------------------- | -| Identify User | All events with type **Identify**. | Set User ID, email, and other traits. | -| Sign Out User | Events with name **Signed Out** and type **Track**. | Log out user on Sprig so that future actions are not associated with them. | -| Track Event | All events with type **Track**, except **Signed Out**. | Track this event name for this user, and potentially display a matching microsurvey. | -| Update User ID | All events with type **Alias**. | Update the User ID for the current user. | - -## Available Sprig actions - -Combine the supported [triggers](/docs/connections/destinations/actions/#components-of-a-destination-action) with the following Sprig-supported actions: - -- [Identify User](#identify-user) -- [Sign Out User](#sign-out-user) -- [Track Event](#track-event) -- [Update User ID](#update-user-id) - +{% include components/actions-fields.html %} ## Migration from the classic Sprig destination diff --git a/src/connections/destinations/catalog/sprig-web/index.md b/src/connections/destinations/catalog/sprig-web/index.md new file mode 100644 index 0000000000..8f5141feff --- /dev/null +++ b/src/connections/destinations/catalog/sprig-web/index.md @@ -0,0 +1,53 @@ +--- +title: 'Sprig (Actions) Destination' +hidden: false +hide-boilerplate: true +hide-dossier: true +redirect_from: + - '/connections/destinations/catalog/actions-sprig-web' +--- + + + +{% include content/plan-grid.md name="actions" %} + +[Sprig (formerly UserLeap)](https://sprig.com/?&utm_source=segmentio&utm_medium=docs_actions&utm_campaign=integration){:target="_blank"} is an in-context user research platform that makes it fast and effortless for product teams to learn from their actual customers in real-time, through microsurveys, concept tests, and video questions. + +Sprig maintains this destination. For any issues with the destination, consult [Sprig's documentation](https://docs.sprig.com/docs/segment-web) or contact [support@sprig.com](mailto:support@sprig.com). + + + + +> success "" +> **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/) Sprig Segment destination. There's also a page about the [non-Actions Sprig Cloud (formerly UserLeap) destination](/docs/connections/destinations/catalog/userleap/). Both of these destinations receive data from Segment. + + + +## Benefits of Sprig (Actions) vs Sprig Classic + +Sprig (Actions) provides the following benefits over the classic Sprig destination: + +- **Trigger microsurveys**. Because Sprig (Actions) hooks into your browser-based, JavaScript Segment source, it can be used to trigger Sprig microsurveys. +- **Code-free Sprig installation**. The Sprig (Actions) destination can install the Sprig SDK onto your website, without you having to update any code. + + + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Use the navigation on the left to locate and select Sprig (Actions). +3. Click **Configure Sprig (Actions)**. +4. Select an existing JavaScript website source to connect to Sprig (Actions). +5. Find your Environment ID on [Sprig Dashboard > Connect > JavaScript](https://app.sprig.com/connect){:target="_blank"}. Use the Development Environment ID for a testing environment, and the Production Environment ID for your live website environment. When you configure the destination, input the appropriate Environment ID. +6. Select **Quick Setup** to start with pre-populated subscriptions, or **Customized Setup** to configure each action from scratch. Click **Configure Actions** to complete setup. + + + +{% include components/actions-fields.html %} + + +## Migration from the classic Sprig destination + +To prevent duplicate events being created in Sprig, ensure that for each Segment source, this destination and the Sprig Cloud destination are not both enabled at the same time. + + From 6f90a07915072ac0d73cdd4d2dfaf1dfbbe4e58b Mon Sep 17 00:00:00 2001 From: markzegarelli Date: Tue, 8 Feb 2022 09:06:57 -0800 Subject: [PATCH 12/17] Reformat og:title (#2463) --- src/_layouts/default.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_layouts/default.html b/src/_layouts/default.html index 94b27ec695..66209460ef 100644 --- a/src/_layouts/default.html +++ b/src/_layouts/default.html @@ -30,7 +30,7 @@ - + From 86cd71ce92471bf17bf08cfe1fb5d38381740da4 Mon Sep 17 00:00:00 2001 From: kdaswani <49517136+kdaswani@users.noreply.github.com> Date: Tue, 8 Feb 2022 09:07:37 -0800 Subject: [PATCH 13/17] Add FAQ and Troubleshooting Section to FB CAPI (Actions) doc (#2461) * Add FAQ and Troubleshooting Section to FB CAPI (Actions) doc * Update src/connections/destinations/catalog/actions-facebook-conversions-api/index.md Co-authored-by: markzegarelli * Update src/connections/destinations/catalog/actions-facebook-conversions-api/index.md Co-authored-by: markzegarelli * Apply suggestions from code review Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> Co-authored-by: markzegarelli Co-authored-by: stayseesong <83784848+stayseesong@users.noreply.github.com> --- .../actions-facebook-conversions-api/index.md | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md b/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md index 17bb46b1e5..abb4fa9a55 100644 --- a/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md +++ b/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md @@ -119,8 +119,30 @@ You can send additional User Data to increase the match rate for events from a s If you choose this option, each source sends different events, and deduplication is not necessary. +## FAQ & Troubleshooting -## Verify Events in Facebook +### Other Standard Events + +If you want to send a [Facebook standard event](https://developers.facebook.com/docs/meta-pixel/reference#standard-events){:target="_blank"} that Segment does not have a prebuilt mapping for, you can use the [Custom Event action](/docs/connections/destinations/catalog/actions-facebook-conversions-api/#custom-event) to send the standard event. For example, if you want to send a `CompleteRegistration` event, create a mapping for Custom Event, set up your Event Trigger criteria for completed registrations, and input a literal string of "CompleteRegistration" as the Event Name. You can use the Custom Data key/value editor to add fields that are in the `CompleteRegistration` event such as `content_name` and `currency`. + +### PII Hashing + +Segment creates a SHA-256 hash of the following fields: +- External ID +- Email +- Phone +- Gender +- Data of Birth +- Last Name +- First Name +- City +- State +- Zip Code +- Country + +If you use Facebook Pixel, the Pixel library also hashes the External ID. This means External IDs will match across Facebook Pixel and Facebook Conversions API if they use the External ID for [deduplication](https://developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events/#fbp-or-external-id){:target="_blank"}. + +### Verify Events in Facebook After you start sending events, you should start seeing them in twenty minutes. You can confirm that Facebook received them: From 16901e0d8a0f32a29fee90858d8792119ebcc8a1 Mon Sep 17 00:00:00 2001 From: markzegarelli Date: Tue, 8 Feb 2022 09:08:07 -0800 Subject: [PATCH 14/17] Added a note about property hashing (#2458) --- .../destinations/catalog/facebook-pixel-server-side/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/connections/destinations/catalog/facebook-pixel-server-side/index.md b/src/connections/destinations/catalog/facebook-pixel-server-side/index.md index e21f00a8a1..4fed2e89de 100644 --- a/src/connections/destinations/catalog/facebook-pixel-server-side/index.md +++ b/src/connections/destinations/catalog/facebook-pixel-server-side/index.md @@ -252,6 +252,8 @@ Segment maps the following Segment traits to [Facebook properties](https://devel | `timestamp` | `event_time` | | | `userId` | `external_id` | Any unique ID from the advertiser, such as membership IDs, user IDs, and cookie IDs. See [Alternative External IDs](#alternative-external-ids). | +> info "About hashing" +> For each of the hashed properties above, Segment's integration code hashes the values before they're sent to the destination. To access the `contexts` and `context.traits` objects in a Track call, you can use the [context-traits format](/docs/connections/sources/catalog/libraries/website/javascript/#context--traits) as in the example below. From be65f084bee54c7c152ff30d08e978e62a11bf09 Mon Sep 17 00:00:00 2001 From: markzegarelli Date: Tue, 8 Feb 2022 09:08:40 -0800 Subject: [PATCH 15/17] catalog update --- src/_data/catalog/destination_categories.yml | 2 +- src/_data/catalog/destinations.yml | 66 +------------------- src/_data/catalog/regional-supported.yml | 10 +-- src/_data/catalog/source_categories.yml | 2 +- src/_data/catalog/sources.yml | 2 +- 5 files changed, 8 insertions(+), 74 deletions(-) diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index 7e793646c5..b507c8527c 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 2022-02-07 +# destination categories last updated 2022-02-08 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 f12972ab2c..8612b6ae47 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 2022-02-07 +# destination data last updated 2022-02-08 items: - destination_id: 60b5d0a01f3726b85dc05aab display_name: 2mee @@ -1697,67 +1697,6 @@ items: label: Role Address actions: [] presets: [] -- destination_id: 54f418c3db31d978f14aa925 - display_name: Amazon S3 - name: Amazon S3 - slug: amazon-s3 - hidden: false - regional: - - us-west - url: connections/destinations/catalog/amazon-s3 - previous_names: - - Amazon S3 - website: http://aws.amazon.com/s3 - status: PUBLIC - categories: - - Analytics - - Raw Data - logo: - url: https://d3hotuclm6if1r.cloudfront.net/logos/amazon-s3-default.svg - mark: - url: https://cdn.filepicker.io/api/file/R1EKddJ1SnGECiHtdUlY - methods: - track: true - identify: true - group: true - alias: true - page: true - platforms: - browser: true - mobile: true - server: true - components: [] - browserUnbundlingSupported: false - browserUnbundlingPublic: true - replay: false - connection_modes: - device: - web: false - mobile: false - server: false - cloud: - web: false - mobile: false - server: false - settings: - - name: bucket - type: string - defaultValue: '' - description: Your S3 bucket name. - required: true - label: Bucket Name - - name: useServerSideEncryption - type: boolean - defaultValue: true - description: >- - If you enable this setting, the data we copy to your bucket will be - encrypted at rest using S3-Managed encryption keys. For more information, - see - [here](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html). - required: true - label: Use Server Side Encryption? - actions: [] - presets: [] - destination_id: 573a3dfb80412f644ff13679 display_name: Ambassador name: Ambassador @@ -31117,7 +31056,8 @@ items: - Sprig (Actions) website: http://www.segment.com status: PUBLIC - categories: [] + categories: + - Surveys logo: url: https://cdn.filepicker.io/api/file/ueZESNlpT4KuMqjhpz8j mark: diff --git a/src/_data/catalog/regional-supported.yml b/src/_data/catalog/regional-supported.yml index 90ba9989f9..010a2b8e12 100644 --- a/src/_data/catalog/regional-supported.yml +++ b/src/_data/catalog/regional-supported.yml @@ -1,5 +1,5 @@ # AUTOGENERATED LIST OF CONNECTIONS THAT SUPPORT REGIONAL -# Last updated 2022-02-07 +# Last updated 2022-02-08 warehouses: - id: WcjBCzUGff display_name: Azure SQL Data Warehouse @@ -51,7 +51,7 @@ warehouses: - us-west - eu-west # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# source cateogries last updated 2022-02-07 +# source cateogries last updated 2022-02-08 items: - display_name: A/B Testing slug: a-b-testing @@ -673,12 +673,6 @@ destinations: url: connections/destinations/catalog/amazon-personalize regional: - us-west - - id: 54f418c3db31d978f14aa925 - display_name: Amazon S3 - slug: amazon-s3 - url: connections/destinations/catalog/amazon-s3 - regional: - - us-west - id: 573a3dfb80412f644ff13679 display_name: Ambassador slug: ambassador diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml index a2a263d9e6..b1c3669ee5 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 cateogries last updated 2022-02-07 +# source cateogries last updated 2022-02-08 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 7f997382e2..2dfdadeb10 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 2022-02-07 +# sources last updated 2022-02-08 items: - id: 8HWbgPTt3k display_name: .NET From 6388e98be6cbe49a84bca13cb53d25a5f9265e8a Mon Sep 17 00:00:00 2001 From: forstisabella <92472883+forstisabella@users.noreply.github.com> Date: Tue, 8 Feb 2022 12:17:16 -0500 Subject: [PATCH 16/17] DOC-393 formatting and language changes --- .../catalog/libraries/website/javascript/upgrade-to-ajs2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/sources/catalog/libraries/website/javascript/upgrade-to-ajs2.md b/src/connections/sources/catalog/libraries/website/javascript/upgrade-to-ajs2.md index 30f7f83cfc..fc6814c888 100644 --- a/src/connections/sources/catalog/libraries/website/javascript/upgrade-to-ajs2.md +++ b/src/connections/sources/catalog/libraries/website/javascript/upgrade-to-ajs2.md @@ -52,7 +52,7 @@ If the source you intend to upgrade uses the in-domain instrumentation as well a Analytics.js 2.0 removes inbuilt quotes from cookie values, resulting in a different format for the `ajs_anonymous_id` value when compared to Analytics.js Classic. Though you can retrieve cookie values with [standard supported functions](/docs/connections/sources/catalog/libraries/website/javascript/identity/#retrieve-the-anonymous-id), you'll need to configure your environment to accept the new format if your implementation relies on accessing the cookie value directly. -If you have configured different sources for different subdomains of your website, ensure that you switch them to Analytics 2.0 at the same time - this will guarantee that subdomain tracking will not break. In cases when you need to gradually update to Analytics 2.0, the `utility` [plugin](/docs/connections/sources/catalog/libraries/website/javascript/index/#example-plugins) will help match the ajs_anonymous_id cookie format and ensure that users are consistently identified across your subdomains. +If you configured different sources for different subdomains of your website, switch them to Analytics 2.0 at the same time. Switching them at the same time ensures that subdomain tracking won't break. In cases when you need to gradually update to Analytics 2.0, the `utility` [plugin](/docs/connections/sources/catalog/libraries/website/javascript/index/#example-plugins) can help match the `ajs_anonymous_id` cookie format and ensure that users are consistently identified across your subdomains. ### Using a strict content security policy on the page From ead5439cec99fcd0aca7e164f33d40d7b63f661f Mon Sep 17 00:00:00 2001 From: kdaswani <49517136+kdaswani@users.noreply.github.com> Date: Tue, 8 Feb 2022 10:19:05 -0800 Subject: [PATCH 17/17] Update DC floodlight note on other field mapping --- .../destinations/catalog/doubleclick-floodlight/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connections/destinations/catalog/doubleclick-floodlight/index.md b/src/connections/destinations/catalog/doubleclick-floodlight/index.md index bbec141382..9eb66b5d8f 100644 --- a/src/connections/destinations/catalog/doubleclick-floodlight/index.md +++ b/src/connections/destinations/catalog/doubleclick-floodlight/index.md @@ -53,7 +53,7 @@ https://ad.doubleclick.net/ddm/activity/src=1234567;cat=fghij456;type=abcde123;d ### Accessing Other Event Properties -By default, the Segment event property you define for each custom variable mapping will be matched against the property values found in the `properties` object of a `track` event. You can, however, use JSON style dot-notation-accessors wrapped in double curly brackets to map to **any** property in the event's raw payload to your custom variables. For example, some acceptable values could be `context.campaign.name`, `context.userAgent`, or `anonymousId` (inside of the double curly brackets). You can find the complete structure of a standard Segment event payload [here](/docs/connections/spec/common/#structure). +By default, the Segment event property you define for each custom variable mapping will be matched against the property values found in the `properties` object of a `track` event. On device-mode web, you can use JSON style dot-notation-accessors wrapped in double curly brackets to map to other fields in the event's raw payload to your custom variables. For example, some acceptable values could be `{{userId}}`, `{{anonymousId}}`, or `{{context.page.referrer}}`. You can find the complete structure of a standard Segment event payload [here](/docs/connections/spec/common/#structure). Please note that some fields may not be available for mapping, such as fields within the `context.campaign` object. **Note:** `dc_rdid` and `dc_lat` are automatically collected by our mobile libraries and `ord` is uniquely generated for each event.