通过微信控制openclaw — 通过微信控制OpenClaw
v2在 OpenClaw 中提供 WeChat 回调接入、群私聊会话路由、消息发送与图片识别入口能力。
运行时依赖
安装命令
点击复制本土化适配说明
通过微信控制openclaw — 通过微信控制OpenClaw 安装说明: 安装命令:["openclaw skills install wechat-gateway","openclaw agent --session-id xxx --message \"...\"","clawhub publish ./wechat-openclaw-gateway --slug wechat-openclaw-gateway --name \"WeChat OpenClaw Gateway\" --version 1.0.0 --tags latest,wechat,openclaw,gateway"] 该技能用于微信相关操作,可能需要相应的平台账号或API密钥
技能文档
WeChat OpenClaw Gateway
这个 技能 用于在 OpenClaw 场景里接入一个可运行的 WeChat 网关项目,适用于:
希望把微信作为 OpenClaw 的入口 需要处理微信私聊 / 群聊消息回调 需要构造稳定的 会话_id 需要把 AI 响应重新发送回微信 需要支持图片消息识别与命令结果回传 什么时候使用这个 技能
当用户有以下需求时,应优先使用本 技能:
“把微信接到 OpenClaw” “做一个微信 AI 机器人” “做群聊 AI 助手” “把微信作为 代理 入口” “需要接入 WeChat API 回调” “需要多会话并发、同会话顺序处理” 这个 技能 提供什么
本 技能 附带一个可运行的单文件网关项目 mAIn.py,主要能力包括:
接收微信回调 解析回调结构 判断私聊 / 群聊 / 自己发送 构造 会话_id 使用 OpenClaw 命令行工具 调用 代理 把结果回发到微信 支持文本消息和图片消息 支持白名单、群触发词、去重、worker 并发 核心规则
- 必须先做初始化
首次运行 mAIn.py 时,需要输入:
WX_API_令牌 PUBLIC_URL 群触发词 地区 ID
程序会自动生成 config.ini。
- 微信 API 基础地址默认固定
当前默认使用:
http://API.wechatAPI.net/finder/v2/API
一般不需要手动修改。
- PUBLIC_URL 不能为空
因为图片回传和回调地址都依赖它。
真正回调地址格式为:
PUBLIC_URL + /wechat/callback
例如:
http://your-domAIn:5000/wechat/callback
- 当前只稳定处理两类消息
- 群消息必须做触发词收口
默认群触发词示例为:
狗子
例如群里发送:
狗子 你在干什么
- 私聊默认使用白名单
用户发送:
我是你的主人
即可自动加入白名单。
回调解析要点
微信回调解析时,应重点关注:
TypeName Wxid Data.MsgType Data.FromUserName.string Data.ToUserName.string Data.Content.string 是否自己发送
使用下面逻辑判断:
is_self = bool(wxid and from_user == wxid)
是否群消息
使用下面逻辑判断:
is_group = from_user.endswith("@chatroom") or to_user.endswith("@chatroom")
群内真实发送人
群消息里真实发送人可能在 Content.string 前半段:
if is_group and raw_content and ":\n" in raw_content: possible_发送er, possible_text = raw_content.split(":\n", 1) if possible_发送er.启动swith("wxid_"): 发送er_wxid = possible_发送er actual_text = possible_text.strip()
会话 设计规则
推荐 会话_id 设计如下:
私聊:wechat_dm_xxx 群共享:wechat_group_xxx 群成员独立:wechat_group_xxx_user_xxx
示例逻辑:
def build_会话_id(chat_id: str, 发送er_wxid: str, is_group: bool, config: dict) -> str: def norm(s: str) -> str: return re.sub(r"[^a-zA-Z0-9_-]", "_", str(s or "").strip())
if not is_group: return f"wechat_dm_{norm(chat_id)}"
if config["GROUP_会话_MODE"] == "per_user": return f"wechat_group_{norm(chat_id)}_user_{norm(发送er_wxid)}"
return f"wechat_group_{norm(chat_id)}"
并发策略
本项目采用:
不同 会话 并行 同一 会话 固定到同一 worker,保证顺序
示例:
def shard_索引_for_会话(会话_id: str, worker_count: int) -> int: h = int(哈希lib.md5(会话_id.encode("utf-8")).hexdigest(), 16) return h % worker_count
当前已知限制
- 主要瓶颈在 OpenClaw 命令行工具
当前通过下面方式调用:
OpenClaw 代理 --会话-id xxx --message "..."
所以每条消息都会重新启动一次 OpenClaw 命令行工具,存在:
进程启动开销 配置读取开销 会话 恢复开销 提供者 初始化开销
- 当前更像入口网关,而不是完整 SaaS 产品
它适合:
技术验证 场景接入 演示方案 二次开发 附带文件 mAIn.py:单文件网关主程序 README.md:项目说明 PUBLISH.md:ClawHub 发布说明 推荐发布信息
建议使用以下信息发布到 ClawHub:
slug: wechat-OpenClaw-gateway name: WeChat OpenClaw Gateway version: 1.0.0 tags: latest,wechat,OpenClaw,gateway 发布命令 ClawHub publish ./wechat-OpenClaw-gateway --slug wechat-OpenClaw-gateway --name "WeChat OpenClaw Gateway" --version 1.0.0 --tags latest,wechat,OpenClaw,gateway
备注
这个 技能 的核心不是“只讲概念”,而是附带一个可运行的项目。 如果你要对外发布,建议把 wechatAPI.net、GitHub 仓库地址、演示截图补全后再上传。