Website chat
A visitor types on your website. The message arrives on your WhatsApp. You reply from WhatsApp and it appears back on the page. You never open a console.
Install it
Create a widget in the console, then paste the snippet it gives you just before the closing </body> tag. That is the whole installation.
<script async src="https://wavesenda.com/widget.js"
data-wavesenda-key="wsk_…"
data-api="https://api.wavesenda.com/api"></script>Add your site to the widget’s allowed origins in the same screen. Without it the bubble loads and then refuses to talk, which looks like a broken widget rather than a missing setting.
Replying is the part people get wrong
A message arrives on your WhatsApp with a short code at the top, like #3H9E. That code is how we know which visitor a reply belongs to — several people can be chatting on your site at once, and to WhatsApp they all look like the same thread.
There are two fallbacks when quoting is inconvenient.
| Instead of quoting | What happens |
|---|---|
Start your message with the code — #3H9E on my way | Routed to that visitor. The code is stripped, so they read "on my way". |
| Reply with nothing special | Delivered only when exactly one person has written in recently. With two waiting it is not delivered at all. |
What the visitor sees
The bubble, your greeting, and the conversation. Their own messages carry a state line — Sent, Delivered, Read — which follows what happened to the message on your WhatsApp, not whether it reached our servers. If your number is disconnected they will see it stop at Sent.
They also see three dots while you are composing a reply, so the gap between a question and an answer reads as somebody thinking rather than nobody being there.
When a chat does not arrive
The usual cause is the forwarding number. Open the widget in the console and press Check beside it: that asks WhatsApp whether it recognises the number, which is not the same question as whether the number is correct.
Everything a visitor sends is stored before it is forwarded, so a forwarding failure costs you a notification and never costs them their message. Open chats are in your inbox either way.
Speaking the visitor’s language
Pick a language for the widget and its own words change with it — the message box, Send, Sent and Delivered, the form before the chat, every validation message. Twelve are shipped: English, Polish, Spanish, Portuguese, French, German, Italian, Dutch, Turkish, Russian, Ukrainian and Arabic. Arabic flips the whole panel right to left.
Your own text is never translated. The title, subtitle, greeting, away message and button labels are yours, in whatever language you wrote them — so a widget set to Polish with an English greeting shows your English greeting, which is almost certainly what you meant if you typed it.
An AI agent answering the widget is separate and already multilingual — it detects the language a visitor writes in and replies in it, whatever the widget is set to.
Asking who they are first
A widget can ask for a name, an email, a phone number, or any combination, before the message box appears. You choose which, and whether each one is required or can be skipped.
What they give you rides along on the first WhatsApp message with the enquiry, under the visitor’s code — so the number is in front of you, on the same screen, to press and call back.
Somebody who has chatted before is never asked again: their browser still holds the thread, and asking twice for something they typed last week reads as a form that was not listening.
Saved replies
The answers you type ten times a day become four characters. Add them in the console, then send the shortcut from WhatsApp as the whole message — /hours, or #3H9E /hours when more than one person is waiting. The visitor reads the answer, not the shortcut.
Settings worth knowing about
| Setting | What it does |
|---|---|
| Office hours | Outside them the away greeting is shown instead of the usual one. Messages are still accepted — a question asked at midnight is worth having, and pretending otherwise loses it. |
| Where it appears | Path prefixes. /products covers the whole catalogue. Useful for keeping the bubble off checkout, where a distraction costs a sale. |
| Ask for an email after | When nobody has replied for this long, the visitor is offered a way to be reached. They close the tab and the answer has nowhere to go otherwise. |
| What you are told | Which of page, name, device and history rides along with the first message. First message only, because repeated under every line it buries the message itself. |
| Language | The widget’s own buttons and labels. Blank follows each visitor’s own browser, which is right for a site with readers in several languages. It never touches the text you write yourself. |
| Before the chat starts | Which of name, email and phone number a visitor is asked for, and whether each is required. Off by default, because a form in front of a question loses some of the people who had one. |
| Font | A stack and a stylesheet. The page’s own font cannot reach inside the widget, so a bubble in the system face on a styled site reads as bolted on. |