BOOKING BMS INTEGRATION
This page provides a detailed overview of both free and paid booking processes integrated through Business Management Systems (BMS). We will explore the sequence of steps involved, starting from the initial checkout to the final confirmation of bookings. The diagrams illustrate how the booking operations are executed through various APIs and payment systems, ensuring a smooth and efficient user experience. Whether you are dealing with a paid booking that involves payment validations and transactions or a free booking that bypasses the payment step, each pathway is mapped out to provide clear insights into the backend operations that support these activities.
External bookings
External bookings involve displaying activities on the activities front end, and when the user clicks to view more, they are redirected to the partner’s website to pay.
Payload
When creating the timeslots, ensure that in the offers the identifier field equals “external” and add the redirect link in meta.booking. See the payload above.
[{
"identifier": "ourparks2020-Event-99910",
"activityIdentifier": "ourparks2020",
"remainingAttendeeCapacity": 29,
"maximumAttendeeCapacity": 29,
"startDate": "2024-07-27T08:30:00.000Z",
"startDateTimezone": 0,
"endDate": "2024-07-27T09:30:00.000Z",
"endDateTimezone": 0,
"status": "PUBLISHED",
"offers": [
{
"identifier": "external",
"currency": "GBP",
"price": 0,
"name": "Rugby Fit",
"description": null,
"meta":
{ "booking": "https://ourparks.org.uk/borough/rugby-fit-99910" }
}
],
"liveUrl": "https://ourparks.org.uk/borough/rugby-fit-99910",
"noteForAttendees": null
}]
Paid bookings
Payload
Step 1: BOOKING INIT
{
"items": [
{
"sku": "104228-104244",
"attendees": [
{
"firstName": "TEST",
"lastName": "test",
"age": 99,
"offerIdentifier": "prix-de-depart"
}
]
}
],
"callback": {
"success": "https://activities-fra.staging.decathlon.net//fr-FR/commande/paiement-reussi",
"failure": "https://activities-fra.staging.decathlon.net//fr-FR/commande/echec"
}
}
Step 2: BOOKING INIT
{
"items": [
{
"sku": "104314-104322",
"timeslotMeta": { ... },
"attendees": [
{
"identifier": 123,
"firstName": "Jean",
"lastName": "Paul",
"age": 25,
"email": "[email protected]",
"telephone": "01234 567890",
"offerIdentifier": "prix-de-depart",
"offerMeta": { ... }
}
],
"customer": {
"firstName": "Albert",
"lastName": "Paul",
"email": "[email protected]",
"telephone": "09876 543210",
},
"totalPaymentDue": {
"price": 0,
}
}
]
}
Step 6: BOOKING CONFIRM
{
"items": [
{
"sku": "104314-104322",
"timeslotMeta": { ... },
"attendees": [
{
"identifier": 123,
"firstName": "Jean",
"lastName": "Paul",
"age": 25,
"email": "[email protected]",
"telephone": "01234 567890",
"offerIdentifier": "prix-de-depart",
"offerMeta": { ... }
}
],
"customer": {
"firstName": "Albert",
"lastName": "Paul",
"email": "[email protected]",
"telephone": "09876 543210",
},
"totalPaymentDue": {
"price": 0,
}
}
]
}
Fields
Name | Description |
---|---|
timeSlotMeta | The meta data of the Timeslot, the same as it is uploaded to Decathlon by partner. |
attendees[].offerMeta | The meta data of the Offer, the same as it is uploaded to Decathlon by partner. |
attendees[].identifier | Will be used to associate an error to an attendee/offer. |
attendees[].email, attendees[].telephone | Details about the Customer. |
customer | The Customer is the person who is making the booking. The Customer makes the payment (if there is one) and is the main person to contact. And the Attendees are the people who will be going to the activity. The Customer is often also an Attendee, but not always e.g. a parent may book for their child. |
totalPaymentDue.price | The expected price for the booking, in pounds. |
Free bookings
Free bookings are divided into 2 main parts: first a post request to initiate the booking and a second to confirm the booking.
Booking start
Booking confirm
Payload
Step 1: BOOKING START
{
"items": [
{
"sku": "104314-104322",
"attendees": [
{
"firstName": "Jean",
"lastName": "Paul",
"age": 99,
"offerIdentifier": "prix-de-depart"
}
]
}
]
}
Step 2: BOOKING INIT
{
"items": [
{
"sku": "104314-104322",
"timeslotMeta": { ... },
"attendees": [
{
"identifier": 123,
"firstName": "Jean",
"lastName": "Paul",
"age": 25,
"email": "[email protected]",
"telephone": "01234 567890",
"offerIdentifier": "prix-de-depart",
"offerMeta": { ... }
}
],
"customer": {
"firstName": "Albert",
"lastName": "Paul",
"email": "[email protected]",
"telephone": "09876 543210",
}
}
]
}
Step 3: BOOKING CONFIRM
Only post request without payload.
Step 4: BOOKING CONFIRM
{
"items": [
{
"sku": "104314-104322",
"timeslotMeta": { ... },
"attendees": [
{
"identifier": 123,
"firstName": "Jean",
"lastName": "Paul",
"age": 25,
"email": "[email protected]",
"telephone": "01234 567890",
"offerIdentifier": "prix-de-depart",
"offerMeta": { ... }
}
],
"customer": {
"firstName": "Albert",
"lastName": "Paul",
"email": "[email protected]",
"telephone": "09876 543210",
}
}
]
}