Dialogue · Design notes · UX benchmark
← Design notes

Messenger UX benchmark — WeChat · WhatsApp · Telegram · us

We tell users "chat with AI," but the thing on screen is a messenger. So users arrive with messenger reflexes — long-press a line, swipe to reply, pin a chat, search a word, tap the title to manage the chat. This note holds our room up against the three apps that set those reflexes — WhatsApp (the global ergonomics bar), WeChat (our China-centric users' actual muscle memory), and Telegram (the power-user toolkit — and the one that, like us, runs everything off the chat title) — across style, interaction, and function, pulling out only the borrowings that fit a room full of AI personas.

We are not a messenger and shouldn't pretend to be one. But we look like one — so the right move is to borrow the interaction grammar people already know (bubbles, message menus, quote-reply, pin/mute, search) and refuse the social & transactional machinery that assumes a real second party (read receipts, status, payments, mini-programs). Every suggestion below is filtered through that one rule.

The frame why these two, and the one filter

Our users judge us on two ladders at once. As an AI chat app we're measured against ChatGPT · Claude · Gemini (covered in Rendering & speed). As a messenger — which is what the UI is — we're measured against the apps below. This note is about the second ladder.

the global bar

WhatsApp

3B users. The reference for chat ergonomics: swipe-to-reply, the long-press menu, reactions, the morphing mic→send. Its 2024–26 refresh is recent and well-documented.

the home turf

WeChat 微信

Our users' default. Restraint as philosophy (用完即走 — "use it and leave"). Sets the reflexes a China-centric audience brings: hold-to-talk, 置顶/免打扰, omni-search, 引用.

the power toolkit

Telegram

The richest per-chat surface. Runs management off the title menu — members, mute, shared media, leave — the very pattern we already open with our chat-info panel. Plus reactions, quote-a-fragment, pinned bars, folders-as-tabs.

the proof

All ship AI

Telegram bots have lived in-chat for a decade; Meta AI answers by @mention; WeChat added Yuanbao 元宝 as a chat "friend" (Apr 2025). AI-as-a-contact-in-bubbles is proven at billion-user scale.

The one adaptation that changes everything

WhatsApp and WeChat only ever separate two sides: me vs them. They lean on left/right + one colour and they're done. Our room has to separate me vs persona A vs persona B vs another humanN speakers in one stream. So we keep their supporting grammar (grouping, tails, time-batching, max-width, quote-chips) but the load-bearing "who said this" job falls on our per-seat colours + persona cards + name labels. Read every borrowing below through that lens.

Borrow — the interaction grammar

  • Message-level actions — long-press menu, quote-reply, copy, save.
  • Directed address — @mention picker, swipe-to-reply, "有人@我" flag.
  • List triage — pin (置顶), mute (免打扰), mark-unread, search.
  • A per-chat hub — one title-menu home for members · mute · search · leave (Telegram).
  • Familiar input — hold-to-talk STT gesture, morphing mic→send.
  • Activity, not surveillance — "typing / conferring" indicator.

Refuse — the social & transactional machinery

  • Read receipts & last-seen — there is no real second party to surveil.
  • Status / Stories / Moments / Channels — no contact graph to broadcast to.
  • Pay / Mini-Programs / Red Packet — we are not a super-app.
  • View-once / disappearing / peer media — not a media-exchange product.
  • A forced, non-removable AI button — Meta's backlash; we invite, not impose.

At a glance the same two screens, three apps

Two screens decide a messenger's feel: the list (how you triage many conversations) and the thread (how a single conversation reads). Here they are, side by side. These are faithful redraws, not screenshots.

The list

avatar · name · snippet · time · unread count · mute · pin — six fields per row, plus filter pills and bottom search. Dense and glanceable.
9:41
微信(3)
🔍 搜索
妈妈
[语音] 0:12
9:382
房东
好的,明天见
9:02🔕
看房群 (8)
[有人@我] 阿丹:谁联系中介了?
周三
Same fields, plainer skin. Note 置顶 (sticky row, tinted), the mute dot-not-count, and the [有人@我] "someone mentioned you" tag.
9:41
Telegram🔍
AllUnreadGroups
M
Mum 📌
Voice message (0:12)
9:382
L
Landlord
You: I'll transfer the deposit
9:02🔕
F
Flat-hunt group
Dan: did anyone call the agent?
Wed5
Same six fields — plus chat-folder tabs (All / Unread / custom) and a powerful global search. The list itself is a triage workbench.
9:41
Your chats+ New
Three Shanghai flats — which appreciates?
Li · Doronin
with Dan, Mary
Einstein vs Bohr — the dice
Einstein · Bohr
Weekend trip planning
MrBeast
Notebook 12
Two fields: topic title + cast colours. No snippet, no time, no count (just a dot), no search, no pin/mute. Rich identity, thin triage.
Fig 1 — the list. Ours names chats by topic and paints the cast in seat colours (an identity win the other three can't match). But it drops the triage layer all of them rely on: snippet preview, timestamp, unread count, search, pin, mute — and Telegram even tabs the list into folders.

The thread

Tail-on-first grouping · inline time + blue ticks · quote-chip with sender colour · a reaction pill clinging to the bubble · "Dan is typing…".
9:41
看房群 (8)···
上午 9:01
阿丹
徐汇那套,有人联系中介了吗?
还没,我中午打。
玛丽
阿丹:徐汇那套…
那我负责浦东那套。
🎙 😊+
Avatars on both sides, always. Time-gap batched (one stamp, not per line). 引用 quote strip. Composer leads with the voice toggle; "+" is the feature drawer.
9:41
FFlat-hunt group
8 members, 3 online
🔍
📌PinnedAgent visit — Sat 2pm
D
Dan
Did anyone call the agent about the Xuhui flat?
Not yet — I can do it at lunch.9:03
M
Mary
I'll handle Pudong instead.
👍 2 · 🔥 1
😊Message📎🎤
The thread that taught us the pattern: a tappable title + live subtitle ("8 members, 3 online" ↔ "typing…"), a pinned-message bar, and multiple reactions per message.
9:41
Three flats — which… ▾
Li Ka-shing
Keep some back, whatever you choose. Liquidity is the real asset.
You
Which of the three appreciates most?
Doronin is weighing in…
The panel is gathering…🎙
Seat-colour personas + serif voice + de-emphasised "You" bubble (a real win). The egg is our typing-indicator, done richer. But no per-message actions, no quote-reply, no reactions.
Fig 2 — the thread. Our bubble system is arguably richer than any of them (identity colour, serif voice, the conferring "egg"). The gaps are what happens when you touch a message (§②) — and the one surface we already own but under-use, the title menu (§④, Telegram's home turf).

① Style bubbles, rows, colour, type

Style is where we're already strong — and where the lesson is mostly "keep your nerve." Both apps converged on the same bubble mechanics; we should match the mechanics while keeping our richer identity layer.

Bubble mechanics — what to match

MechanicWhatsAppWeChatTelegramUs — nowTake
Who-said-it cueside + colourside + colour + avatarside + colour + avatarside + seat colour + avatar + name + roleWin. We carry the heaviest load (N speakers) and solve it best.
Consecutive grouping tail on first onlypartialStack same-speaker turns tighter; tail/avatar on first of a run.
Timestampsinline per-msggap-batched (~5 min)inline per-msgper-turn cost pill onlyAdopt WeChat gap-batching — quieter, fits our turn rhythm.
Max width~75–80%~70–75%~75%96%Consider tightening persona bubbles for readable line length.
De-emphasised "you"green (loud)green (loud)blue (loud)quiet grey, muted "You"Win. Our own guide calls it "WeChat-style" — keeps the eye on the panel.

Chat-row anatomy — the real style gap

A list row is a triage instrument. All three pack five-to-six fields into one glanceable line; we show two. The cost isn't beauty — it's that you can't tell what happened in a chat without opening it.

Row fieldWhatsAppWeChatTelegramUs — nowVerdict for us
Identity (avatar / name)✓✓ topic + cast coloursKeep — our differentiator.
Last-message snippetAdopt — "Li: keep some back…" in seat colour.
TimestampAdopt — relative ("2m", "Wed").
Unread signalcount badgecount badgecount badgedot onlyAdapt — a turn-count badge; dot is fine too.
Pin / mute icon +foldersAdopt — see Function.

Colour, type & restraint

we already do this Restraint + one reserved accent. WeChat's whole brand is visual quiet (用完即走); WhatsApp's 2024 refresh reserved its green for "you / unread / needs attention" and nothing else. Our cream/coral + Source-Serif identity is the same instinct — and we go further, reserving colour for AI identity only (humans stay grey). Hold this line.
sharpen Theming & accessibility. WhatsApp hand-tunes light vs dark (not auto-inverted); WeChat ships Follow System by default plus a prominent Text-Size slider and an Easy Mode that reads messages aloud — table stakes for an older China audience. We have light/dark/e-ink (ahead) and a reading-font control, but the room is light/dark only and there's no "follow system" default. Add Follow-System as default + surface one Text-Size control; our TTS already is Easy-Mode read-aloud.

② Interaction what happens when you touch a message

This is the biggest gap. On all three a message is a live object — long-press it, swipe it, react to it, quote it (Telegram even lets you quote a selected fragment). On us a message is mostly read-only: the one thing you can do is select text and save it. For a room where the whole point is reacting to what a persona just said, that's a lot left on the table.

The long-press menu — the centrepiece gap

WhatsApp (June 2026): reaction strip on top + anchored card of ~5 actions + overflow. The cross-platform standard (also iMessage, Telegram).
9:41
那我负责浦东那套。
复制
转发
收藏
引用
多选
撤回
删除
WeChat: a dark floating bar at the bubble — dense 2-char labels: Copy · Forward · Favorite · Quote (引用) · Multi-select · Recall · Delete. Voice adds "Convert to text".
9:41
Li Ka-shing
Keep some back — liquidity is the real asset.
✦ Save line
…and that's the whole menu.
Us: one action — select text → "✦ Save line" to the Notebook. No copy, no quote, no react, no read-aloud, no per-message anything. Long-press does nothing.
Fig 3 — touch a message. The single highest-leverage borrow in this note: a long-press message menu shaped like the cross-platform standard, holding the actions an AI room needs.

What our message menu should hold

We don't copy their items — we copy their frame (reaction strip + anchored card) and fill it with actions that make sense when the other party is a persona.

ActionWAWeChatTGUs nowFit for an AI room
Quote-reply → the panel 引用✓✓ fragmentAdopt+ quote a persona's exact line — or, like Telegram, a selected fragment; the snippet is fed to the next turn as context. Killer feature for a multi-persona room.
Copy / Copy as Markdowncode onlyAdopt — basic, currently missing on prose bubbles.
Save line → NotebookStar收藏Saved MsgsKeep — move it into the menu (it's hidden behind text-selection now).
Read aloud (TTS)voice msgsEasy Modein md-viewerAdopt — speak this turn; mini-player w/ 1×/1.5×/2×.
Regenerate / "again"AI-native — re-run a turn; no messenger has it, we should.
React (👍/👎/…)*✓✓ multiAdapt — a no-API feedback signal the panel can read.
Pin / Edit ownoverflowrecallAdapt — pin a key turn (→ §④); edit-own re-runs the prompt.
Multi-selectLater — batch save/copy turns.
Recall / Delete-for-allSkip — nothing was "sent" to a person.

* WeChat has no bubble emoji-reactions (its analogue is the 拍一拍 "pat"); borrow the reaction interaction from iMessage/WhatsApp but keep the visual WeChat-plain.

Gestures & voice — the China-native reflexes

borrow Swipe-to-reply. A short right-swipe on a persona bubble arms a quote-reply — and, uniquely for us, can pre-fill an @mention of that persona, so a one-handed gesture aims the next turn at a specific voice. Dovetails with our @-mention model.
borrow Hold-to-Talk (按住 说话). The most "feels-native-to-China" gesture there is: a left-side mic/keyboard toggle → press-and-hold to record → floating bubble → slide up to cancel. Our DashScope STT is planned but unwired (the mic is display:none today). When we wire it, clone this exact gesture — but default to WeChat's convert-to-text outcome (transcript drops into the composer as editable text), since our "other side" is an LLM, not a person who wants your audio.
we already do this Activity, not surveillance. WeChat deliberately ships no read receipts (less "social pressure"); the honest signal is "is the other side working?". Our egg ("Doronin is weighing in… 8.4s") is exactly that — a typing-indicator done richer, masking SSE latency in a familiar idiom. And our send doubles as ■ Stop to take the floor back — an AI-native touch neither messenger needs.

③ Function capabilities, filtered hard

Function is where the relevance filter does the most work — most of what makes WeChat a "super-app" is exactly what we must not build. The matrix below marks every capability Adopt / Adapt / Skip for an AI-persona room.

CapabilityWAWeChatTGUs nowVerdict & why
Pin / sticky-top 置顶Adopt — rooms accumulate; pin the live few.
Mute 免打扰Adopt — silence background-conferring rooms (→ §④).
Mark unreadAdapt — cheap triage flag.
Archive / trashKeep — already solid (+ fork, a one-up).
Search (across chats)✓✓✓✓Adopt — WeChat's omni-box is central muscle memory; pairs with no-folders.
Search (in-room)Adopt — long transcripts need find + next/prev + from:persona.
Folders / labelslists✓✓ tabsAdapt — Telegram's folders-as-tabs beat folders; a light All/Unread/Pinned strip.
@-mention picker✓✓Win — id-anchored tokens + per-room cast autocomplete.
"@我" room flagAdapt — flag the row when the panel addresses you.
Typing / activity indicator✓✓✓✓Win — the egg + live "X is typing…"; add a title subtitle (§④).
Voice input → STTplannedAdopt — wire DashScope w/ hold-to-talk gesture.
Voice messages (audio)Skip — LLM wants text, not stored audio.
Read receipts / last-seenSkip — no real party to surveil (WeChat agrees).
Status / Stories / MomentsSkip — no contact graph to broadcast to.
Payments / Mini-appspay✓✓botsSkip — we are not a super-app.
Media / artifact gallery✓✓ ∞ drawerKeep+ — surface it as a counted Artifacts tab in the hub (§④).
AI as a contactMeta AIYuanbao✓✓ bots✓✓Win — our entire product; Telegram bots are the decade-old proof.
Inline buttons / commands✓✓Adapt — buttons under a reply + /commands; steer the next turn without typing (§④).
Model-effort toggle 快/深via model menuAdapt — surface Quick/Deep as one tap; pairs with cost meter.
the proof AI lives inside the messenger grammar — and we're already there. Meta AI is summoned by @mention in any thread and only sees the message that mentions it (explicit context scoping). WeChat added Yuanbao 元宝 as a chat "friend" (Apr 16 2025) with a Quick / Deep Thinking toggle. Both confirm our core bet — talk to AI the way you talk to people — at billion-user scale. Two concrete borrows: (1) be deliberate about what each turn "sees," the way Meta scopes Meta-AI's context; (2) lift WeChat's 快速/深度思考 as a user-facing effort dial that rides our existing reasoning-on/off variants and our cost meter. And the cautionary note: Meta's forced, non-removable AI button bred real backlash — our invite / retire model already does this right (AI invited, never imposed).
borrow WeChat's 浮窗 "park-it" window → our artifact pane. WeChat lets you minimise a long read to a draggable edge bubble and reopen it later. Our big Mermaid / code / KaTeX artifacts could minimise to a floating chip the same way — so studying a diagram doesn't bury the live conversation.

④ The title menu one hub for the chat — Telegram's home turf, and ours

Telegram runs almost all per-chat management off one tap on the title: it opens a single scrollable hub — identity → mute → shared media → members → governance → search → pinned → leave. This is the one pattern where we already own the surface: our chat title ▾ opens a chat-info panel today. We don't need to invent the door — we need to put more behind it, in an order users already know.

we already do this Our chat-info panel exists. Tapping the title ▾ already slides down a panel with per-model cost rows, the cache bar, the model switcher + theme, read-only Temperament/Intensity dials, the persona members grid (invite +/retire −), the people list, and a rename field. The top of our hub is richer than Telegram's — it's our value (cost transparency, the panel's governance). The lesson is purely additive.

Their hub vs ours

FFlat-hunt group8 members, 3 online
NotificationsOn ›
MediaFilesLinksVoiceGIFs
DDan
MMary
AAmy
+Add
Administrators3 ›
Invite Links
Search this chat🔍
Leave group
One scrollable hub, fixed order: identity → mute → shared-media tabs → members → governance → search → leave (destructive last). New capabilities slot into the rail; nothing spawns a new top-level menu.
Three flats — which appreciates?5 personas · 2 people · DeepSeek v4 Pro
Cost · cache bar$0.48 ›
Model · Temperament · Intensity
Li
ДDoronin
+invite
retire
Rename room
Mute this roomADD
Artifacts galleryDiagrams 4Code 2Math 1ADD
Search in roomADD
Pinnedthe task ›ADD
Archive / Leave roomADD
We nail the top — cost, cache, model, dials, cast (distinctively ours). The hatched rows are what Telegram teaches us to add, in its order.
= Telegram teaches us to add this row have it
Fig 4 — the hub. The closest thing to a free win in this whole note: we built the panel; Telegram shows the five rows worth adding to it. The biggest is Artifacts — we generate diagrams, code, and math every turn, but they have no counted gallery in the hub.

What to add, in Telegram's proven order

Slot (Telegram order)TGUs nowWhat we add to the panel
Identity / renameKeep at top — plus our cost/cache (uniquely ours).
Notifications / MuteMute this room (durations / "until I reopen") — silence a room's badge & TTS.
Shared-content tabsinline onlyArtifacts tab — Diagrams · Code · Math · Links, with counts. Highest-value add.
Members✓✓Have it (persona grid) — add tap → persona card detail.
Governanceadmin/permsOur model switcher + dials are the governance analog. Keep.
Search this chatSearch-in-room over the transcript, with a from:persona filter.
PinnedPinned bar + list — pin the task/prompt or a key artifact.
Exit (last)in list onlyArchive / Leave room — destructive, separated, at the bottom.
borrow Pinned-message bar. Telegram pins a tappable bar under the header — tap to jump, ▾ for the full pin list. A room almost always has a governing thing: the task/prompt, a key Mermaid diagram, a persona's ruling. A pinned bar under our topbar is a near-direct lift and pairs naturally with the Notebook.
borrow A live subtitle under the room title. Telegram's title carries a live subtitle that flips onlinetyping… at zero extra chrome. Give our room title a subtitle that reads "5 personas · 2 here" and flips to "panel conferring… · streaming…" during a turn — the SSE latency gets a home in the topbar (visible even when scrolled), complementing the in-stream egg.
borrow · AI-native Inline buttons + a /commands menu. Telegram bots — in-chat for a decade, the deepest proof our category works — render tappable buttons under a message and a /commands menu by the composer. Lift both: inline buttons under a persona's reply (Expand · Cite source · Continue · Ask another persona) and a composer /commands menu (/summarize · /diagram · /invite · /temperament) let a user steer the next turn without typing — a perfect fit for our batched-turn model, and cheaper than a full free-text turn.

Recommendations ranked, and filtered to an AI room

Everything above, plotted by impact (how much it improves the room) against effort, then listed in priority order. Numbers match the chart.

EFFORT → IMPACT → QUICK WINS BIG BETS EASY POLISH LATER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Tier 1 — do firstTier 2 — nextTier 3 — polish
#RecommendationBorrowed fromWhy it fits an AI roomTier
1Long-press message menuWA card + WeChat 引用 barOne home for copy · quote · save · read-aloud · regenerate. Turns read-only bubbles into live objects.T1
2Quote-reply → panel + swipe-to-replyswipe-to-reply · 引用Reply to a persona's exact line; the snippet feeds the next turn. Untangles multi-persona threads using seat colours.T1
3Search — global + in-roomWeChat omni-boxAs rooms & transcripts pile up, find > folder. The single most central WeChat habit we're missing.T1
4List triage — pin/mute/mark-unread + snippet & time置顶/免打扰 · row anatomyMakes a growing rooms list scannable and manageable; flat + pinned, no folders.T1
5Reactions on turns (👍/👎/…)iMessage/WA reactionsA no-API way to "respond" — and a quality signal the panel can read next turn. Keep the visual WeChat-plain.T2
6Hold-to-talk STT (wire DashScope)WeChat 按住说话The China-native input reflex; default to convert-to-text. We already plan the STT — adopt the gesture.T2
7Quick / Deep thinking toggleWeChat Yuanbao 快/深One-tap depth-vs-cost dial over our reasoning variants; rides the cost meter. Users already learning it from Yuanbao.T2
8"@我" room flag + jump-to-mentionWeChat 有人@我Surfaces "the panel addressed you" at the list level — a strong group reflex.T2
9Per-turn read-aloud (mini-player)WA voice playback · WeChat Easy Mode1×/1.5×/2× speak-this-turn; we already have the TTS engine in the md-viewer.T3
10Park-it floating artifact chipWeChat 浮窗Minimise a big diagram/code artifact to a chip; read it without losing the live chat.T3
11Follow-System theme + Text-Size controlWeChat settingsBaseline accessibility, especially for an older China audience; we have the themes, just not the defaults.T3
12Title menu → the room hub + a live subtitleTelegram group hubThe near-free win — we already open the panel from the title. Add Telegram's rows in its order (mute · artifacts tab · search · pinned · leave) and a subtitle that flips to "conferring…". §④T1
13Pinned-message barTelegram pinnedPin the room's task/prompt or a key artifact under the topbar; tap to jump, ▾ for the list. Pairs with the Notebook.T2
14Inline buttons + /commands menuTelegram botsButtons under a reply (Expand · Cite · Continue · Ask another) + /summarize · /diagram · /invite — steer the next turn without typing; cheaper than a free-text turn.T2
15Notebook tags + group-by-roomTelegram Saved Messages 2.0Named emoji tags (💡 📌 🐛) make clips filterable; group saved lines by source room. "Tagging as easy as reacting."T3

Dots 1–11 are the WhatsApp/WeChat synthesis; 12–15 are the Telegram additions — note how the title-menu hub (12) lands as a near-free win because the surface already exists.

What we deliberately won't borrow

Skip — assumes a real second party

  • Read receipts / last-seen — the AI is always "there"; nothing to surveil. (WeChat skips these too, on purpose.)
  • Voice / video messages as audio — the LLM wants text; STT→text covers the input need.
  • Status · Stories · Moments · Channels — no contact graph; nothing to broadcast.
  • Recall / delete-for-everyone — a turn was never "sent" to a person.

Skip — wrong product category

  • Pay · Mini-Programs · Red Packet · Transfer — we are not a super-app.
  • View-once · disappearing messages · peer media exchange — not a media product.
  • Communities & heavy admin moderation — the "members" are AI we already control via invite/retire/rename.
  • A forced, non-removable AI button — Meta's mistake; our invited cast is the antidote.
The pattern across all four lenses: we own an identity layer no messenger has (seat colours, persona cards, the egg, the artifact pane, @-mentions); we under-use the one surface we share with Telegram — the title menu; and we're missing the interaction layer every messenger has (touch a message, triage the list, search, familiar voice). Load up the hub, close the interaction gap, and to a WeChat- or Telegram-fluent user we feel like a chat app that happens to be full of remarkable people.

Sources

WhatsApp:
blog.whatsapp.com — voice message transcripts
about.fb.com — chat filters (2024)
faq.whatsapp.com — react to messages
republicworld.com — Android message-menu redesign (June 2026)
WABetaInfo — modern chat bubbles
GSMArena — bottom navbar on Android
EFF — Advanced Chat Privacy & @Meta AI
WeChat 微信:
theconversation.com — the restraint philosophy (用完即走)
dangrover.com — Chinese mobile UI trends (the classic)
WeChat Help — send / cancel a voice message
Yicai Global — why no read receipts
SCMP — Yuanbao added as a chat "friend" (Apr 2025)
webnots.com — Text-Size control / Easy Mode
Telegram:
telegram.org/blog — Replies 2.0 (quote a fragment)
telegram.org/blog — Pinned Messages 2.0
telegram.org/blog — Saved Messages 2.0 (tags)
core.telegram.org — Bot features (inline buttons, /commands)
telegram.org/tour — chat folders (tabs)
absolutegeeks.com — the Feb 2026 redesign & group controls
Dialogue · UX benchmark · WeChat, WhatsApp & Telegram held against the live room, June 2026 · companion to Rendering & speed (the AI-chat-app bar) and the Style Guide · faithful redraws, not screenshots.