Skip to content

[Bug] Web / API 接入挂件(@mateclaw/webchat)与后端能力脱节,当前实际不可用 #350

Description

@ncw1992120

这个 issue 解决什么问题?

仓库自带的 mateclaw-webchat/(包名 @mateclaw/webchat)是一个早期 prototype,跟 webchat 渠道后端的实际能力已经严重脱节,线上根本无法使用

P0 — 阻断性(当前完全连不上 webchat)

  1. 未构建进服务端静态资源pnpm build 脚本会 cp -r dist/ ../mateclaw-server/src/main/resources/static/webchat/,但 mateclaw-server/src/main/resources/static/webchat/ 当前不存在,服务器不托管 UMD bundle。即使照 README 嵌入 <script src="/webchat/mateclaw-webchat.umd.js"> 也是 404。

  2. visitorTokensrc/index.tssendMessage 只发:

    headers: { 'X-MC-Key': config.apiKey },
    body: JSON.stringify({ message: text, visitorId })

    而 webchat 渠道要求 HMAC-SHA256X-MC-Visitor-Token[Bug] Web / API 接入:访客会话在控制台会话列表 / 会话管理页不可见 #340 / [Feature] Web / API 接入支持文件收发(入站上传 + 出站下载) #342 / [Feature] Web / API 接入会话管理增强:消息分页 + 会话列表分页/搜索 + 重命名 #346 都依赖它做会话归属与配额校验)。挂件发出的请求会被后端直接拒

P1 — 功能脱节(后端有,挂件没用)

后端能力(已合并/PR 中) 挂件状态
多会话:sessionIdGET /sessions/pagePUT /sessions/title#346 ❌ 单线程,无会话切换/重命名
文件收发:POST /uploadGET /filesattachmentIds#342 ❌ 无上传/下载 UI
历史消息:GET /sessions/messages(含 beforeId/limit 分页,#346 ❌ 刷新即丢,不加载历史
长会话 ID 哈希折叠后恢复 sessionId#348 ❌ 无概念

P2 — 体验

  • 助手消息用 textContent 渲染,不渲染 markdown(代码块/列表/链接全部平铺)。
  • WebChatConfig 类型里只有 apiKey/server/position/primaryColor/title/placeholder,但 index.html demo 里传的 subtitle/welcomeMessage/quickPromptssrc/index.ts 完全没实现(类型也不接受)。

期望方案

按 P0 → P1 → P2 顺序补齐:

P0(必须先做,否则挂件无意义)

  1. mateclaw-server 真正托管挂件 bundle:要么 CI 里跑 pnpm build,要么把 dist 提交进 static/webchat/,保证 GET /webchat/mateclaw-webchat.umd.js 可访问。
  2. 挂件按 webchat 协议生成 visitorToken
    • 渠道配置暴露 secret(或派发 token 的轻量端点);
    • 挂件本地用 secret + channelId + visitorId 算 HMAC-SHA256,请求头加 X-MC-Visitor-Token,请求体加 visitorId(与后端 WebChatController.computeVisitorToken 对齐)。
    • 注意:把 HMAC secret 直接下发到浏览器会等于公开 secret——需要评估是否改为「服务端签发短期 token」模型,否则 webchat 鉴权形同虚设。

P1

  1. 接入 GET /sessions/page + PUT /sessions/title:会话列表、切换、重命名。
  2. 接入 POST /upload + attachmentIds:访客侧上传入口 + 出站文件气泡。
  3. 打开面板时按当前 sessionId 拉取 GET /sessions/messages,刷新可恢复。

P2

  1. 引入轻量 markdown 渲染(marked + DOMPurify 或等价)。
  2. WebChatConfig 与挂件实现补齐 subtitle/welcomeMessage/quickPrompts

关联

环境

v1.6.0-SNAPSHOT;mateclaw-webchat/ @mateclaw/webchat@1.1.0-SNAPSHOT

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions