Lunachat
Features

Every customer conversation on one screen

Website chat and WhatsApp messages land in the same inbox. When the same person writes from both, they show up as one contact.

Inbox

One inbox for every channel

No separate app per channel. Web chat and WhatsApp sit in the same list, answered by the same team with the same shortcuts.

  • Web and WhatsApp threads in one real-time stream over WebSocket
  • Claim a conversation, assign it to a teammate, close it when it's done
  • Tag by topic: refund, shipping, quote
  • Internal notes the customer never sees
  • Typing indicators while the other side writes
Web chat

A chat widget that doesn't slow your site

Two lines of script on your page. The widget runs inside its own shadow tree: your CSS can't break it, and it can't touch your design.

  • Under 40 KB gzipped — the limit is enforced at build time
  • Loads async, so it never blocks your page render
  • Shadow DOM isolation, no style collisions
  • Colour and welcome message configured from the panel
  • Same experience on phone and desktop
  • Images, PDFs and documents, plus emoji
  • Falls back to a contact form when nobody is online; replies arrive by email
Live visitors

Who is on your site right now

The visitors screen lists everyone browsing your site at this moment, the people who have not written yet included: which page they are on, where they came from, how many pages they have seen, how long they have been around.

  • The list is live: a row appears the moment someone opens a page, updates in place as they navigate, and flashes when it moves
  • Grouped by what they are doing: in a chat, active, waiting
  • Every row carries the current page, city and country, device, browser, page count and visit length
  • Open the page a visitor is looking at in a new tab, or jump straight to their conversation
  • Group by activity, site, current page, city or country
  • Automation is built on the same signal: what you watch here is what a flow can act on
Automation

Start the conversation before they do

A visitor who spends two minutes on your pricing page gets a message on their own. You build the flow on a canvas in the panel: one trigger, conditions, steps. The message appears as a bubble next to the chat button first, and the conversation only opens once the visitor answers.

  • Triggers: time on page, delay after the widget loads, exit intent
  • Conditions: page URL, city, country, device, referrer, UTM, and your own fields sent with lunachat('set', …)
  • Steps: a message with up to five quick replies, wait, branch on the answer, tag, assign to an agent, hand off to a human
  • Working-hours gate: a flow will not fire when nobody can answer
  • Frequency brakes: a 30-minute floor per visitor, once per flow or once per session, and a dismissed bubble stays gone for the session
  • Flows are per site and start switched off; one flag stops all automation at once
  • How often each flow fired and how many were answered, right in the list
WhatsApp

Your existing WhatsApp numbers

Connect the number already on your phone by scanning a QR code. No Business API application, no approval queue, no per-message fee. If sales and support keep separate numbers, up to five of them run from the same panel.

  • QR pairing, live connection status, automatic reconnect
  • Up to five numbers; one dropping does not stop the others
  • The inbox shows which number a thread came in on, and replies go back out from it
  • Text, images, documents and voice notes — both directions
  • Session credentials stored encrypted with AES-256-GCM
Contacts

One person, one record

A visitor who chatted on your site and writes on WhatsApp a week later doesn't start from zero. Both identities merge into one contact and the history stays.

  • Multi-identity contacts: web visitor plus WhatsApp number
  • Full conversation history from the contact card
  • Visitor context: which page, which city, which device
  • Contact tags and contact-detail capture
Canned responses

Never type the same answer twice

Shipping times, refund policy, opening hours — the answers you write dozens of times a day get a shortcut.

  • Trigger by shortcut: type /shipping, get the text
  • Search across saved replies
  • Usage counter, so you can see which answers actually earn their place
Team

Built for more than one person

Invite your team by email. Who picked up which conversation, and who wrote what, is never a guess.

  • Email invitations
  • Two roles: admin and agent
  • Connect several websites to one workspace
  • Sign in with Google
Reports

How your team is doing

The reports screen opens with four measures and how each moved against the previous equal range, then the agent table. Charts sit at the bottom, because a manager looks at who did what before looking at a curve.

  • Fixed ranges: 7 days, 30 days, 90 days, 6 months, 1 year
  • Agent table: conversations claimed and answered, median first reply, resolution time, current open load
  • Conversation volume split by web and WhatsApp, plus an hour-by-weekday heatmap
  • Tag distribution: what your customers actually ask about
  • The outcome picked at closing: resolved, sale, lost
  • A clickable warning under the summary when open conversations sit unassigned
  • Dashboard: today's conversations, open and unassigned counts, agents online, a 14-day chart
Developers

Drive the widget from your own code

A small JavaScript API ships alongside the embed snippet. Open the chat from your own button, attach what you already know about the visitor, and verify a signed-in user with a token your server signs.

  • Verified identity with identify: your server signs the token, so name and email show as confirmed in the panel
  • Your own fields with set: plan, cart total, customer number
  • open, close and shutdown to drive the widget from your interface
  • Events with on: ready, open, close, message, automation
  • Language pinning: lunachat('init', …, { lang: 'en' })
  • Full reference: /en/docs/widget-js-api
Security

Data that stays in Turkey

Customer conversations are personal data. Lunachat runs on a server in Turkey, and workspaces are separated at the database level.

  • Hosted in Turkey, KVKK/GDPR-aligned processing
  • PostgreSQL row-level security: one workspace cannot query another's rows
  • TLS end to end, encrypted channel credentials
  • Message content is always rendered as text — no XSS surface

At a glance

Widget size
< 40 KB gzipped
Setup
2 lines of script
WhatsApp
QR pairing, up to 5 numbers
Hosting
Turkey
Realtime
WebSocket
Free plan
No credit card
Live visitors
Real-time list, page and location
Automation
Conditional flows, canvas editor
Reports
Team, volume, response time, tags
JS API
identify · set · open · on

Frequently asked

Get your inbox in one place

No credit card. Create the account, paste the script, send yourself the first message.