Skip to content

✨ feat(im): 更新企业微信已受理动作卡片 - #337

Open
jing-gou wants to merge 1 commit into
1024XEngineer:mainfrom
jing-gou:dev/325-wecom-card-action-update
Open

✨ feat(im): 更新企业微信已受理动作卡片#337
jing-gou wants to merge 1 commit into
1024XEngineer:mainfrom
jing-gou:dev/325-wecom-card-action-update

Conversation

@jing-gou

Copy link
Copy Markdown
Collaborator

结论

本 PR 完成 #325 的第二条可独立验收链路:企业微信模板卡片动作经现有 ActionApplication 成功受理后,WSS Runtime 在 5 秒窗口内使用原回调 req_id 更新卡片,移除动作按钮并展示“正在同步到设备”。请重点判断平台更新命令的请求关联和失败时不误报成功。

背景

PR #335 已将强提醒渲染为企业微信按钮交互卡片,并把卡片事件归一化为 action.triggered。如果动作受理后仍保留原按钮,用户可能重复点击;企业微信官方要求卡片点击事件的更新响应在 5 秒内发出。

改动范围

  • 抽取 WSS Runtime 的统一请求发送逻辑,支持复用平台回调的 headers.req_id
  • 动作事件经过 postEvent 成功处理后发送 aibot_respond_update_msg
  • 更新卡片使用无动作按钮的 button_interaction 结构,仅展示“操作已受理 / 正在同步到设备”。
  • 增加动作成功更新和动作处理失败不更新的运行时测试。
  • 更新 IM Gateway 部署说明。

明确没有改:

  • ActionApplication、Reminder 状态机、设备协议、数据库 schema 和 Outbox。
  • URL 回调模式、群聊、送达/已读回执和真实企业微信凭据。
  • 设备执行结果后的最终卡片文案;本 PR 只负责平台即时受理后的视觉收敛。

接口与依赖影响

  • 新增 WSS 出站命令 aibot_respond_update_msg,复用平台事件回调的 headers.req_id,不新增公共业务 Port。
  • 企业微信模板卡片更新仍依赖机器人启用模板卡片交互回调;无第三方依赖和数据库迁移。

测试与构建证据

  • pnpm run ci:通过。
  • 其中包含 TypeScript、ESLint、Prettier、API 文档检查、334 项 Gateway 测试、生产组合根和 PostgreSQL 16 契约测试。
  • PostgreSQL 测试使用本地 Docker 16 容器的运行时凭据注入,未写入仓库或日志。
  • WSS 定向测试覆盖更新命令字段、原回调 req_id、ACK 处理及动作失败不更新。
  • 未执行真实企业微信客户端卡片渲染;需用独立测试机器人验证平台对空 button_list 更新卡片的展示。

已知风险

  • 企业微信不同客户端对无按钮 button_interaction 卡片的展示可能存在差异;若真实联调不接受空按钮列表,应改用平台支持的只读模板卡片。
  • 更新命令发送失败只影响卡片视觉反馈,不回滚已受理的业务动作;重复事件仍由现有入站幂等保护。

兼容窗口与回退

仅已支持模板卡片的 WeCom WSS 部署会使用更新命令;Markdown 和无模板卡片传输保持兼容。回退本 PR 的提交 c428fc1 即可恢复 PR #335 的卡片行为,不影响动作状态机和 H5 Action UI。

Refs #325

@ZhaoXingPeng 请优先 review 并 approve;通过后我会按约定 squash merge。

企业微信模板卡片动作完成身份、幂等和状态校验后,WSS Runtime 透传回调 req_id,在平台规定的 5 秒窗口内发送 aibot_respond_update_msg。更新后的卡片不再携带动作按钮,只展示正在同步到设备,避免用户重复提交。

Gateway 全量 CI、生产组合根与 PostgreSQL 16 契约测试均已通过;真实企业微信客户端卡片渲染仍待独立测试机器人联调。

Refs 1024XEngineer#325
@jing-gou

Copy link
Copy Markdown
Collaborator Author

@ZhaoXingPeng 请优先 review 并 approve。该 PR 只覆盖企业微信模板卡片动作成功后的 5 秒内 aibot_respond_update_msg 更新,动作失败不会误报成功;验证已包含 PostgreSQL 16 与 Gateway 全量 CI。

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the fixed 316fc83963912958daa9827c44fe5f43a818259d...c428fc18a71ea23ef52ff01d7e0272ba69054ed0 diff across the WSS runtime, its tests, and deployment documentation. The request correlation, success-only card update, outbound ACK handling, and existing event/application contracts are consistent; I found no actionable correctness or regression issues.

Verification: git diff --check passed. The focused Gateway test command could not start because the local tsc executable is unavailable/permission-denied in this workspace, so runtime tests were not executed here.

@codecov

codecov Bot commented Aug 20, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 95.00000% with 2 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...rc/infrastructure/wecom/wecom-aibot-wss-runtime.ts 95.00% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants