Contents
Purpose
This document aims to explain in detail how BK ES will migrate their Loyalty system from SessionM to RBI. Prior understanding of the RBI Loyalty API is required.
Assumptions
List of assumptions coming from the original RBIberia plans.
SessionM is a third party Loyalty engine (like Salesforce is for CRM - Session M is for Loyalty)
The BK ES apps (native) are provided by Airtouch, using BE integrations with Homeria for guests (including authentication) and delivery orders (menu, restaurant, prices), and with Airtouch for collection orders
Both the Airtouch and Homeria back end services integrate with SessionM for loyalty
User data and authentication of users is entirely managed by Homeria
WinRest and Tillster call SessionM directly for Loyalty. There is no integration with Airtouch or Homeria
Kiosks do not show the guest’s Loyalty Tier
Rewards are configured in SessionM (Rewards Store)
Offers/Coupons are just PLU’s with a set price, and they are not available on delivery so they are only configured in Airtouch
Website is Homeria (both FE and BE)
It is possible to authenticate SessionM transactions using an email address (there is an endpoint to retrieve the SessionM ID using an email address)
The Airtouch app does not allow scanning offers to add them to the basket on the Kiosk or POS. Instead, there is only a static loyalty code to authenticate.
To add offers while ordering on a kiosk, guests need to be logged into the Airtouch app, see the offer code and input it in the kiosk
Decisions
List of decisions taken during the planing process in coordination between RBI and RBIberia.
Points expiry
Under discussion
Loyalty Tiers
We will disable downgrades from Superking to King during the migration, to avoid guest frustration
We propose during the migration (Phase 1-3) to change the requirements for users to move from Loyalty Tier 2 to Loyalty Tier 1 in Sanity to 6 months. In this way, no users would be downgraded Tiers during the migration. In this way, no Development work would be needed.
Cancellations and refunds
There are no gaps with cancellations and refunds initiated by the POS, since they will use both the RBI and SessionM API’s
For cancellations and refunds currently handled in SessionM, during the transition period support staff will continue to use SessionM and, in addition, will repeat the operation on the RBI Support Tool
This will guarantee that cancellations and refunds result in the same loyalty points balance in both RBI and SessionM
Phase 0 - Test RBI Earning
Change of plans in March: loyalty data will not be kept synchronized as guests will continue to burn on Session M, but in RBI we will only record earning transactions.
The purpose of this phase is to test that the RBI Loyalty API is able to handle the load by processing earn transactions.
Plan
Expected to run for weeks
Guests will earn
but not burn. Change of plans in March: guests will continue to burn, because RBIberia does not want to risk a drop in sales by preventing burn.All clients apps (Airtouch, Homeria, Winrest, Tillster) will continue to record loyalty transactions on Session M
(no integration to RBI loyalty yet).Change of plans in March: all client apps will also send earn transactions to RBI (burn transactions will not be sent). The purpose is to test the RBI system’s performance and ensure that we record loyalty transactions accurately.
During this phase, we will compare transactions between RBI and SessionM (although the loyalty points balance is not expected to match).
Guest and loyalty data (including email addresses, loyalty points balance, loyalty tier and loyalty transactions) will be migrated from SessionM to RBI, as a one time data dump and load before Phase 0 startsChange of plans in March: loyalty data is no longer required before Phase 0.
Guest accounts will be synced between RBI and Homeria
The above will be accomplished by extracting data into a CSV file which will be obtained from Homeria and placed in an RBI S3 bucket, and ingested with a script. SessionM data is not required.
At the end of the data migration above, RBI will provide a list of RBI Cognito ID’s, RBI Loyalty ID’s and email addresses for all users, to be imported by Homeria
The RBI app is not live (all guests will use the Airtouch app)
There will be no users created via the RBI apps (only via the Airtouch app or Homeria website)
When users are created in the Airtouch app or the Homeria website, Homeria will call the RBI Create User endpoint to ensure that users are in sync.
Scenarios
Mobile order, click & collect
Guest opens the Airtouch app
Guest fills their basket and completes the order
As part of the order process, the app calls the Airtouch BE
Airtouch BE updates SessionM
Airtouch BE updates RBI Loyalty
Call
Identify
by sending the email addressCall
Transaction Update
(CLAIMED
) with an empty basket
Mobile order, delivery
Guest opens the Airtouch app
Guest fills their basket and completes the order
As part of the order process, the app calls the Homeria BE
Homeria BE updates SessionM
Airtouch BE updates RBI Loyalty
Call
Identify
by sending the email addressCall
Transaction Update
(CLAIMED
) with an empty basket
In-store order on a Tillster kiosk
Guest opens the Airtouch app or Homeria website and asks to show the Loyalty ID / SessionM ID
Airtouch app / Homeria should already have the static SessionM ID in the session
Guest scans the SessionM ID on the Tillster kiosk and authenticates (this returns the email address)
Guest fills up their basket and completes the order (this retrieves the basket price calculation)
Tillster creates a loyalty transaction in SessionM
Tillster creates a loyalty transaction in RBI
Call
Identify
by sending the email addressCall
Transaction Update
(CLAIMED
) with an empty basket
In-store order on WinRest POS
Guest opens the Airtouch app or Homeria website and asks to show the Loyalty ID / SessionM ID
Airtouch app / Homeria should already have the static SessionM ID in the session
Guest scans the SessionM ID on the scanner and authenticates (this returns the email address)
Guest/operator completes the order (this retrieves the basket price calculation)
WinRest creates a loyalty transaction in SessionM
WinRest creates a loyalty transaction in RBI
Call
Identify
by sending the email addressCall
Transaction Update
(CLAIMED
) with an empty basket
Changes needed
RBI |
|
SessionM |
|
Homeria |
|
Airtouch |
|
Tillster |
|
WinRest |
|
Phase 1 - Test RBI OTP
Plan
All client apps will start using the RBI OTP to identify guests
Loyalty transactions will be done primarily on SessionM and after
All client apps will use primarily RBI Loyalty, and SessionM as a backup in case a rollback is needed. Both RBI and SessionM should have the same loyalty transactions and points balance to start with
This requires Airtouch, Homeria (because of the website and app/delivery), Tillster and WinRest to modify their software to introduce RBI Loyalty in addition to SessionM
Airtouch app will use RBI loyalty codes for in-store identification, instead of SessionM codes
Guests will continue to earn but not burn
No rewards will be shown (reward configuration in Sanity will be done on phase 2)
Registration and authentication on the Airtouch app or Homeria website will continue to use Homeria
New users created on the app or website will be synchronized from Homeria to RBI using an existing endpoint (same that we used for BK PT)
The endpoint above will be modified to respond with the RBI Loyalty ID, which will then be stored in Homeria to be used when calling the RBI Loyalty API. The RBI Loyalty ID will then be made available to the Airtouch app
Scenarios
Mobile order, click & collect
Guest opens the Airtouch app
App calls Get User Details from RBI, using the RBI Loyalty ID as input. This endpoint will retrieve loyalty points balance and loyalty tier
Guest fills their basket and completes the order
As part of the order process, the app calls the Airtouch BE
Airtouch BE updates RBI Loyalty:
Call
Create Transaction
using the RBI Loyalty IDCall
Transaction Update
with an empty basked and set the transaction toCLAIMED
Airtouch BE updates SessionM:
(optional) Call SessionM to retrieve the SessionM ID using the email address as input
Replicate the transaction above in SessionM
Mobile order, delivery
Guest opens the Airtouch app
App calls Get User Details from RBI, using the RBI Loyalty ID as input. This endpoint will retrieve loyalty points balance and loyalty tier
Guest fills their basket and completes the order
As part of the order process, the app calls the Homeria BE
Homeria BE updates RBI Loyalty:
Call
Create Transaction
using the RBI Loyalty IDCall
Transaction Update
with an empty basked and set the transaction toCLAIMED
Homeria BE updates SessionM:
Retrieve the SessionM ID(this step is not needed because the Homeria BE stores the guest’s SessionM ID)Replicate the transaction above in SessionM
Website order (only delivery allowed)
Guest opens the Homeria website
Website calls Get User Details from RBI, using the RBI Loyalty ID as input. This endpoint will retrieve loyalty points balance and loyalty tier
Guest fills their basket and completes the order
As part of the order process, the website calls the Homeria BE
Homeria BE updates RBI Loyalty:
Call
Create Transaction
using the RBI Loyalty IDCall
Transaction Update
with an empty basked and set the transaction toCLAIMED
Homeria BE updates SessionM:
Retrieve the SessionM ID(this step is not needed because the Homeria BE stores the guest’s SessionM ID)Replicate the transaction above in SessionM
In-store order on a Tillster kiosk
Guest opens the Airtouch app or Homeria website and asks to show the Loyalty ID
Airtouch app / Homeria website calls the RBI Get Loyalty OTP endpoint
Guest scans the OTP on the Tillster kiosk
Tillster calls the RBI Identify endpoint and uses the OTP to authenticate the guest
Tillster calls the RBI Get User endpoint in the background to retrieve the email address in the session (to use later during the SessionM transaction)
If guest wants to use offers, they would input their code directly in the kiosk. These offers are not configured in RBI
Guest completes the order
Tillster updates RBI Loyalty (this should be similar to what happens today on PLK ES):
Call
Transaction Validate
Call
Transaction Update
(CLAIMED
) with an empty basket
Tillster updates SessionM:
(optional) Call SessionM to retrieve the SessionM ID using the email address as input
Replicate the transaction above in SessionM
In-store order on a WinRest POS
Guest opens the Airtouch app or Homeria website and asks to show the Loyalty ID
Airtouch app / Homeria website calls the RBI Get Loyalty OTP endpoint
Guest scans the OTP on the WinRest QR reader
WinRest calls the RBI Identify endpoint and uses the OTP to authenticate the guest
WinRest calls the RBI Get User endpoint in the background to retrieve the email address in the session (to use later during the SessionM transaction)
If guest wants to use offers/cupones, they would ask the cashier to add the offer code to their order. These offers are not configured in RBI
Guest completes the order
WinRest updates RBI Loyalty (this should be similar to what happens today on PLK ES):
Call
Transaction Validate
Call
Transaction Update
(CLAIMED
) with an empty basket
WinRest updates SessionM:
(optional) Call SessionM to retrieve the SessionM ID using the email address as input
Replicate the transaction above in SessionM
Changes needed
RBI |
|
Airtouch |
|
Homeria |
|
Tillster |
|
WinRest |
|
Phase 2 (rewards)
Plan
Configure and enable RBI rewards in Sanity
(To be confirmed) Configure the generic PLU for rewards
RBI rewards become active on the Airtouch app and the Homeria website, and guests are able to redeem them when making collection, delivery or in-store orders (requires the app to retrieve rewards from RBI)
Reward redemption should use the RBI Loyalty API version that was customized for RBIberia: RBI Iberia | Loyalty POS/Kiosk Integration
Client apps no longer call SessionM (these will be disabled using feature flags)
Changes needed
Note that while retrieving rewards is only needed for Phase 2, we will ask for the development to happen during Phase 1 to avoid multiple app releases.
RBI |
|
Airtouch |
|
Homeria |
|
Tillster |
|
WinRest |
|
Phase 3 (white label app migration)
Plan
The BK ES website (currently Homeria) will be replaced with the RBI white label website by pointing the BK ES domain(s) to RBI servers
The BK ES app (currently Airtouch) will be replaced with the RBI white label app by releasing to the App Store and Google Play Store
Over time, older versions of the Airtouch app will stop being used
When the number of Airtouch users reaches an agreed threshold, force update will be enabled
When the number of Airtouch users reaches an agreed threshold, Homeria and Airtouch back end systems can be switched off
Changes needed
RBI |
|
Airtouch |
|
Homeria |
|
Tillster |
|
WinRest |
|
RBI Endpoints
The RBI Loyalty API endpoints are documented here: Loyalty API
In addition, these will also be used:
Name | Input | Output |
---|---|---|
Get Loyalty OTP | RBI Loyalty ID | Loyalty One Time Passcode (valid for 15 minutes, suitable to call the Identify endpoint) |
Get User Details | RBI Loyalty ID | Email address, loyalty points balance and tier of the guest |
Open questions
Whether expiring points is required, and if so in which phase(s)
Points expiry
Proposal not to expire points either on RBI or SessionM, to avoid potential discrepancies
This is possible to configure in SessionM
ACTION: Valentina to confirm whether this is possible or requires development
In RBI Loyalty, points will be configured to expire after 6 months of the points’ issue date, grouped to the end of the month. This means that points accrued on the 15th of January would expire on the 30th of June
ACTION: Zaira to confirm with RBIberia Legal whether the privacy policy needs to be updated to reflect the monthly grouping
How do we handle scenarios where guests change loyalty tiers?
Loyalty tiers
Proposal to disable downgrades from Superking to King during the migration, to avoid guest frustration since they won’t be able to burn
Upgrades from King to Superking still allowed
ACTION: Zaira to confirm whether this is possible on SessionM
ACTION: Valentina to confirm whether this requires development
Next actions
Phase 0:
Confirm that we can retrieve loyalty data from SessionM to be ingested by RBI (Miguel-Romero, Almudena)
Phase 1:
Confirm that the existing user sync endpoint can be modified to return the RBI Loyalty ID in addition to the Cognito ID (Miguel-Romero, Almudena)
Confirm that Get User Details returns the loyalty points balance and tier (Silva, Carlos)
Share testing environment details with all vendors (Lopes da Costa, Valentina)
Provide example payloads for endpoints not documented in the standard Loyalty API documentation (Francisco Paglia)
Phase 2:
Define how rewards will be handled (Silva, Carlos)
Change Log
In March 2024 there were two changes of plans:
To continue to burn rewards throughout Phase 0, to minimise impact on sales. This means that burn transactions will be sent to RBI, and the loyalty points balance will not match between RBI and SessionM
To change the Loyalty API interface allowing authentication with an email address, to reduce the number of calls made by POS/Kiosks
Add Comment