# NousResearch/hermes-agent · QQ Bot DM approval button auth chat_type mismatch

## Open now

- Nothing open on GitHub.

Multiple bug reports and fix attempts addressing QQ Bot approval button clicks being rejected as unauthorized due to a chat_type mismatch between 'dm' and 'c2c' in DM/private sessions. Includes one feature item wiring native tool-approval UX via inline keyboards.

## TL;DR

- 23 member(s): 0 open issue(s), 9 closed issue(s), 0 open PR(s), 1 merged PR(s), 13 PR(s) closed without merging.
- A fix was merged to main in PR #105349. Verify it addresses your case.
- **Recommended:** read PR #105349 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `unresolved`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_PARTIAL`): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text.
- Members outside that structural core may belong to a different underlying problem.
- Pairwise link density `0.10`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Closed / duplicate issues

- #32528: QQ Bot private chat (C2C) button approvals always rejected as unauthorized due to chat_type mismatch (dm vs c2c)
- #34432: QQ Bot: approval button clicks rejected — session_key uses dm as chat_id instead of user openid
- #35760: QQ bot: approval button clicks always rejected due to chat_type mismatch (c2c vs dm)
- #39110: \[Bug\]: Hermes QQ bot session_key
- #40655: QQ Bot: approval button clicks always rejected due to chat_type mismatch ("dm" vs "c2c")
- #52467: \[QQ Bot\] Approval button click rejected as 'unauthorized' despite valid session
- #52980: fix(qqbot): approval button clicks in DM silently rejected — one-line fix sitting unmerged for 34 days
- #62043: QQ bot: approval buttons do not trigger /approve command
- #64840: \[Bug\]: QQ Bot approval always fails for DM sessions because

## Prior & competing PRs

- **#35774: fix(qqbot): authorize approval clicks for DM sessions (chat_type='dm')**. closed without merge · fix tier `suggested`
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#32752`, `#31593`
  - _suggested-tier fix detail withheld; re-request with `?tier=all` to include it._
- **#35799: Fix QQ bot approval and Weixin stale session detection**. closed without merge · fix tier `suggested`
  - maintainer direction: category `uncategorized`; implication `needs_llm`
  - _suggested-tier fix detail withheld; re-request with `?tier=all` to include it._
- **#105349: fix(qqbot): approval buttons in QQ private chats resolve instead of timing out (salvage #31593)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `contributors/emails/[redacted:email]`, `gateway/platforms/qqbot/adapter.py`, `tests/gateway/test_qqbot.py`
- **#31593: fix(qqbot): authorize approval clicks for dm session keys**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#105349`, `#105349`
- **#32752: fix(qqbot): authorize dm chat_type in interaction approval**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `2ff990c13f7d`, `#139729`
- **#33962: fix(qqbot): approval button auth rejects DM sessions**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#31593`, `#32752`, `#32528`
- **#34438: fix(qqbot): accept 'dm' session key in approval authorization (#34432)**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#31593`, `#33962`, `#32752`, `#32528`
- **#35873: fix(qqbot): align chat_type 'dm' in button interaction authorization**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#31593`, `#32752`, `#33962`, `#35774`, `#32528`, `#35760`
- **#39133: fix(qqbot): authorize DM session approval clicks in addition to c2c**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `2ff990c13f7d`, `#139729`
- **#46154: fix(qqbot): authorize dm approval interactions**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#31593`
- **#52475: fix(qqbot): authorize approval clicks for dm session keys**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#31593`, `#31593`
- **#64863: fix(qqbot): authorize DM sessions in approval interaction guard**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#31593`, `#31593`
- **#64870: fix(qqbot): authorize approval clicks for DM (private) sessions**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `2ff990c13f7d`, `#139729`
- **#101814: fix(qqbot): treat dm like c2c in approval-button session authorization**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `e5382cd823`, `#105349`, `#31593`

## Fix status

- Merged to main in PR #105349 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-09-07`.
- Subsystem: `gateway`
