AI Adoption GuideHospitalityArrive
Personalized welcome message generator
LLM produces a room drop card or digital welcome using stay history and occasion flags.
Hospitality processBookConfirmPrepareArriveStayDepartReviewReturn
By Don, DoneThat’s AI coach · updated
What guest services should print or send
A welcome worth printing names one fact the property already confirmed: a prior stay on this profile, a loyalty status already attached to the reservation, or an occasion flag a guest or booker set. If those fields are silent, the draft stays blank. Guest services still chooses the channel (room-drop card, in-app note, or front-desk greeting) and still sends or prints. The generator does not auto-send.
Treat the output as copy for a human, not as a message already in the guest's room. A draft sitting in a queue is not a delivered welcome. Night audit and arrival lists still drive who gets a card. Someone on the desk still signs, prints, or taps send.
Quality here is citation, not warmth. "Welcome to the hotel, we hope you enjoy your stay" with no stay cite is a generic card, not this use case. "Welcome back" with no last-stay date on the profile is also a miss. The desk should reject both and either fill from a confirmed field or leave the personalized line empty.
This page sits next to other arrival work. Preference-driven room setup belongs on guest preference-based room setup. Fast arrival without a lobby queue belongs on frictionless self-check-in agent. The welcome card is the note that accompanies those steps, not a substitute for them.
Load confirmed stay history and occasion flags only
Start from the reservation and the guest profile the property already trusts. Load stay history only when the PMS or CRM marks it as this guest, this brand or this property, with a date or stay count staff would defend at the desk. Load occasion flags only when a field is set: anniversary, birthday, honeymoon, reunion, or another tag your booking path actually uses. Load a preferred name or salutation if the profile stores one.
Do not load inferred "regular guest" from a single night, a similar last name, or a shared company. Do not load notes that quote a complaint, a recovery offer, or a survey comment. Those notes may be useful for a private arrival brief. They do not belong on a card the guest will hold.
Loyalty context is a confirmed field when the reservation already carries a tier or member ID. It is not a story you invent from a points balance you cannot see. For how to retrieve that context without mixing it into every other arrival task, use loyalty context retrieval.
If stay history is empty and occasion is empty, stop. Do not scrape email subject lines, chat transcripts, or public reviews for a reason to celebrate. Empty stays empty.
Draft the card, cite the field, leave silence empty
Ask the model for a short room-drop or digital welcome that cites the loaded fields in language staff can check. Staff should see the cite next to the prose, not buried in a system log. A workable pattern is a two-line draft plus a source line: the guest-facing sentence, then a cite such as last stay March 2025, two nights, or occasion equals anniversary, set at booking.
If a field is missing, the corresponding clause is missing. No last stay means no "welcome back." No occasion means no "happy anniversary." No preferred name means use the reservation name as stored, or a neutral greeting with no first name if your brand standard is not to guess.
Keep the draft off the complaint trail. If the profile has an open case about noise, billing, or a prior room, that fact stays out of the welcome. Citing a complaint on a welcome card asks the guest to relive it at arrival. Recovery is a different conversation, held by a person, not printed on card stock.
One illustrative pass, not a property result: a returning couple arrives tonight. The profile shows a last stay in March with two nights in a king, and the reservation carries an anniversary flag set at booking. The draft might read: "Welcome back. We have you in a king again, and we are glad to mark your anniversary this stay." Source line: last stay March, two nights, king; occasion equals anniversary. Guest services prints the room-drop card or pastes the digital version, then sends. If the March stay had been missing, the same draft would drop "welcome back" and keep only the anniversary line. If both fields had been blank, the personalized block would be empty and the desk would use the house generic card or nothing extra.
Do not attach an F&B pitch to this card unless that is a separate, confirmed offer workflow. Upsell copy belongs with personalized f-and-b offer generator, not inside a welcome that is supposed to cite stay history.
Property systems hold the flags; the desk still delivers
Stay history and occasion flags usually live in the same systems guest services already opens at arrival: property management and guest-experience tools such as Oracle Hospitality, Mews, Canary, and Revinate. Treat them as a class. Each can store a profile, a reservation, and notes. None of them, by themselves, is a license to auto-send a generated welcome.
Your job is to map which fields those systems already mark as confirmed, then feed only those fields into the draft. Do not assume a named product writes anniversary copy, prints cards, or withholds complaint text. Confirm the field names on your property: last stay date, stay count, occasion code, loyalty tier on this reservation.
The generator returns a draft. Guest services still sends or prints. If your stack can push a message to an in-app inbox or SMS, keep that push behind a human action. A queued draft that nobody reviewed is not a welcome. A card that printed to a stack overnight with no cite check is also not this process.
When the same profile feeds room setup and check-in, keep the welcome task thin. Preferences for pillow or floor go to housekeeping through the room-setup path. Identity and key issuance go through check-in. The welcome only cites stay history or occasion. Mixing all three into one generated paragraph is how you get a card that claims a high floor you did not actually assign.
Failure modes that turn a welcome into a complaint
A welcome with no stay cite is the first failure. The model fills warmth because the prompt asked for personalization. The desk prints it. The guest is a first-time stay, or the history sits on a merged profile the night auditor would not trust. Fix: require a visible cite for every personalized clause, and reject drafts that personalize without one.
Treating the draft as sent is the second failure. Someone generates fifty cards for tonight's arrivals, assumes the job is done, and leaves the stack in a folder. Rooms get no drop. Digital messages never leave the draft state. Fix: the run is complete only when a named person has printed or sent, or has marked "generic only" because fields were silent.
Quoting a complaint is the third failure. A prior stay note says the guest was unhappy with late housekeeping. The model acknowledges it in the welcome. The guest arrives to a card that restates the problem. Fix: exclude complaint, recovery, and survey fields from the welcome prompt. If the desk needs that context, put it on a staff-only arrival sheet, not on the guest-facing card.
Two smaller slips sit next to those three. Inventing an occasion from a date that happens to fall on the stay (a birthday the guest never flagged) is still fabrication. Auto-sending because the PMS can fire messages at check-in is still auto-send. Both break the quality bar: a draft that cites confirmed stay history or occasion flags only, empty when those fields are silent, delivered only by guest services.
If you cannot defend the cite at the desk, do not print the line.
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