makecindy / makecindy/cindy

官方 Telegram bot:私聊确认卡的结果不回传群聊

Open
#1,728 3 comments 0 reactions 1 assignee Claimed by @zqchris View on GitHub
Dominant language
TypeScript
Stars
2.7k
Forks
395
Avg merge
21h 48m
Merged PRs (30d)
776

Description

## 现象

官方 Telegram bot:群里的活触发权限确认时,确认卡会转投宿主私聊(#1550)。宿主在私聊里点了确认之后,**结果没有回传到群聊那一侧** —— 群里那轮活不知道已经被确认过。

与个人 bot(BYO token)那条链路上的 #1711 是**不同的问题**,症状可以对照区分:

| | 个人 bot(#1711 已修) | 官方 bot(本 issue) |
|---|---|---|
| 点击后 | 完全没反应,按钮还留在卡上 | 点击**有**反应 |
| 根因 | 交互被作废时卡片没被收口 | 确认结果没回到群聊那轮活 |
| 代码位置 | `im/shared/pendingInteractions.ts` | `hook-control/` + 服务端 |

来源:内部反馈。

## 排查范围

两套 bot 的交互机制完全独立、零共用代码,排查时不要套用个人 bot 的结论:

- 官方 bot 的挂起交互表在 `apps/desktop/src/main/hook-control/interactions.ts`(`interactionId → 挂起决策`),与 `apps/desktop/src/main/im/shared/pendingInteractions.ts` 无任何引用关系
- 客户端只负责发 `interaction.request` / `interaction.decision` / `interaction.cancel` 帧;**卡片渲染与会话映射在服务端**,因此本 issue 大概率需要跨到服务端仓排查,本仓只能看到发帧那一半
- 客户端侧入口:`hook-control/session-runner.ts`(#1550 在这里加的转投私聊逻辑)、`hook-control/interactions.ts` 的 `registerHookInteraction` / `cancelHookInteraction`

## 首要嫌疑

**私聊 ↔ 群聊的绑定关系。** 确认动作发生在私聊会话里,但它要作用于群聊那轮活。中间这层映射如果没建立、丢失或对不上,症状恰好就是「点击有反应,但群里那轮活不动」。

建议先回答:私聊里那次点击产生的 `interaction.decision` 帧,携带的 interactionId / 会话标识,是否仍然指向**群聊**那轮活,而不是私聊会话本身。

## 影响

修好之前用户会遇到:群里让 bot 干需要授权的活 → 私聊确认 → 群里那轮活**卡住不继续**,且用户以为自己已经批准了,不会再去处理。属于功能不可用,不只是提示缺失。

## 验收标准

1. 群里触发一次需要权限确认的活,确认卡转投宿主私聊
2. 在私聊点确认后,**群聊那轮活继续执行**并把结果发回群里
3. 拒绝路径同样回传:私聊点拒绝 → 群里那轮活按拒绝收口,不是静默挂着
4. 覆盖回归测试;若主体修复落在服务端,在本仓记录客户端侧的契约断言(帧里携带的标识必须指向群聊那轮活)

## 关联

- #1711 个人 bot 的同类问题(交互被作废时收口卡片)——已修,与本 issue 无代码重叠
- #1550 群里的授权卡改投宿主私聊(同时改了 hook-control 与 im 两套)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.