Oracle Milestone 5 - Non-Loyalty Store Coupon Redemption

What is the problem?

Burger King Germany is currently experiencing resistance from the franchisee to enroll to the Loyalty program. According to KJR mandates, and to protect the guest experience, we won’t be launching Loyalty if we don’t have more than 80% of the stores with Loyalty activated. In this scenario, we have still have 20% of the system that is not connected with loyalty and therefore there will be implications with coupon redemption in-store. Below a potential solution is summarized for guests that will enter a non-loyalty store and want to redeem a coupon with the loyalty code.

The above problem already exists in the UK and we will continue seeing it in future markets as we launch the Loyalty program across the world. For this reason, we need to think about a solution that is scalable and can be used in multiple markets and by multiple vendors.

 

What is our proposal?

Assumptions:

  • In our platform, FZ's will control which stores have In-Store Loyalty enabled using the toggle Has In Restaurant Loyalty in RAM which is synced with the Sanity toggle in the Restaurant document Has Loyalty. Please view images below.

 

RAM Portal

 

Corresponding Sanity Configuration

 

Kiosk vendors will need to differentiate the UI of the Kiosk, depending if a store has loyalty or does not have loyalty enabled.

Scenario 1: User with Loyalty enabled in their App, goes to a Non-Loyalty Store and redeems a coupon in-store

In this scenario, guests pre-select offers on the RBI app and continue their journey in the Kiosk by scanning the generated code. Then they add more offers to their basket by choosing those offers in the app and scanning them.

Steps

Expected results (Kiosk)

Expected results (RBI app)

Loyalty API usage (Kiosk)

Steps

Expected results (Kiosk)

Expected results (RBI app)

Loyalty API usage (Kiosk)

Guest opens an offer on the RBI app

  • N/A

  • Offer page is displayed:

  • No action

Guest taps “Use at restaurant”

  • N/A

  • Offer is added to the guest’s pre-selection

  • A unique offer code is generated

  • No action

Guest taps on the Kiosk screen to start a new order

  • User clicks on Offers tab and prepares to scan offer

  • N/A

  • No action

Guest either scans the offer’s QR code or inputs 6 digit code into Kiosk

Note: if a user pre-selects more offers in the app, all pre-selected offers will show in the Kiosk screen after scanning with an option for the user to customize each offer

  • User sees pop up in Kiosk letting user know they will not gain/burn any loyalty points with this order

  • Offer(s) are shown on the Kiosk and guest has an option to customize

  • Modal is shown to guest confirming that the offer has been added to cart

  • Loyalty points balance is not updated, since the guest is scanning an offer

  • Offer pre-selection is cleared

  • Call the Identify endpoint, which will return the Loyalty User ID, a list of offer(s) pre-selected, loyalty points balance and a transaction ID

  • The Loyalty API will know this store does not have Loyalty enabled

Guest customizes offers at will and adds to basket

  • These offer(s) are incrementally added to the cart and do not replace any of the existing cart items

  • No action

Guest opens a second offer on the RBI app, chooses to redeem in restaurant

  • No action

  • Only the second offer is added to the guest’s pre-selection

  • A unique offer code is generated

  • No action

Guest either scans the offer’s QR code or inputs 6 digit code into Kiosk

  • Offer(s) are shown on the Kiosk and guest has an option to customize

  • Modal is shown to guest confirming that the offer has been added to cart

  • Loyalty points balance is not updated, since the guest is scanning an offer

  • Offer pre-selection is cleared

  • Keep track of the current basket contents including offers

  • Void the previous transaction

  • Call the Identify endpoint again, which will create a new transaction ID and selected offers

  • Update the basket with the offers returned

Guest customizes offers at will and adds to basket

  • These offer(s) are incrementally added to the cart and do not replace any of the existing cart items

  • No action

  • Call the Transaction Validate endpoint to verify that the current basket selection is valid

  • Note that the call above may return errors. Please refer to Loyalty API v1 - Error Responses for details.

Guest checks out and pays

  • Order number shows up on the screen

  • Receipt is printed

  • Guest does NOT sees updated points balance

  • Points do not change from before and after the order was placed

 

  • Call the Transaction Update endpoint with a status of CLAIMED to complete the order

  • After this call it is not possible to modify the loyalty transaction anymore

  • Once this transaction is CLAIMED no Loyalty points are updated in the user’s balance

Scenario 2: User with Loyalty enabled in their App, goes to a Non-Loyalty Store and attempts to redeem a Reward in store

In this scenario, guests pre-select rewards on the RBI app and continue their journey in the Kiosk by scanning the generated code. Because the store does not support Loyalty, rewards cannot be added to the guest’s basket.

Steps

Expected results (Kiosk)

Expected results (RBI app)

Loyalty API usage (Kiosk)

Steps

Expected results (Kiosk)

Expected results (RBI app)

Loyalty API usage (Kiosk)

Guest opens an offer on the RBI app

  • N/A

  • Reward page is displayed:

  • No action

Guest taps “Redeem In restaurant”

  • N/A

  • Reward is added to the guest’s pre-selection

  • A unique Reward code is generated

  • No action

Guest taps on the Kiosk screen and scans the reward’s QR code or inputs 6 digit code into Kiosk

  • User sees pop up in Kiosk letting user Rewards are not supported in this store and they will not gain/burn any loyalty points with this order

  • Nothing changes on order / cart that was gathered in the Kiosk

  • Modal is shown to guest but no Reward is added to Kiosk cart

  • Call the Identify endpoint, which will return the Loyalty User ID, a list of Reward(s) pre-selected, loyalty points balance and a transaction ID

  • The Kiosk vendor will know this store does not have Loyalty enabled and show error message to let user know they cannot redeem rewards

  • If a transaction is sent with a reward in cart for a store that does not have in-store loyalty, the Loyalty APIs will return an error

Scenario 3: User with Loyalty enabled in their App, goes to a Non-Loyalty Store and scans My Code screen

In this scenario, guests attempt to scan their Loyalty code in the kiosk and are presented with a message informing them that loyalty is not available in this store.

Steps

Expected results (Kiosk)

Expected results (RBI app)

Loyalty API usage (Kiosk)

Steps

Expected results (Kiosk)

Expected results (RBI app)

Loyalty API usage (Kiosk)

Guest opens Loyalty Code on the RBI app

  • N/A

  • Not

Guest taps on the Kiosk screen and scans the Loyalty QR code or inputs 6 digit code into Kiosk

  • User sees pop up in Kiosk letting user know loyalty is not supported in this store and they will not gain/burn any loyalty points with this order

  • Nothing changes on order / cart that was gathered in the Kiosk

  • Modal is not shown to guest

  • Call the Identify endpoint, which will return the Loyalty User ID, loyalty points balance and a transaction ID

  • The Kiosk vendor will know this store does not have Loyalty enabled and show error message to let user know they cannot scan their loyalty code

Changes Needed

  • Loyalty to differentiate between non-loyalty stores and loyalty stores using Sanity Restaurant Document

  • Loyalty API to not update loyalty points for non-loyalty stores

  • Loyalty API to return error if a reward is added in Transaction Validate or Transaction Update Call for non-loyalty stores

  • All orders with coupons will be identifiable in-store

LOE

  • 6 weeks of Dev work + 2 weeks testing / debugging issues

  • 8 weeks total