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.
| Berlin time | Sales (Mon–Sat 09–19) | Support (Mon–Fri 10–18) | Subtitle shown |
|---|---|---|---|
| Tuesday 11:30 | Available now | Available now | Greeting text |
| Tuesday 18:30 | Available now | Away — leave a message | Greeting text |
| Saturday 15:00 | Available now | Away — leave a message | Greeting text |
| Sunday 15:00 | Away — leave a message | Away — leave a message | Offline text |
| Tuesday 03:00 | Away — leave a message | Away — leave a message | Offline 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
- How to add a WhatsApp chat button to your Shopify store (2026)
- How to send Shopify order confirmations and shipping updates over WhatsApp with the official Cloud API
- Cash on delivery on Shopify: confirm orders over WhatsApp before you ship
- Recovering abandoned checkouts on Shopify with WhatsApp, the compliant way
- Why WhatsApp apps get your number banned: linked device vs API
- How a "free" WhatsApp app for Shopify ends up charging you
- Por qué una app de WhatsApp "gratis" para Shopify te cobra
- Pushdaddy or SuperLemon alternative: WhatsApp apps compared
- How to verify Shopify WhatsApp notifications were delivered
- Chat button still on your store after uninstalling the app?
- WhatsApp API pricing changes on Oct 1, 2026: Shopify impact
- Setting up the WhatsApp Cloud API with Meta's MCP and an AI agent