WhatsApp chat outside business hours: what shoppers should see

A WhatsApp button that is 'online' at 3 a.m. trains shoppers to expect a reply. How to set per-agent hours, route by role and write an offline message on Shopify.

A WhatsApp chat button makes a promise. A green icon in the corner of a product page says: tap this and a person will talk to you. Most of the time that promise is fine. At 3 a.m., or on a Sunday, or during the two weeks the founder is at a trade show, it is a small lie, and the shopper who taps it and hears nothing for nine hours does not think “they must be closed”. They think nobody is home. Some of them buy elsewhere in the meantime.

This article is about the unglamorous part of a chat button: what it says when you are not there, how it decides that, and how to split incoming chats between the people who can actually answer them. It uses Beacon Messenger for the examples, but the reasoning applies to any WhatsApp button on a Shopify store, including a plain wa.me link you pasted into the theme yourself. If you have not added a button yet, start with how to add a WhatsApp chat button to Shopify and come back.

Why “always online” backfires

WhatsApp is a personal channel. People use it with friends, and they carry those expectations to your store: a message sent is a message seen, and a reply within a few minutes is normal. Email tolerates a day. WhatsApp does not. So a button that looks identical at noon and at midnight sets the same expectation at both, and only meets it at one.

The fix is not to hide the button after hours. A shopper browsing at midnight still has a question, and a message they send now is a lead you answer in the morning. The fix is to tell the truth: we are away, here is when we are back, send your message anyway. That single sentence converts an unanswered ping into an expected wait, and expected waits do not cost sales.

How the button knows who is available

Beacon Messenger renders the chat button from a theme app embed, which means the whole thing is drawn by your theme from a configuration Shopify stores in your shop, with no call to our server when the page loads. Part of that configuration is a time zone and a weekly schedule for each agent. When the page renders, the script works out the current day and minute in the configured zone, checks each agent's schedule, and marks them Available now or Away, leave a message.

A few details in that sentence do more work than they look like:

  • The time zone is the store's, not the shopper's. Hours are expressed in one IANA zone, Europe/Madrid or America/Bogota, and evaluated in that zone whoever is looking. A shopper in Tokyo sees your Madrid team as online at 10:00 Madrid time, which is correct, because that is when someone will answer.
  • Each agent has their own schedule, and it is a list of day-and-range entries, not a single opening time. Monday to Friday 09:00 to 18:00 is the default; a part-timer can have Tuesday and Thursday afternoons only, and a range that crosses midnight, 22:00 to 06:00, is understood as an overnight shift.
  • Always available is a per-agent switch that skips the schedule. Use it for a number that really is watched around the clock, or for a business account with a chatbot on it, and for nothing else.
  • The status is computed in the shopper's browser at page load. Nothing is counted, nothing is sent to us, and the button keeps working during a Beacon Messenger outage because there is nothing for it to wait for.

What the shopper sees

With one agent, the button is a direct link: tap it and WhatsApp opens with that number and a prefilled message. With more than one, the button opens a small panel listing the agents, each with name, role, avatar or initials and a green or grey dot. The panel's subtitle is your greeting text when at least one agent is available and your offline text when none is. Tapping an agent, available or not, opens WhatsApp with their number.

Panel states by time of day for a two-agent setup in Europe/Berlin
Berlin timeSales (Mon–Sat 09–19)Support (Mon–Fri 10–18)Subtitle shown
Tuesday 11:30Available nowAvailable nowGreeting text
Tuesday 18:30Available nowAway — leave a messageGreeting text
Saturday 15:00Available nowAway — leave a messageGreeting text
Sunday 15:00Away — leave a messageAway — leave a messageOffline text
Tuesday 03:00Away — leave a messageAway — leave a messageOffline text

Notice that nothing is ever disabled. An away agent is still tappable, because the shopper's message is still worth having; the label just tells them what to expect. The default offline text reads “We're offline right now. Leave a message and we'll reply as soon as we're back.” It is worth replacing with something specific: “We answer WhatsApp Monday to Friday, 9 to 6 Berlin time. Message us now and you'll hear back first thing.” Specific beats reassuring.

