Webhooks and messages
Sixteen events posted to any URL with a signature and retry; five WhatsApp messages in the hotel's own words.
Webhooks. Under the desk page's *Webhooks* tab, give a URL a name, a secret (or let the hotel make one) and the events it wants — a visit created or assigned, cleaning started or finished, an inspection passed or failed, a room ready, a status change, a request raised or done, a fault raised or closed, DND past the threshold, something late, something found, damage charged. Each event is POSTed as JSON (id, event, at, hotel, room, visit, ticket, booking, actor, title, data) with X-Asar-Signature: sha256=<HMAC of the body with the secret> and X-Asar-Event; a failed delivery is retried after 1, 5, 30, 120 and 720 minutes with the same event id, then given up and shown in the log. *Send a test* shows your receiver answering before the first real event.
Messages. Five templates on every account under *Messages*: hk_room_ready, hk_request_received, hk_request_done, hk_laundry_ready, hk_satisfaction — 093's tokens ({guest}, {hotel}, {room}, …) plus {request}, {item}, {minutes}. The room-ready message goes to the guest waiting at the desk or to today's arrival the moment the room passes; the request messages when it is raised and when it is done; the laundry message when the docket is ready. Each is a switch under *Housekeeping setup → Settings*. A message the hotel could not send (no phone on the guest) is a *failed* row that says why on the story — never silence.