> ## Documentation Index
> Fetch the complete documentation index at: https://hellotars.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# What end users see

> How a conversation looks and behaves for the end user in the web widget, the full-page agent link, and WhatsApp.

This page describes a conversation from the end user's side. It also lists the safety behavior every agent has without configuration. To watch the same conversation from the dashboard, see [Watch conversations](/docs/guides/activity/watch-conversations).

## The three chat surfaces

An end user meets your agent in one of three places. The web widget and the full page are the same chat rendered in different frames, so almost everything on this page applies to both. WhatsApp renders the same flow through WhatsApp messages, and the differences are called out where they matter.

| Surface    | How the end user gets there                                                                   | What is specific to it                                                                                                              |
| ---------- | --------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Web widget | The launcher on your site, set up in [Embed the widget](/docs/guides/deploy/embed-the-widget)      | A header with a **Conversations** back arrow, a **Menu** with **Expand window** or **Collapse window**, and a **Close chat** button |
| Full page  | The agent link from [Share your agent link](/docs/guides/deploy/share-your-agent-link)             | A conversation sidebar with a **New conversation** button and a **Search chat** field                                               |
| WhatsApp   | A message to your connected number, see [Connect WhatsApp](/docs/guides/channels/connect-whatsapp) | Input types become WhatsApp reply buttons, lists, or numbered text                                                                  |

The header of the widget and the full page shows the agent's avatar and name from the Design page. The **Menu** button opens **Restart**, **Download transcript**, and, when the header auto-play toggle is on, **Turn on auto-read**. A **Draft preview** badge appears only when a member opens a draft preview link. When the **Footer disclaimer** field on the Design page has text, that text sits under the composer, for example "Tars can make mistakes."

## Message types

Every message sits in a bubble on the left for the agent and on the right for the end user. A message from a human agent shows that person's name above it. Times show on the end user's messages and under the latest agent message. Media messages, such as an image, a video, an audio clip, or a PDF, render as attachment cards, and images open in a full-screen gallery.

Between the bubbles the conversation shows centered pills for changes of control. Examples the end user can see are **Alex Morgan joined**, **Alex Morgan left**, **Conversation resolved**, **Handed back to bot**, **Livechat ended**, and **Bot resumed**. When the AI cannot answer, a pill reads **Couldn't reach the assistant** with a retry action.

While a human agent handles the conversation, hovering a message shows a **Reply to message** button. The quoted message appears above the reply, and selecting the quote scrolls back to the original.

## Typing and streaming

Flow messages arrive with typing dots before each bubble, in the order and with the delays set in the builder. While an AI Agent gambit works, the end user sees a thought pill that cycles through short status phrases. If AI reasoning is hidden, plain typing dots show instead.

The answer then streams in as the AI writes it, and incomplete Markdown renders cleanly during the stream. When the turn ends, the pill reads **Thought for 3s** and expands into the reasoning. What the end user sees here is controlled by three switches on the **Debug** tab of the Configure page.

* **Show AI reasoning to visitors** is on by default and controls the thought pill.
* **Show tool calls to visitors** is off by default and lists each tool the agent called. Show tool calls needs AI reasoning on. Turning reasoning off disables the switch and clears it.
* **Show knowledge citations** is off by default and shows numbered citation chips that open the source. On WhatsApp, the same switch controls whether a numbered **Sources** list is added below the answer.

Under each finished AI message a toolbar stays visible, with **Copy message** and the time. When **AI response feedback** is on in the **Goals & Behavior** tab, the toolbar also shows **Helpful** and **Not helpful**. Consecutive agent messages form one run, and copying from the last message copies the whole run. When the end user scrolls up in a long conversation, a round button with an unread count appears near the bottom and jumps to the latest message.

## How input types render

An input gambit renders its answer control on the gambit's own message, and the composer stays available for a typed answer where the type allows it. After the end user answers, the control locks in place and shows every choice that was made, so the transcript stays readable. The builder side of each type is in [Gambit mastery](/docs/guides/building/gambits/overview).

When the gambit has **Allow Skip** on, its last message reads "You can skip this by clicking on →", and an arrow button in the composer moves on without an answer.

