AI Adoption GuideHospitalityDepart
Personalized farewell message generator
LLM produces a channel-appropriate departure message with loyalty points summary and a return incentive.
Hospitality processBookConfirmPrepareArriveStayDepartReviewReturn
By Don, DoneThat’s AI coach · updated
What guest services should send at departure
A usable farewell is a draft that cites at least one confirmed stay detail or loyalty field, then stops. If those fields are silent, the draft leaves the matching lines blank. Guest services still sends. The model does not auto-send. The model does not invent a points balance.
The checkout note is not a speech. It is a short, channel-appropriate message that thanks the guest for a stay you can name, summarizes loyalty only when the membership record has the data, and offers a return incentive that does not depend on guessed spend or invented points. A note that could apply to any departing guest is not personalized. A note that names a room type, a checkout date, or a tier you cannot find on the reservation or loyalty file is not safe to send.
Use the same citation habit you would use on arrival. The personalized welcome message generator cites confirmed inbound details. This page cites confirmed outbound details. The stay is over. The next action is thank-you plus a reason to return, not a second welcome.
Match the channel the guest already used. An in-app inbox note can run a few sentences. SMS should stay at one or two. Email can carry a points line and a return offer when both are sourced from loaded fields. Do not paste a long email into SMS, and do not strip a confirmation number from email just to sound casual.
Confirmed fields you load before you draft
Do not start from "write a warm goodbye." Load the reservation and loyalty records first.
Stay fields you may cite include guest name as stored, confirmation or reservation ID, arrival and departure dates, night count, room or rate description as recorded, whether the folio is closed, and any special request that was logged and fulfilled. Loyalty fields you may cite include membership ID, published tier if the program stores one, and a points balance only when the loyalty system returns a number for this profile or this stay. If loyalty context retrieval returns nothing for points, there is no points sentence.
Property management and guest-messaging systems such as Oracle Hospitality, Mews, Revinate, and Canary are the usual homes for stay records and outbound threads. Treat them as a class of systems of record, not as a ranked list. Use the product that actually holds the stay and the membership for this property. Do not assume a named product exposes a given field. If the PMS has nights and the loyalty platform is silent on points, cite the nights and omit points.
Confirmed means a source check. A room type on this reservation is confirmed. A room type someone recalls from last week is not. A points figure on the loyalty inquiry for this member is confirmed. A round number that sounds like the tier is not.
If checkout is still moving, align with the express checkout orchestrator before you generate. Do not thank a guest for a stay whose folio is open or whose departure date has not posted. A farewell that cites yesterday's planned checkout after the guest extended is a failed stay cite, even if the tone is polite.
Draft with cites, leave blanks, then send it yourself
Work in this order.
Assemble a field pack: stay facts with source, loyalty facts with source, intended channel, and a return incentive your hotel already authorizes, such as a published member rate code or booking window. Do not ask the model to invent an offer.
Instruct the model to use only those fields, and to omit the sentence or leave a blank when a field is missing. A blank is correct. A plausible filler is not.
Read the draft against the pack. Every stay claim maps to a loaded field. Every loyalty claim maps to a loaded field. If the draft mentions points and the pack has no balance, delete that sentence. If the draft never mentions the stay, reject it and regenerate with an explicit stay-cite requirement.
Guest services sends on the chosen channel. Sending is a human step: confirm identity, choose the thread, then send. A draft in a queue is not delivered. Do not wire auto-send from the generator.
Illustrative example, not a measured result. A guest-services lead is closing a two-night stay. The reservation shows Deluxe King, 12-14 March, confirmation 88421. The loyalty inquiry returns Gold and 12,400 points. Channel is email. The authorized return incentive is a member rate already on the rate grid, for stays booked in the next 90 days. A usable draft thanks them for the Deluxe King stay under confirmation 88421, states the Gold balance of 12,400 points as returned by the inquiry, and closes with that member rate. Same afternoon, another departing guest has a confirmed one-night stay and no loyalty record. The usable draft thanks them for the confirmed night and room type, leaves the points block empty, and uses only a public return offer that does not need a points figure. A third draft that says thanks for staying with us and enjoy your 15,000 points, with no stay cite and a made-up balance, is rejected.
Failure modes that make the draft unusable
A farewell with no stay cite fails the quality bar. If the note could go to any checkout that day, it did not prove the model saw the reservation. "Hope you enjoyed your time" without confirmation number, dates, room, or another loaded stay field is not enough. Reject it. Require a cite. Dates and room type are enough when that is all you loaded.
Treating the draft as sent fails operations. The generator produces text. It does not post to SMS, email, or the guest app. If the team treats generated as delivered, the guest leaves with silence, or a later job sends a stale draft after an extension. Keep send on the same human checklist as other departure notes. Status in the messaging tool is the source of truth, not the presence of a draft.
Inventing a points balance fails trust. If loyalty is silent, omit points. Do not round. Do not reuse last month's figure. Do not estimate from tier. A wrong balance is worse than no balance because the guest will check the app. Empty stays empty. The same rule applies to tier names and elite-night counts. If the field is not on the inquiry, it is not in the message.
Watch for related slips: citing a stay that belongs to a different confirmation on a shared folio, mixing an arrival promise into a farewell, and stacking a return incentive that requires points the guest does not have on file. Fix those by tightening the field pack, not by adding warmer adjectives.
After they leave: one send, then the next conversation
Guest services owns the send. After send, do not fire a second generated personalized note from this same prompt. One farewell per stay, unless the guest replies and you are continuing a thread.
Put only authorized return incentives in the farewell. Save deeper win-back copy for later, when you have new confirmed context, using a hyper-personalized re-engagement generator rather than a second pitch at checkout.
If the guest is still in house or the folio is not closed, wait. A farewell is a departure artifact. Sending it early creates a stay-cite problem when dates change.
Quality here is a draft a lead can stand behind: it names the stay or the loyalty record you loaded, it is silent where the record is silent, and a person still chooses send.
Is this worth automating for you?
Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.
DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.
Measure the baseline first