现象:真实调用撤回接口成功后(recall_window_seconds=120秒窗口内,长按菜单 "撤回"),撤回发起方自己的消息列表里这条消息直接消失,没有问题;但对方 (消息接收方)的聊天界面上,这条消息位置渲染成一个灰色警告图标+"无效内容" (invalid content),不是预期的"此消息已被撤回/删除"占位提示。 根因:Tinode原生协议里,一条消息被撤回后,服务端把这条消息的content原地 置为null(seq位置保留,其余内容清空)。chat-message.jsx渲染消息内容时按 Drafty富文本、纯字符串、其余情况三段分支处理,content为null时两段判断 (Drafty.isValid和typeof=='string')都不成立,直接落到兜底的"invalid content"分支——这段代码从未加过null-content(撤回)的专门判断。这跟 messages-view.jsx里另一套依赖msg.hi标记位的"删除"消息渲染(走独立的 <MetaMessage deletedText=.../>组件)是两码事:撤回消息还是走的普通 ChatMessage组件,从未接入deletedText这个机制。 修复:chat-message.jsx新增一个content==null的分支,复用 messages-view.jsx里messages.message_deleted已经注册好的同一个i18n id/文案("消息已删除",非新增翻译串),渲染为灰色图标+"消息已删除", 不再落到"无效内容"兜底分支。 验证:真实浏览器操作,两个全新注册账号互为好友,A发一条文本消息后 立即长按撤回(120秒窗口内),B的聊天界面上这条消息正确显示"消息已删除" (此前是"无效内容")。 第14+轮最小粒度测试 Ch4 发现(撤回消息渲染场景)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Tinode Web
Briefing
Single-page web chat application for Tinode. The app is built on React. The Tinode javascript SDK has no external dependencies. Overall, it's a lot like open source WhatsApp or Telegram web apps.
Although the app is generally usable, keep in mind that this is work in progress. Some bugs probably exist, some features are missing. The app was tested in the latest Chrome & Firefox only. NPM package is available.
Try possibly newer or older version live at https://sandbox.tinode.co/.
For demo access and other instructions see here.
Installing and running
This is NOT a standalone app, this is just a frontend, a client. It requires a backend. See installation instructions. See instructions for enabling push notifications.
Getting support
- Read client-side and server-side API documentation.
- For support, general questions, discussions post to https://groups.google.com/d/forum/tinode.
- For bugs and feature requests open an issue.
- Use https://tinode.co/contact for commercial inquiries.
Helping out
- If you appreciate our work, please help spread the word! Sharing on Reddit, HN, and other communities helps more than you think.
- Consider buying paid support: https://tinode.co/support.html
- If you are a software developer, send us your pull requests with bug fixes and new features.
- If you use the app and discover bugs or missing features, let us know by filing bug reports and feature requests. Vote for existing feature requests you find most valuable.
- If you speak a language other than English, translate the apps into your language. You may also review and improve existing translations.
- If you are a UI/UX expert, help us polish the app UI.
- Use it: install it for your colleagues or friends at work or at home.
Internationalization
The app is fully internationalized using React-Intl. The UI language is selected automatically from the language specified by the browser. A specific language can be forced by adding #?hl=XX parameter to the URL when starting the app, e.g. https://web.tinode.co/#?hl=fr.
The app is currently available in the following languages:
- English - default
- Arabic
- Chinese simplified
- Chinese traditional
- French
- German
- Italian
- Korean
- Romanian
- Russian
- Spanish
- Thai
- Ukrainian
- Vietnamese
More translations are welcome. See instructions.
Not done yet
- End-to-End encryption.
- Emoji support is weak.
- Mentions, hashtags.
- Previews not generated for links and docs.
- Location and contact sharing.
- Recording video messages.
Other
- Demo avatars and some other graphics are from https://www.pexels.com/ under CC0 license.
- Background patterns from http://subtlepatterns.com/, commercial and non-commercial use allowed with attribution.
- Fonts and icons from Google under license which permits commercial and non-commercial use.
- Push notifications built with https://firebase.google.com/.






