Order-Level Content → Menu → Legacy Offers
Overview
What are Legacy Offers?
Picker Aspects are the different criteria a Guest can choose from to result in the combo or item which they would like to order.
What is this for?
Offer are what we use for coupons and discounts. Offers typically have their own plus in their respective POS map. (Note: The diff for discount values are and handled by RBI)
Step-by-step
The list below includes all the required fields to create offers.
Note: Examples are written in italics
a. Menu → Offer → Duplicate a similar offer (or any offer, or create a new one)
Name
Image (App & Kiosk for the future)
Description
More info
Option → if it is a menu item, insert it here; if it is a combo, come back to this later when combo is created
Short Code
UI Pattern → Standard Offer
RuleSet: if more than one rule, group them all in the RuleSet “And”
Offer Price: £1.99 would be 199
10. Vendor Configs: for now, you can insert ‘ignore’ in all fields, but change to real PLUs before POS integrated version launch!
b. Menu → Combo → Duplicate a similar combo (or any offer combo, or create a new one)
Name: ‘Offer – [Offer name]”
Main Item: Insert the main item of the offer – if offer is “£3.99 WHOPPER® Meal” Main item is Whopper. If the offer has 2 main items – “2 WHOPPER® Meals”, insert “Combo Item – item_52947” as the main item
Options:
Combo Sides (this is a dummy for NCR config)
Here we will include whatever combo slots we will create for this specific offer
“£3.99 WHOPPER® Meal” - we will have 3 additional combo slots: Medium Combo Drinks and Regular Fries
“2 WHOPPER® Meals” – we will have 6 additional combo slots: “Offer – Whopper”, “Offer – Whopper”, Regular Fries, Regular fries, Medium Combo Drinks and Medium Combo Drinks
Notes:
Make sure they are not the same combo slot, i.e., you can duplicate the combo slot and add both to the Combo
In order to show modifier options, make sure to go to each “Offer – Whopper” combo slots and change UI Pattern to “show”
4. Vendor Configs: for now you can insert ‘ignore’ in all fields except for Tablet which has to have the combo item id as a constant PLU (retrieve it from the path or by clicking on the 3 vertical dots at the top right → inspect → id), but make sure you update the POS Vendors’ PLUs before POS integrated version launch!
c. Menu → Combo Slot → Duplicate a similar combo slot (or any offer combo slot, or create a new one)
Name
Minimum Amount
Maximum Amount
Options: Minimum Amount, Maximum Amount, Default Amount & Menu Item
Vendor Configs: ‘ignore’ in all fields
d. Menu → Combo → Add the Combo Slots you have created on the Options field (b.4.3.ii)
e. Menu → Offer → Add the Combo item you have created on the Options field (a.5)
f. Features Offers → Main → Menu Configurations → Sorted Offers
Add the offer you’ve just created to display it on the Website & App!
Title | Description | Notes | Example URL | Image | Used By |
---|---|---|---|---|---|
Name | This is the main text that will be used to display the offer | ||||
Header Super Text | |||||
Localized Image | This is the main image that will display on for the offer | ||||
Description | This is the text that will tell the user what the offers items are | ||||
More Info | Anything entered here will show as the offer's disclaimer when the LaunchDarkly flag that enables custom disclaimers is set to true. If you add links to this text, you MUST set them to open in a new tab. | ||||
How To Redeem | |||||
Option | |||||
Short Code | |||||
Daypart | |||||
UI Pattern ( Standard Offer ) | |||||
UI Pattern ( Locked Offer Progress Bar ) | |||||
UI Pattern ( Locked Offer List ) | |||||
Locked Offers Panel | |||||
RuleSet | |||||
Incentives | |||||
For Support | |||||
Offer Price | This is the total price for this offer | ||||
Market Price | This is the market price for this offer and can be used to show how much the items are being discounted | ||||
Vender Configs | This is where the the PLU configuration is handled. Take a look at the vendor configs section of the docs for more information on this | ||||
Background Image | This is the background image that the localized image sits on top of | ||||
Depreciated | These are fields that we have used in the past. We need keep them for old versions of the sites could still be cached |
Rulesets
* = pending
Date-Band - Set the start and end date of when the coupon is redeemable. Outside of these dates, the coupon will be filtered from the UI.
Day-of-week-Band - Boolean flag per day of the week. Those days that are set to true will be the only days on which the coupon shows on the UI / can be redeemed.
Time-Band - Set the start and end time of when the coupon is redeemable. Outside of these times, the coupon will be filtered from the UI – working to make it so that the coupon isn’t actually filtered, but rather shows a modal that says not redeemable until ____. Also outstanding work: must be able to read the local time of the restaurant / user to properly assess this prop
Cool-Down - Seconds until the user can redeem this offer again. Default is 0, so if not included, the user can reorder right away.
Limit - User can redeem this coupon ___ times per day/week/month/year. Must always specify the time interval here. If limit is not included, the the number of redemptions is unlimited.
Restaurant Group Restrictions: This will display the offer only in the store group that has been assigned to the offer.
Cart Property - The cart must satisfy the following restrictions in order for the offer to be redeemable (we check rulesets at price call and commit call). If you set the negate
flag on this rule, it makes it so that these properties must not be true in order for the offer to be redeemable
subtotal rule - cart subtotal must be [< , >, =, etc.] ___ cents
service mode - service mode must be set to one of the following
CATERING_PICKUP CATERING_DELIVERY CURBSIDE DELIVERY DRIVE_THRU EAT_IN TAKEOUT
platform - specify that user’s platform must be one of the following:
app kiosk web
loyalty - (this will prob be deprecated.. turned out to have no use case for it.. or at least we do not yet)
Payment-Card-Type - specify that user’s payment must be one of the following:
APPLE_PAY AMEX DINERSCLUB DISCOVER GOOGLE_PAY JCB MASTERCARD VISA
First-Order - Boolean flag, if true offer is only redeemable to users that have never purchased before
Requires Assignment - this is a string field.. write anything in this field to make it apply (“ “ works). If true, the coupon has to be assigned via Braze webhook in order to appear for a guest to redeem. All Tim Hortons offers must have this rule.
Allow redemption without Login - this is a string field.. write anything in this field to make it apply (“ “ works). If true, users can redeem without having to sign in
AND - All of the sub-requirements of an AND rule must be true in order for the offer to be redeemable
OR - one of the sub-requirements of an OR rule must be true in order for the offer to be redeemable
*Order-History
- this is equivalent to a quest or locked offer - we are basing eligibility based on PAST purchase behavior.
All order-history offers must either have a date band (did the user satisfy the criteria between these dates?) or a past seconds requirement (did the user satisfy the criteria in the last week?)
Between dates are inclusive of the dates listed
past n seconds is calculated in SECONDS so you must convert if you want to calculate days, weeks
If the order of events matters, set the
sequence matters
flag to trueAll top level rules will have an accompanying checkbox on the UI
Coupon Options (What is the benefit of the coupon?) - BK & PLK
'For Two' Coupons
Option is a combo with Sicom/NCR PLUs the same as the offer PLU. Carrols should have PLU type 'ignore'. Set the main item to 'Combo item' and set the item that comes with the coupon in the comboslots. WE CANNOT REPEAT A COMBOSLOT HERE!!! You must duplicate if you want to reuse preexisting work.
'1 item' Coupons
Option should be a combo with Sicom/NCR PLUs the same as the offer PLU. Carrols should have PLU type 'ignore'. Please set the main item to 'Combo item' and set the item that comes with the coupon in the comboslots. Use $1 Large Fries as a template
'Preexisting Combo' Coupons
Option should be a combo with Sicom/NCR plus the same as the offer PLU. Carrols should have PLU of the actual combo as it is sold normally. Please set the main item to the normal combo main item, and add the side/drink in the comboslots. Use $5 Crispy Chicken Meal as a template
'Wacky New Combo' Coupons
For any combo of items that we do not normally sell together, ie: 2 oreo shakes. Option should be a combo with Sicom/NCR plus the same as the offer PLU. Carrols should have PLU type 'ignore'. Please set the main item to 'Combo item' and set the items that come with the coupon in the comboslots. Use 2 oreo shakes as a template.
'In Restaurant Redemption Only' Coupons
Set the option to ‘Dummy Item for Restaurant Only Coupon -- DO NOT USE’ (_id: Lj4sBINzEO93P6iQCkyFCf)
'$ Off' Coupons
John/Jorge to detail how to set these up
Offer setup - TH
Content Side - Sanity Fields of Importance:
Sanity ID
ID in Sanity MUST match the Offer ID that Avanade uses. It is important to us that this is a unique ID - please create the offer in Sanity first then give the ID that was generated to the Avanade team to add to the database. You can find sanity ID for an offer by clicking on the 3 dots at the top right corner of the screen, and clicking inspect.
Once created the Sanity ID can be recorded on the loyalty offers sheet [To be deprecated following engine UI development]
Name, Image Description
All localized fields, may want to limit characters to 1-2 lines to avoid overcrowding
More Info
Legal terms go here, localized
How To Redeem
Steps users must follow in order to redeem an offer in store (or through the app, for that matter). Localized
Option
This is a reference field. You should ALWAYS link to Activation Offer
Short Code
You may use this to record the internal short code associated with the offer (ie: 1201A). Note - this is not the Sanity ID and Avanade must use the GUID mentioned above in the DB
Offer Price
Set to the offer price in cents: $1.99 = 199
Vendor Config
Must set all to ignore
Rulesets
Date-Band - Set the start and end date of when the coupon is redeemable. Outside of these dates, the coupon will be filtered from the UI. This date is what we show as the expiration date on the offer card
Requires Assignment - this is a string field. Write anything in this field to make it apply (“ “ works, your name works, literally anything in this field). If this is applied, the offer is not universal and will only be shown to users who have the offer assigned to their loyalty card
Adding the offer to AppData
Once the offer has been created, go to the AppData doc on the left panel in Sanity. Under the Menu Configurations drop down, you will find ‘Sorted Offers’. You must add the offer to sorted offers in order for it to render on the UI. You can control the order offers appear by moving them higher/lower in the list
CAN vs. USA
Canada and the US do not share a Sanity dataset. You must create any offers that apply to the different countries in the appropriate dataset.
For CA, create them here: https://staging.menu.th.rbi.tools/desk/menu;offer
For US, create them here: https://staging.menu.th.us.rbi.tools/desk/menu;offer
Debugging:
The offer shows up, but get an error that ‘cannot checkout with this offer’
Look at the GQL call in the network tab to find orderId
Look to datadog to see when the error occurred
Likely an issue with how the TPN was set in the connector
The offer doesnt show up
Check users loyalty card
Check evaluateUserOffers call