| Input type      | What the end user sees on the web                                                                                                                                 | What the end user sees on WhatsApp                                                                                                                         |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Text            | The composer with the placeholder from the gambit, plus a **Send message** button                                                                                 | A plain text prompt                                                                                                                                        |
| Button          | Option pills labeled **Choose an option**, or **Select one or more options** for multi-select                                                                     | Up to three reply buttons, a list behind a **Show options** button for more, or a numbered text list                                                       |
| Card            | Scrollable cards with image, title, and description. With multi-select, picks collect as chips and send together                                                  | One text message per card, then the same reply buttons, list, or numbered text as a Button gambit                                                          |
| Date & Time     | A **Date picker**, **Time picker**, or **Date and time picker**                                                                                                   | A plain text prompt to type the answer                                                                                                                     |
| Star Rating     | Stars with the hint **Tap a star to rate**                                                                                                                        | A list behind a **Choose a rating** button, with rows such as **1 Star** to **5 Stars**. The low and high rating labels show under the first and last rows |
| Media Upload    | A drop zone that reads **Drag files here, or browse**, with the accepted types and size limit under it                                                            | A plain text prompt to send the file                                                                                                                       |
| Geo Location    | A **Share my location** button that asks the browser for permission                                                                                               | A WhatsApp location request                                                                                                                                |
| Auto Suggestion | Matching suggestions above the composer as the end user types                                                                                                     | The suggestions as reply buttons or a list, or a plain text prompt when there are none                                                                     |
| Language        | One pill per configured language                                                                                                                                  | The languages as reply buttons or a list                                                                                                                   |
| Redirect        | A countdown such as **Redirecting in 3...**, then the browser opens the target. With **Open in New Tab** on, a link with "Click the link to open it in a new tab" | The prompt with the target link as plain text                                                                                                              |

On WhatsApp, every question carries text. When a gambit has no message text, WhatsApp shows a default that says what to do.

| Input type                        | Default text on WhatsApp |
| --------------------------------- | ------------------------ |
| Button, Auto Suggestion, Language | Choose an option         |
| Star Rating                       | Rate your experience     |
| Date & Time                       | Choose a date            |
| Media Upload                      | Send a file              |
| Geo Location                      | Share your location      |

WhatsApp limits the length of a message. A text message longer than 4,096 characters arrives as up to three messages, and text past the third message is not sent. A question can be too long for its buttons or list. The question text then arrives first as a plain message, and the buttons or list follow with the default text above.

The Media Upload drop zone shows the file types and the maximum size the gambit allows, so the end user knows the limits before choosing a file. If the browser cannot provide a location, the Geo Location control shows a plain error such as **Location access was denied. Please allow location access and try again.**

## Generative interfaces

An AI Agent gambit can generate interface components inside a reply instead of plain text. Interacting with a component sends the result back to the agent as a normal reply, and the component then freezes like an input gambit does.

| Kind    | Components                                                                                                                           |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Input   | Forms, button groups, date pickers, time slots, file upload, OTP input, confirmation dialogs                                         |
| Display | Cards, data tables, charts, metric cards, timelines, maps, progress trackers, status lists, image galleries, accordions, code blocks |

## File uploads outside a Media Upload gambit

While an AI Agent gambit is running, or while a human agent has control, the composer shows an **Attach files** button. Chosen files appear in a tray above the composer with a remove action for each, and they upload as soon as they are added. The end user then sends the message with the files attached. During a scripted flow the composer has no attach button, and files come in through a Media Upload gambit instead.

Each file in the tray shows its name and a status. While it uploads, the status reads **uploading** with a spinner, and an image preview pulses until it is ready. A finished file shows its size, and a failed one shows **failed** with the message **Upload failed. Remove the file and try again.** The send button stays disabled until every upload has finished, and removing a file from the tray deletes its upload.

A message carries at most 10 attachments, and each file can be at most 10 MB. A larger file is refused with a message that names the file and the **Max 10MB** cap. An eleventh file shows **Max 10 attachments per message.**

