Overview
You can build from scratch or use a template to speed things up. Each workflow runs step-by-step, executing the logic you define with dynamic inputs along the way.
Workflow
1. Choose a Starting Point
- Start from a blank canvas for full customization
- Or select from templates to get a head start on common use cases
2. Add a Trigger
- Every workflow begins with a trigger (e.g. “Message received” or “Tag added”)
- This determines when the workflow starts and what data is passed into it
3. Add Actions and Logic Blocks
- Hover over your trigger and click the plus icon to add blocks from the action library
- You can:
- Send a reply
- Assign a teammate
- Add a delay
- Inject AI
- Notify someone via Slack or email
- Branch the logic with conditional paths
- Configure each block in the right-hand panel
- Use variables like
{{contact.first_name}} or {{created_date}} to personalize messages or logic based on the data from the trigger
Internal variables and custom fields
Workflows can reference all internal variables — such as contact properties, reservation data, and system values — as well as any custom fields you’ve defined. All of these are available by name in the variable picker.
Listing and reservation custom fields
If you have a PMS connected, any custom fields on a listing or reservation are pulled in automatically and become available to workflows. You can also reference custom fields you track yourself without a PMS — just type the field name when prompted.
To reference a custom field, use the variable picker’s Custom Field… option under Listing or Reservation and enter the name exactly as it appears on the reservation sidebar. The lookup is an exact match, so Cost Center and cost_center are different fields.
5. Publish Your Workflow
- Once it’s set up, click Publish to activate it
- You can pause or update a workflow anytime
6. Run the Workflow
- Automatically, based on the trigger
- Manually, using a “manual run” trigger block
Last message channel
The last message channel option sends a message to the most recent channel used for communication with a contact — whether that communication was inbound (received from the contact) or outbound (sent to the contact).
When a workflow step is configured to use the last message channel, the workspace resolves the target channel by inspecting the full message history for the contact and selecting the channel of the most recently recorded interaction.
If no message history exists for the contact — neither sent nor received — the workflow step will fail. The last message channel cannot be resolved without at least one prior interaction on record.
Key semantics:
- Inbound and outbound messages both qualify. The most recent interaction determines the channel, regardless of direction.
- Channel resolution is per-contact. Each contact’s message history is evaluated independently within the workspace.
- No fallback channel. If the contact has no message history, the step does not fall back to a default channel — it fails.
Plain-text channels (SMS and WhatsApp)
When sending messages via SMS or WhatsApp workflows, these channels are plain-text only. Formatted hyperlinks (e.g. [text](url)) and internal URL shortening are not supported — they will appear as raw text to the recipient.
To share a link in an SMS or WhatsApp action, include the full URL in the message body:
Visit us at https://example.com for more information.
Most devices and messaging apps automatically render full URLs as clickable links for the recipient.
Notes & Tips
Variables update dynamically based on the specific message or contact in each run.
Deleting or reordering blocks: Select a block or path and hit backspace to remove; drag connections to rewire logic.
Permissions: Some workflows require access to inboxes or integrations like Slack — you’ll be prompted if needed.