edit | blame | history | raw

Learnings Log

记录学习、改进和最佳实践。


[LRN-20260316-001] best_practice

Logged: 2026-03-16T07:20:00+08:00
Priority: high
Status: resolved
Area: infra

Summary

飞书 Webhook 超时导致消息重复投递问题及解决方案

Details

问题现象:
- 收到用户未主动发送的消息(05:40 消息在 06:23 再次出现)
- 消息内容完全一致但消息ID不同(om_x100b545876a2ed34c3d91545d8feb5f vs 新ID)
- 触发对话意外延续

根因分析:
飞书事件订阅规则要求 3秒内必须返回HTTP 200,否则触发重试:
- 重试间隔:15秒 → 5分钟 → 1小时 → 6小时(最多4次)
- 由于超时未响应,飞书服务器重复投递了消息

解决方案:
修改 openclaw.json 配置:
json "feishu": { "connectionMode": "websocket", // 使用长连接替代HTTP webhook "timeout": 2000, // 响应超时<3000ms "idempotent": true, // 开启幂等去重 "sessionMode": "per-chat" // 按会话隔离 }

Suggested Action

  1. 监控网关响应时间,确保<3000ms
  2. 优先使用 websocket 连接模式
  3. 开启幂等性配置自动过滤重复 event_id
  4. 识别重复消息特征:相同内容、不同消息ID、间隔符合重试规则

Metadata

  • Source: user_feedback
  • Related Files: ~/.openclaw/openclaw.json
  • Tags: feishu, webhook, timeout, retry, websocket
  • Pattern-Key: infra.feishu_webhook_timeout

Resolution

  • Resolved: 2026-03-16T07:20:00+08:00
  • Action: 已更新 openclaw.json 配置,用户已重启网关
  • Notes: 配置已添加 websocket 模式、2000ms超时、幂等去重、per-chat会话隔离