Skip to content
WaveSenda
Start free
Docs / Website chat

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.

The snippet
<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.

Tap and hold the message, then choose Reply
This is the reliable way. WhatsApp sends us the message you quoted, so there is nothing to guess. Your reply appears in that visitor’s browser within a second or two.

There are two fallbacks when quoting is inconvenient.

Instead of quotingWhat happens
Start your message with the code — #3H9E on my wayRouted to that visitor. The code is stripped, so they read "on my way".
Reply with nothing specialDelivered only when exactly one person has written in recently. With two waiting it is not delivered at all.
Ambiguity is never guessed
A reply that could belong to two visitors is dropped rather than sent to whichever was most recent. Delivering one stranger’s message to another is worse than delivering nothing, and it is not a mistake you can take back.

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.

The number you dial is not always the number WhatsApp uses
An account registered before a country renumbered its mobiles still answers on its old address. Cameroon added a leading 6 in 2016, so a number printed on a business card can reach nobody while a digit-shorter version of it reaches the same handset. The check resolves this and stores the address that works.

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.

Leave it on “follow the visitor’s browser”
The default reads the language the visitor’s own browser asks for, so one widget serves a site with readers in several. It is a better signal than the language of the page: somebody reading English because that is all you offer still reads Polish.

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.

Every field costs you some conversations
This is the honest trade. Somebody with a quick question and three required boxes in front of them closes the panel, and you never learn they were there. One optional field answered by half your visitors is usually worth more than three required ones answered by a fifth. If nothing is required, the visitor is offered a way straight past it — which is what optional means.

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.

Only when the shortcut is the entire message
Somebody writing “call /hours to check” means those words. Rewriting the middle of a sentence you typed would be worse than not having the feature at all.

Settings worth knowing about

SettingWhat it does
Office hoursOutside 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 appearsPath prefixes. /products covers the whole catalogue. Useful for keeping the bubble off checkout, where a distraction costs a sale.
Ask for an email afterWhen 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 toldWhich 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.
LanguageThe 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 startsWhich 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.
FontA 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.
Website chat · WaveSenda Docs