> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flexwash.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Customer Journeys

> Turn lifecycle moments into automated, multi-step messaging that grows membership, rewards loyalty, and recovers revenue, all from a single visual builder.

A journey is an automated messaging sequence tied to a stage in the customer lifecycle. You pick the lifecycle stage you want to act on, lay out the milestones that matter, and add follow-up messages that send on their own. Once enabled, a journey runs continuously: it watches for the right moments and sends the right message without anyone touching it.

Journeys turn the engagement strategy you would otherwise assemble by hand into a guided, visual builder. Each category ships with a sensible starting shape, so you can launch a complete lifecycle program in minutes.

<Note>
  Journeys are part of FlexEngage, a paid product that requires its own
  subscription on top of the point of sale. See the
  [FlexEngage Overview](/marketing-and-ai/flex-engage/overview) for what the
  platform includes.
</Note>

<Tip>
  Looking for the older approach of chaining individual messages with filters?
  That guide is still available under
  [Customer Journeys (Manual)](/marketing-and-ai/flex-engage/customer-journeys-legacy).
  For most teams, the journey builder below is the faster, clearer way to do
  the same thing.
</Tip>

## Journey Categories

Every journey belongs to one category. The category defines who the journey targets, what event starts it, and which milestones it can use. You can run **one journey per category** at a time, so each category is a single, focused program for that part of the lifecycle.

<CardGroup cols={2}>
  <Card title="Member" icon="user-check">
    Reward and retain active members. Starts when a member signs up, sends a
    thank-you or reward at each wash-count milestone, and drips win-back offers
    when a member goes quiet.
  </Card>

  <Card title="Retail customer" icon="bag-shopping">
    Nurture pay-per-wash customers toward membership. Progresses as a customer
    completes washes, encourages them to convert at each milestone, and drips
    reminders after a stretch of inactivity.
  </Card>

  <Card title="Payment failed" icon="credit-card">
    Recover revenue from failed membership payments. Sends a sequence of
    billing reminders that prompt customers to update their card details.
  </Card>

  <Card title="Cancelled member" icon="user-minus">
    Win back members who cancelled in person. Sends an initial win-back message
    and drips follow-up offers over the following days.
  </Card>

  <Card title="Involuntary churn" icon="heart-crack">
    Win back members lost when a card was declined and could not be recovered.
    Sends a win-back message at the next optimal time, then drips follow-ups.
  </Card>
</CardGroup>

## How a Journey is Built

A journey is a graph of two node types laid out on a canvas:

* **Milestones** are the lifecycle moments that anchor the journey, such as a signup, a specific wash count, or a failed payment. A milestone sends a message when a customer reaches it.
* **Drips** are follow-up messages that send a set number of days after a milestone. Use them to keep nudging a customer who has not moved forward.

### Building a journey

<Steps>
  <Step title="Open Journeys">
    Go to **Flex Engage > Journeys**. Categories you have not set up yet appear
    under **Available to create** with a preview of a sample journey.
  </Step>

  <Step title="Create a journey for a category">
    Click **Create Journey** on the category you want. The builder opens with
    the category's entry milestone already in place.
  </Step>

  <Step title="Add milestones">
    For categories that support more than one milestone (Member, Retail
    customer, Payment failed), add milestones to mark each stage you want to act
    on, such as a customer's 1st, 5th, and 10th wash.
  </Step>

  <Step title="Add drips">
    Add drip follow-ups beneath a milestone and set how many days after the
    previous step each one sends.
  </Step>

  <Step title="Configure each node">
    Select any node to open its settings. Choose its delivery channel, write
    the message, and set its send timing and thresholds.
  </Step>

  <Step title="Enable and save">
    Toggle the journey to **Enabled** and save. The journey starts running
    immediately. Leave it **Disabled** to save your work without sending.
  </Step>
</Steps>

## Milestones

The first milestone in every journey is its **entry milestone**, the event that starts the journey. It cannot be removed because it is the trigger. Depending on the category, the entry milestone is either a one-off event (a signup, a cancellation, a card decline) or a threshold (a wash count, a billing attempt).

Member, Retail customer, and Payment failed journeys support **multiple milestones**, so you can act at several points in the lifecycle. Cancelled member and Involuntary churn journeys are single-milestone programs: one entry milestone plus drips.

### Threshold ranges

Wash-count and payment-attempt milestones use a numeric threshold. Each one can be configured three ways:

| Mode            | Meaning                                         | Example              |
| --------------- | ----------------------------------------------- | -------------------- |
| **Exactly one** | Fires on a single count.                        | On the 5th wash      |
| **A range**     | Fires across an inclusive range.                | On washes 2 to 5     |
| **And above**   | Fires from a count onward, with no upper limit. | On wash 10 and above |

For a range, the milestone sends **once per unit in the range**. A "washes 2 to 5" milestone sends up to four messages, one at each of washes 2, 3, 4, and 5. An "and above" milestone has no send cap.

## Drips

A drip is a follow-up message that sends a set number of days after the step before it. Its **Days after** value is relative to the previous node: a drip set to 7 days under a milestone sends a week after that milestone's message, and a second drip set to 7 days sends a week after the first drip.

<Note>
  Drips are evaluated and sent **once per day**, so their timing is
  day-granular. A "7 days after" drip sends on the seventh day, not at a precise
  hour.
</Note>

Drips are available on Member, Retail customer, Cancelled member, and Involuntary churn journeys. **Payment failed journeys do not use drips.** Instead, you build a sequence of billing-attempt milestones, one reminder per failed attempt.

## Delivery Channels

