跳到主要内容OpenClaw 接入微信实现 AI 自动回复实战指南 | 极客日志编程语言Node.jsWeChatAI
OpenClaw 接入微信实现 AI 自动回复实战指南
本文介绍如何通过 OpenClaw 插件将微信私聊和群聊接入 AI 智能体运行时。涵盖插件安装、Token 获取、内网穿透配置及 Webhook 设置。支持媒体处理、富消息转发、自定义触发策略及 Agent 绑定。通过 ngrok 或 FRP 实现公网可达,完成从消息接收到 Agent 调度的闭环。
机器人54 浏览 SyNodeAi OpenClaw Plugin
SyNodeAi OpenClaw Plugin 用于将微信私聊和群聊接入 OpenClaw,使每一条消息都能进入 Agent Runtime,触发 Tool、Skill 或 Workflow 调度。
为什么做这个插件
在 OpenClaw 体系里,微信不仅是聊天工具,更是:
- 高活跃入口:天然承载真实用户会话
- 事件源:每条消息都可以转换为 Agent Event
- 执行环境:每个会话都可以成为独立上下文 Runtime
- 能力承载层:可以继续挂载 Tool、Skill、Workflow、ACP 持久会话
可以理解为:
WeChat = Event Source
OpenClaw = Runtime
Agent = Execution Unit
Tool / Skill = Capability Layer
架构概览
WeChat ↓ Channel (SyNodeAi) ↓ OpenClaw Runtime ↓ Agent ↓ Tool / Skill / Workflow → Response → WeChat
功能特性
通道能力
- 支持微信私聊/群聊接入
- 支持 SyNodeAi API + Webhook 回调
- 支持消息转 Event
- 支持接入 OpenClaw Channel 体系
Agent 执行能力
- 每个会话独立上下文
- 支持 bindings 路由到指定 Agent
- 支持 ACP 持久会话
- 支持群聊/私聊细粒度触发策略
微信特性支持
- 支持
@ 触发/引用触发
- 支持引用回复/普通回复/@发送者
- 支持撤回消息
- 支持转发已有富消息
- 支持表情/名片/小程序/appmsg/链接等富消息
- 支持群成员目录读取与已知对象缓存
媒体与语音能力
- 支持媒体上传
- 支持
mediaPublicUrl 本地反代
- 支持 S3 兼容上传
- 支持语音自动转 silk
- 支持自动下载
rust-silk
- 支持 ffmpeg/ffprobe 处理媒体
快速开始
只需要几分钟,你就可以让微信跑起一个 AI Agent。
1. 安装插件
推荐使用 npm 安装:
openclaw plugins install synodeai
其他安装方式包括本地目录安装、软链接(开发调试)或归档安装。安装或启用插件后需要重启 Gateway。
2. 登录并获取 Token
打开地址登录微信并完成绑定,获取 token:
http:
3. 配置 JSON 文件
将配置文件复制到 ~/.openclaw/openclaw.json:
{
"channels": {
"synodeai": {
"enabled": true,
"token": "<synodeai-token>",
"webhookHost": "0.0.0.0",
"webhookPort": 4399,
"webhookPath": "/webhook",
"autoQuoteReply": false,
"allowFrom": [],
"dmPolicy": "open",
"groupPolicy": "open",
"groups": {
"*": {
"trigger": { "mode": "at" },
"reply": { "mode": "quote_source" }
}
}
}
}
}
4. 配置 Webhook(内网穿透)
Webhook 是 SyNodeAi 将微信消息推送到你本地 OpenClaw 的入口地址,必须公网可访问。如在本地环境使用,推荐用 ngrok 做内网穿透。
4.1 安装 ngrok
4.2 配置 token
ngrok config add-authtoken YOUR_TOKEN
4.3 启动穿透
https://xxxx.ngrok-free.app -> http://localhost:4399
这个 https://xxxx.ngrok-free.app 就是你的公网地址。
5. 填写 webhook
把上一步的公网地址按下面格式填写到 SyNodeAi:
6. 启动 OpenClaw
7. 验证
- 私聊直接发消息
- 群聊中
@机器人
- 群聊中引用机器人上一条消息继续追问
正确顺序是:登录微信(SyNodeAi)→ 安装 OpenClaw plugin(synodeai)→ 复制 json 配置文件 → 配置 ngrok 拿到公网地址 → 在 SyNodeAi 填写 webhook → 最后启动 openclaw start。
配置项说明
核心配置位于 ~/.openclaw/openclaw.json 的 channels.synodeai 段落中:
webhookHost/webhookPort/webhookPath:SyNodeAi 回调入口(需公网可达,常配合 FRP)。
mediaPath:本地媒体服务的路由前缀(默认 /synodeai-media)。
mediaPublicUrl:本地反代回退时的公网地址前缀(可选)。
s3Enabled:是否启用 S3 兼容上传。
voiceAutoConvert:自动将音频转为 silk(默认开启)。
silkAutoDownload:自动下载 rust-silk(默认开启)。
autoQuoteReply:是否开启 replyToId + 纯文本 自动引用回复(默认开启)。
allowFrom:允许私聊触发的微信 ID。
群聊/私聊触发与回复规则
groups 和 dms 都支持 * 默认项 + 精确项覆写。
群聊触发
groups[*].trigger.mode 支持:
at:只有被 @ 时触发
quote:只有引用机器人消息时触发
at_or_quote:@ 或引用机器人消息都触发
any_message:任何消息都触发
群聊回复
plain:普通回复
quote_source:首条回复自动引用当前入站消息
at_sender:首条文本回复自动 @ 发送者
quote_and_at:首条文本回复同时引用并 @
群聊默认值会跟随 autoQuoteReply:未配置或为 true 时默认 quote_source;显式设为 false 时默认 plain。
私聊触发与回复
- 触发模式:
any_message 或 quote
- 回复模式:
plain 或 quote_source
私聊默认触发是 any_message。私聊默认回复也会跟随 autoQuoteReply 回退到 quote_source 或 plain。
绑定到 Agent / ACP
除了 channels.synodeai 这一段插件配置,SyNodeAi 还支持配合 OpenClaw 顶层 bindings[] 使用。
绑定到普通 Agent
示例表示:ops-room@chatroom 这个群固定交给 ops agent 处理。
{
"bindings": [
{
"type": "route",
"agentId": "ops",
"match": {
"channel": "synodeai",
"accountId": "work",
"peer": { "kind": "group", "id": "ops-room@chatroom" }
}
}
],
"channels": {
"synodeai": {
"accounts": {
"work": {
"groups": {
"ops-room@chatroom": {
"trigger": { "mode": "at_or_quote" },
"reply": { "mode": "quote_and_at" }
}
}
}
}
}
}
}
绑定到 ACP 持久会话
示例表示:这个群固定进入 codex agent 的一个 ACP 持久会话。
{
"bindings": [
{
"type": "acp",
"agentId": "codex",
"match": {
"channel": "synodeai",
"accountId": "work",
"peer": { "kind": "group", "id": "repo-room@chatroom" }
},
"acp": {
"label": "repo-room",
"mode": "persistent",
"cwd": "/workspace/repo-a",
"backend": "acpx"
}
}
]
}
发送媒体与富消息
URL 策略
- 本地文件:优先上传 S3,失败回退
mediaPublicUrl 本地反代
- 公网 URL:先尝试原 URL 发送,失败后再尝试上传 S3,仍失败回退本地反代
富消息与消息复用
可以通过共享 message 工具走标准动作:send、reply、unsend,并在参数里附带一个 synodeai 对象来表达微信专属语义。
{
"action": "reply",
"message": "收到,我接着处理",
"synodeai": {
"quote": { "partialText": "需要继续跟进的那一段" }
}
}
{
"action": "unsend",
"to": "ops-room@chatroom",
"messageId": "10001",
"newMessageId": "10002",
"createTime": "1710000002"
}
插件支持通过 channelData["synodeai"] 传入 SyNodeAi 专有消息语义,结构如下:
appMsg:直接发送 <appmsg> XML
quoteReply:发送引用回复
emoji:发送表情
nameCard:发送名片
miniApp:发送小程序
revoke:撤回指定消息
forward:复用已存在消息 XML 进行二次转发
如果希望让模型主动发'部分引用',SyNodeAi 通道会识别回复末尾的一行隐藏指令:
[[GEWE_QUOTE_PARTIAL:要引用的原文片段]]
插件会在发送前剥离这行指令,并自动转成 quoteReply.partialText。
依赖
npm 依赖
peer 依赖
系统级工具
ffmpeg / ffprobe(用于视频缩略图与时长)
rust-silk(出站语音转 silk + 入站语音解码;支持自动下载)
网络 / 服务依赖
- SyNodeAi API 服务
- Webhook 回调需要公网可达(可配合 FRP)
- 媒体对外地址(
mediaPublicUrl)
相关免费在线工具
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online