Optimum way to automate sending of Birthday rewards
Hi Bonfire Community, Posting here to get some guidance and understand the best way to execute the dissemination of Coupon Codes for a Birthday Canvas. I want to send users on their birthday a Coupon Code which they can redeem for a free item. What you reckon is the optimum way to implement so the reward is automatically triggered and sent to users.16Views0likes1CommentDaily Canvas Monitoring Alerts
Hello group! I'd love to be able to get a daily report that shows yesterday's volume of communications (or users) for a given canvas. Ideally over time. The clear use case is when something breaks and canvas volume goes through the roof or just stops altogether. As of two years ago, this wasn't possible, but not sure if that has changed. And if it hasn't changed, has anyone found an elegant solution here? Thanks!15Views0likes1CommentUpdating Default Attributes through Canvas User Update
Hi, I'm trying to make use of an Custom Event Properties to update User profiles through a Canvas.In this Canvas, i've set users to enter when they perform a custom event, with the following canvas entry properties: Name Email Phone number I was able to successfully update the Custom Attributes using this method. However, my goal is to be able to update the default user profile attributes instead. Anyone have any idea how i can do this? Below is a screenshot of the User Update step in my canvas, for reference:43Views0likes3CommentsIgnore hour of timestamp custom attribute in segment filters
Hello, I'm using a "time" formatted custom attribute which has as value for each user a timestamp (precise date AND hour). I'm using this custom attribute in segments, using the filter "more than" or "less than" X days ago. I know the "day" in this filter means +24 hours (and not calendar days), so the hour in the custom attribute impacts actually a lot the eligibility. For example, my canvas using the segment starts at 11:30am every day and takes users with the custom attribute more than 1 day ago (because I want to make users entered if they had the custom attribute performed at least yesterday or before). However, if the the value of this custom attribute was indeed the previous day but at 12:30pm, then it means the user is not eligible to enter the canvas. So it's not answering my need. Apart from changing the starting hour of my canvas, or the "X" days in my filter (to 0 instead of 1), I was wondering is there a way to "ignore" the hour in a timestamp in a segment filter to just take into account the date, when my custom attribute is build with both? Thank you!29Views0likes1CommentConversion Rate over 100%?
Hi, I'm struggling to understand the performance of one of our Canvases. I have both the conversion event and exit criteria as "any purchase", and users cannot re-enter the canvas. When I analyze the variants, I see more conversions than entries, leading to a conversion rate over 100%, which shouldn't be possible. Does anybody know what could be going wrong here? thanks!64Views0likes5CommentsScratch & Win Campaign as a Modal Popup in Mobile App (android and iOS)
Hi All, I am new to braze and creating a campaign named "Scratch&Win" for my mobile app users on Android and iOS native apps which are using Braze SDKs for corresponding mobile apps. I am writing a Custom Code with HTML, CSS and javascript. I have uploaded all the required JS files (I am also using dependent js file for scratchpad wScratchPad.js), CSS and images in Braze Media Manager and using those links or Src added my code like below, but when launching to the app none of the images are loading in actual mobile apps. <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width" /> <title>wScratchPad</title> <link rel="Stylesheet" type="text/css" href="./demo/demo.css" /> <script type="text/javascript" src="https://braze-images.com/appboy/communication/assets/code_assets/files/66b261c5153e07005904b258/original.js?1722966469"></script> </head> <body> <div id="scratchModal" class="modal"> <div class="modal-content"> <span class="close" onclick="closeModal()">×</span> <div id="content"> <div class="content-box"> <div id="demo2" class="scratchpad"></div> <div class="modal-actions"> <input type="button" value="Reset" onclick="$('#demo2').wScratchPad('reset');"/> <input type="button" value="Clear" onclick="$('#demo2').wScratchPad('clear');"/> <input type="button" value="Enable" onclick="$('#demo2').wScratchPad('enable', true);"/> <input type="button" value="Disable" onclick="$('#demo2').wScratchPad('enable', false);"/> </div> </div> </div> </div> </div> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f0f0f0; } .modal { display: none; position: fixed; z-index: 1000; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); overflow: auto; justify-content: top; align-items: top; } .modal-content { position: relative; background-color: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 0 15px rgba(0,0,0,0.3); width: 90%; max-width: 400px; /* Adjusted max-width for mobile */ box-sizing: border-box; margin: auto; } .close { position: absolute; top: 10px; right: 10px; font-size: 24px; color: #333; cursor: pointer; } .scratchpad { width: 100%; height: 350px; margin-top:15px; margin-right: 15px; margin-bottom:15px; margin-left:1px; } .modal-actions input { margin-right: 10px; font-size: 14px; /* Adjusted font size for mobile */ } @media (max-width: 600px) { .modal-content { width: 95%; /* Slightly larger width for smaller screens */ } .scratchpad { height: 200px; /* Further reduce height on very small screens */ } .modal-actions input { font-size: 12px; /* Smaller font size on smaller screens */ margin-right: 5px; /* Reduced margin for small screens */ } } </style> <script type="text/javascript" src="https://braze-images.com/appboy/communication/assets/code_assets/files/66b261b6a936b7005981d63f/original.js?1722966454"></script> <script type="text/javascript"> // Show modal on page load window.onload = function() { showModal(); }; // Show modal function showModal() { document.getElementById('scratchModal').style.display = 'flex'; initializeScratchCard(); } // Close modal function closeModal() { document.getElementById('scratchModal').style.display = 'none'; } function initializeScratchCard() { $('#demo2').wScratchPad({ size: 40, bg: 'https://braze-images.com/appboy/communication/assets/image_assets/images/....../original.jpg?1722941151', fg: 'https://braze-images.com/appboy/communication/assets/image_assets/images/...../original.jpg?1722937484', 'cursor': 'url("https://braze-images.com/appboy/communication/assets/image_assets/images/..../original.png?1717067516") 5 5, default', scratchMove: function (e, percent) { if (percent > 70) { this.clear(); } } }); } </script> </div> </div> </body> </html> Please help me for resolving this issue. Thanks, Sanjay Jaiswal34Views0likes2CommentsFAQ: What Is A Race Condition?
A common question we get at Braze is "what is a race condition?" A race condition is a concept where an outcome is dependent on the sequence or timing of other events. For example, if the desired sequence of events is “Event A” and then “Event B”, but sometimes “Event A” comes first and other times “Event B” comes first—that is known as a race condition. You can learn more about Race conditions in our Documentation page here. If you have tips of your own for spotting or avoiding race conditions, share them in the thread!181Views1like0CommentsFAQ: What is expected Canvas re-eligibility behavior?
Currently, re-eligibility for variants is tied to Canvas entry rather than message receipt. Users who enter a Canvas and do not receive any messages will not be able to re-enter the Canvas unless re-eligibility is enabled. If re-eligibility for a Canvas is set to shorter than the duration of the Canvas, it is possible for users to enter the Canvas more than once, which can lead to misleading behaviour for Canvases that use IAMs with particularly long delays. Since multiple Canvas IAMs could be triggered by the same session start, the end user could potentially have the experience of receiving the same message repeatedly, if a specific step renders faster than others.487Views0likes3Comments- 383Views0likes2Comments