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.
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.
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.
Our users' default. Restraint as philosophy (用完即走 — "use it and leave"). Sets the reflexes a China-centric audience brings: hold-to-talk, 置顶/免打扰, omni-search, 引用.
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.
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.
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 human — N 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.
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.
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.
| Mechanic | Telegram | Us — now | Take | ||
|---|---|---|---|---|---|
| Who-said-it cue | side + colour | side + colour + avatar | side + colour + avatar | side + seat colour + avatar + name + role | Win. We carry the heaviest load (N speakers) and solve it best. |
| Consecutive grouping | ✓ tail on first only | ✓ | ✓ | partial | Stack same-speaker turns tighter; tail/avatar on first of a run. |
| Timestamps | inline per-msg | gap-batched (~5 min) | inline per-msg | per-turn cost pill only | Adopt 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. |
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 field | Telegram | Us — now | Verdict for us | ||
|---|---|---|---|---|---|
| Identity (avatar / name) | ✓ | ✓ | ✓ | ✓✓ topic + cast colours | Keep — our differentiator. |
| Last-message snippet | ✓ | ✓ | ✓ | ✕ | Adopt — "Li: keep some back…" in seat colour. |
| Timestamp | ✓ | ✓ | ✓ | ✕ | Adopt — relative ("2m", "Wed"). |
| Unread signal | count badge | count badge | count badge | dot only | Adapt — a turn-count badge; dot is fine too. |
| Pin / mute icon | ✓ | ✓ | ✓ +folders | ✕ | Adopt — see Function. |
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.
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.
| Action | WA | TG | Us now | Fit for an AI room | |
|---|---|---|---|---|---|
| Quote-reply → the panel | ✓ | ✓ 引用 | ✓✓ fragment | ✕ | Adopt+ 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 Markdown | ✓ | ✓ | ✓ | code only | Adopt — basic, currently missing on prose bubbles. |
| Save line → Notebook | Star | 收藏 | Saved Msgs | ✓ | Keep — move it into the menu (it's hidden behind text-selection now). |
| Read aloud (TTS) | voice msgs | Easy Mode | — | in md-viewer | Adopt — 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 (👍/👎/…) | ✓ | ✕* | ✓✓ multi | ✕ | Adapt — a no-API feedback signal the panel can read. |
| Pin / Edit own | overflow | recall | ✓ | ✕ | Adapt — pin a key turn (→ §④); edit-own re-runs the prompt. |
| Multi-select | ✓ | ✓ | ✓ | ✕ | Later — batch save/copy turns. |
| Recall / Delete-for-all | ✓ | ✓ | ✓ | ✕ | Skip — 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.
@mention of that persona, so a one-handed gesture aims the next turn at a specific voice. Dovetails with our @-mention model.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.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.
| Capability | WA | TG | Us now | Verdict & why | |
|---|---|---|---|---|---|
| Pin / sticky-top 置顶 | ✓ | ✓ | ✓ | ✕ | Adopt — rooms accumulate; pin the live few. |
| Mute 免打扰 | ✓ | ✓ | ✓ | ✕ | Adopt — silence background-conferring rooms (→ §④). |
| Mark unread | ✓ | ✓ | ✓ | ✕ | Adapt — cheap triage flag. |
| Archive / trash | ✓ | ✓ | ✓ | ✓ | Keep — 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 / labels | lists | ✕ | ✓✓ tabs | ✕ | Adapt — Telegram's folders-as-tabs beat folders; a light All/Unread/Pinned strip. |
| @-mention picker | ✓ | ✓ | ✓ | ✓✓ | Win — id-anchored tokens + per-room cast autocomplete. |
| "@我" room flag | ✓ | ✓ | ✓ | ✕ | Adapt — flag the row when the panel addresses you. |
| Typing / activity indicator | ✓ | ✓ | ✓✓ | ✓✓ | Win — the egg + live "X is typing…"; add a title subtitle (§④). |
| Voice input → STT | ✓ | ✓ | ✓ | planned | Adopt — wire DashScope w/ hold-to-talk gesture. |
| Voice messages (audio) | ✓ | ✓ | ✓ | ✕ | Skip — LLM wants text, not stored audio. |
| Read receipts / last-seen | ✓ | ✕ | ✓ | ✕ | Skip — no real party to surveil (WeChat agrees). |
| Status / Stories / Moments | ✓ | ✓ | ✓ | ✕ | Skip — no contact graph to broadcast to. |
| Payments / Mini-apps | pay | ✓✓ | bots | ✕ | Skip — we are not a super-app. |
| Media / artifact gallery | ✓ | ✓ | ✓✓ | ✓ ∞ drawer | Keep+ — surface it as a counted Artifacts tab in the hub (§④). |
| AI as a contact | Meta AI | Yuanbao | ✓✓ 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 menu | Adapt — surface Quick/Deep as one tap; pairs with cost meter. |
@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).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.
| Slot (Telegram order) | TG | Us now | What we add to the panel |
|---|---|---|---|
| Identity / rename | ✓ | ✓ | Keep at top — plus our cost/cache (uniquely ours). |
| Notifications / Mute | ✓ | ✕ | Mute this room (durations / "until I reopen") — silence a room's badge & TTS. |
| Shared-content tabs | ✓ | inline only | Artifacts tab — Diagrams · Code · Math · Links, with counts. Highest-value add. |
| Members | ✓ | ✓✓ | Have it (persona grid) — add tap → persona card detail. |
| Governance | admin/perms | ✓ | Our model switcher + dials are the governance analog. Keep. |
| Search this chat | ✓ | ✕ | Search-in-room over the transcript, with a from:persona filter. |
| Pinned | ✓ | ✕ | Pinned bar + list — pin the task/prompt or a key artifact. |
| Exit (last) | ✓ | in list only | Archive / Leave room — destructive, separated, at the bottom. |
online ↔ typing… 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./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.Everything above, plotted by impact (how much it improves the room) against effort, then listed in priority order. Numbers match the chart.
| # | Recommendation | Borrowed from | Why it fits an AI room | Tier |
|---|---|---|---|---|
| 1 | Long-press message menu | WA card + WeChat 引用 bar | One home for copy · quote · save · read-aloud · regenerate. Turns read-only bubbles into live objects. | T1 |
| 2 | Quote-reply → panel + swipe-to-reply | swipe-to-reply · 引用 | Reply to a persona's exact line; the snippet feeds the next turn. Untangles multi-persona threads using seat colours. | T1 |
| 3 | Search — global + in-room | WeChat omni-box | As rooms & transcripts pile up, find > folder. The single most central WeChat habit we're missing. | T1 |
| 4 | List triage — pin/mute/mark-unread + snippet & time | 置顶/免打扰 · row anatomy | Makes a growing rooms list scannable and manageable; flat + pinned, no folders. | T1 |
| 5 | Reactions on turns (👍/👎/…) | iMessage/WA reactions | A no-API way to "respond" — and a quality signal the panel can read next turn. Keep the visual WeChat-plain. | T2 |
| 6 | Hold-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 |
| 7 | Quick / Deep thinking toggle | WeChat 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-mention | WeChat 有人@我 | Surfaces "the panel addressed you" at the list level — a strong group reflex. | T2 |
| 9 | Per-turn read-aloud (mini-player) | WA voice playback · WeChat Easy Mode | 1×/1.5×/2× speak-this-turn; we already have the TTS engine in the md-viewer. | T3 |
| 10 | Park-it floating artifact chip | WeChat 浮窗 | Minimise a big diagram/code artifact to a chip; read it without losing the live chat. | T3 |
| 11 | Follow-System theme + Text-Size control | WeChat settings | Baseline accessibility, especially for an older China audience; we have the themes, just not the defaults. | T3 |
| 12 | Title menu → the room hub + a live subtitle | Telegram group hub | The 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 |
| 13 | Pinned-message bar | Telegram pinned | Pin the room's task/prompt or a key artifact under the topbar; tap to jump, ▾ for the list. Pairs with the Notebook. | T2 |
| 14 | Inline buttons + /commands menu | Telegram bots | Buttons under a reply (Expand · Cite · Continue · Ask another) + /summarize · /diagram · /invite — steer the next turn without typing; cheaper than a free-text turn. | T2 |
| 15 | Notebook tags + group-by-room | Telegram Saved Messages 2.0 | Named 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.