Splitting chats by role instead of by person

The second reason to have several agents is not coverage; it is routing. A shopper asking whether a jacket runs small does not want to talk to the person who handles returns, and the returns person does not want a queue of sizing questions between them and the refund they are processing. On a linked-device app all messages land in one inbox and someone triages. With per-agent numbers, the shopper triages, at the moment they tap.

Role labels are free text, so they can be whatever your shoppers would recognise: Orders and delivery, Sizing and fit, Wholesale, Español. Plan limits apply to the number of agents rather than to what you call them: the free plan has one agent, Starter three, Growth ten and Pro as many as you like. Three is enough for most stores: one number for pre-sale questions, one for order problems, one for wholesale enquiries that the owner answers personally.

That last idea deserves a sentence. The agent list is the same on every page of the store, but each agent's prefilled message is their own and can carry the page context. A wholesale agent whose prefilled text starts “Hi, I'm interested in wholesale pricing for {page_title}” gets a conversation that already knows what the shopper was looking at, which is most of the triage done before anyone types.

The prefilled message is your intake form

Every agent has a prefilled message with three placeholders: {page_title}, {page_url} and {shop_name}. The default is “Hi! I have a question about {page_title} ({page_url})”. Fill them in well and the first message the agent receives says which product and which page, so the reply can be an answer rather than “which one do you mean?”. For an after-hours message this matters twice: the shopper has gone to bed, and the agent answering at 9 a.m. has only that first message to work from.

Two habits help. Keep the placeholder for the URL, even though it makes the message longer, because a tap on that link in WhatsApp puts the agent on the exact variant. And write the sentence in the voice you want the shopper to use, because they mostly do not edit it: “Hi, I'd like to know about sizes for {page_title}” produces a better opening than a blank box, and a completely blank box produces “hi”.

Testing without waiting for midnight

The status is computed from the configured time zone, so the quickest test is to change an agent's hours to a window that excludes right now, save, and reload the storefront. The dot goes grey and the subtitle swaps to the offline text. Put the hours back and it swaps again. Do this once on a phone, not just on a desktop, because the panel is a different size there and the offline text has to fit without pushing the agent list off screen. Then set a reminder to review the schedules when the clocks change; Beacon Messenger reads the IANA zone, so daylight saving is handled for you, but a team whose shift moved is not.

Where the automated messages fit

Business hours are for humans. The order confirmation, shipping update and cash-on-delivery messages that Beacon Messenger sends through the Cloud API are not gated by anyone's schedule, and should not be: a shopper who orders at 2 a.m. wants the confirmation at 2 a.m. The two systems meet when a shopper replies to an automated message. That reply lands on your WhatsApp Business number, which is usually one of the agents on the button, and the same expectations apply, so the offline text and the hours you set here are also, indirectly, the promise you make in every notification. Keep them honest and both channels benefit.

Frequently asked questions

Does the WhatsApp button disappear outside business hours?

No. The button stays, each agent shows Available now or Away with a note to leave a message, and the panel subtitle switches to your offline text. Shoppers can still send a message, which you answer when you are back. Hiding the button would lose those leads.

Whose time zone are the business hours in?

The store's. You set one IANA zone in Beacon Messenger, defaulting to your Shopify store's zone, and every agent's hours are evaluated in it, in the shopper's browser at page load. A visitor abroad sees your team as online exactly when your team is at work.

Can different WhatsApp numbers handle different kinds of questions?

Yes. Each agent has a name, a role label and their own number, and the button lists them so the shopper picks who to message. Roles like Orders, Sizing or Wholesale let the shopper route themselves, which saves the triage you would otherwise do in a shared inbox.

How many agents can I add to the chat button?

One on the free plan, three on Starter, ten on Growth and unlimited on Pro. Each agent has an independent weekly schedule or an always-available switch, and their own prefilled opening message with the page title and URL filled in.

More guides