The travel and hospitality playbook. Built in the builder, answered by your booking and loyalty systems.
Ten journeys, each drawn below as it runs. The decision comes from your reservation, property and loyalty systems or criteria you set; the journey carries it. Aims are targets to agree in the pilot, not results.
Offer the upgrade the night it is free.
A confirmed booking with arrival tomorrow asks your property system whether a better room is free and the guest is not already upgraded, then sends one WhatsApp with Upgrade or Keep my room; a tap books it in your system.
- Decides
- your property system and the rate you set.
- Aim
- empty rooms sold without a call from the desk.
Drawn as it would run in the builder. Thresholds, windows and channel order are the ones you set; the decision at each API step comes from your system.
- Intended outcome
- empty rooms sold without a call from the desk.
- Trigger
- arrival tomorrow (your PMS)
- Events and identifiers
- arrival tomorrow (your PMS). The trigger arrives from your system by API with your customer identifier and the fields named in the trigger. Example inputs; map them to your own event names and identifiers at setup. Every event carries your customer identifier.
- Your systems in the loop
- better room free? not upgraded? (your PMS) · your PMS books it. Your system validates and executes each of these; the journey sends the request and branches on the answer.
- Consent
- Per-channel consent on the contact record is checked before any send.
- Stops when
- no tap: silence. The customer completes the step the journey waits for, the deadline on a wait passes, or the branch drawn for silence ends.
- If a channel fails or nobody answers
- A channel that reports failure advances the fallback order on that carrier signal; silence takes the path drawn for it, with the deadline you set. Delivery callbacks that arrive late update the record when they arrive. An API step that answers no, or fails, takes the branch drawn for it; the platform does not act on your system's behalf beyond that request.
- Success metric
- empty rooms sold without a call from the desk. Population: contacts who entered the journey in the window. Compared with the baseline window agreed before the pilot, on the conversion events you define. A before-and-after difference is a comparison, not proof of cause.
Turn three searches into one booking.
A session with the same route searched three times and no booking checks consent, asks your system for the fare now, and sends one WhatsApp with a tap to book; one reminder if the fare is about to change, and silence otherwise.
- Decides
- your fare rules.
- Aim
- searches that end in a booking with you, not elsewhere.
Drawn as it would run in the builder. Thresholds, windows and channel order are the ones you set; the decision at each API step comes from your system.
- Intended outcome
- searches that end in a booking with you, not elsewhere.
- Trigger
- session rule: same route 3 times, no booking
- Events and identifiers
- session rule: same route 3 times, no booking. Captured by the SDK or web tracker as the session runs, tied to the identified contact. Example inputs; map them to your own event names and identifiers at setup. Every event carries your customer identifier.
- Your systems in the loop
- fare now (your system). Your system validates and executes each of these; the journey sends the request and branches on the answer.
- Consent
- Checked inside the journey at the step shown, and per channel before any send.
- Stops when
- stop when booked. The customer completes the step the journey waits for, the deadline on a wait passes, or the branch drawn for silence ends.
- If a channel fails or nobody answers
- A channel that reports failure advances the fallback order on that carrier signal; silence takes the path drawn for it, with the deadline you set. Delivery callbacks that arrive late update the record when they arrive. An API step that answers no, or fails, takes the branch drawn for it; the platform does not act on your system's behalf beyond that request.
- Success metric
- searches that end in a booking with you, not elsewhere. Population: contacts who entered the journey in the window. Compared with the baseline window agreed before the pilot, on the conversion events you define. A before-and-after difference is a comparison, not proof of cause.
Sell the bag on the booking, not the calendar.
A long-haul booking with no bag added asks your system whether bag space is free, then sends one WhatsApp with Add a bag or No thanks; a tap adds it to the booking and confirms.
- Decides
- your system and the ancillary price you set.
- Aim
- ancillaries sold before the airport, not at the desk.
Drawn as it would run in the builder. Thresholds, windows and channel order are the ones you set; the decision at each API step comes from your system.
- Intended outcome
- ancillaries sold before the airport, not at the desk.
- Trigger
- long-haul booked, no bag added (your system)
- Events and identifiers
- long-haul booked, no bag added (your system). The trigger arrives from your system by API with your customer identifier and the fields named in the trigger. Example inputs; map them to your own event names and identifiers at setup. Every event carries your customer identifier.
- Your systems in the loop
- bag space free? (your system) · your system adds it. Your system validates and executes each of these; the journey sends the request and branches on the answer.
- Consent
- Per-channel consent on the contact record is checked before any send.
- Stops when
- no tap: the journey ends. The customer completes the step the journey waits for, the deadline on a wait passes, or the branch drawn for silence ends.
- If a channel fails or nobody answers
- A channel that reports failure advances the fallback order on that carrier signal; silence takes the path drawn for it, with the deadline you set. Delivery callbacks that arrive late update the record when they arrive. An API step that answers no, or fails, takes the branch drawn for it; the platform does not act on your system's behalf beyond that request.
- Success metric
- ancillaries sold before the airport, not at the desk. Population: contacts who entered the journey in the window. Compared with the baseline window agreed before the pilot, on the conversion events you define. A before-and-after difference is a comparison, not proof of cause.
Get the guest checked in before they reach the airport.
Check-in opening sends a push and Inbox message, waits six hours, asks your system whether the guest has checked in, and sends the link by WhatsApp if not, with SMS for the unread.
- Decides
- your system's check-in status.
- Aim
- shorter queues at the desk, fewer missed flights.
Drawn as it would run in the builder. Thresholds, windows and channel order are the ones you set; the decision at each API step comes from your system.
- Intended outcome
- shorter queues at the desk, fewer missed flights.
- Trigger
- check-in opens (your system)
- Events and identifiers
- check-in opens (your system). The trigger arrives from your system by API with your customer identifier and the fields named in the trigger. Example inputs; map them to your own event names and identifiers at setup. Every event carries your customer identifier.
- Your systems in the loop
- checked in? (your system). Your system validates and executes each of these; the journey sends the request and branches on the answer.
- Consent
- Per-channel consent on the contact record is checked before any send.
- Stops when
- yes: stop. The customer completes the step the journey waits for, the deadline on a wait passes, or the branch drawn for silence ends.
- If a channel fails or nobody answers
- A channel that reports failure advances the fallback order on that carrier signal; silence takes the path drawn for it, with the deadline you set. Delivery callbacks that arrive late update the record when they arrive. An API step that answers no, or fails, takes the branch drawn for it; the platform does not act on your system's behalf beyond that request.
- Success metric
- shorter queues at the desk, fewer missed flights. Population: contacts who entered the journey in the window. Compared with the baseline window agreed before the pilot, on the conversion events you define. A before-and-after difference is a comparison, not proof of cause.
Give a disrupted guest the options, not a queue.
A delay past your threshold sends the options as buttons; the guest's choice goes to your system to rebook or refund and the confirmation follows on the same thread. No reply, and the journey calls.
- Decides
- your system; the guest.
- Aim
- fewer calls in a disruption, with guests answered inside the window you set.
Drawn as it would run in the builder. Thresholds, windows and channel order are the ones you set; the decision at each API step comes from your system.
- Intended outcome
- fewer calls in a disruption, with guests answered inside the window you set.
- Trigger
- delay past two hours (your ops)
- Events and identifiers
- delay past two hours (your ops). The trigger arrives from your system by API with your customer identifier and the fields named in the trigger. Example inputs; map them to your own event names and identifiers at setup. Every event carries your customer identifier.
- Your systems in the loop
- your system rebooks or refunds. Your system validates and executes each of these; the journey sends the request and branches on the answer.
- Consent
- Per-channel consent on the contact record is checked before any send.
- Stops when
- The customer completes the step the journey waits for, the deadline on a wait passes, or the branch drawn for silence ends.
- If a channel fails or nobody answers
- A channel that reports failure advances the fallback order on that carrier signal; silence takes the path drawn for it, with the deadline you set. Delivery callbacks that arrive late update the record when they arrive. An API step that answers no, or fails, takes the branch drawn for it; the platform does not act on your system's behalf beyond that request.
- Success metric
- fewer calls in a disruption, with guests answered inside the window you set. Population: contacts who entered the journey in the window. Compared with the baseline window agreed before the pilot, on the conversion events you define. A before-and-after difference is a comparison, not proof of cause.
Keep the tier before it lapses.
A tier that ends in thirty days asks your loyalty system how far short the guest is, sends one message that says what keeps the status, waits, checks for the booking, and reminds once with ten days left.
- Decides
- your loyalty rules and the tier date your system holds.
- Aim
- tiers renewed by a stay, not by a soft landing.
Drawn as it would run in the builder. Thresholds, windows and channel order are the ones you set; the decision at each API step comes from your system.
- Intended outcome
- tiers renewed by a stay, not by a soft landing.
- Trigger
- tier lapses in 30 days (your loyalty system)
- Events and identifiers
- tier lapses in 30 days (your loyalty system). The trigger arrives from your system by API with your customer identifier and the fields named in the trigger. Example inputs; map them to your own event names and identifiers at setup. Every event carries your customer identifier.
- Your systems in the loop
- one stay short? (your loyalty system). Your system validates and executes each of these; the journey sends the request and branches on the answer.
- Consent
- Per-channel consent on the contact record is checked before any send.
- Stops when
- stop. The customer completes the step the journey waits for, the deadline on a wait passes, or the branch drawn for silence ends.
- If a channel fails or nobody answers
- A channel that reports failure advances the fallback order on that carrier signal; silence takes the path drawn for it, with the deadline you set. Delivery callbacks that arrive late update the record when they arrive. An API step that answers no, or fails, takes the branch drawn for it; the platform does not act on your system's behalf beyond that request.
- Success metric
- tiers renewed by a stay, not by a soft landing. Population: contacts who entered the journey in the window. Compared with the baseline window agreed before the pilot, on the conversion events you define. A before-and-after difference is a comparison, not proof of cause.
Catch the guest whose stays are getting further apart.
A guest entering At Risk on your stay windows gets one message from the brand, not an offer; a reply becomes a task for guest relations, and silence waits sixty days before Lost.
- Decides
- your RFM windows.
- Aim
- the drifting guest heard from before the next trip is booked elsewhere.
Drawn as it would run in the builder. Thresholds, windows and channel order are the ones you set; the decision at each API step comes from your system.
- Intended outcome
- the drifting guest heard from before the next trip is booked elsewhere.
- Trigger
- segment entry: RFM At Risk (your windows)
- Events and identifiers
- segment entry: RFM At Risk (your windows) · RFM Lost. Segment membership is recomputed from the contact's own events on the window you set; the identifier is the contact record. Example inputs; map them to your own event names and identifiers at setup. Every event carries your customer identifier.
- Your systems in the loop
- yes: task to guest relations (your system). Your system validates and executes each of these; the journey sends the request and branches on the answer.
- Consent
- Per-channel consent on the contact record is checked before any send.
- Stops when
- The customer completes the step the journey waits for, the deadline on a wait passes, or the branch drawn for silence ends.
- If a channel fails or nobody answers
- A channel that reports failure advances the fallback order on that carrier signal; silence takes the path drawn for it, with the deadline you set. Delivery callbacks that arrive late update the record when they arrive. An API step that answers no, or fails, takes the branch drawn for it; the platform does not act on your system's behalf beyond that request.
- Success metric
- the drifting guest heard from before the next trip is booked elsewhere. Population: contacts who entered the journey in the window. Compared with the baseline window agreed before the pilot, on the conversion events you define. A before-and-after difference is a comparison, not proof of cause.
Bring back the guest with no stay in a year.
A guest entering Lost has their last stay and property looked up in your system, then gets one Story on what has changed there, and an offer on their channel only if they read it.
- Decides
- your RFM definitions and your offer rules.
- Aim
- a return stay, asked for once.
Drawn as it would run in the builder. Thresholds, windows and channel order are the ones you set; the decision at each API step comes from your system.
- Intended outcome
- a return stay, asked for once.
- Trigger
- segment entry: RFM Lost
- Events and identifiers
- segment entry: RFM Lost. Segment membership is recomputed from the contact's own events on the window you set; the identifier is the contact record. Example inputs; map them to your own event names and identifiers at setup. Every event carries your customer identifier.
- Your systems in the loop
- last stay and property? (your system). Your system validates and executes each of these; the journey sends the request and branches on the answer.
- Consent
- Per-channel consent on the contact record is checked before any send.
- Stops when
- stop. The customer completes the step the journey waits for, the deadline on a wait passes, or the branch drawn for silence ends.
- If a channel fails or nobody answers
- A channel that reports failure advances the fallback order on that carrier signal; silence takes the path drawn for it, with the deadline you set. Delivery callbacks that arrive late update the record when they arrive. An API step that answers no, or fails, takes the branch drawn for it; the platform does not act on your system's behalf beyond that request.
- Success metric
- a return stay, asked for once. Population: contacts who entered the journey in the window. Compared with the baseline window agreed before the pilot, on the conversion events you define. A before-and-after difference is a comparison, not proof of cause.
Hear about a bad stay before the review site does.
Checkout asks for a rating with buttons; a low score becomes a task for the property in your system and an apology on the same thread, a high one gets a thank-you and a link.
- Decides
- the reply; your service rules.
- Aim
- the complaint heard by you first.
Drawn as it would run in the builder. Thresholds, windows and channel order are the ones you set; the decision at each API step comes from your system.
- Intended outcome
- the complaint heard by you first.
- Trigger
- checkout (your PMS)
- Events and identifiers
- checkout (your PMS). The trigger arrives from your system by API with your customer identifier and the fields named in the trigger. Example inputs; map them to your own event names and identifiers at setup. Every event carries your customer identifier.
- Your systems in the loop
- low: task to the property (your system). Your system validates and executes each of these; the journey sends the request and branches on the answer.
- Consent
- Per-channel consent on the contact record is checked before any send.
- Stops when
- The customer completes the step the journey waits for, the deadline on a wait passes, or the branch drawn for silence ends.
- If a channel fails or nobody answers
- A channel that reports failure advances the fallback order on that carrier signal; silence takes the path drawn for it, with the deadline you set. Delivery callbacks that arrive late update the record when they arrive. An API step that answers no, or fails, takes the branch drawn for it; the platform does not act on your system's behalf beyond that request.
- Success metric
- the complaint heard by you first. Population: contacts who entered the journey in the window. Compared with the baseline window agreed before the pilot, on the conversion events you define. A before-and-after difference is a comparison, not proof of cause.
Say the gate or the room is ready, privately.
A ready event goes by push and Inbox to app users over our own network, with SMS for anyone who has not read it; guests without the app get the SMS straight away.
- Decides
- your channel order, per message type.
- Aim
- fewer desk queues, and the notice read where it was sent.
Drawn as it would run in the builder. Thresholds, windows and channel order are the ones you set; the decision at each API step comes from your system.
- Intended outcome
- fewer desk queues, and the notice read where it was sent.
- Trigger
- gate change or room ready (your system)
- Events and identifiers
- gate change or room ready (your system). The trigger arrives from your system by API with your customer identifier and the fields named in the trigger. Example inputs; map them to your own event names and identifiers at setup. Every event carries your customer identifier.
- Your systems in the loop
- one record per message. Your system validates and executes each of these; the journey sends the request and branches on the answer.
- Consent
- Per-channel consent on the contact record is checked before any send.
- Stops when
- The customer completes the step the journey waits for, the deadline on a wait passes, or the branch drawn for silence ends.
- If a channel fails or nobody answers
- A channel that reports failure advances the fallback order on that carrier signal; silence takes the path drawn for it, with the deadline you set. Delivery callbacks that arrive late update the record when they arrive. An API step that answers no, or fails, takes the branch drawn for it; the platform does not act on your system's behalf beyond that request.
- Success metric
- fewer desk queues, and the notice read where it was sent. Population: contacts who entered the journey in the window. Compared with the baseline window agreed before the pilot, on the conversion events you define. A before-and-after difference is a comparison, not proof of cause.
Where a step says your system decides, the journey calls your system and branches on its answer. xNotify carries the journey; it does not become the model.