Conversation History & Status

How much history the chat tab loads, how timestamps and typing indicators work, what the online dot means, and how a visitor's conversation survives between visits.

Overview

The chat tab is built around one long-lived conversation per visitor. This article explains what a visitor sees when they come back — how much of the past loads, what the live signals mean, and what happens to their history over time.

How Much History Loads

Opening the chat doesn't load everything ever said. It loads a recent window:

20 messages

The most recent messages in the thread.

Last 14 days

Only messages from the past two weeks are loaded initially.

A button at the top of the thread loads 20 more at a time, going back as far as the conversation goes. Its label depends on what's on screen:

  • "Load more messages" — there are messages loaded, and more exist above them.
  • "Show older messages" — the thread is empty because everything in it is older than 14 days.
That second case is worth understanding. A visitor who last talked to you three months ago reopens the chat and sees an empty thread with a "Show older messages" button, not their old conversation. The history isn't gone — it's one tap away, and your team still sees all of it in the Inbox.

Timestamps and Date Separators

Timestamps are relative and update themselves as the visitor watches:

just nowa few seconds agoa minute agoN minutes agoan hour agoN hours agoyesterdayN days ago

Messages are grouped by day with a separator between groups: Today, Yesterday, the weekday name for anything in the past week (e.g. Monday), then a date like Mar 12 — and Mar 12, 2024 once it crosses a year boundary.

Live Signals

Typing indicator

When an agent is typing, the visitor sees an animated bubble with the agent's avatar.

The typing bubble only appears for human agents. Vex doesn't show one, because its answer streams in live — the arriving text is the indicator.

Typing works in the other direction too: your team sees when a visitor is composing a reply. See Chat Actions.

Read receipts

Yaplet marks your messages as read when the visitor actually looks at them — when they open the chat tab, when they switch back to your browser tab, or when a message arrives while the chat is already open and visible.

Read state flows one way. Your team can see that a visitor has read a message, but the visitor never sees a "Seen" or "Delivered" marker on their own messages. There's no read-receipt pressure on the visitor's side.

Notification sound

A short sound plays when a message arrives from your side.

Unread badge

A red count appears on the Messages navigation icon when new messages arrive while the visitor is on the page.

The online dot

The dot on the header avatar reflects availability:

StateMeaning
GreenAn agent is assigned and online, or agents are available to take the conversation
RedThe assigned agent is offline, or nobody is available

The header text changes alongside it: the assigned agent's name once someone takes the conversation, "Waiting for an agent..." while a request is pending, or Vex with "Our bot will reply instantly" the rest of the time.

Persistence and Identity

Anonymous by default

A visitor can open the chat and start typing immediately. No name, no email, no signup, no consent step. Yaplet creates an anonymous visitor record behind the scenes — the country is derived from the connection, and nothing else is known until the visitor tells you or your site identifies them.

Detected crawlers and bots never get a visitor record at all, so they don't pollute your Visitors list under Audience → Visitors.

How the conversation is remembered

The widget stores a token in the browser's local storage that ties the visitor to their thread. It's valid for 90 days and refreshes as they keep using the widget, so an active visitor stays recognized indefinitely.

If browser storage is blocked — strict privacy modes, some third-party-cookie configurations — the token lives only in memory for that page view. The chat still works perfectly, but history won't survive a reload, and the next visit starts a fresh conversation.

Cookies are off by default. Your site can opt into an additional year-long cookie through the SDK if you want identity to persist more aggressively.

Identified visitors

If your site knows who the user is, it can identify them through the Yaplet SDK — but the call is rejected unless it carries a valid userHash. That hash is an HMAC-SHA256 of the user id, computed on your own server with the widget's identity secret and passed as the third argument to Yaplet.identify(). Without it the person stays an anonymous visitor and the SDK prints an error in the browser console.

The identity secret is on Brand → Chat widget → Install → Identity verification. Once a call is accepted, the conversation is attributed to that person — so their chat history follows them across devices instead of being tied to one browser.

Your team can also fill in details from their side; see Editing Visitor Information.

Staying in sync

The widget re-checks for new messages when the browser tab regains focus, so a visitor who's been away on another tab sees an up-to-date conversation on return rather than a stale one.

Erasing history

Visitors don't have a delete button. Removing a conversation is done from your side — see Erase Visitor Data for the GDPR-compliant path.

Conversations that go unused for a long time are also deleted automatically, on a schedule that depends on your plan. The exact retention periods are on GDPR & Data Privacy.