微信自动应答 Pipeline
执行流程图
┌──────────────────────────────────┐
│ 定时触发 (每10秒) │
└───────────────┬──────────────────┘
│
▼
┌──────────────────────────────────┐
│ Stage 1: 检查在线状态 │
│ skill: wechat-check-online │
│ → data=true → 继续 │
│ → data=false → 停止等待重连 │
└───────────────┬──────────────────┘
│
▼
┌──────────────────────────────────┐
│ Stage 2: 增量拉取新消息 │
│ skill: wechat-get-messages │
│ input: since=上次检查时间 │
│ direction=received │
│ → 返回新消息数组 │
└───────────────┬──────────────────┘
│
▼
┌──────────────────────────────────┐
│ Stage 3: 遍历每条新消息 │
│ 过滤: 跳过系统消息/表情/自己发的 │
│ 过滤: 跳过 weixin/fmessage 等 │
└───────┬───────────────┬──────────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ 个人私聊 │ │ 群聊 │
│ fromWxid │ │ @chatroom │
│ 不含@chatroom│ │ │
└──────┬───────┘ └──────┬───────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────────┐
│ AI生成回复 │ │ 检查是否被@或关键词│
│ 友好个性化 │ │ 触发才回复 │
└──────┬───────┘ └──────┬───────────┘
│ │
▼ ▼
┌──────────────────────────────────┐
│ Stage 4: 发送回复 │
│ skill: wechat-send-text │
│ input: toWxid, content │
└──────────────────────────────────┘
消息来源分类规则
| fromWxid 格式 |
来源类型 |
存储目录 |
回复策略 |
wxid_xxx |
个人私聊 |
personal/{wxid}.jsonl |
每条消息都回复 |
xxx@chatroom |
群聊 |
group/{chatroom}.jsonl |
仅被@或关键词触发时回复 |
gh_xxx |
公众号 |
忽略 |
不回复 |
weixin/fmessage |
系统 |
忽略 |
不回复 |
回复策略
个人私聊
- 文字消息 → AI生成个性化回复
- 图片/语音/视频 → 回复确认("收到图片~")
- 名片/位置/链接 → 回复确认
群聊
- 被@时 → AI生成回复
- 包含关键词("帮我"/"请问")→ AI生成回复
- 其他消息 → 不回复,避免刷屏
忽略列表
- 消息类型: system, emoji, location, video, voice
- 来源wxid: weixin, fmessage, medianote, gh_* (公众号)
状态管理
| 状态变量 |
说明 |
lastCheckTime |
上次轮询时间(ISO),用于 since 增量拉取 |
每次轮询完成后更新 lastCheckTime = 当前时间,下次只拉新消息。