A number of objects in Xola include triggers
and rewards
objects that describe the conditions that must be met for an action to take place, and the effects of that action, respectively.
Metadata is useful for storing additional, structured information about an object. For example, you could store the customer ID from your CRM system in the Xola User
object.
Triggers
Triggers provide a standardized, structured way to set conditions and impose restrictions on certain classes of object in Xola.
There are a number of different triggers
available, including experience_trigger
, arrivalBetween_trigger
, arrivalSpan_trigger
, always_true_trigger
, blackout_schedule_trigger
, bxgy_coupon_trigger
, demographic_quantity_trigger
, privacy_trigger
, organizer_trigger
, expiry_trigger
, arrival_schedule_trigger
, book_by_schedule_trigger
, usage_limit_trigger
, selected_experiences_trigger
, and same_day_arrival_trigger
. Triggers can be stacked together, and some trigger types include a limited amount of additional logic (e.g. supporting any
vs all
). However, certain Xola objects may only use certain trigger types.
Trigger Name | Description | Sample Code | Used In |
---|---|---|---|
experience_trigger | Test to ensure that at least one experience is included | { object: "experience_trigger", "experiences": [ { "id": "63f7cbd825498161bf341fb8" }, { "id": "63f7cbd055d6ca3b4c599cf4" } ] } | Packages |
arrivalBetween_trigger | Test to ensure that the target event or experience takes place between specified start and end times | { "object":"arrival_between_trigger", "start": "2023-05-04T00:00:00-04:00", "end": "2023-05-05T23:59:59-04:00" } | |
arrivalSpan_trigger | Test to ensure that two target objects (e.g. two experiences in a Package) happening within a certain amount of time of each other | { "object": "arrival_span_trigger", "arrivalSpan": 90 } | Packages |
always_true_trigger | A placeholder trigger that always returns true | { object: "always_true_trigger" } | Coupons |
blackout_schedule_trigger | A trigger that tests whether date selected for the target object is in a blackout period. Takes at least oneschedule object as a parameter | { "object":"blackout_schedule_trigger", "blackoutSchedules": [ { "id": "64545fa6d6b86f7d35684444", "name": "blackout dates", "days": [ 0, 1, 2, 3 ], "start": "2023-05-04T00:00:00-04:00", "end": "2023-05-05T23:59:59-04:00", "repeat": "weekly", "type": "unavailable" } ] } | Packages |
bxgy_coupon_trigger | |||
demographic_quantity_trigger | Tests whether the requirement for some minimum number of travelers from a specific demographic (or multiple demographics) is met | { "quantity": "1", "demographics": [], "allDemographics": true, "object": "demographic_quantity_trigger" } | Coupons |
privacy_trigger | Tests whether the target object has the correct privacy value | { "object": "privacy_trigger", "allowedPrivacies": [ "private", "public" ] } | Coupons |
organizer_trigger | |||
expiry_trigger | |||
arrival_schedule_trigger | |||
book_by_schedule_trigger | |||
usage_limit_trigger | |||
selected_experiences_trigger | |||
same_day_arrival_trigger | { "object": "same_day_arrival_trigger" } | Packages |
For example, when configuring a Package
that features two Experiences
, it is generally necessary that both of these Expereinces
are included in the purchase. So at a minimum our trigger
object would consist of:
[
{
"object": "experience_trigger",
"id": "6448050b2967692ada1d5e8f",
"condition": "all",
"experiences": [
{
"id": "63f7cbd825498161bf341fb8"
},
{
"id": "63f7cbd055d6ca3b4c599cf4"
}
]
}
]
However, we may want to impose additional restrictions or qualifications. For example, if we require a visitor to book both of the Experiences
on the same day, we can add an additional clause to the trigger
:
[
{
"object": "experience_trigger",
"id": "6448050b2967692ada1d5e8f",
"condition": "all",
"experiences": [
{
"id": "63f7cbd825498161bf341fb8"
},
{
"id": "63f7cbd055d6ca3b4c599cf4"
}
]
},
{
"object": "same_day_arrival_trigger",
"id": "6448050b2967692ada1d5e90"
}
]
Rewards
The rewards
object works in a similar way, and describes outcomes and actions that take place when key trigger
conditions are met. Available rewards
include demographic_reward
, add_on_reward
,
bxgy_coupon_reward
, absolute_demographic_reward
, percent_demographic_reward
,
percent_reward
, and absolute_reward
.
Trigger Name | Description | Sample Code | Used In |
---|---|---|---|
demographic_reward | |||
add_on_reward | |||
bxgy_coupon_reward | |||
absolute_demographic_reward | Provides a reward worth a specific, fixed amount (e.g. $5) for up to a certain number of different demographic groups | { "quantity": 2, "object": "absolute_demographic_reward", "amount": 5, "demographics": [], "allDemographics": true } | Coupons |
percent_demographic_reward | Provides a percentage discount for up to a certain number of different demographic groups | { "quantity": 2, "object": "percent_demographic_reward", "amount": 5, "demographics": [], "allDemographics": true } | Coupons |
percent_reward | Provides a percentage discount (e.g. 10% off) | { "object": "percent_reward", "amount": 5 } | Coupons |
absolute_reward | Provides a reward worth a specific, fixed amount (e.g. $5) | { "object": "absolute_reward", "amount": 5 } | Coupons |
An example package that applies a discount when two experiences are purchased together might implement an absolute_reward for a specific dollar amount off, or a percent award that varies with the total purchase price. Additional discounts can be applied to add-ons purchased with the experiences.
[
{
"object": "demographic_reward",
"id": "6453057615c08e677144500b",
"discount": {
"amount": 50,
"amountType": "absolute"
},
"demographic": {
"id": "63e1509a461784660477325d"
}
},
{
"object": "add_on_reward",
"id": "6453057615c08e677144500c",
"discount": {
"amount": 10,
"amountType": "percent"
},
"addOn": {
"name": "Adventure pants"
},
"experience": {
"id": "63e152c04f6a6b5be271e2fd"
}
}
]