Every node sends through one delivery channel. FlexEngage delivers each message only to customers who have the contact details and consent level required for that channel.

<Tabs>
  <Tab title="SMS">
    Send a text message. Reaches customers with a phone number on file and the
    required opt-in level. Best for time-sensitive offers with a clear call to
    action.
  </Tab>

  <Tab title="Email">
    Send an email with a subject line and formatted body. Reaches customers
    with an email address on file and the required opt-in level. Best for
    longer-form content.
  </Tab>

  <Tab title="Push Notification">
    Send a push notification to customers using your branded app.
  </Tab>

  <Tab title="No-op">
    Record that a customer reached the step without sending any message. Use
    this to track and segment a lifecycle milestone silently, without
    contacting the customer.
  </Tab>
</Tabs>

<Info>
  For SMS, double opt-in is strongly recommended to maintain 10-DLC compliance.
  You control this per channel with the journey's [opt-in levels](#opt-in-levels),
  and SMS defaults to double opt-in. See
  [SMS Requirements](/marketing-and-ai/flex-engage/sms-requirements) for setup
  details.
</Info>

## Opt-In Levels

Every journey enforces a **minimum opt-in level** for each messaging channel. This is the consent threshold a customer must meet before a journey message reaches them. You set it once per journey, at the top of the builder alongside the Enabled toggle, and it applies to every node of that channel type across the whole journey.

A journey has two independent controls:

* **SMS Minimum Opt-In Level** applies to every SMS node in the journey.
* **Email Minimum Opt-In Level** applies to every email node in the journey.

Push notification and no-op nodes are not gated by opt-in levels.

### SMS levels

| Level             | Who receives the message                                                                |
| ----------------- | --------------------------------------------------------------------------------------- |
| **None**          | Every customer with a phone number on file, except those who have explicitly opted out. |
| **Single Opt-In** | Customers who have opted in or double opted in.                                         |
| **Double Opt-In** | Only customers who have confirmed their opt-in (double opted in).                       |

SMS defaults to **Double Opt-In**, the strictest level.

### Email levels

| Level             | Who receives the message                                                                  |
| ----------------- | ----------------------------------------------------------------------------------------- |
| **None**          | Every customer with an email address on file, except those who have explicitly opted out. |
| **Single Opt-In** | Only customers who have opted in.                                                         |

Email defaults to **Single Opt-In**. Email has no double opt-in level.

<Warning>
  Setting a channel below its default opens your messages to customers who have
  not clearly consented. When you choose a level below the default, FlexEngage
  shows a confirmation you must accept before the change takes effect. You are
  responsible for ensuring your consent process meets all applicable laws and
  regulations.
</Warning>

## Send Timing

Milestone send timing depends on the milestone kind:

* **Immediate**: send as soon as the customer reaches the milestone.
* **Delayed**: send a set number of minutes later, up to **3 hours** after the milestone.
* **Next optimal time**: FlexEngage picks the best time to send. This is fixed for card-decline and payment-failure milestones because the event usually happens after hours during the nightly billing.

Signup, cancellation, and wash-count milestones support immediate or delayed sending. Card-decline and billing-attempt milestones always send at the next optimal time.

## Enabling and Disabling

Every journey has an **Enabled / Disabled** toggle. While enabled, the journey runs continuously and sends its messages. Disable it to pause the entire journey without losing your configuration, then re-enable it whenever you are ready.

Deleting a journey removes it from your list and stops every message it was running. If you only want to pause, disable it instead of deleting it.

## Node Insights

Select any node in the canvas to see how it is performing. Every node shows a round badge in its top-left corner with the number of customers whose most recent message in the journey came from that step, the members currently sitting there. This badge only appears once the journey is saved and the node is deployed.

<img src="https://mintcdn.com/flexwash/vzaCwMBCkmEQ1NOU/marketing-and-ai/flex-engage/customer-journeys/journey-node-last-message-badge.png?fit=max&auto=format&n=vzaCwMBCkmEQ1NOU&q=85&s=42d0efd13a1731ccefec1c97beb83c2e" alt="Journey node showing a last-messaged count badge" width="204" height="106" data-path="marketing-and-ai/flex-engage/customer-journeys/journey-node-last-message-badge.png" />

Selecting a deployed node opens its settings in two tabs, **Config** and **Insights**. A journey that has not been saved yet, or a node that has not been deployed, only shows the Config tab, since there is no send history to report.

The Insights tab reports:

* **Total sends (all time)**: every message this node has ever sent, across every channel.
* **Users last messaged here**: the same last-messaged count shown on the canvas badge, the members currently sitting at this step.
* **Date range**: choose a preset, such as Last 7 days or Last 30 days, or set a custom range. It defaults to the trailing 7 days.
* **Sends per day**: a bar chart of sends within the selected date range, one bar per day.
* **Sends**: a paginated, newest-first list of individual sends in the selected date range, each with its date, customer, and channel. Select a row to open that customer's profile in a new tab.

<img src="https://mintcdn.com/flexwash/vzaCwMBCkmEQ1NOU/marketing-and-ai/flex-engage/customer-journeys/journey-node-insights-tab.png?fit=max&auto=format&n=vzaCwMBCkmEQ1NOU&q=85&s=11b50f700f32a96f7c4000fc7ffb178b" alt="Insights tab for a milestone node, showing total sends, the last-messaged count, a sends-per-day chart, and a sends list" width="521" height="880" data-path="marketing-and-ai/flex-engage/customer-journeys/journey-node-insights-tab.png" />

<Note>
  Total sends and the last-messaged count are always all-time figures. Only
  the chart and the sends list are scoped to the date range you pick.
</Note>