Whether the agent can read an attached file depends on its **File Reading** tool. See [Built-in AI capabilities](/docs/guides/building/built-in-ai-capabilities#file-reading).

## Consent and OTP inside the conversation

Consent and OTP verification happen inside the conversation, not on a separate page. The switch **Require Data Consent** lives in the **General** tab of the Configure page. When it is on, the first thing the end user sees is the consent message with **Accept** and **Decline** pills.

The composer is blocked until one is chosen. After a choice the pills lock in place and the conversation continues or ends. How consent is stored is described in [Consent](/docs/guides/end-users/consent).

When a Text gambit of the email or phone subtype has **Verify via OTP** on, the end user first types the address or number. The composer then turns into six digit boxes labeled **6-digit verification code**. Under them sit a **Go back** button and a **Resend code** link that counts down before it can be used again.

Too many wrong codes lock the boxes until a new code is requested. If the page reloads mid-verification, the same attempt resumes.

## Human handover

When the flow escalates to live chat, a centered card with a dashed border shows the **Connecting Message** of the [Live Chat gambit](/docs/guides/building/gambits/live-chat). A new Live Chat gambit fills it with **Connecting you to a human agent…**. Under it a note reads `Typically <1 min`. When the human agent accepts, the card changes to **Alex Morgan joined**, with the fixed subtitle **Support specialist** and the time.

While the human agent types, an indicator with their name and avatar appears at the bottom of the conversation.

When the human agent hands the conversation back, a **Handed back to bot** pill appears and the flow continues. If the inbox has the CSAT survey on, a survey card asks **How was your conversation experience with us?** after the live chat closes. That card is described in [Collect CSAT ratings](/docs/guides/live-chat/csat).

## Restarts and past conversations

The **Restart** item in the header **Menu** starts a fresh conversation from the beginning of the flow. The earlier conversation stays in the end user's list, and the member still sees it in the Activity tab.

In the widget, the **Conversations** back arrow opens a list of the end user's earlier conversations with the agent, each with its last message preview. On the full page the same list is the sidebar. Selecting a conversation that is still open returns to it, and selecting a closed one opens it read-only. An empty list reads **No conversations yet**.

When the end user's most recent conversation was resolved, opening the chat again starts a new conversation instead of resuming an older open one.

## Voice playback and voice input

The **Voice & Audio** tab of the Configure page turns on text-to-speech and speech-to-text for an agent. Both are on for an agent that never changed them.

With text-to-speech and **Per-Message Speaker Icons** on, each AI message gets a **Read aloud** button in its toolbar. On the last message of a run, the button reads the whole run in order, and a ring marks the message being read.

With **Header Auto-Play Toggle** on, the header **Menu** gains **Turn on auto-read**, which plays every new agent message automatically. Auto-read starts off on every visit. The choice lasts for the browser tab and applies to that agent only.

With speech-to-text on, a **Voice input** microphone button appears in the composer. The end user records, selects **Stop recording and transcribe**, and the transcribed text lands in the composer for review before sending. If the browser has no microphone permission, the button tooltip reads **Microphone access denied**.

## Language

The conversation language comes from the embed configuration, the page URL, or the browser, and a **Language** gambit lets the end user switch mid-conversation. Once a language is chosen, every gambit text that has a translation shows in that language, and the choice stays visible as a locked pill in the transcript. Right-to-left text is detected per message.

When the Language gambit does not allow free text, the composer accepts only the language picker. Setting this up is covered in [Build a multi-language agent](/docs/guides/building/languages).

## Link safety and sanitized content

External links never open directly. A dialog titled **Open External Link** shows the destination first, and the end user can choose **Copy Link** or **Open Link**. Chat content is sanitized before display, and PDF attachments render in an isolated frame.

## Accessibility

* A **Skip to chat input** link lets keyboard end users jump straight to the composer.
* Keyboard focus stays inside the open widget while it is open.
* Screen readers receive message and status announcements, and every icon button has a spoken label.
* The chat honors the reduced-motion preference and turns off bubble and typing animations.

## Related pages

* [Watch conversations](/docs/guides/activity/watch-conversations)
* [Gambit mastery](/docs/guides/building/gambits/overview)
* [Design the widget](/docs/guides/deploy/design-the-widget)
* [Guardrails and safety](/docs/guides/building/guardrails-and-safety)
* [Consent](/docs/guides/end-users/consent)
* [Collect CSAT ratings](/docs/guides/live-chat/csat)
