Messages & Media
What visitors can write and send in the chat tab — the composer, attachments and their limits, how images and files render, and the safeguards that keep conversations healthy.
The Composer
The composer sits at the bottom of the chat tab and has three parts: an attach button, the text field, and a send button.
| Action | Behavior |
|---|---|
| Enter | Sends the message — with one exception, below |
| Shift + Enter | Inserts a line break |
| Typing a long message | The field grows as you type, then scrolls once it gets tall |
| Placeholder | "Write a message..." |
| Send button | Stays inactive until there's text or at least one attachment |
The field is focused automatically when the chat tab opens, and refocused after every send — so a visitor can keep typing without reaching for the mouse.
What Visitors Can Send
Visitors send plain text and files — that's it. Anything that looks like formatting is treated as literal text:
- Markdown isn't rendered. Typing
**bold**shows the asterisks. - HTML is stripped before the message is stored, on both the visitor's browser and the server.
- Pasted links stay as plain text in the visitor's own bubble.
This is deliberate. Visitor input is untrusted, so it never becomes markup. Messages from your team and from the AI are a different story — see Formatting in Agent and AI Replies below.
Attachments
Visitors attach files with the + button to the left of the text field, or by pasting an image straight from the clipboard.
Limits
These limits are enforced in the widget itself:
| Limit | Value |
|---|---|
| Allowed file types | WebP, PNG, JPEG, MP4, PDF |
| Maximum file size | 25 MB per file |
| Maximum files per message | 8 |
Choosing and previewing files
Attached files appear as a row of small previews above the composer. Images show a thumbnail; videos and PDFs show an icon. Each preview has an × to remove it before sending.
A message can be attachment-only — the send button activates as soon as one file is attached, with no text required.
What the AI can read
Only images are passed to Vex for analysis. PDFs and videos are stored and delivered to your team perfectly well, but the AI can't read their contents — so if a visitor uploads a PDF and asks "what's wrong with this invoice?", they'll need a human. This is a good moment for an agent handoff.
How Media Renders in the Thread
| Type | Appearance |
|---|---|
| Image | Rendered inline at full bubble width. Clicking opens the full-size file in a new browser tab. |
| Video (MP4) | A camera icon with the filename, as a download link — there's no inline player. |
| A document icon with the filename, as a download link. |
Messages that contain files but no text get a small paperclip header reading "Attachment" or "Attachments".
Message Bubbles
- The visitor's messages are right-aligned in your widget's brand color, with no avatar.
- Agent and AI messages are left-aligned on a muted background, with an avatar.
Under the last message in a run, a footer shows who sent it and when. AI messages carry a small sparkle icon and the name Vex; replies from your team show the agent's own name and profile photo. Consecutive messages from the same sender collapse into one avatar and one footer, so a burst of replies reads as a single block.
Formatting in Agent and AI Replies
Unlike visitor input, messages from your side of the conversation do support rich formatting:
- AI replies are written in markdown and converted to HTML — bold, italics, links, headings, and bulleted or numbered lists all render properly. While an answer is streaming, formatting is applied live, so the text is readable as it arrives.
- Agent replies support formatting from the Inbox composer. See Insert & Start for what your team can send.
- Links in AI replies are detected automatically, and bare URLs become clickable.
All of it passes through a strict sanitizer before it reaches the visitor's screen, so only a safe subset of HTML survives.
Link behavior
Links in messages get special handling:
- Links to your own Yaplet knowledge base open inside the widget, in the Knowledgebase tab — the visitor never leaves your page.
- Every other link opens in a new browser tab.
Interactive Bubbles
Beyond plain messages, several interactive elements appear as bubbles in the thread. They're covered in depth under AI Chatbot, but here's what a visitor may run into:
Choice buttons
Workflow options a visitor taps instead of typing. The choice is recorded in the transcript.
Data collection
Inline fields — text, number, dropdown, or email — that a workflow uses to gather details.
Product carousel
A swipeable row of product cards with image, title, description, and price.
Context forms
Fields the AI shows when it needs specifics before it can fetch an answer.
Limits That Protect the Conversation
Two safeguards can interrupt a send. Both show a small chip above the composer and clear on their own.
Sending too fast
Visitors can fire off a short burst of messages, but sustained rapid-fire is throttled to roughly one message every couple of seconds. While throttled:
"You're sending messages too fast — slow down."
Pressing Enter inserts a line break instead of sending, so nothing is lost — the visitor just waits a moment and sends.
Blocked words
If your organization runs a word filter and a message trips it:
"Your message contains a word that isn't allowed — please edit it."
The message and any attachments are put back in the composer, so the visitor can edit and resend rather than retype everything. The filter is checked instantly in the browser and enforced again on the server.
Banned visitors
If you've banned a visitor — with Ban visitor in the conversation's sidebar in the Inbox, where you set the reason, the duration and the level — their composer is disabled and the placeholder becomes "Messaging is temporarily unavailable". They can still read the conversation, but they can't send, attach, or reach an agent. Open bans are listed on Audience → Visitors → Banned visitors; Audience → Security keeps a separate Block list of its own and can also lift a manual ban.
Branding
A "Powered by ⚡ Yaplet" link sits under the composer. It can be hidden on plans that include the Remove branding permission — see Branding, Menu & Dark Mode.