# Triggers & steps — full reference

> Every trigger and step type, and when to use each.

_Source: https://hexafloww.com/docs/automations/triggers-and-steps_

---

## Triggers

**Email & campaigns**

- **Opened a campaign** / **Didn't open in time** — after a specific campaign (the "didn't open" trigger takes a wait window).
- **Clicked a link** — a link in a campaign.
- **Campaign delivered** — a contact was sent a campaign.
- **Unsubscribed**.

**Contacts**

- **New contact created** — a contact is added (manual or API; not bulk import).
- **Added to a segment** — a contact joins a segment.
- **Contact went inactive** — no opens/clicks for a set period.

**WhatsApp**

- **First WhatsApp message** — a contact's first inbound message.
- **Replied to a WA campaign** — a reply to a broadcast.
- **WhatsApp opt-in** — an organic opt-in (inbound message or START keyword), not a bulk import.

**Shopify** — abandoned a cart, order placed / shipped / delivered / cancelled. See [Shopify order & abandoned-cart messages](https://hexafloww.com/docs/automations/shopify-messages.md).

## Steps

- **Wait** — pause for a set time before the next step.
- **Send an email** — send a template to the enrolled contact.
- **Send WhatsApp message** — send an approved template (respects consent and frequency rules).
- **Add to segment** / **Remove from segment**.
- **Check contact (if/else)** — branch into a *yes* and a *no* path. Conditions can check contact fields, campaign engagement, and WhatsApp **delivered / read / replied** status (optionally "within X hours").

> [!NOTE]
> Bulk CSV import deliberately does **not** fire the "Contact created" or "WhatsApp opted in" triggers — otherwise one import could enroll thousands of contacts at once.
