Skip to content

feat(feishu): add ACK reaction (已读标记) feature#290

Merged
everettjf merged 1 commit intomicroclaw:mainfrom
lch541:feat/feishu-ack-reaction
Apr 1, 2026
Merged

feat(feishu): add ACK reaction (已读标记) feature#290
everettjf merged 1 commit intomicroclaw:mainfrom
lch541:feat/feishu-ack-reaction

Conversation

@lch541
Copy link
Copy Markdown
Contributor

@lch541 lch541 commented Mar 22, 2026

Summary

Add automatic ACK reaction (已读标记) feature to Feishu channel.

Changes

  • Add locale-aware ACK reactions for Chinese (Simplified/Traditional), English, and Japanese
  • Detect text locale and select appropriate emoji automatically
  • Send reaction automatically when receiving messages

This feature is ported from ZeroClaw's lark.rs implementation.

Closes #198

- Add locale-aware ACK reactions (Chinese Simplified/Traditional, English, Japanese)
- Detect text locale and select appropriate emoji
- Send reaction automatically when receiving messages
- Ported from ZeroClaw's lark.rs implementation

Closes: microclaw#198
@lch541 lch541 requested a review from everettjf as a code owner March 22, 2026 23:37
@everettjf
Copy link
Copy Markdown
Contributor

👍 Thanks

@everettjf
Copy link
Copy Markdown
Contributor

按现在这版代码,它会对每条收到的 Feishu 消息自动加一个 reaction,不是文本回复,是“表情标记”。

关键路径在 src/channels/feishu.rs:2578。消息只要满足这些前置条件,就会异步发 ACK reaction:

  • 事件类型是 im.message.receive_v1
  • 不是机器人自己发的
  • chat_id 和消息内容不为空
  • 文本解析后不是空
  • 如果配了 allowed_chats,消息必须在允许名单里

然后它立刻:

  • 根据消息文本做一个很简单的语言判断,分成 ZhCn / ZhTw / En / Ja
  • 从对应表情池里挑一个 reaction
  • 调 Feishu API 给这条消息点 reaction

它不是“只有被 @ 才点表情”。因为 ACK 发生在 mention 判断之前,而真正的回复门槛在后面 src/channels/feishu.rs:2856:

  • should_respond = is_dm || is_mentioned || is_at_all

所以当前行为可以概括成:

  • DM:会自动点表情,也会继续正常回复
  • 群聊里 @bot / @ALL:会自动点表情,也会继续正常回复
  • 群聊里没 @bot:也会自动点表情,但不会发文本回复

表情不是随机数真随机,而是“用消息文本做 hash 后稳定选一个”,所以同样的文本通常会得到同一个 reaction。

@everettjf
Copy link
Copy Markdown
Contributor

按现在这版代码,它会对每条收到的 Feishu 消息自动加一个 reaction,不是文本回复,是“表情标记”。

关键路径在 src/channels/feishu.rs:2578。消息只要满足这些前置条件,就会异步发 ACK reaction:

  • 事件类型是 im.message.receive_v1
  • 不是机器人自己发的
  • chat_id 和消息内容不为空
  • 文本解析后不是空
  • 如果配了 allowed_chats,消息必须在允许名单里

然后它立刻:

  • 根据消息文本做一个很简单的语言判断,分成 ZhCn / ZhTw / En / Ja
  • 从对应表情池里挑一个 reaction
  • 调 Feishu API 给这条消息点 reaction

它不是“只有被 @ 才点表情”。因为 ACK 发生在 mention 判断之前,而真正的回复门槛在后面 src/channels/feishu.rs:2856:

  • should_respond = is_dm || is_mentioned || is_at_all

所以当前行为可以概括成:

  • DM:会自动点表情,也会继续正常回复
  • 群聊里 @bot / @ALL:会自动点表情,也会继续正常回复
  • 群聊里没 @bot:也会自动点表情,但不会发文本回复

表情不是随机数真随机,而是“用消息文本做 hash 后稳定选一个”,所以同样的文本通常会得到同一个 reaction。

@lch541 Hi,这样感觉行为不是很符合预期。你的预期是每个消息都发一个表情表示已经收到吗?

@lch541
Copy link
Copy Markdown
Contributor Author

lch541 commented Mar 23, 2026 via email

@everettjf
Copy link
Copy Markdown
Contributor

@lch541 好的,我再看看这块。之前为了加飞书表情把文件发送改坏了。这个 pr 先放着哈,我这几天统一再看看。

今天刚支持了 weixin,马上发个版哈哈

@everettjf everettjf self-assigned this Mar 24, 2026
@everettjf everettjf added the enhancement New feature or request label Mar 24, 2026
@lch541
Copy link
Copy Markdown
Contributor Author

lch541 commented Mar 25, 2026 via email

@everettjf
Copy link
Copy Markdown
Contributor

Thanks for the contribution @lch541! I've incorporated your changes with some adjustments (opt-in config, simplified emoji selection) in #319. Closing this one in favor of that PR.

@everettjf everettjf merged commit fc188e1 into microclaw:main Apr 1, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feishu 支持表情回复,例如 点赞

2 participants