Triggers
Triggers are event-driven automations that respond instantly to guest lifecycle events. Unlike scheduled jobs that run at specific times, triggers fire when something happens—a booking is created, a guest checks in, or a document is uploaded.
Overview
Feature | Description |
Event-Driven | Fire immediately when events occur |
Conditional | Add filters to control when triggers execute |
Multiple Actions | Send messages, manage keys, update rooms |
Delay Support | Optional delay before action executes |
System Triggers | Pre-configured defaults for common workflows |
Requirements
Before setting up, ensure your HelloShift subscription includes:
Contactless Checkin plan (for all triggers)
Housekeeping Management plan (for room/cleaning triggers)
Accessing Triggers
Go to Automation > Triggers
View all triggers with their status
Click New Trigger to create a custom trigger

Understanding Triggers
How Triggers Work
Event Occurs: Guest checks in, booking created, etc.
Condition Evaluated: Does the guest match the filter?
Delay Applied: Wait specified seconds (if any)
Action Executed: Send message, issue key, update room
Trigger Components
Component | Description |
Name | Descriptive label for the trigger |
Event | What triggers the action |
Condition | Filter to control when trigger fires |
Action | What happens when triggered |
Delay | Seconds to wait before executing |
Status | Active (On) or Inactive (Off) |
Available Events
Triggers can respond to these guest lifecycle events:
Booking Events
Event | Fires When |
Guest Booking Confirmed | New reservation synced from PMS |
Booking Cancelled | Reservation is cancelled |
Guest Room Changed | Guest assigned to different room |
Check-in/Check-out Events
Event | Fires When |
Guest Checked In | Guest checks in (PMS status change) |
Guest Checked Out | Guest checks out (PMS status change) |
Pre-Check-in Events
Event | Fires When |
Guest Document Uploaded | Guest uploads ID during pre-check-in |
Guest ID Verified | Stripe Identity verification passes |
Guest Payment Received | Payment captured during pre-check-in |
Guest Agreement Signed | Guest signs registration card |
Guest Pre-Checkin Completed | All pre-check-in steps completed |
Available Conditions
Add conditions to control when triggers execute:
Guest Status Conditions
Condition | Matches When |
Always | No filter—always execute |
Guests Arriving Today | Guest's arrival date is today |
In-Stay Guests | Guest is currently in-house |
Guests Departing Today | Guest's departure date is today |
Booking: Past Check-in Time | Booking made after check-in time on arrival day |
Pre-Check-in Conditions
Condition | Matches When |
PreCheckin: Document Uploaded | Guest has uploaded ID document |
PreCheckin: ID Verified | Stripe Identity verified guest |
PreCheckin: Payment Received | Payment captured in pre-check-in |
PreCheckin: Agreement Signed | Guest signed registration card |
PreCheckin: ID, Payment & Agreement Verified | All three verifications complete |
Custom Conditions
Write custom logic using Liquid templates:
Condition | Description |
Custom Condition (Liquid) | Your own filter logic |
Note: Custom conditions require the custom_automation feature flag.
Available Actions
Key Management Actions
Action | Description | Default Delay |
Just Issue Key | Generate access code (no message) | None |
Issue & Send Key | Generate code and send to guest | None |
Revoke Key | Deactivate guest's access code | None |
Guest Communication Actions
Action | Description | Default Delay |
Send Post-Booking Snippet | Send Post-Booking message template | 300 sec (5 min) |
Send Post-Checkin Snippet | Send Post-Checkin message template | 1800 sec (30 min) |
Send Post-Checkout Snippet | Send Post-Checkout message template | 3600 sec (1 hour) |
Housekeeping Task Actions
Action | Description | Default Delay |
Set Cleaning Task: Clean | Assign "Clean" task to room | None |
Set Default Cleaning Task | Assign room's default cleaning task | None |
Remove Cleaning Task | Clear any assigned task | None |
Assign Default Cleaner | Assign room's default cleaner | None |
Room Status Actions
Action | Description | Default Delay |
Set Room Occupied/Clean | Mark room as occupied and clean | None |
Set Room Vacant/Dirty | Mark room as vacant and dirty | None |
Notify Cleaner on Checkout | Send notification to assigned cleaner | None |
Creating a Trigger
Step 1: Click New Trigger
Go to Automation > Triggers
Click New Trigger
Step 2: Configure the Trigger
Field | Description |
Name | Descriptive name (e.g., "Post-Checkout-Dirty") |
Event | Select the triggering event |
Condition | Select filter (or "Always") |
Action | Select what happens |
Delay | Seconds to wait (optional, default 0) |
Step 3: Save and Activate
Click Create Trigger
Toggle the trigger On to activate

