Special requests

Special requests

When a guest says "I need parking" or "I'd like wine for arrival" or "Can I bring my dog?" — that's a special request. The platform detects them automatically and routes them through an approval flow before anything guest-visible happens.

Operations — Tasks

How detection works

Inbound guest messages run through an LLM classifier. The classifier is prompt-driven:

  • The system prompt is a per-tenant editable LLM prompt (see AI Cockpit → Prompts, slug special_request_detection).
  • The prompt is the single source of truth for what counts as a special request.
  • No hardcoded category list in code.

When the classifier detects a request, it emits:

  • A category (e.g. wine, parking, beds, early_checkin, late_checkout, pet, other)
  • A normalized intent (e.g. "guest requested wine for arrival")
  • A confidence score

Approval-gated

Detected requests do NOT auto-apply to the reservation. Instead they spawn an approval task:

  • Special request noted: <category> task lands in Operations → Tasks.
  • The task drawer shows the guest message + the classifier's read + buttons: Approve / Reject / Edit.

Approving the task writes the approval state to the reservation — e.g. an approved early check-in sets the early-check-in flag + the approved time, so the cleaner sees it in their plan and downstream rules react to it. Marking the task done is never a no-op.

What "Approve" does

For each category, approval writes specific fields:

Category Approve writes
early_checkin reservations.earlyCheckin=1 + earlyCheckinTime=<time>
late_checkout reservations.lateCheckout=1 + lateCheckoutTime=<time>
wine reservations.specialRequest += wine chip
parking reservations.specialRequest += parking chip
beds reservations.specialRequest += beds chip
pet reservations.allowPet=1 + chip
other reservations.specialRequest += free text

These writes propagate to:

  • Calendar chips (🍷 wine / 🛏 beds / 🅿️ parking / eCI? @13:00)
  • Cleaner plán (so the cleaner knows what to prepare / when to finish)
  • Reservation drawer

What "Reject" does

Writes the rejection reason to the task + sends an AI-drafted reply to the guest declining the request (operator reviews before send).

What "Edit" does

Opens the inline editor — change the category, change the time, change the chip text — then approve with the edited values.

Per-tenant configuration

Every aspect is operator-tunable per-tenant:

  • The detection prompt (AI Cockpit → Prompts).
  • The category → field mapping (Task Templates editor).
  • Which categories require approval vs. auto-apply.

A tenant that's OK auto-approving early check-ins under 2h before standard time can flip a per-rule requireApproval=false and skip the human step for that band.

What if detection misses

Some requests slip through. The

Source: the luxury.host operator manual.