微信接入 AI Agent 的难点
微信不像飞书和钉钉那样提供官方的机器人 API,所以接入方式比较曲折。2026 年主流的 5 种方案各有优劣:
| 方案 | 原理 | 稳定性 | 难度 | 推荐场景 |
|---|---|---|---|---|
| 企业微信 API | 官方 API,合规 | ★★★★★ | 低 | 企业内部使用 |
| 微信公众号 | 官方 API,被动回复 | ★★★★★ | 低 | 面向粉丝/用户 |
| WeChatFerry (wcf) | Hook 微信客户端 | ★★★☆☆ | 中 | 个人号机器人 |
| OpenClaw + 微信桥接 | 开源框架 + 协议适配 | ★★★★☆ | 中 | 通用场景 |
| 企业微信 + 微信互通 | 企微应用被微信用户触达 | ★★★★★ | 低 | 对外服务 |
我们的建议:
- 企业内部用 → 企业微信 API(最稳定、最合规)
- 面向外部用户 → 微信公众号 或 企业微信互通
- 个人折腾/小范围使用 → WeChatFerry
下面分别讲解三种最常用的方案。
方案一:企业微信 API(推荐企业用户)
优势
- 官方 API,零封号风险
- 支持 Webhook、应用消息、群机器人
- 可与微信用户互通(企微应用能被微信联系人使用)
操作步骤
1. 注册企业微信
前往 企业微信官网 注册,完成企业认证。
2. 创建自建应用
管理后台 → 应用管理 → 自建 → 创建应用:
- 应用名称:
AI 助手 - 可见范围:选择需要使用 AI 的部门/人员
- 记录
AgentId、CorpId、Secret
3. 配置接收消息
应用详情 → 「接收消息」 → 设置 API 接收:
- URL:
https://你的域名/webhook/wechat-work - Token:自定义字符串
- EncodingAESKey:点击「随机获取」
4. 部署 Agent 服务
git clone https://github.com/nicepkg/openclaw.git
cd openclaw && npm install
# 配置 .env
cat > .env << 'EOF'
# 企业微信配置
WECHAT_WORK_CORP_ID=wwxxxxxxxxxxxxxx
WECHAT_WORK_AGENT_ID=1000002
WECHAT_WORK_SECRET=xxxxxxxxxxxxxxxx
WECHAT_WORK_TOKEN=your_callback_token
WECHAT_WORK_AES_KEY=your_encoding_aes_key
# AI 模型
LLM_API_KEY=sk-xxxxxxxx
LLM_MODEL=gpt-4o
EOF
# 启动
pm2 start dist/index.js --name wechat-agent
5. 测试
在企业微信中找到你的应用,发一条消息测试。
方案二:微信公众号(推荐面向用户)
优势
- 官方支持,完全合规
- 用户关注后即可使用
- 支持文本、图片、图文消息
限制
- 只能被动回复(用户发消息后 5 秒内回复)
- 订阅号每天只能群发 1 次
- 无法主动推送
操作步骤
1. 注册公众号
前往 微信公众平台,注册服务号(需要营业执照)或订阅号(个人可注册)。
2. 配置服务器
公众号后台 → 开发 → 基本配置:
- 服务器地址:
https://你的域名/webhook/wechat-mp - 令牌:自定义
- 消息加解密方式:明文模式(开发阶段)
3. 部署 Agent
# 微信公众号 Agent 示例(Python + Flask)
# 注意:先安装 defusedxml 防止 XML 注入攻击
# pip install flask defusedxml
from flask import Flask, request
import hashlib
import defusedxml.ElementTree as ET
app = Flask(__name__)
TOKEN = "your_token"
def verify_signature(signature, timestamp, nonce):
items = sorted([TOKEN, timestamp, nonce])
return hashlib.sha1("".join(items).encode()).hexdigest() == signature
@app.route("/webhook/wechat-mp", methods=["GET", "POST"])
def wechat():
if request.method == "GET":
# 验证服务器
signature = request.args.get("signature")
timestamp = request.args.get("timestamp")
nonce = request.args.get("nonce")
echostr = request.args.get("echostr")
if verify_signature(signature, timestamp, nonce):
return echostr
return "验证失败"
# 处理消息
xml_data = request.data
root = ET.fromstring(xml_data)
msg_type = root.find("MsgType").text
content = root.find("Content").text if root.find("Content") is not None else ""
from_user = root.find("FromUserName").text
to_user = root.find("ToUserName").text
# 调用 AI 生成回复
reply = call_ai(content)
# 构造回复 XML
reply_xml = f"""<xml>
<ToUserName><![CDATA[{from_user}]]></ToUserName>
<FromUserName><![CDATA[{to_user}]]></FromUserName>
<CreateTime>{int(__import__('time').time())}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{reply}]]></Content>
</xml>"""
return reply_xml
def call_ai(message):
# 替换为你的 AI API 调用
import requests
resp = requests.post(
"https://api.openai.com/v1/chat/completions",
headers={"Authorization": "Bearer sk-xxx"},
json={
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "你是AI助手,回答简洁专业。"},
{"role": "user", "content": message}
]
}
)
return resp.json()["choices"][0]["message"]["content"]
if __name__ == "__main__":
app.run(port=8080)
方案三:WeChatFerry(个人号机器人)
优势
- 用你自己的微信号当机器人
- 支持私聊和群聊
- 功能最灵活
风险
- 非官方方案,有封号风险
- 需要 Windows 环境运行特定版本微信
- 不建议用主号
操作步骤
1. 安装 WeChatFerry
# Windows 环境
pip install wechatferry
# 需要安装指定版本的微信客户端(WeChatFerry 文档中有下载链接)
2. 启动微信并 Hook
from wechatferry import WCF
wcf = WCF()
# 检查登录状态
print(wcf.is_login())
# 获取联系人列表
contacts = wcf.get_contacts()
for c in contacts:
print(f"{c.name} ({c.wxid})")
3. 接入 AI Agent
from wechatferry import WCF
import requests
wcf = WCF()
def get_ai_reply(message):
resp = requests.post(
"https://api.openai.com/v1/chat/completions",
headers={"Authorization": "Bearer sk-xxx"},
json={
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "你是AI助手,回答简洁,不超过200字。"},
{"role": "user", "content": message}
]
}
)
return resp.json()["choices"][0]["message"]["content"]
# 监听消息
wcf.enable_receiving_msg()
while True:
msg = wcf.get_msg()
if msg and msg.content and not msg.self:
reply = get_ai_reply(msg.content)
wcf.send_text(reply, msg.sender)
安全提示:请使用小号测试,不要在主号上运行。封号风险虽然不高但确实存在。
方案对比总结
| 维度 | 企业微信 | 公众号 | WeChatFerry |
|---|---|---|---|
| 合规性 | ★★★★★ | ★★★★★ | ★★☆☆☆ |
| 稳定性 | ★★★★★ | ★★★★★ | ★★★☆☆ |
| 功能丰富度 | ★★★★☆ | ★★★☆☆ | ★★★★★ |
| 接入难度 | 低 | 低 | 中 |
| 适用场景 | 企业内部 | 面向用户 | 个人/小群 |
给 AI Agent 的接入指令
复制以下指令给你的 Agent 框架,让它自动适配微信:
请将以下 Agent 接入微信(选择最适合的方案):
方案A(企业微信):
1. 在企业微信管理后台创建自建应用,获取 CorpId、AgentId、Secret
2. 配置接收消息的回调 URL 指向 Agent 的 /webhook/wechat-work 端点
3. 实现消息解密(AES)和消息处理逻辑
4. 通过企业微信 API 发送回复:POST https://qyapi.weixin.qq.com/cgi-bin/message/send
方案B(公众号):
1. 在微信公众平台配置服务器 URL
2. 实现签名验证(SHA1)
3. 解析 XML 消息,调用 LLM 生成回复
4. 构造 XML 回复返回(5秒内)
方案C(个人号 WeChatFerry):
1. 安装 wechatferry Python 包
2. 启动指定版本微信客户端并完成 Hook
3. 监听消息事件,调用 LLM 生成回复
4. 通过 WCF API 发送回复消息
原文出处:本教程基于 OpenClaw 接入微信完整教程 和 CSDN 5种方案对比 改写。
有问题?评论区见。