System Triggers
HelloShift creates these default triggers for common workflows:
Post-Booking-Message
Setting | Value |
Event | Guest Booking Confirmed |
Condition | Always |
Action | Send Post-Booking Snippet |
Delay | 300 seconds (5 minutes) |
Default Status | Inactive |
Purpose: Send booking confirmation shortly after reservation is created.
Post-Checkin-Message
Setting | Value |
Event | Guest Checked In |
Condition | Always |
Action | Send Post-Checkin Snippet |
Delay | 1800 seconds (30 minutes) |
Default Status | Inactive |
Purpose: Welcome guests after they check in.
Post-Checkout-Message
Setting | Value |
Event | Guest Checked Out |
Condition | Always |
Action | Send Post-Checkout Snippet |
Delay | 3600 seconds (1 hour) |
Default Status | Inactive |
Purpose: Thank guests and request reviews after checkout.
Post-Booking-Key
Setting | Value |
Event | Guest Booking Confirmed |
Condition | Booking: Past Check-in Time |
Action | Issue & Send Key |
Delay | 0 (immediate) |
Default Status | Inactive |
Purpose: Immediately issue keys for walk-in guests booked after check-in time.
Post-Cancel-Key
Setting | Value |
Event | Booking Cancelled |
Condition | In-Stay Guests |
Action | Revoke Key |
Delay | 0 (immediate) |
Default Status | Inactive |
Purpose: Revoke access for cancelled bookings if guest was in-house.
Post-Checkout-Room
Setting | Value |
Event | Guest Checked Out |
Condition | Guests Departing Today |
Action | Notify Cleaner on Checkout |
Delay | 0 (immediate) |
Default Status | Inactive |
Purpose: Alert housekeeping when guests check out.
Common Trigger Examples
Walk-in Key Issue
Issue keys immediately for same-day bookings:
Setting | Value |
Name | Walk-in Key Issue |
Event | Guest Booking Confirmed |
Condition | Booking: Past Check-in Time |
Action | Issue & Send Key |
Delay | 0 |
Welcome After Check-in
Send welcome message 30 minutes after check-in:
Setting | Value |
Name | Welcome Message |
Event | Guest Checked In |
Condition | Always |
Action | Send Post-Checkin Snippet |
Delay | 1800 |
Mark Room Dirty on Checkout
Update room status when guest checks out:
Setting | Value |
Name | Room Dirty on Checkout |
Event | Guest Checked Out |
Condition | Always |
Action | Set Room Vacant/Dirty |
Delay | 0 |
Revoke Key on Cancel
Remove access when booking is cancelled:
Setting | Value |
Name | Cancel Key Revoke |
Event | Booking Cancelled |
Condition | Always |
Action | Revoke Key |
Delay | 0 |
Assign Cleaner on Checkout
Assign default cleaner when guest leaves:
Setting | Value |
Name | Assign Cleaner |
Event | Guest Checked Out |
Condition | Guests Departing Today |
Action | Assign Default Cleaner |
Delay | 300 |
Issue Key After Payment
Issue key once pre-check-in payment is received:
Setting | Value |
Name | Key After Payment |
Event | Guest Payment Received |
Condition | Guests Arriving Today |
Action | Issue & Send Key |
Delay | 0 |
Confirmation After Pre-Checkin
Confirm when all pre-check-in steps complete:
Setting | Value |
Name | Pre-Checkin Confirmation |
Event | Guest Pre-Checkin Completed |
Condition | Always |
Action | Send Post-Checkin Snippet |
Delay | 0 |
Custom Conditions with Liquid
For advanced filtering, use custom Liquid conditions.
How Custom Conditions Work
Write a Liquid template
Template must return
trueorfalseTrigger fires only if template returns
true
Available Variables
Access guest and stay information through the guest_stay object:
Variable | Type | Description |
| Boolean | Arriving today? |
| Boolean | Departing today? |
| Boolean | Currently in-house? |
| Boolean | Booked after check-in time? |
| Boolean | ID document uploaded? |
| Boolean | ID verified via Stripe? |
| Boolean | Payment received? |
| Boolean | Agreement signed? |
| Boolean | All verifications complete? |
| Integer | Number of nights |
| String | Guest type/tier |
| String | Booking channel |
Example: VIP Guests Only
{% if guest.guest_type contains 'VIP' %}true{% else %}false{% endif %}
Example: Direct Bookings Only
{% if stay.booking_source == 'Direct' %}true{% else %}false{% endif %}
Example: Long Stays (7+ nights)
{% assign nights = guest_stay.nights | plus: 0 %}
{% if nights >= 7 %}true{% else %}false{% endif %}
Example: Exclude OTA Guests
{% unless stay.booking_source contains 'Expedia' or stay.booking_source contains 'Booking.com' %}true{% else %}false{% endunless %}
Managing Triggers
Enabling/Disabling
Find the trigger in the list
Click the toggle to switch On or Off
Change takes effect immediately
Editing a Trigger
Click Edit on the trigger
Modify settings as needed
Click Update Trigger
Note: For system triggers, Event and Action cannot be changed.
Deleting a Trigger
Click Delete on the trigger
Confirm deletion
Note: System triggers cannot be deleted, only deactivated.
Viewing Trigger History
The "Last Run" column shows when each trigger last executed.
Delay Settings
How Delays Work
Delay is in seconds
Trigger waits before executing action
Delay starts when event occurs
Common Delay Values
Delay | Seconds | Use Case |
Immediate | 0 | Key revocation, room status |
5 minutes | 300 | Post-booking confirmation |
30 minutes | 1800 | Post-check-in welcome |
1 hour | 3600 | Post-checkout thank you |
Why Use Delays
Natural Feel: Instant messages feel automated
Processing Time: Allow PMS data to sync
Staff Response: Give staff time to intervene
Batch Prevention: Avoid rapid-fire messages
Best Practices
Trigger Naming
Use consistent naming conventions:
Post-Booking-Message- After booking is createdPost-Checkin-Welcome- After guest checks inPost-Checkout-Review- After guest leavesCancel-Key-Revoke- When booking cancelled
Delay Recommendations
Trigger Type | Recommended Delay |
Key issue (walk-in) | 0 (immediate) |
Key revocation | 0 (immediate) |
Room status update | 0 (immediate) |
Booking confirmation | 5 minutes |
Welcome message | 30 minutes |
Checkout thank you | 1 hour |
Testing Triggers
Keep trigger Inactive initially
Create a test booking
Manually activate and verify behavior
Enable for production use
Avoiding Conflicts
Don't create duplicate triggers for same event
Check existing system triggers before creating new ones
Use conditions to prevent overlapping execution
Triggers vs Scheduled Jobs
Aspect | Triggers | Scheduled Jobs |
When | On event occurrence | At specific time daily |
Speed | Immediate (with optional delay) | Runs at scheduled time |
Use Case | React to changes | Routine communications |
Example | Send key when booked after check-in | Send reminder day before arrival |
Use Triggers for:
Immediate responses to guest actions
Key management on booking/checkout
Room status updates on check-in/out
Use Scheduled Jobs for:
Pre-arrival messages (day before)
Mid-stay check-ins (morning of day 2)
Post-stay review requests (day after)
Troubleshooting
Trigger not firing
Possible Causes:
Trigger is inactive (Off)
Condition doesn't match guest
Event not occurring (PMS sync issue)
Solutions:
Verify trigger is active
Check condition matches expected guests
Verify PMS is syncing properly
Wrong message sent
Possible Causes:
Wrong action selected
Snippet content incorrect
Wrong trigger activated
Solutions:
Verify action matches intent
Check snippet content
Review active triggers for conflicts
Delay not working
Possible Causes:
Delay set to 0
Background job queue delayed
Trigger deactivated during delay
Solutions:
Verify delay value in seconds
Check job queue health
Ensure trigger stays active
Key not issued
Possible Causes:
Smart lock not configured
Room not mapped to lock
Condition blocked execution
Solutions:
Verify smart lock integration
Check room has lock assigned
Review condition requirements
Multiple messages sent
Possible Causes:
Multiple triggers for same event
Trigger and scheduled job overlap
Duplicate booking events
Solutions:
Review all active triggers
Check scheduled jobs for conflicts
Investigate PMS for duplicate events
Related Articles
Guest Automations - Scheduled message automations
Snippets & Templates - Create message templates
Contactless Check-in Setup - Pre-check-in configuration
Smart Lock Integration - Key automation setup