Recipe: short-term rental check-in
When a booking confirms, this pipeline creates a door code and sends the guest their arrival details — hands-off, behind your own firewall. It’s a good tour of a trigger → action → action chain.
The shape:
booking (webhook trigger)
└─ create-door-code (http) → on success
├─ text-guest (sms)
└─ email-guest (email)1. Catch the booking
Most channels (Hostaway, your PMS) can POST a webhook when a reservation is created. Point it at a
Cronable webhook trigger; the event arrives through the relay, so you don’t open a
port.
# jobs/rentals/booking.yaml
id: booking
name: New booking
group: rentals
type: webhook
hookId: 8b1f0c3a9d7e2f4c6a5b8e0d1c2f3a4bNo webhook from your channel? Airbnb’s own API is closed, but you can poll its iCal feed with a
calendar-watchtrigger instead. iCal carries no guest contact details, so pair it with a lookup in your PMS.
The booking payload is now available to the next job as {{ $parent.json.* }}.
2. Create the door code
An http job calls your smart-lock provider (Nuki, igloohome, Seam, …). Store the
API key as a credential — never inline.
# jobs/rentals/create-door-code.yaml
id: create-door-code
name: Create door code
group: rentals
type: http
schedule:
- afterParent: booking
on: succeeded
method: POST
url: https://api.example-lock.com/v1/codes
credential: lock-api # a stored bearer credential
body:
name: "{{ $parent.json.guest_name }}"
startsAt: "{{ $parent.json.check_in }}"
endsAt: "{{ $parent.json.check_out }}"The provider’s response (the code) flows on as {{ $parent.json.code }}.
3. Message the guest
Two jobs chained after the door code — one sms, one email —
both fire on success.
# jobs/rentals/text-guest.yaml
id: text-guest
name: Text guest
group: rentals
type: sms
schedule:
- afterParent: create-door-code
on: succeeded
to: "{{ $parent.json.guest_phone }}"
credential: twilio
message: |
Welcome! Your door code is {{ $parent.json.code }}.
Check-in from 3pm — reply here if you need anything.# jobs/rentals/email-guest.yaml
id: email-guest
name: Email guest
group: rentals
type: email
schedule:
- afterParent: create-door-code
on: succeeded
to: "{{ $parent.json.guest_email }}"
subject: "Your stay — check-in details"
body: |
Your door code is {{ $parent.json.code }}.
Full arrival guide: https://example.com/welcome4. Catch failures
Add an onFailure handler to the door-code job so a lock-API hiccup pages you
instead of leaving a guest locked out:
onFailure: alert-oncallThat’s the whole flow: a booking lands, a code is minted, the guest is messaged, and every run is on your canvas with the full history — no chat log to interrogate, no ports open. Extend it with a turnover job for the cleaner, a review request a day after checkout, or a nightly pricing check.