What you need first
A journey is an automated customer path: a timed, branching sequence that reacts to what the person does. It can wait, check whether they bought, replied or booked, make a personal discount offer, put an abandoned cart back in front of them, invite them into your diary and remind you to call, with WhatsApp or email messages along the way, and it measures whether it reached the goal you set. Sales builds and runs them. Before you build the first one, four things have to be in place. Setting them up takes an afternoon, most of it waiting for Meta to approve a template.
- An agent with WhatsApp connected. Sales has no number of its own. Journeys go out from the WhatsApp number of one of your AssistantLabs agents, and when a customer answers, that agent takes the conversation. No agent yet? Connect WhatsApp first.
- Your store. Connecting Shopify brings in your customer segments and streams order and checkout events, which is what lets a journey react the moment someone leaves a cart. A WooCommerce store connects through the WordPress plugin instead (Settings, Store).
- Approved WhatsApp templates. A template is a message shape that Meta has approved ahead of time, with blanks like the customer's first name. You need one for anything you send to someone who has not written to you in the last 24 hours, which is almost every journey. Manage them under Settings, WhatsApp, Templates, or design one in Tools, WhatsApp Template Builder. Meta decides, and it can take from minutes to about a day.
- A phone you own to test with. The test sends real WhatsApp messages. Use your own number, not a customer's.
Business hours: A message that comes due at 3am waits for the next open time instead of going out or being dropped. Set your hours under Settings, Workspace, Business hours. One step can override them with “Send even outside business hours”.
Choose what counts as a lead
Before any journey, decide who the Sales module looks at. Leads are not a separate list you type in: they are picked from your conversations and your CRM by rules. Get the rules right first and the Leads board, the reminders and the journeys that start from it all work on the right people.
There are three places a lead can come from, and you can use any mix.
1. Your agent's conversations
This is the default. Everyone who wrote to your connected agent and is not a customer yet is a lead. Four rules shape it:
- Only people who wrote to us. On by default. A contact you imported who never sent a message is a prospect, not a lead.
- Hide paying customers. On by default. Only a live subscription hides a person: someone who cancelled comes back to the board.
- Labels that mark a lead. Empty by default, which means everyone who writes in. Pick labels and only contacts carrying one of them appear.
- Never a lead. Labels that always keep a contact off: suppliers, partners, your own numbers, spam.
2. New records from your CRM
Pick a CRM record type (sign-ups, inquiries) and each new record of it becomes a lead. Then tell Sales which of the type's fields holds the email and which holds the phone: a record with neither cannot become a lead. Three things to know:
- From now, never the history. The moment is stamped when you save, and only records created after it come in. Switching on a Sign-ups source puts tomorrow's sign-ups on the board, not the four hundred from before.
- Each record is imported once. It becomes a contact of your agent, linked back onto the CRM record, and from then on it is an ordinary lead with a timeline. Nothing is sent to them.
- It skips “only people who wrote to us”. Like a lead you add by hand, a CRM record never wrote to the agent. Every other rule still applies. Up to five record types can feed one board.
3. CRM companies that enter a relationship
A customer who churns is somebody to win back. Switch on Churned customers and each company that churns after that moment lands on the board again, marked with its own lead type (“Churned customer” by default). Only churning is offered today, because it is the one relationship the CRM dates. Sales reaches the contact linked to the company first, then the email and phone fields you choose, then the company's own email or phone.
- What Claude doesCalls add_lead with the name, phone, a note and the next step. If your agent has spoken to that number already, the existing contact is adopted with its history instead of a second copy.
- What you will seeA confirmation with a link to the lead. It says outright that nothing has been sent to her.
- What to checkThe stage (it defaults to the entry stage) and that the note says where she came from.
Open your avatar menu, click Workspace, then Lead board under Leads. The first card is Who is a lead.
- Leave Only people who wrote to us and Hide paying customers on unless you have a reason.
- Under Never a lead, click the labels that should keep a contact off the board.
- Under New CRM records click a record type. It opens a row with Email field and Phone field: pick which field of the record holds each. The row reads Starts when you save, then New ones since the date.
- Under CRM customers who left click Churned customers if you want them back on the board.
- Click Save.
Not sure? Leave the defaults. Every conversation, inbound only, paying customers hidden. It is a good board for the first week. Tighten it once you see who is on it.
Connect your store
Do this once. Afterwards your Shopify customer segments appear in the audience picker and checkout events start reaching Sales.
Connecting Shopify happens on Shopify's own approval screen, so that step is in the app. Claude checks your workspace and tells you what is set up and what comes next.
- What Claude doesCalls get_sales_overview: the workspace state, every audience group with its size and every journey with its status.
- What you will seeA plain list of what exists. If no agent is connected, or the agent has no WhatsApp channel ready, it says so, because nothing can send until that is fixed.
- What to checkThat the agent named is the one whose WhatsApp number you want customers to see. Then switch to the In the app tab for the Shopify step.
Open your avatar menu, click Workspace, and find Shopify under Store in the left rail.
admin.shopify.com/store/willow-and-co. Type just the handle; we add .myshopify.com for you.- Type your store handle in Your Shopify store domain. Just the handle, for example
willow-and-co. Sales adds.myshopify.com. - Click Connect Shopify. You are sent to Shopify to approve the permissions.
- Approve, and you land back on the same page with your customers imported.
admin.shopify.com/store/willow-and-co. Type just the handle; we add .myshopify.com for you.When it is done the page reads Live. with the segments that were imported. An Add the recommended customer segments step may follow: it offers a few segments worth having and creates the ones you approve in your store.
Made a segment in Shopify afterwards? Segments are a copy taken when you connect. A new one does not appear by itself: click Sync segments here, or Re-read from Shopify in the audience picker.
What a journey is made of
A journey is a path with four parts: who enters, the steps they move through, what makes them leave, and what counts as a win. The steps are not only messages. They are the things you would do by hand if you had the time: wait a day, see whether they bought, offer a discount, send the cart back, get them into the diary, note that you should call.
Who enters
A group you attach (a Shopify segment, people who talked to your agent, a segment you built, an uploaded list), or a trigger: a new order, a new customer, or an abandoned checkout. Example: attach your “Lapsed customers” segment, or start from an abandoned checkout.
Messages
WhatsApp or email. On WhatsApp a message is written by the AI at send time, written by you, a product card from your store, or an approved template. Outside the 24-hour window only a template or a product card gets through. Example: the template that asks if they are still thinking it over.
Waits
Minutes, hours or days after the previous step, or a clock time such as “next day at 10:00”. A message that falls due outside your business hours waits for the next open time. Example: wait one day.
Conditions
Branch on what happened: they replied, purchased, booked, or unsubscribed, or on the cart (total, number of items, a returning customer). Each branch can continue, exit, or hand the person to another journey. Example: if they purchased, exit; if not, continue.
Wait for an event
Hold the journey until a real event: a paid order, a cart left behind, or a reply. Example: pause until they place a paid order, or carry on.
Offers
A personal discount code, created in your Shopify store for that one customer. You choose a ladder (for example 10% off for everyone, or more for a bigger cart) or let the AI pick inside limits you set, and how long the code lasts. Example: 10% off, good for two days.
Carts
A one-tap checkout link: the cart they left, products you picked, or a cart the AI builds. It goes out as your approved cart template. Example: the link back to their abandoned cart.
Booking
Send the booking page for one of your services, or let your agent finish the booking inside the conversation. The appointment itself, the calendar entry and the confirmation belong to Booking, not to Sales. A condition can then check whether they booked. It needs Booking connected.
Reminders for you
The one step that faces inward: it puts a dated to-do on the lead (“call them back, due in two days”). The customer sees nothing. Because it is written on the lead, it shows on the Leads board and in your daily reminder.
When it stops
Stop rules apply to everyone and are checked before each step: stop when they purchase, and when they reply either hand the chat to your agent or just stop. An unsubscribe always stops it.
What counts as a win
Two different things. The goal is a sentence that steers what the AI writes. The outcome is what gets measured: a purchase, a purchase with the discount, a sign-up, a course sign-up, or a happy customer. Each is counted from a real signal inside an attribution window (7 days by default, set for you), and a journey with no outcome shows “No outcome set” rather than a zero.
Claude drafts the messages, waits, conditions, offers and event steps. The cart, booking and reminder steps, the entry trigger and the outcome are set in the app.
- What Claude doesMaps each part to a step type with create_journey: message, a delay, a condition on purchased and an offer. It saves a draft and sends nothing.
- What you will seeA draft with those four steps, like the mock above minus the reminder.
- What to checkThat the condition's “no” lane continues. And that the offer's code is shared in the message after it, which goes out as an approved template so it reaches the customer inside or outside the 24-hour window.
Every block is in the Add a step menu between cards: Send a message, Add a condition, Make an offer, Send a cart, Wait for an event, plus Remind us, and Book a time when Booking is connected. The wait is the clock pill between two cards.
abandoned_cart_nudgePick your first journey
Start with one journey and let it run for a week before you add another. Each of these uses more than messages.
Abandoned checkout (start here)
Path: a template message right away, a wait of a day, a condition on whether they purchased (exit if so), then an offer and a cart link back to what they left. Who enters: anyone who reached checkout, left an email or phone and did not pay. Sales waits a short while (about 15 minutes by default) so it never messages someone mid-payment, and enrolls only checkouts no order claimed. No list is needed. Checkouts with no email or phone are skipped. Win: a purchase, or a purchase with the discount.
After a first purchase
Path: audience is a Shopify segment of first-time buyers (if your store has one); a thank-you, a wait of a few days, then a message asking how it went and a condition on whether they replied. A reply is handed to your agent. Win: choose A happy customer, which is judged from the conversation itself. Anything they write back lands on the Leads board.
Win back lapsed customers
Path: audience is a segment of customers who went quiet (your lapsed customers, or the recommended “At-risk loyal customers”); a template message, a wait, a condition on a reply or a purchase, then an offer with a personal code. Win: a purchase with the discount. Everyone in the segment enters, and so does anyone who joins it later.
An enquiry that should become an appointment
Path: a booking step that sends the booking page for your service, a wait of a day, a condition on whether they booked, and if not a reminder step that puts “call them back” on your list. Needs: Booking connected. Booking sends the confirmation and the appointment reminders; the journey gets the person into the diary and tells you if they did not book.
Why abandoned checkout first: The customer already wanted something, the trigger is automatic, and the result is easy to read: did the cart turn into an order.
Build the journey
A journey is a column of steps on one timeline. The first version is deliberately small: two messages and a wait between them. Once it runs, add a condition and an offer from the section above.
Describe the sequence in plain words. Claude finds your approved templates, matches each step to one whose wording fits, and saves the journey as a draft.
- What Claude doesReads your templates with list_whatsapp_templates, then saves the journey with create_journey: two message steps, each on a named template, the second with a one-day delay. It returns a link to the draft.
- What you will seeA new Draft in Journeys with two message steps. Nothing has been sent and nobody is enrolled.
- What to checkThat each step names the template whose words say what the step should. That the delays are what you asked. That the audience card is still empty: choosing who enters is the next section.
No template fits? Ask for one, and keep the approval in your hands:
- What Claude doesDrafts the wording and waits for your yes. Only then does it send it to Meta with create_whatsapp_template. It sends nothing to any customer.
- What you will seeThe template with a status of pending. A journey can use the new name straight away but cannot go live until Meta approves it.
- What to checkThe words go out in your business's name, so read them as a customer would. A name can only use lowercase letters, numbers and underscores.
You can keep refining the same draft by asking Claude to change it (update_journey). It reads the journey first and sends the full step list back, so ask for one change at a time and re-read the result.
Open Journeys in the top navigation and click New journey.
In the builder, the timeline runs top to bottom. Click the name at the top to rename it. Then add the steps:
abandoned_cart_nudge- Click Add a step between cards and choose Send a message.
- Under How it's written pick Template. Free-form AI and Your own are greyed out whenever the customer would be outside the 24-hour window, which is always the case for an abandoned cart.
- Under Choose an approved template pick one whose words fit the step. Its line reads Approved · variables are filled in automatically per customer.
- Under Map variables to customer fields, point each blank (for example the first one) at a field such as the first name. Anything you leave unmapped goes out as the template's example text.
- Click the clock pill between two steps to set the wait. Right away sends it as soon as the customer enters.
- Click Save at the top.
abandoned_cart_nudgeNeed a template that does not exist yet? Open Tools, WhatsApp Template Builder: design it, preview it and submit it for approval. Come back to the journey when it shows as approved.
Choose who enters
There are two ways people get into a journey, and the first journey uses the first one.
Start from an abandoned checkout
This is a trigger, not a list. Once the journey is live, anyone who leaves a checkout and does not buy enters on their own. In the app you set it from the cart step:
- Click Add a step and choose Send a cart.
- Under Cart contents pick Their abandoned cart. The card says Needs an abandoned-cart trigger.
- Click Start from abandoned checkout. A message confirms: Journey now starts from an abandoned checkout.
abandoned_cart_nudgeAttach a group
For a welcome or a win-back, the audience is a group: a named list of people. A group can come from a Shopify segment, from people who have talked to your agent, from a segment you built, or from a list you uploaded. Every pick becomes a group, and a group runs at most one journey.
If your audience lives in a spreadsheet, Claude can turn it into a group and attach it. Paste the rows into the chat (a name and a phone or email each).
- What Claude doesCreates the audience with create_group, then binds it with attach_group_to_journey.
- What you will seeThe group name and its size, and the journey's audience card now showing it. The tool says outright that nothing has been sent and the journey is not on.
- What to checkThe people count matches your list. Each person needs a phone or an email to be reachable. Only an uploaded list stores its people: a group built from a Shopify segment or a label is read live.
For a Shopify segment or a label: Do it in the app, where the live match count is visible before you commit. Switch to the In the app tab.
No audience yet. Attach a group — that’s who enters this journey. A CRM segment stays current (its members re-read each time you send); a CSV is a fixed list.
Attach a groupClick Attach a groupabandoned_cart_nudge- Click Attach a group on the purple Audience card.
- Pick where the people come from: Shopify segments (everyone in the store, including people who never messaged you), Your agent (people who actually talked to your agent), Segments (ones you built) or Lists you uploaded.
- Click a row. It becomes a group and attaches in one go. The card shows the count and the group as a chip.
- Need a segment that does not exist? The picker has a Build a segment button at the bottom.
abandoned_cart_nudgeTest it on yourself
Before a customer sees anything, send the journey to your own phone. The test goes through the real engine and the real WhatsApp number, one step at a time.
Have Claude review the draft first, then send the real test from the app.
- What Claude doesReads the journey with get_journey and your templates with list_whatsapp_templates, and lines the two up.
- What you will seeA step-by-step read-out, with a note on any template that is still in review or was rejected, and any free-text WhatsApp step.
- What to checkRead each message as the customer would. Then send the real test from the In the app tab.
First save yourself as a test user. Open the avatar menu, click Workspace, then Test users under Testing.
- Click Add test user and fill the phone with a number you own. The email is optional and only decides which Shopify segments they land in.
- Click Save.
- Open the journey and click Test at the top. It is greyed out until a group is attached (“Attach a group first”).
- Under Test as choose your test user, then click Start the message test.
- Click Send next message to walk the journey, or Play the whole journey to run every message in order with the waits cut short.
abandoned_cart_nudgeTurn it on
A journey sends nothing while it is a draft. Setting it to Live is the moment it starts working on real customers, so it is a click you approve first.
Ask Claude whether a journey is ready, then tell it to turn it on. It switches it on once you say yes.
- What Claude doesReads get_sales_overview and each journey with get_journey, and checks the templates they name.
- What you will seeA ready / not ready line per journey with the reason.
- What to checkAnything it lists as missing. Say yes and it sets the journey to Live. The In the app tab shows the same switch.
abandoned_cart_nudge- Click the Draft pill at the top. It turns into Live and a message confirms: Journey is now live. Click it again to pause.
- An abandoned-checkout journey needs nothing more. Each person who qualifies enters on their own.
- A group journey starts when you click Send to audience now on the Audience card (or Run for enrolled at the top). A dialog asks Run this journey now?: click Run for everyone. People already enrolled are skipped, and it cannot be undone.
abandoned_cart_nudgeRead the results and the leads
Two places tell you what happened. The journey's Monitor view says who is where. The Leads board says who needs a human, warmest first.
- What Claude doesCalls get_journey_stats: the funnel for one journey, with a per-step breakdown.
- What you will seeEnrolled, sent, failed, replied, offer codes issued and redeemed.
- What to checkThe failed number first. A step where every send failed is almost always a template problem.
- What Claude doesget_journey_audience ranks people hot, warm or cold with the reason, and get_participant opens one person: their progress, what is due next and what happened.
- What you will seeHot is a purchase or a recent reply. Someone it could not reach (no usable number) is listed as unreachable, not as cold, because that is a data problem to fix.
- What to checkWhat the person actually said in the conversation.
And when you have spoken to someone, keep the record true:
- What Claude doesRecords the call with log_outcome: it moves the stage that outcome is wired to, stamps the day you last spoke and sets the follow-up.
- What you will seeA confirmation with a link to the lead. If it guessed an outcome id your workspace does not have, the reply lists the real ones.
- What to checkThe note says what was actually said: six weeks later that is the part somebody reads.
The journey. Open it and click Monitor at the top.
The leads. Click Leads in the top navigation. Everyone who wrote to your agent and is not a customer yet is here, warmest first, with what you owe each of them.
- Use the chips: Call today, Overdue, They are waiting, Never called and Going cold.
- Click a row to open the lead: the conversation, the activity and the journey they are in.
- Log what happened with the buttons on the row. One press records the call, moves the stage and sets the next follow-up.
Your first week
A pace that works, and does not ask for more than an hour a day:
- Day 1. Check the agent's WhatsApp is connected, connect Shopify, and look at your templates. Submit the ones you are missing, so Meta's review runs overnight.
- Day 2. Build the abandoned-checkout journey: two messages, the cart step, the trigger. Save yourself as a test user.
- Day 3. Test it on your own phone, including a real checkout you leave behind. Fix the wording. Set the journey to Live.
- Days 4 to 6. Open Monitor once a day. Look at failed first, then at replies. Answer the people who wrote back.
- Day 7. Open Leads and work through Call today. Decide whether the second journey is the welcome or the win-back.
Common mistakes
- Real customers in Test users. A test is a real message. Only numbers you own.
- Free text where a template is needed. Outside the 24-hour window a free-text step is skipped, not sent late. If a journey reaches people who have not written to you, every message is a template.
- Setting Live before the template is approved. A template that is still in review cannot go out. Check its status first.
- A group, but no Live. Attaching a group says who the journey is for. It sends nothing and does not turn the journey on.
- Their abandoned cart, but no trigger. The cart step asks for the trigger. Click Start from abandoned checkout, or the journey has no way to start by itself.
- Reading “No outcome set” as no sales. Set the outcome on the Audience card.
- A missing segment. A segment you created in Shopify after connecting is not there until you sync.
Setting this up for a client? Do the connect and test steps in their workspace, with their phone as the test user, and walk them through the Monitor view once it is live. What the Sales app is for, and how it fits the rest of the product, is in The Sales app.