Confirming Services¶
Now that you’ve made your first booking, we can move onto more advanced topics. In this tutorial, we’ll cover the idea of auto confirmation. Specifically, we’ll understand the workflow that is necessary to Confirm a booking, and how to gracefully revert to an Option (Held) service without damaging the customer experience.
Ideal Implementation For Simplicity
When creating services, the status of a service is defined by our reservation system.
Upon creating of a service, it is likely it’ll be in an Option state. Upon being returned
a service object, you’ll be provided the list of requirements necessary to complete to ensure
the service can enter a Confirmed state.
For this tutorial, we’ll assume all services we create are initially set as Option, and then
inspect the response data from the G Adventures API to ensure our system
understands what to do next.
Generally, most products can be confirmed at time of booking, if sufficient details were provided by the customer. There are exceptions to this rule, around products which require Visas, Medical Forms, or other signed documents. These can be fulfilled within our Good To Go product.
Let’s work through the steps necessary to auto-confirm a service. Additionally, we’ll cover the case where one cannot auto-confirm, so you can understand how to identify it, and have your system respond appropriately to the customer.
Confirming A Service
Before we can book a service, there’s some scaffolding that needs to be in place. You’ll need a booking, and a customer. If you haven’t already, please do read Creating Your First Booking, which will ensure you understand that workflow.
Assuming you have those, you should be able to create a Departure Service.
Here’s an example of the POST request to create one, along side the
response, snipped for focus.
We picked a random available departure, from one of our Highlights of Sabah & Mt. Kinabalu tour for this example.
POST /departure_services/ HTTP/1.1
{
"customers": [
{"id": "3250302"}
],
"product": {"id": "776988"},
"booking": {"id": "1123929"}
}
And the response:
{
"id": "2282970",
"href": "https://rest.gadventures.com/departure_services/2282970",
"name": "Highlights of Sabah & Mt Kinabalu",
"status": "Option",
"status_transitions": [
"Expired"
],
"type": "departure_services",
"incomplete_requirements": [
{
"type": "CONFIRMATION",
"name": "Nationality",
"code": "NATIONALITY",
"message": "Nationality must be submitted for this product. 'nationality' must be set in the customer resource.",
"flags": [],
"details": [],
"customer": {
"id": "3250302",
"href": "https://rest.gadventures.com/customers/3250302",
"name": {
"legal_first_name": "Bartek",
"legal_middle_name": null,
"legal_last_name": "Ciszkowski",
"common_name": null,
"title": "Mr"
}
}
},
{
"type": "CHECKIN",
"name": "Arrival Flight Details",
"code": "ARRIVAL_FLIGHT_DETAILS",
"message": "Arrival flight number, date, and time are required for this product.",
"flags": [],
"details": [],
"customer": {
"id": "3250302",
"href": "https://rest.gadventures.com/customers/3250302",
"name": {
"legal_first_name": "Bartek",
"legal_middle_name": null,
"legal_last_name": "Ciszkowski",
"common_name": null,
"title": "Mr"
}
}
}
]
}
There are three important attributes we must consider when reviewing this response. This is where you can design your system to get smart about how it handles auto-confirmation when booking services. Let’s consider these fields:
status- Contains the current status of the departure service. When creating a new one, the status is generally implicitly set toOptionwhen possible (Other statuses are possible too, ensure you read the full departure service documentation for that)status_transitions- Contains the possible statuses you can transition this service to via aPATCHrequest. Notice that in this case, there is noConfirmedlisted here. We’ll get to that in a bit.incomplete_requirements- Details the requirements left to either Confirm, or Checkin to the trip. For the purposes of this exercise, we’ll focus on those requirements with thetypeset toCONFIRMATION.
Now, we need to design a system that can confirm from this Option
state. If the status_transitions contains Confirmed, that means we can
PATCH this Departure Service with a change in status and it’ll confirm
as expected.
However, in this case, that is not available, so we must inspect the
incomplete_requirements. Reviewing this list, we see that the single
CONFIRMATION type that is missing, is Nationality. Each of these
incomplete requirements has a code, which you can map back to your system.
In this case, the missing requirement maps back to a single field, and points
you to the customer missing this requirement. Note that because a service can
have more than one customer, the Nationality requirement can show up
multiple times, for each customer missing that data. In other situations, the
missing requirement may point to multiple fields or a separate process (e.g. Medical Form, Arrival
Flight Details). These can be required for CONFIRMATION, and you can
identify those by mapping their codes in your system. This way, if you identify
a requirement you know you cannot fulfill within your booking workflow, you can
push that fulfillment to a separate process, later in the funnel.
Additionally, most complex requirements are only necessary for CHECKIN, and
the trip can be confirmed prior to those being completed.
Let’s review. We now need to adjust this services customer data to allow for confirmation. What would we do?
We
PATCHthe appropriate customer(s) with the missingCONFIRMATIONdata. If your online booking process asks for Nationality, and you have it, you can ensure the customer is created with that data. If not, you could always revert back to the customer to request more details, letting them know they are moments away from confirming their tour.Upon adjusting the customer data, the
incomplete_requirementsfor the Departure Service will be adjusted, and thestatus_transitionswould be updated to makeConfirmedavailable as a status you can transition to.Thus, you could now
PATCHthe departure service with the newConfirmedstate.
All said and done, we do recommend always going the simplest route. Create an initial service with the details you believe your customers are willing to fill out, and allow our suite of communication tools, and Good To Go to help the customer, and your staff fulfill the rest of the requirements, thus enabling the confirmation of the trip.
For additional help, or ensuring the success of your booking workflow, please do get in touch with our support team.