...
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
Info |
---|
List of assumptions coming from the original RBIberia plans. |
...
Info |
---|
List of decisions taken during the planing process in coordination between RBI and RBIberia. |
Points expiry
Note |
---|
Under discussion |
Loyalty Tiers
We will disable downgrades from Superking to King during the migration, to avoid guest frustration
We propose duringPhases 0 and 1 - doesn’t matter because RBI is not the master of loyalty
Phase 2:
Import loyalty data including earn and burn transactions for the last two years (no points expiration data will be imported)
Run the loyalty points expiration on our side
Update the loyalty points balance to match SessionM
From this point onward, rely on the RBI loyalty points expiration process
Loyalty Tiers
We will disable downgrades from Superking to King during the migration, to avoid guest frustration
During the migration (Phase 1-3) to we will change the requirements for users to move from Loyalty Tier 2 to Loyalty Tier 1 in Sanity to 6 months . In instead of 1 month as it is today. In this way, no users would be downgraded Tiers during the migration. In this way, no Development work would be needed..
User will continue being able to go from Tier 1 (King) to Tier 2 (Superking) by earning 15000 points in 6 months on a rolling basis.
Session M will send this information to RBI
Cancellations and refunds
...
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 |
|
...
Guest opens the Airtouch app or Homeria website and asks to show the Loyalty ID
Airtouch app / Homeria website calls the RBI Create OTP endpoint
Guest scans the OTP on the Tillster kiosk
Tillster calls the RBI Identify endpoint and uses the OTP to authenticate the guest. Identify responds with a Transaction ID, RBI Loyalty User ID and the guest’s email address
If guest wants to use offers/cupones, they would input their code directly in the kiosk. These offers are not configured in RBI
Guest completes the order
Tillster updates SessionM, using the email address retrieved previously
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
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 Create 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. Identify responds with a Transaction ID, RBI Loyalty User ID and the guest’s email address
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 SessionM, using the email address retrieved previously
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
Changes needed
RBI |
|
Airtouch |
|
Homeria |
|
Tillster |
|
WinRest |
|
...
During this phase, RBI will become the master for loyalty data, and SessionM will be used as a backup in case we need to roll back.
When Phase 2 starts, we need to import the last two years of loyalty transactions from SessionM, to make history available to guests (on the Airtouch app now, and when they later switch to the RBI app). The import process will be as follows:
All loyalty (earn) transactions made to date will be voided. We need to void instead of deleting, because data in Snowflake cannot be deleted.
An extract will be taken from SessionM, covering the last two years of transactions and the current loyalty points balance. Each transaction record needs to include the date and time when the transaction took place, loyalty points, whether earn or burn, channel, if the burn is due to spending rewards of points having expired.
At this point the RBI loyalty points balance will not match SessionM’s because it doesn’t have the full transaction history. So we will calculate the loyalty points balance on RBI based on the The extract will be loaded into RBI, after which the expiration points feature will be switched on. RBI will migrate users without loyalty point expiration balance. From this point onward, rely on the RBI loyalty points expiration process. RBI will expire all loyalty points that were accrued over 6 months ago, rounded to the nearest month end.
At this point the RBI loyalty points balance will not match SessionM’s because it doesn’t have the full transaction history. So we will calculate the loyalty points balance on RBI based on the total of transactions and compare with the current SessionM balance for each user.
Finally, we will record a single remediation transaction per user with the difference, to make the loyalty points balance in RBI match SessionM.
Airtouch app and Homeria website will need to call the Get Loyalty User endpoint, using the RBI Loyalty User ID as input. Get Loyalty User will return RBI loyalty points balance, tiers and guest email.
Rewards will be configured in Sanity.
(To be confirmed) Configure 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
Changes needed
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
...
Point the BK ES domain(s) to RBI servers
Replace the Airtouch app in the App Store and Google Play Store with the RBI white label app
...
Airtouch
...
Switch on force update when the number of app users is low enough
Switch off BE when number of app users is low enough
...
Homeria
...
Switch off BE when number of app users is low enough
...
Tillster
...
No changes
...
WinRest
...
No changes
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:
...
Fraud Scenarios sign off
Our loyalty program for PLK was adjusted to consider the following:
Points should only be assigned when order is delivered or picked up
If the transaction is burn only - points are substracted when order is placed
If the transaction is earn only - points are assigned when order is delivered or dropped off
If the transaction is earn + burn -
Output is user earnt points are > than burnt points - points are adjusted when order is delivered
Output is user burnt points > that earnt points - points are adjusted when order is placed
Since Homeria and Airtouch do not have this functionality configurable, RB Iberia has accepted this edge fraud case for phase 2 until we switch to white label app, i.e. all points will be awarded as payment is placed. RBIberia acknowledged on April 4th 2024 -
View file | ||
---|---|---|
|
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
Data Dump at the End of Phase 1
Pending on understanding the structure and size of the data dump to be sent from SessionM to RBI at the end of Phase 1 for script to be worked on
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