diff --git a/Gemfile.lock b/Gemfile.lock index aa0e23bb46d..deb3a677a1d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -123,8 +123,7 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - rexml (3.3.2) - strscan + rexml (3.3.9) rouge (4.2.1) ruby2_keywords (0.0.5) safe_yaml (1.0.5) @@ -139,7 +138,6 @@ GEM rack-protection (= 4.0.0) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - strscan (3.1.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) tilt (2.3.0) diff --git a/_docs/_api/api_limits.md b/_docs/_api/api_limits.md index 896e83f2a37..47e3da02269 100644 --- a/_docs/_api/api_limits.md +++ b/_docs/_api/api_limits.md @@ -27,7 +27,7 @@ Requests not listed in this table share a total default rate limit of 250,000 re | Request Type | Default API Rate Limit | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [`/users/track`][10] | **Requests:** 50,000 requests per minute.

**Batching:** 75 events, 75 purchases, and 75 attributes per API request. See [Batching User Track requests](#batch-user-track) for more.

**Limits for Monthly Active Users CY 24-25:** see [Monthly Active Users CY 24-25 limits]({{site.baseurl}}/api/endpoints/user_data/post_user_track/#monthly-active-users-cy-24-25) | +| [`/users/track`][10] | **Requests:** 3,000 requests per three seconds.

**Batching:** 75 events, 75 purchases, and 75 attributes per API request. See [Batching User Track requests](#batch-user-track) for more.

**Limits for Monthly Active Users CY 24-25:** see [Monthly Active Users CY 24-25 limits]({{site.baseurl}}/api/endpoints/user_data/post_user_track/#monthly-active-users-cy-24-25) | | [`/users/export/ids`][11] | 250 requests per minute. | | [`/users/delete`][12]
[`/users/alias/new`][13]
[`/users/alias/update`][45]
[`/users/identify`][14]
[`/users/merge`][44] | 20,000 requests per minute, shared between the endpoints. | | [`/users/external_id/rename`][20] | 1,000 requests per minute. | diff --git a/_docs/_api/endpoints/user_data/post_user_track.md b/_docs/_api/endpoints/user_data/post_user_track.md index 63c1524a82b..d36bb4796c4 100644 --- a/_docs/_api/endpoints/user_data/post_user_track.md +++ b/_docs/_api/endpoints/user_data/post_user_track.md @@ -17,7 +17,7 @@ description: "This article outlines details about the Track user Braze endpoint. > Use this endpoint to record custom events and purchases and update user profile attributes. {% alert note %} -Braze processes the data passed via API at face value, and customers should only pass deltas (changing data) to minimize unnecessary data point consumption. To read more, refer to [Data points]({{site.baseurl}}/user_guide/data_and_analytics/data_points/). +Braze processes the data passed through API at face value, and customers should only pass deltas (changing data) to minimize unnecessary data point consumption. To read more, refer to [Data points]({{site.baseurl}}/user_guide/data_and_analytics/data_points/). {% endalert %} {% apiref postman %}https://documenter.getpostman.com/view/4689407/SVYrsdsG?version=latest#4cf57ea9-9b37-4e99-a02e-4373c9a4ee59 {% endapiref %} diff --git a/_docs/_api/objects_filters/messaging/android_object.md b/_docs/_api/objects_filters/messaging/android_object.md index 2f86749543f..8e1aeeb8749 100644 --- a/_docs/_api/objects_filters/messaging/android_object.md +++ b/_docs/_api/objects_filters/messaging/android_object.md @@ -41,7 +41,7 @@ You must include an Android push object in `messages` if you want users you have } ``` -You can send "Big Picture" notifications by specifying the key `appboy_image_url` in the `extra` object. The value for `appboy_image_url` should be a URL that links to where your image is hosted. Images need to be cropped to a 2:1 aspect ratio and should be at least 600 x 300 px. Images used for notifications will only display on devices running Jelly Bean (Android 4.1) or higher. +You can send "Big Picture" notifications by specifying the key `appboy_image_url` in the `extra` object. The value for `appboy_image_url` should be a URL that links to where your image is hosted. Images need to be cropped to a 2:1 aspect ratio and should be at least 600 x 300 px. ### Additional parameter details diff --git a/_docs/_developer_guide/platform_wide/feature_flags/about.md b/_docs/_developer_guide/platform_wide/feature_flags/about.md index 2f32a77e0ff..bed9cc78e44 100644 --- a/_docs/_developer_guide/platform_wide/feature_flags/about.md +++ b/_docs/_developer_guide/platform_wide/feature_flags/about.md @@ -169,7 +169,7 @@ if (featureFlag?.enabled) { We'll set up our A/B test in a [Feature Flag Experiment]({{site.baseurl}}/developer_guide/platform_wide/feature_flags/experiments/). -Now, 50% of users will see the old experience, while the other 50% will see the new experience. We can then analyze the two variants to determine which checkout flow resulted in a higher conversion rate. +Now, 50% of users will see the old experience, while the other 50% will see the new experience. We can then analyze the two variants to determine which checkout flow resulted in a higher conversion rate. {% multi_lang_include metrics.md metric='Conversion Rate' %} ![A feature flag experiment splitting traffic into two 50 percent groups.]({% image_buster /assets/img/feature_flags/feature-flag-use-case-campaign-experiment.png %}) diff --git a/_docs/_hidden/pricing/message_credits_delta_a3sy.md b/_docs/_hidden/pricing/message_credits_delta_a3sy.md index 94558551996..811642010e6 100644 --- a/_docs/_hidden/pricing/message_credits_delta_a3sy.md +++ b/_docs/_hidden/pricing/message_credits_delta_a3sy.md @@ -2665,6 +2665,13 @@ Column definitions are as follows: 0.58 5.80 + + LINE + 1 + All regions + 0.15 + 0.15 + {: .reset-td-br-1 .reset-td-br-2} {% enddetails %} diff --git a/_docs/_hidden/pricing/message_credits_gamma_0dhr.md b/_docs/_hidden/pricing/message_credits_gamma_0dhr.md index a5fe2e38d07..2ab718486a5 100644 --- a/_docs/_hidden/pricing/message_credits_gamma_0dhr.md +++ b/_docs/_hidden/pricing/message_credits_gamma_0dhr.md @@ -2665,6 +2665,13 @@ Column definitions are as follows: 0.58 5.80 + + LINE + 1 + All regions + 0.15 + 0.15 + {: .reset-td-br-1 .reset-td-br-2} {% enddetails %} diff --git a/_docs/_hidden/pricing/message_credits_lambda_k5gh.md b/_docs/_hidden/pricing/message_credits_lambda_k5gh.md index f60aaca19c5..7b3bc0de168 100644 --- a/_docs/_hidden/pricing/message_credits_lambda_k5gh.md +++ b/_docs/_hidden/pricing/message_credits_lambda_k5gh.md @@ -2665,6 +2665,13 @@ Column definitions are as follows: 0.58 5.80 + + LINE + 1 + All regions + 0.15 + 0.15 + {: .reset-td-br-1 .reset-td-br-2} {% enddetails %} diff --git a/_docs/_hidden/pricing/message_credits_sigma_pow2.md b/_docs/_hidden/pricing/message_credits_sigma_pow2.md index 5825ee4a8ed..423d2858980 100644 --- a/_docs/_hidden/pricing/message_credits_sigma_pow2.md +++ b/_docs/_hidden/pricing/message_credits_sigma_pow2.md @@ -2665,6 +2665,13 @@ Column definitions are as follows: 0.58 4.35 + + LINE + 1 + All regions + 0.15 + 0.15 + {: .reset-td-br-1 .reset-td-br-2} {% enddetails %} diff --git a/_docs/_hidden/pricing/message_credits_theta_d9kw.md b/_docs/_hidden/pricing/message_credits_theta_d9kw.md index 748c26c96d2..818aa9cd224 100644 --- a/_docs/_hidden/pricing/message_credits_theta_d9kw.md +++ b/_docs/_hidden/pricing/message_credits_theta_d9kw.md @@ -2665,6 +2665,13 @@ Column definitions are as follows: 0.58 5.80 + + LINE + 1 + All regions + 0.15 + 0.15 + {: .reset-td-br-1 .reset-td-br-2} {% enddetails %} diff --git a/_docs/_hidden/private_betas/post_track_users_bulk.md b/_docs/_hidden/private_betas/post_track_users_bulk.md new file mode 100644 index 00000000000..bcd2549309a --- /dev/null +++ b/_docs/_hidden/private_betas/post_track_users_bulk.md @@ -0,0 +1,264 @@ +--- +nav_title: "POST: Track Users (Bulk)" +layout: api_page +page_type: reference +hidden: true +permalink: /track_users_bulk/ +description: "This article outlines details about the Track users (bulk) endpoint." +--- + +{% api %} +# Track users (bulk) +{% apimethod post core_endpoint|https://www.braze.com/docs/core_endpoints %} +/users/track/bulk +{% endapimethod %} + +> Use this endpoint to record custom events and purchases and update user profile attributes in bulk. + +{% alert important %} +This endpoint is currently in beta. Contact your Braze account manager if you're interested in participating in the beta. +{% endalert %} + +## When to use this endpoint + +Similar to the [POST: Track users endpoint]({{site.baseurl}}/api/endpoints/user_data/post_user_track/#prerequisites), you can use this endpoint to update user profiles. However, this endpoint is better suited for making bulk updates: + +- **Larger requests:** This endpoint allows for 10,000 users per request, meaning that you have to make fewer requests to achieve your bulk update needs. +- **Prioritization:** During peak traffic conditions, requests from `/users/track` will be prioritized over requests from `/users/track/bulk`. Using both endpoints provides you with more control over data ingestion. + +Note that user updates to this endpoint will not trigger any action-based campaigns or action-based Canvases, trigger any exception events, or track towards conversion metrics. User updates to this endpoint are available for segmentation and personalization. + +Consider using this endpoint when you're backfilling many user profiles during onboarding or syncing large amounts of user profiles as part of a daily sync. + +## Prerequisites + +To use this endpoint, you’ll need an API key with the `users.track.bulk` permission. + +If you're using the API for server-to-server calls, you may need to allowlist the endpoint (for example, `rest.iad-01.braze.com`) if you're behind a firewall. Refer to the [endpoints per instance]({{site.baseurl}}/api/basics#endpoints) for more information. + +## Rate limit + +We apply a base speed limit of 5 requests per second to this endpoint for all customers. + +Each `/users/sync/bulk` request has a payload limit of 4 MB, and may contain up to 10,000 event, attribute, or purchase objects. + +Each object (event, attribute, and purchase arrays) can update one user each, meaning up to 10,000 different users can be updated in a single request. A single user profile can be updated with up to 100 objects in a single request. + +{% alert note %} +If you need your rate limit increased, reach out to your customer success manager. +{% endalert %} + + +## Request body + +``` +Content-Type: application/json +Authorization: Bearer YOUR_REST_API_KEY +``` + +```json +{ + "attributes": (optional, array of attributes object), + "events": (optional, array of event object), + "purchases": (optional, array of purchase object), +} +``` + +### Request parameters + +{% alert important %} +For each request component listed in the following table, one of `external_id`, `user_alias`, `braze_id`, `email`, or `phone` is required. +{% endalert %} + +| Parameter | Required | Data Type | Description | +| --------- | ---------| --------- | ----------- | +| `attributes` | Optional | Array of attributes objects | See [user attributes object]({{site.baseurl}}/api/objects_filters/user_attributes_object/) | +| `events` | Optional | Array of event objects | See [events object]({{site.baseurl}}/api/objects_filters/event_object/) | +| `purchases` | Optional | Array of purchase objects | See [purchases object]({{site.baseurl}}/api/objects_filters/purchase_object/) | +{: .reset-td-br-1 .reset-td-br-2 .reset-td-br-3 .reset-td-br-4} + +## Example requests + +### Bulk update 10,000 user profiles in one request + +You can update up to 10,000 user profiles. Here’s a truncated example where the request consists of 10,000 attribute objects: + +```json +curl --location --request POST 'https://rest.iad-01.braze.com/users/track/bulk' \ +--header 'Content-Type: application/json' \ +--header 'Authorization: Bearer YOUR_REST_API_KEY' \ +--data-raw '{ + "attributes": [ + { + "external_id": "user1", + "string_attribute": "fruit", + "boolean_attribute_1": true, + "integer_attribute": 25, + "array_attribute": [ + "banana", + "apple" + ] + }, + { + "external_id": "user2", + "string_attribute": "vegetables", + "boolean_attribute_1": false, + "integer_attribute": 25, + "array_attribute": [ + "broccoli", + "asparagus", + ] + }, + +... + + { + "external_id": "user10000", + "string_attribute": "nuts", + "boolean_attribute_1": true, + "integer_attribute": 25, + "array_attribute": [ + "hazelnut", + "pistachio" + ] + } + ] +}' +``` + +Here’s an example where the request consists of both attribute and event objects: + +```json +curl --location --request POST 'https://rest.iad-01.braze.com/users/track/bulk' \ +--header 'Content-Type: application/json' \ +--header 'Authorization: Bearer YOUR_REST_API_KEY' \ +--data-raw '{ + "attributes": [ + { + "external_id": "user1", + "string_attribute": "fruit", + "boolean_attribute_1": true, + "integer_attribute": 25, + "array_attribute": [ + "banana", + "apple" + ] + } + ], + "events": [ + { + "external_id": "user2", + "app_id": "your_app_identifier", + "name": "rented_movie", + "time": "2022-12-06T19:20:45+01:00", + "properties": { + "release": { + "studio": "FilmStudio", + "year": "2022" + }, + "cast": [ + { + "name": "Actor1" + }, + { + "name": "Actor2" + } + ] + } + }, +... + { + "external_id": "user10000", + "app_id": "your_app_identifier", + "name": "rented_movie", + "time": "2023-09-16T08:00:00+10:00", + "properties": { + "release": { + "studio": "FilmStudio", + "year": "1988" + }, + "cast": [ + { + "name": "Actor1" + }, + { + "name": "Actor2" + } + ] + } + } + ] +}' +``` + +## Responses + +### Successful messages + +Successful messages will be met with the following response: + +```json +{ + "message": "success", + "attributes_processed": (optional, integer), if attributes are included in the request, this will return an integer of the number of external_ids with attributes that were queued to be processed, + "events_processed": (optional, integer), if events are included in the request, this will return an integer of the number of events that were queued to be processed, + "purchases_processed": (optional, integer), if purchases are included in the request, this will return an integer of the number of purchases that were queued to be processed, +} +``` + +#### Successful message with non-fatal errors + +If your message is successful but has non-fatal errors, such as one invalid event object out of a long list of events, then you will receive the following response: + +```json +{ + "message": "success", + "errors": [ + { + + } + ] +} +``` + +### Message with fatal errors + +If your message has a fatal error, you will receive the following response: + +```json +{ + "message": , + "errors": [ + { + + } + ] +} +``` + +#### Fatal error response codes + +For status codes and associated error messages that will be returned if your request encounters a fatal error, refer to [Fatal errors and responses]({{site.baseurl}}/api/errors/#fatal-errors). + +If you receive the error `provided external_id is blacklisted and disallowed`, your request may have included a “dummy user.” For more information, refer to [Spam blocking]({{site.baseurl}}/user_guide/data_and_analytics/user_data_collection/user_archival/#spam-blocking). + +## Frequently asked questions + +### Should I use this endpoint or regular `/users/track`? + +We recommend using both. + +For large user profile backfills and syncs where triggering for action-based campaigns and Canvases, conversion tracking, and exception events are not needed, use `/users/track/bulk`. + +For real-time use cases, use the `/users/track` endpoint. + +### What identifiers can I use in /users/track/bulk? + +One of `external_id`, `braze_id`, `user_alias`, `email`, or `phone` is required. For more examples, refer to our documentation for [user attributes object]({{site.baseurl}}/api/objects_filters/user_attributes_object/), [events object]({{site.baseurl}}/api/objects_filters/event_object/), or [purchases object]({{site.baseurl}}/api/objects_filters/purchase_object/). + +### Can I include attributes, events, and purchases in 1 request? + +Yes. You cam construct your request with any amount of attributes, events, and purchase objects up to 10,000 objects per request. + + +{% endapi %} diff --git a/_docs/_partners/home.md b/_docs/_partners/home.md index c6935f9ee22..793cabd96a9 100644 --- a/_docs/_partners/home.md +++ b/_docs/_partners/home.md @@ -304,6 +304,8 @@ valid_partner_list: url: /docs/partners/data_and_infrastructure_agility/advertising/liveramp/ - name: Inbox Monster url: /docs/partners/data_and_infrastructure_agility/analytics/inbox_monster/ +- name: SEEN + url: /docs/partners/message_personalization/dynamic_content/seen - name: Dixa url: /docs/partners/message_orchestration/additional_channels/instant_chat/dixa/ --- diff --git a/_docs/_partners/message_personalization.md b/_docs/_partners/message_personalization.md index eb4775724ad..dda43c887d4 100644 --- a/_docs/_partners/message_personalization.md +++ b/_docs/_partners/message_personalization.md @@ -75,4 +75,6 @@ valid_partner_list: url: /docs/partners/message_personalization/dynamic_content/niftyimages/ - name: Future Anthem url: /docs/partners/message_personalization/dynamic_content/future_anthem +- name: SEEN + url: /docs/partners/message_personalization/dynamic_content/seen --- diff --git a/_docs/_partners/message_personalization/dynamic_content.md b/_docs/_partners/message_personalization/dynamic_content.md index cb659a90e64..2e1055d2024 100644 --- a/_docs/_partners/message_personalization/dynamic_content.md +++ b/_docs/_partners/message_personalization/dynamic_content.md @@ -49,4 +49,6 @@ valid_partner_list: url: /docs/partners/message_personalization/dynamic_content/niftyimages - name: Future Anthem url: /docs/partners/message_personalization/dynamic_content/future_anthem +- name: SEEN + url: /docs/partners/message_personalization/dynamic_content/seen --- diff --git a/_docs/_partners/message_personalization/dynamic_content/seen.md b/_docs/_partners/message_personalization/dynamic_content/seen.md new file mode 100644 index 00000000000..c42908797ba --- /dev/null +++ b/_docs/_partners/message_personalization/dynamic_content/seen.md @@ -0,0 +1,127 @@ +--- +nav_title: SEEN +article_title: SEEN +description: "SEEN’s personalized videos has helped companies reach unmatched attention and engagement, throughout their customer journey." +alias: /partners/seen/ +page_type: partner +search_tag: Partner +--- + +# SEEN + +> [SEEN’s](https://seen.io/) personalized videos has helped companies reach unmatched attention and engagement, throughout their customer journey. Personalize videos with SEEN in three simple steps:
1. Design a video around your data.
2. Personalize it at scale in the cloud.
3. Distribute it where it works best. + +## Use cases + +SEEN offers automated video personalization across the entire the customer journey. Common uses include Onboarding, Loyalty, Sign-ups/Conversion, and Win-back/Anti-churn. + +## Prerequisites + +Before you start, you'll need the following: + +| Prerequisite | Description | +|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------| +| A SEEN campaign | A SEEN campaign is required to take advantage of this partnership. | +| Data source | You'll need to send data to SEEN to personalize your videos. Make sure you have all relevant data available in Braze, and that you pass data with **braze_id** as the identifier. | +| Braze Data Transformation Webhook URL | Braze Data Transformation will be used to reformat the incoming data from SEEN so it can be accepted by Braze’s /users/track endpoint. | + +## Rate limit + +The SEEN API currently accepts 1000 calls per hour. + +## Integrating SEEN with Braze + +In the following example, we will be sending users data to SEEN for video generation, and receiving a unique landing page link and a unique, personalized thumbnail back to Braze for distribution. This example uses a POST webhook to send data to SEEN, and data transformation to receive the data back to Braze. If you have multiple video campaigns with SEEN, repeat the process to connect Braze with all video campaigns. + +{% alert tip %} +If you experience any issues, you can reach out to your Customer Success Manager at SEEN for assistance. +{% endalert %} + +### Step 1: Create a webhook campaign + +Create a new [Webhook Campaign](https://www.braze.com/docs/user_guide/message_building_by_channel/webhooks) in Braze. Give your campaign a name, then refer to the following table to compose your webhook: + +{% raw %} + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDetails
Webhook URLUse the following webhook URL. You will receive your campaign_slug from SEEN to call the correct endpoint.

https://api.seen.io/v1/campaigns/{campaign_slug}/receivers/
HTTP MethodUse the POST method.
Request bodyEnter your request body in raw text similar to the following.

[
+    {
+    "first_name":"{{${first_name}}}",
+    "last_name":"{{${last_name}}}",
+    "email":"{{${email_address}}}",
+    "customer_id":"{{${braze_id}}}"
+    }
+]

For more information, see SEEN API.
Request headersUse the following information to fill out your request headers:
- Authorization: Token {token}
- Content-Type: application/json

You will receive your Authentication Token from SEEN.
+{% endraw %} +{: .reset-td-br-1 .reset-td-br-2} + +You can now test the webhook with a user by switching to the **Test** tab. + +If everything works as intended, go to Braze and set the rate at which the campaign sends to 10 **messages per minute**. This ensures that you won't exceed the SEEN's rate limit of 1000 calls per hour. + +### Step 2: Create data transformation + +1. Create new [Custom Attribute](https://www.braze.com/docs/user_guide/data_and_analytics/custom_data/custom_attributes/#managing-custom-attributes) fields for `landing_page_url` and `email_thumbnail_url`. These are the two attributes we will be using in this example. +2. Open [Data Transformation](https://www.braze.com/docs/user_guide/data_and_analytics/data_transformation/creating_a_transformation/#prerequisites) tool under **Data Settings**, and select **Create transformation**. +3. Give your transformation a name, then choose **Start from scratch** and set **Destination** to **POST: Track users**. +4. Select **Share your Webhook URL with SEEN**. +5. You can use the code below as the starting point for the transformation: + +```javascript +let brazecall = { + "attributes": [ + { + "braze_id": payload.customer_id, + "_update_existing_only": true, + "landing_page_url": payload.landing_page_url, + "email_thumbnail_url": payload.email_thumbnail_url + } + ] +}; +return brazecall; +``` +{% alert note %} +If you want to include other data, make sure to include those as well. Remember to discuss with SEEN as well so that the callback payload includes all needed fields. +{% endalert %} + +{: start="6"} +6. Send a test payload to the provided endpoint. If you want to use the callback payload defined in [the SEEN documentation](https://docs.seen.io/api-documentation/ntRoJJ3rXoHzFXhA94JiHB/callbacks/k9DEbcgkq3Vr2pxbHyPQbp), you can send this yourself via [Postman](https://www.postman.com/) or another similar service: + +```json +{ + "customer_id": "101", + "campaign_slug": "onboarding", + "landing_page_url": "your.subdomain.com/v/12345", + "video_url": "https://motions.seen.io/298abdcf-1f0f-46e7-9c26-a35b4c1e83cc/d3c1dffdf063986ad521a63e3e68fd7d1100c90a/output.m3u8", + "thumbnail_url": "https://motions.seen.io/298abdcf-1f0f-46e7-9c26-a35b4c1e83cc/d3c1dffdf063986ad521a63e3e68fd7d1100c90a/thumbnail.jpg", + "email_thumbnail_url": "https://motions.seen.io/298abdcf-1f0f-46e7-9c26-a35b4c1e83cc/d3c1dffdf063986ad521a63e3e68fd7d1100c90a/email_thumbnail.jpg" + +} +``` + +{: start="7"} +7. Select **Validate** to make sure everything works as intended. +8. If everything worked as intended, select **Save** and **Activate**. diff --git a/_docs/_user_guide/data_and_analytics/report_metrics.md b/_docs/_user_guide/data_and_analytics/report_metrics.md index 812a1c1019c..b0bbd4b0a27 100644 --- a/_docs/_user_guide/data_and_analytics/report_metrics.md +++ b/_docs/_user_guide/data_and_analytics/report_metrics.md @@ -872,9 +872,9 @@ Email, LINE All {% endapitags %} -{% multi_lang_include metrics.md metric='Unique Recipients' %} This number is received from Braze.

Because a viewer can be a unique recipient every day, you should expect this to be higher than Unique Impressions. +{% multi_lang_include metrics.md metric='Unique Recipients' %} -The number of unique daily recipients, or users who received a particular message in a day. This number is received from Braze and is based on the `user_id`. +Because a viewer can be a unique recipient every day, you should expect this to be higher than Unique Impressions. This number is received from Braze and is based on the `user_id`. Calculation: Count diff --git a/_docs/_user_guide/data_and_analytics/reporting/retention_reports.md b/_docs/_user_guide/data_and_analytics/reporting/retention_reports.md index 8a36c5f7b44..35c5d75fd78 100644 --- a/_docs/_user_guide/data_and_analytics/reporting/retention_reports.md +++ b/_docs/_user_guide/data_and_analytics/reporting/retention_reports.md @@ -138,7 +138,7 @@ Some use cases for showing performance by variant: - **Date Range**: Set on the Campaign or Canvas **Details** page, the date range includes all users who received the campaign or Canvas during this window, and of those users, the data of those that performed their retention event during the date range will appear in the report. Each day the retention rate, percentage change from the control group, and confidence are measured. - **Retention Rate**: Shows the retention rate by variant. The retention rate is equivalent to the number of users that performed the retention event divided by the total users that have received the campaign or Canvas. - **Percentage Change from Control**: Quantifies the percentage change per variant from the control group. -- **Confidence**: Braze compares each variant's conversion rate against the control's conversion rate with a statistical procedure called a Z Test to calculate a [confidence]({{site.baseurl}}/user_guide/intelligence/multivariate_testing/#understanding-confidence) percentage. This percentage signifies how confidently that variant is performing better than the control group. +- **Confidence**: {% multi_lang_include metrics.md metric='Confidence' %} Braze compares each variant's conversion rate against the control's conversion rate with a statistical procedure called a Z Test to calculate a [confidence]({{site.baseurl}}/user_guide/intelligence/multivariate_testing/#understanding-confidence) percentage. - **Units**: You can adjust the units between the percentage of users and the number of users in the upper right-hand corner of the chart, specific units may prove to be more significant when judging the impact of a campaign or Canvas. - **Variant Graph**: This graph summarizes the results by variant for the selected date range. diff --git a/_docs/_user_guide/data_and_analytics/reporting/viewing_and_understanding_segment_data.md b/_docs/_user_guide/data_and_analytics/reporting/viewing_and_understanding_segment_data.md index fddcd843aeb..29780096d39 100644 --- a/_docs/_user_guide/data_and_analytics/reporting/viewing_and_understanding_segment_data.md +++ b/_docs/_user_guide/data_and_analytics/reporting/viewing_and_understanding_segment_data.md @@ -29,14 +29,42 @@ When you turn [analytics tracking on for a segment][9], Braze will let you view You will see the following segment statistics, which update in real-time as you add or delete filters: -| Statistic | Description | -| --------- | --- | -| **Total Users** | How many users your app has in total. | -| **Selected Users** | How many users are in your segment and what percentage of your total user base they are. | -| **LTV (Paying Users)** | The lifetime value per user (LTV) in this segment and the lifetime value per paying user in this segment. The LTV is calculated by dividing your lifetime revenue by lifetime users. | -| **Emailable (Opted In)** | Emailable refers to all users who can be reached via email. These users have provided an email address and have not opted out. Opted In refers to users who have explicitly opted in to email. Due to [spam regulations][6], it's often a good idea to ask your users to explicitly opt-in by implementing a double opt-in policy where users must click a link in an initial confirmation email. To encourage more users to opt-in, you can target a message at [those who have neither opted in nor out][5]. | -| **Push Enabled (Opted In)** | Push enabled refers to the number of users with at least one push token. Some users may have multiple push tokens (for example, if they own an iPhone and iPad), so the number of push notifications you send to this segment may be greater than the number of "push enabled" users. Opted In refers to the number of users who have explicitly opted in to push notifications. Users must always explicitly opt-in for you to send them pushes. | -{: .reset-td-br-1 .reset-td-br-2} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StatisticDefinition
Total UsersHow many users your app has in total.
Selected UsersHow many users are in your segment and what percentage of your total user base they are.
LTV (Paying Users)The lifetime value per user (LTV) in this segment and the lifetime value per paying user in this segment. The LTV is calculated by dividing your lifetime revenue by lifetime users.
Emailable (Opted-In){% multi_lang_include metrics.md metric='Emailable' %} Due to spam regulations it's often a good idea to ask your users to explicitly opt-in by implementing a double opt-in policy where users must click a link in an initial confirmation email. To encourage more users to opt-in, you can target a message at those who have neither opted in nor out.
Push Enabled (Opted-In)Push enabled refers to the number of users with at least one push token. Some users may have multiple push tokens (for example, if they own an iPhone and iPad), so the number of push notifications you send to this segment may be greater than the number of "push enabled" users. Opted In refers to the number of users who have explicitly opted in to push notifications. Users must always explicitly opt-in for you to send them pushes.
### Segment Insights @@ -108,8 +136,6 @@ You won’t be able to access data from time periods prior to when this feature If your company turned on this feature on October 2, and turned on analytics tracking for Segment B on October 3, then you can only see data for Segment B for the campaigns and Canvases that recorded metrics after October 3. - - [1]: {% image_buster /assets/img_archive/segments.png %} [2]: {% image_buster /assets/img_archive/A_Tracking.png %} [3]: {{site.baseurl}}/user_guide/engagement_tools/segments/creating_a_segment/#creating-a-segment diff --git a/_docs/_user_guide/engagement_tools/campaigns/building_campaigns/rate-limiting.md b/_docs/_user_guide/engagement_tools/campaigns/building_campaigns/rate-limiting.md index 1c446f24b78..85d9f16c3da 100644 --- a/_docs/_user_guide/engagement_tools/campaigns/building_campaigns/rate-limiting.md +++ b/_docs/_user_guide/engagement_tools/campaigns/building_campaigns/rate-limiting.md @@ -40,7 +40,7 @@ Let's say we've created a segment named "Retargeting Filter Showcase" with a fil If you have other more targeted segments receiving notifications recently, you may not want your users to be targeted by more generic campaigns directed at this segment. Appending the "Last Received Push Campaign" filter to this segment, the user has ensured that if they've received another notification in the past 24 hours, they will slide out of this segment for the next 24 hours. If they still meet the other criteria of the segment 24 hours later and haven't received any more notifications they will slide back into the segment. -![][1] +![Segment Details section with the "Last Received Any Message" segment filter highlighted.][1] Appending this filter to all segments targeted by campaigns would cause your users to receive a maximum of one push every 24 hours. You could then prioritize your messaging by ensuring that your most important messages are delivered before less important messages. @@ -48,7 +48,7 @@ Appending this filter to all segments targeted by campaigns would cause your use In the **Target Users** step of your campaign composition, you can also limit the total number of users that will receive your message. This serves as a check that's independent of your campaign filters, allowing you to freely segment users without worrying about over-spamming. -![][2] +![Audience Summary with a selected checkbox for limiting the number of people who receive the campaign.][2] By selecting the maximum user limit, you can limit the rate at which your users receive notifications on a per-channel basis or globally across all message types. @@ -80,7 +80,7 @@ When targeting users during campaign creation, you can navigate to **Target Audi Note that non-rate-limited campaigns may exceed these delivery limits. However, be aware that messages will be aborted if they’re delayed 72 hours or more due to a low rate limit. If the rate limit is too low, the creator of the campaign will receive alerts in the dashboard and by email. -![][3] +![Audience Summary with a selected checkbox for limiting the rate at which the campaign will end, and rate being 500,000 per minute.][3] As another example, if you are trying to send out 75,000 messages with a 10,000-per-minute rate limit, the delivery will be spread out over 8 minutes. Your campaign will deliver no more than 10,000 messages for each of the first seven minutes, and 5,000 over the last minute. @@ -152,7 +152,7 @@ This time frame can be measured in minutes, days, weeks (seven days), or months, Each line of frequency caps will be connected using the `AND` operator, and you can add up to 10 rules per workspace. In addition, you may include multiple caps for the same message types. For instance, you can cap users to no more than one push per day and no more than three pushes per week. -![][14] +![Frequency capping section with lists of campaigns and Canvases that rules will and will not apply to.][14] ### Delivery rules @@ -168,7 +168,7 @@ By default, new campaigns and Canvases that do not obey frequency caps will also This behavior changes the default behavior when you turn off frequency capping for a campaign or Canvas. The changes are backward compatible and do not impact messages that are currently live. {% endalert %} -![][18] +![Delivery Controls section with Frequency Capping turned on.][18] Different channels within a multichannel campaign will individually count the frequency cap. For instance, if you create a multichannel campaign with both push and email and have frequency capping set up for both of those channels, then the push will count toward one push campaign and the email message will count toward one email message campaign. The campaign will also count toward one "campaign of any type." If users are capped to one push and one email campaign per day and a user receives this multichannel campaign, then they will no longer be eligible for push or email campaigns for the rest of the day (unless a campaign ignores frequency capping rules). @@ -197,7 +197,7 @@ This scenario uses the following frequency capping rules: - A user triggers the same campaign, `Campaign ABC` three times over the course of a week. - This user triggers `Campaign ABC` once on Monday, once on Wednesday, and once on Thursday. -![]({% image_buster /assets/img/standard_rules_fnfn.png %}) +![Frequency Capping section with the rule of sending no more than 2 push notification campaigns/Canvas steps from all campaigns/Canvas steps to a user every 1 week.]({% image_buster /assets/img/standard_rules_fnfn.png %}) **Then, the expected behavior is that:** @@ -218,7 +218,7 @@ You can also combine regular frequency capping with frequency capping by tags. C 1. No more than three push notification campaigns or Canvas components per week from all campaign and Canvas steps.
**AND** 2. No more than two push notification campaign or Canvas components per week with the tag `promotional`. -![][12] +![Frequency Capping section with two rules limiting how many push notification campaigns/Canvases can be sent to a user every 1 week.][12] As a result, your users will receive no more than three campaign sends per week over all campaigns and Canvas steps and no more than two push notification campaigns or Canvas components with the tag `promotional`. @@ -233,7 +233,7 @@ When rules conflict, the most restrictive, applicable frequency capping rule wil 1. No more than one push notification campaign or Canvas component per week from all campaign and Canvas components.
**AND** 2. No more than three push notification campaigns or Canvas components per week with the tag `promotional`. -![][11] +![Frequency Capping section with conflicting rules to limit how many push notification campaigns/Canvas steps are sent to a user every 1 week.][11] In this example, your user will not receive more than one push notification campaign or Canvas components with the tag "promotional" in a given week, because you've specified that users should not receive more than one push notification campaign or Canvas component from all campaigns and Canvas components. In other words, the most restrictive applicable frequency rule is the rule that will be applied to a given user. diff --git a/_docs/_user_guide/message_building_by_channel/push/android/rich_notifications.md b/_docs/_user_guide/message_building_by_channel/push/android/rich_notifications.md index 905d9c382c9..6abe10c75db 100644 --- a/_docs/_user_guide/message_building_by_channel/push/android/rich_notifications.md +++ b/_docs/_user_guide/message_building_by_channel/push/android/rich_notifications.md @@ -19,7 +19,6 @@ tool: ## Requirements - Android rich notifications aren't available when creating a quick push campaign. -- The expanded notification view is only available on devices using Jelly Bean (Android 4.1) or later. If a user's device isn't running on these systems, they will not see the notification image. - Android Extended Notification images must be 2:1 ratio, but do not have a size limit. - Android also allows for setting a separate image for the standard notification view. These are the recommended size images: - Small: 512x256 diff --git a/_includes/contributing/templates/basic.md b/_includes/contributing/templates/basic.md index e5ccf2ba73d..7f2b8bf4786 100644 --- a/_includes/contributing/templates/basic.md +++ b/_includes/contributing/templates/basic.md @@ -10,7 +10,7 @@ description: "SHORT_DESCRIPTION." alias: /OPTIONAL_SHORT_ARTICLE_TITLE/ page_type: reference layout: OPTIONAL_LAYOUT_FILE -— +--- # ARTICLE_TITLE diff --git a/_includes/contributing/templates/explanation.md b/_includes/contributing/templates/explanation.md index 66496893b22..16f6f94eeda 100644 --- a/_includes/contributing/templates/explanation.md +++ b/_includes/contributing/templates/explanation.md @@ -8,7 +8,7 @@ description: "SHORT_DESCRIPTION." alias: /OPTIONAL_SHORT_ARTICLE_TITLE/ page_type: reference layout: OPTIONAL_LAYOUT_FILE -—-- +--- # ARTICLE_TITLE diff --git a/_includes/contributing/templates/how_to_guide.md b/_includes/contributing/templates/how_to_guide.md index 09baf54203f..3bd52608672 100644 --- a/_includes/contributing/templates/how_to_guide.md +++ b/_includes/contributing/templates/how_to_guide.md @@ -8,7 +8,7 @@ description: "SHORT_DESCRIPTION." alias: /OPTIONAL_SHORT_ARTICLE_TITLE/ page_type: reference layout: OPTIONAL_LAYOUT_FILE -—-- +--- # ARTICLE_TITLE diff --git a/_includes/contributing/templates/reference.md b/_includes/contributing/templates/reference.md index 66496893b22..16f6f94eeda 100644 --- a/_includes/contributing/templates/reference.md +++ b/_includes/contributing/templates/reference.md @@ -8,7 +8,7 @@ description: "SHORT_DESCRIPTION." alias: /OPTIONAL_SHORT_ARTICLE_TITLE/ page_type: reference layout: OPTIONAL_LAYOUT_FILE -—-- +--- # ARTICLE_TITLE diff --git a/_includes/contributing/templates/technology_partner.md b/_includes/contributing/templates/technology_partner.md index 3b15fd6a753..9c4e367b55b 100644 --- a/_includes/contributing/templates/technology_partner.md +++ b/_includes/contributing/templates/technology_partner.md @@ -10,13 +10,12 @@ description: "SHORT_DESCRIPTION." alias: /partners/PARTNER_NAME/ page_type: partner search_tag: Partner -layout: dev_guide --- - + # ARTICLE_TITLE - + > DESCRIPTION. ADDITIONAL_INFORMATION. @@ -42,7 +41,7 @@ If you are using the [older navigation]({{site.baseurl}}/navigation), you can cr CONTENT. - + ## Integrating TOOL_NAME CONTENT. @@ -87,7 +86,7 @@ CONTENT. CONTENT. - + ## Customizing TOOL_NAME ### Step 1: ACTION_TO_COMPLETE @@ -98,7 +97,7 @@ CONTENT. CONTENT. - + ## Using TOOL_NAME with Braze ### Step 1: ACTION_TO_COMPLETE diff --git a/_includes/contributing/templates/tutorial.md b/_includes/contributing/templates/tutorial.md index 3feb650a753..6b1d30883b9 100644 --- a/_includes/contributing/templates/tutorial.md +++ b/_includes/contributing/templates/tutorial.md @@ -8,7 +8,7 @@ description: "SHORT_DESCRIPTION." alias: /OPTIONAL_SHORT_ARTICLE_TITLE/ page_type: tutorial layout: OPTIONAL_LAYOUT_FILE -—-- +--- # Tutorial: WHAT_THE_USER_WILL_DO diff --git a/_includes/header.html b/_includes/header.html index 450267cea47..fecb3eebd56 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -55,7 +55,7 @@