微信机器人对接无界(Bncr)完整教程
用户微信发消息 → 无界匹配规则 → 业务插件处理 → 自动回复微信
⚠️ 开始前必读
本方案的技术路线:不 Hook、不逆向协议、封号风险低
| 做法 | 本方案 |
|---|---|
| 逆向微信协议(iPad 协议 / Pad 协议) | ❌ 不采用 |
| 注入(Hook)微信进程 / 修改微信 DLL | ❌ 不采用 |
| 伪装异地设备登录 | ❌ 不采用 |
| 连接第三方授权服务器 | ❌ 不采用 |
| 只读微信本地加密数据库 | ✅ 采用 |
| 模拟真人操作本机微信界面 | ✅ 采用 |
关键点:微信看到的是你自己这台电脑上的微信客户端在正常使用 —— 没有异常登录、没有进程被改、没有 DLL 被注入。
微信版本要求(必须严格满足)
| 项 | 要求 |
|---|---|
| 微信版本 | 4.1.12 及以上(作者在 4.1.15.13 实测验证) |
| 微信 3.x | ❌ 完全不支持(架构不同) |
| 微信 4.0.x | ❌ 不支持(低于 4.1.12) |
| 微信 4.1.12 ~ 4.1.15 | ⚠️ 可用,但 UIA 布局可能需校准 |
| 微信 4.1.15.13 | ✅ 最佳,作者已适配 |
查看版本:微信 → 设置 → 关于微信
版本太旧会怎样:控件树热激活的gate RVA位置对不上,发送会退回到纯 OCR/坐标路径,慢且不准。
版本太新会怎样:微信大版本升级后 UIA 布局可能漂移,作者需要跟进适配。
环境要求
| 项 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Windows 10/11 x64 | 必须 Windows,Linux/Mac 不支持 |
| Python | 3.12(64 位) | ⚠️ 3.13+ 会因 winsdk 缺包安装失败 |
| 桌面 | 必须可见 | 窗口最小化会失效 |
| 微信状态 | 已登录且运行中 |
目录
- 原理与选型
- 架构
- 第一步:Windows PC 装 wechatauto
- 第二步:云服务器部署无界适配器
- 第三步:PC 部署桥接脚本
- 第四步:端到端联调
- 第五步:安全加固
- 第六步:开机自启
- 排查手册
- 附录:文件清单
- 风险声明
一、原理与选型
1.1 为什么不选协议端
市面上让个人微信变机器人的方案,主流是「协议端」:
| 方案 | 原理 | 封号风险 | 第三方依赖 |
|---|---|---|---|
| WeChatPadPro / Gewechat | 逆向 iPad 协议,伪装异地设备登录 | 🔴 高 | 🔴 需连作者授权服务器 |
| WeChatFerry / ntchat | 注入(Hook)微信 DLL | 🔴 极高 | ⚠️ 闭源 |
| 网页版协议 | 逆向网页微信 | 🔴 高 | 微信已关闭网页版 |
| 本方案(wechatauto) | 读本地加密库 + 驱动本机界面 | 🟡 低 | ✅ 无 |
为什么协议端和 Hook 风险高:
- 协议端:微信服务器看到的是「一个新设备在异地登录」,与你的真实登录地/设备指纹不符 → 风控模型直接命中。号商自己都写「新号要挂机 3 天养号」「异地登录必须用同市 socks5 代理」。
- Hook:微信 4.x 有完整性校验,检测到进程被改会直接判定为外挂 → 秒封。
1.2 本方案的技术原理
wechatauto-replica 用两条互相独立的路线:
┌─────────────────────────────────────────────────┐
│ 读路径 = 本地 SQLCipher-4 数据库解密 │
│ │
│ 微信把消息存在加密 SQLite 里: │
│ xwechat_files/<wxid>/db_storage/ │
│ ├── contact.db │
│ ├── message_0.db / message_1.db / ... │
│ └── media_0.db │
│ │
│ 密钥藏在 Weixin.exe 进程内存里,库用【只读扫描】 │
│ 取出,再用 SQLCipher HMAC 规则逐个校验。 │
│ │
│ ★ 只读本地文件,不产生任何网络请求 │
│ ★ 不修改微信任何文件 │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ 发路径 = UIA 控件树 + 坐标/OCR 兜底 │
│ │
│ 微信 4.x 界面是自绘的,控件树默认隐藏。 │
│ 库会【热激活】Weixin.dll 里一个标志字节, │
│ 让 mmui::* 控件树物化,然后: │
│ · 激活窗口 → 搜索会话 → 点输入框 │
│ · 剪贴板 Ctrl+V 粘贴 → 回读校验 → 回车 │
│ │
│ ★ 走的是微信自己的 UI 流程,等同真人点击 │
│ ★ 不注入代码、不修改 DLL 内容(只翻一个标志位) │
└─────────────────────────────────────────────────┘1.3 为什么封号风险低
| 风控维度 | 协议端 | 本方案 |
|---|---|---|
| 登录设备 | ❌ 伪装 iPad,与真实设备不符 | ✅ 就是本机登录 |
| 登录地点 | ❌ 异地,需代理伪装 | ✅ 本机 IP,无异常 |
| 进程完整性 | ❌ DLL 被注入/篡改 | ✅ 进程未被修改 |
| 行为特征 | ⚠️ 可被识别为机器人 | ✅ 见下方拟人节奏层 |
| 数据流向 | ⚠️ 经第三方服务器 | ✅ 纯本地 + 你自己的服务器 |
作者的真实风控记录(原文引用):
本机账号在 2026-09-21 触发过一次风控(会话中途被要求重新登录),此后凡是驱动真实微信界面的动作都必须按真人节奏走,而且要做进库里。
注意:作者触发风控的原因是「驱动界面太快」(模拟点击频率机器化),不是「读数据库」。所以他做了拟人节奏层 rhythm.py:
| 拟人措施 | 说明 |
|---|---|
| 光标移动 | 走二次贝塞尔曲线,不是瞬移 |
| 落点 | 在控件内随机取点,不打正中 |
| 键入 | type_gap() / key_hold() 打破匀速 |
| 写动作节流 | 两次发送至少隔 2.5~6 秒 |
| 突发上限 | 120 秒窗口内第 7 次写动作 → 冷却 30~75 秒 |
| 等待抖动 | 所有 nap() 加随机抖动 |
| 跨进程生效 | 节流状态落盘 ~/.wechatauto/rhythm.json |
风控看到的是「动作的时间分布」而不是坐标 —— 固定间隔、光标瞬移、永远命中控件正中、逐字匀速键入、几秒内连发多条,这些特征才是风控的判据。拟人层正是针对这些。
读路径完全不节流 —— 因为读本地文件不产生任何风控信号。
1.4 本方案的代价
| 约束 | 说明 |
|---|---|
| 必须 Windows | 依赖 UIA / pywin32,Linux 跑不了 |
| 必须有可见桌面 | 微信窗口最小化 → 发送会退回 OCR 路径 |
| 发送会抢鼠标 | 走剪贴板 + 模拟点击,这台机器别用于其他工作 |
| 回复延迟 5~8 秒 | UIA 发送 + 拟人节奏的固有成本 |
延迟构成:
用户发消息
↓ 约 1 秒 (监听轮询数据库)
上报无界
↓ 约 0.01 秒(规则匹配 + 插件执行)
PC 取回复
↓ 约 0.8 秒 (轮询间隔,可调)
UIA 发送
↓ 2~6 秒 (激活窗口 + 打开会话 + 粘贴 + 回读校验 + 回车)
↓ 2.5~6 秒 (拟人节奏写动作间隔)
用户看到回复5~8 秒对大多数场景可接受(用户发「菜单」等几秒很正常)。
想更快只能上协议端 —— 但要拿封号风险换。
1.5 一句话总结
本方案不 Hook、不逆向协议、不伪装登录。
微信看到的是「本机微信在被真人缓慢使用」。
代价是慢几秒、必须 Windows、必须有小号常开的机器。
二、架构
┌─────────────────────────────┐ ┌──────────────────────────────┐
│ Windows PC │ │ 云服务器 │
│ │ │ │
│ ┌───────────────────────┐ │ HTTP │ ┌────────────────────────┐ │
│ │ 微信 4.1.12+(已登录) │ │ │ │ 无界 Bncr 容器 (:9090) │ │
│ │ ★ 窗口必须可见 │ │ │ │ │ │
│ └───────────┬───────────┘ │ │ │ ├─ 无界本体 │ │
│ │ 读库 / UIA │ │ │ └─ WeChatBridge 适配器 │ │
│ ┌───────────▼───────────┐ │ │ │ (挂 router) │ │
│ │ wechat_bridge.py │──┼───────→│ └───────────┬────────────┘ │
│ │ · AddListenAll 监听 │ │ POST │ │ adapter.receive()
│ │ · 上报新消息 │ │/incoming│ ↓ │
│ │ · 轮询取回复 │←─┼────────│ ┌────────────────────────┐ │
│ │ · chat.SendMsg() │ │ GET │ │ 无界规则匹配 @rule │ │
│ └───────────────────────┘ │ /pull │ └───────────┬────────────┘ │
│ │ │ ↓ │
│ 出网:只需访问云服务器 9090 │ │ ┌────────────────────────┐ │
│ ★ 无需公网 IP、无需穿透 │ │ │ 业务插件(YYB查询等) │ │
└─────────────────────────────┘ │ │ sender.reply(...) │ │
│ └────────────────────────┘ │
└──────────────────────────────┘穿透方向是「PC 主动连出去」 —— 所以 PC 在内网也能用,不需要公网 IP、不需要 frp。
数据流(六步)
| # | 动作 | 耗时 |
|---|---|---|
| 1 | 用户发微信消息 | — |
| 2 | AddListenAll 轮询数据库读到 | 约 1 秒 |
| 3 | POST /wechat/incoming 上报 | ~0.1 秒 |
| 4 | 适配器 adapter.receive() 注入无界事件流 | ⭐ 关键 |
| 5 | 无界匹配 @rule → 业务插件 sender.reply() | ~0.01 秒 |
| 6 | PC 轮询 /wechat/pull → chat.SendMsg() | 0.8s + 发送耗时 |
为什么桥接层必须是「适配器」不是「插件」
无界的 @rule 只匹配框架自己的事件流。HTTP 收到外部消息后必须注入事件流,插件才会触发。
官方适配器 API(develop.md):
Ding.receive({
userId, userName, groupId, groupName,
msg, msgId,
type: 'Social',
});适配器 Adapter/ | 插件 plugins/ | |
|---|---|---|
| 能注入事件 | ✅ receive() | ❌ |
| 热重载 | ❌ 需重启 | ✅ |
好处:业务插件零改动,照旧写 @rule。
三、第一步:Windows PC 装 wechatauto
3.1 装 Python 3.12(64 位)
⚠️ 必须 3.12,不能用 3.13/3.14/3.15
原因:winsdk 这个依赖没有新版本 Python 的预编译包,装到一半会报:
error: Microsoft Visual C++ 14.0 or greater is required
ERROR: Failed to build 'zstandard' when getting requirements to build wheel
ResolutionImpossible: ...winsdk下载:
https://www.python.org/ftp/python/3.12.10/python-3.12.10-amd64.exe安装时两个勾必须打:
☑ Install launcher for all users (recommended)
☑ Add python.exe to PATH ← 关键💡 如果已装 3.13+,不用卸载 —— 多版本可共存,用 py -3.12 指定即可。验证:
py -0期望输出包含 -V:3.12 Python 3.12 (64-bit)。
💡 若Win+R被系统精简:用Ctrl+Shift+Esc打开任务管理器 → 文件 → 运行新任务。
3.2 确认微信版本
微信 → 设置 → 关于微信
| 版本 | 处理 |
|---|---|
| ≥ 4.1.15.13 | ✅ 直接用 |
| 4.1.12 ~ 4.1.15 | ⚠️ 可用,若发送异常可考虑升级到 4.1.15.13 |
| < 4.1.12 | ❌ 必须先升级 |
| 3.x | ❌ 完全不支持 |
确认后登录微信,保持运行。
3.3 装 wechatauto
py -3.12 -m pip install wechatauto-replica requests -i https://pypi.tuna.tsinghua.edu.cn/simple成功标志:
Successfully installed wechatauto-replica-1.2.6.1 winsdk-1.0.0b10 ...报错对照:
| 报错 | 原因 | 解决 |
|---|---|---|
Microsoft Visual C++ 14.0 is required | Python 版本太新 | 换 Python 3.12 |
ResolutionImpossible: ...winsdk | 同上 | 换 3.12 |
'pip' 不是内部或外部命令 | PATH 问题 | 用 py -3.12 -m pip |
Read timed out | 网络 | 换镜像 -i |
3.4 体检
py -3.12 -m wechatauto 体检期望输出:
wechatauto 1.2.6.1 | Python 3.12.10 (64 位) | win32
账号:wxid_xxxxxxxx(wxid wxid_xxxxxxxx)
数据库密钥:17/17 个库可解密
图片密钥:已拿到(已缓存,之后离线可用)
控件树(发消息/下载原图要用):拿不到——微信需要热激活一次| 项 | 期望 | 说明 |
|---|---|---|
| 数据库密钥 | 全部可解密 | 不全 = 读库有问题 |
| 控件树"拿不到" | 正常 | 实际发消息时会自动热激活 |
3.5 功能测试
# ① 列会话
py -3.12 -m wechatauto 会话
# ② 读消息
py -3.12 -m wechatauto 消息 文件传输助手
# ③ 发消息(⚠️ 会驱动微信窗口,抢鼠标)
py -3.12 -m wechatauto 发 测试 --to 文件传输助手 --verify
# ④ 监听(Ctrl+C 退出)
py -3.12 -m wechatauto 听 文件传输助手④ 的测试方法:保持监听窗口开着,用手机给这个微信号发条消息。
期望几秒内出现:
[文件传输助手] 2026-10-13 09:22 wxid_xxx: 你好3.6 两个常见"假故障"
WAL 合并警告
[WARNING] [db.py:1467] WAL 合并失败(微信持续写入),改用仅主库快照(可能缺少最近消息)这是无害的降级行为。 微信正在写 WAL,合并失败就退回快照模式,消息照样能读到(只是可能滞后几秒)。
--verify 报"数据库未确认"
失败:消息已操作发送,但数据库未确认消息通常已经发出去了(去看微信确认),只是主库快照还没 checkpoint 到最新那条。
四、第二步:云服务器部署无界适配器
4.1 确认无界位置
docker ps --format '{{.Names}}\t{{.Ports}}' | grep -i bncr
docker inspect bncr --format '{{json .Mounts}}'记录三项:
| 项 | 本文假设值 | 你的实际值 |
|---|---|---|
| 容器名 | bncr | |
| 端口映射 | 9090:9090 | |
| 挂载路径 | /root/BncrData |
⚠️ 关键:如果容器只有 9090 一个端口映射,适配器必须挂 router 复用 9090,不能自己起服务(否则外部访问不到)。4.2 放置适配器
把包里的 云服务器/Adapter/WeChatBridge.js 上传到 /root/BncrData/Adapter/
或者用命令行直接创建:
# 用宝塔/文件管理器上传更简单
ls -la /root/BncrData/Adapter/4.3 ★ 必须修改 token
打开 /root/BncrData/Adapter/WeChatBridge.js,找到:
const DEFAULTS = {
// ★★★ 鉴权 token —— 必须修改!★★★
token: 'CHANGE_ME_32位随机字符串',生成一个随机 token(在 PC 上跑):
-join ((48..57)+(65..90)+(97..122) | Get-Random -Count 32 | ForEach-Object {[char]$_})把结果填进去:
token: 'A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6', // ← 换成你自己生成的⚠️ 两处必须一致:云服务器这里 + PC 的start_bridge.cmd里BNCR_TOKEN。
不一致 → PC 上报时返回401 unauthorized。
4.4 重启无界
docker restart bncr
sleep 6
docker logs bncr 2>&1 | tail -40 | grep -i wechat期望看到:
[WeChatBridge] ✓ 路由已挂载: /wechat/health | /wechat/incoming | /wechat/pull | /wechat/replies4.5 验证
云服务器本机:
curl http://127.0.0.1:9090/wechat/health期望:
{"ok":true,"service":"bncr-wechatbridge-adapter","version":"1.1.0","platform":"wechatBridge","queue":0}验证鉴权生效:
# 不带 token → 应 401
curl -s http://127.0.0.1:9090/wechat/pull; echo ""
# 带 token → 应 200
curl -s -H "X-Auth-Token: 你的token" http://127.0.0.1:9090/wechat/pull; echo ""五、第三步:PC 部署桥接脚本
5.1 建目录
mkdir C:\wechat-bridge⚠️ 避开中文路径和空格。
把包里的 Windows PC/wechat_bridge.py 放进 C:\wechat-bridge\。
5.2 修改服务器地址
打开 wechat_bridge.py,找到第 55 行附近:
"bncr_base": env("BNCR_URL", "http://YOUR_SERVER_IP:9090").rstrip("/"),把 YOUR_SERVER_IP 换成你云服务器的实际 IP。
5.3 连通性测试
cd C:\wechat-bridge
py -3.12 wechat_bridge.py --test期望:
✓ 无界适配器可达: 200 {"ok":true,...}
--test 模式,退出不通的排查:
| 现象 | 检查 |
|---|---|
Connection refused | 云服务器上先 curl 127.0.0.1:9090/wechat/health 确认适配器活着 |
| 超时 | 云厂商安全组是否放行 9090 |
401 | token 没设或与云服务器不一致 |
5.4 正式运行
cd C:\wechat-bridge
$env:BNCR_TOKEN="你的token"
py -3.12 wechat_bridge.py期望:
✓ 无界适配器可达: 200
正在连接微信...
✓ 微信连接成功
✓ 回复轮询已启动
✓ 监听已启动 —— 私聊 + 群聊 + 自动发现新会话
桥接运行中。Ctrl+C 退出。六、第四步:端到端联调
保持桥接窗口开着,用手机给这个微信号发 菜单。
观察三处
① 桥接窗口
→ [私聊] 时间煮雨: 菜单
✓ 已回复: 功能菜单
━━━━━━━━━━━━
· 1 脚本 各类脚本与代挂
· 2 返利 商品转链与收益查询
· 3 提现② 云服务器无界日志
docker logs -f bncr[WARN] > 收到[/wechat/incoming]请求~
[WeChatBridge] 注入 38 ㅤ时间煮雨ㅤ(私聊): 菜单
[INFO] [新] wechatBridge/0@ㅤ时间煮雨ㅤ: 菜单
[INFO] C:[\s\S]+ R:python.ts
[INFO] C:^(菜单|主菜单|功能菜单|菜单列表)$ R:功能菜单.js ← 命中插件
[WeChatBridge] reply -> 38 : 功能菜单
[WARN] > 收到[/wechat/pull]请求~③ 手机:收到菜单。
日志解读
| 日志 | 含义 |
|---|---|
[新] wechatBridge/0@昵称 | ✅ 注入成功,平台名与私聊判定(0@)正确 |
C:^...$ R:你的插件.js | ✅ 规则命中 |
[WeChatBridge] reply -> | ✅ 插件回复回传 |
收到[/wechat/pull]请求 | ✅ PC 取走回复 |
关键:业务插件完全没改,靠 @rule 自动匹配。
七、第五步:安全加固
7.1 token 必须设置
为什么:9090 通常对公网开放,不设 token 时任何人都能伪造微信消息注入你的无界。
生成(PC 上):
-join ((48..57)+(65..90)+(97..122) | Get-Random -Count 32 | ForEach-Object {[char]$_})设置位置:
| 位置 | 文件 | 变量 |
|---|---|---|
| 云服务器 | WeChatBridge.js | token: '...' |
| PC | start_bridge.cmd | set BNCR_TOKEN=... |
验证(浏览器打开):
http://YOUR_SERVER_IP:9090/wechat/pull
→ {"ok":false,"error":"unauthorized"} ✅ 鉴权生效
http://YOUR_SERVER_IP:9090/wechat/pull?token=你的token
→ {"ok":true,"count":0,"items":[]} ✅ 放行/wechat/health 故意不鉴权,方便排障。7.2 安全组白名单(推荐)
云厂商控制台 → 安全组 → 9090 入站规则 → 来源限制为你的家宽出口 IP。
7.3 加固清单
| 项 | 做法 |
|---|---|
| token | ✅ 32 位随机,两处一致 |
| 安全组 | ✅ 限制 9090 来源 IP |
| 专用小号 | ✅ 绝不用主号 |
| 数据库容器 | ⚠️ 别把 MySQL/Redis 端口映射到公网 |
| 日志 | ⚠️ 避免把用户隐私打进日志 |
八、第六步:开机自启
8.1 建启动脚本
创建 C:\wechat-bridge\start_bridge.cmd:
@echo off
chcp 65001 >nul
cd /d C:\wechat-bridge
set BNCR_URL=http://YOUR_SERVER_IP:9090
set BNCR_TOKEN=你的token
set POLL_INTERVAL=0.8
set BRIDGE_QUIET=1
py -3.12 wechat_bridge.py >> bridge_stdout.log 2>&1⚠️ 编码必须选 ANSI(记事本 → 另存为 → 编码)。.cmd 带 UTF-8 BOM 会导致第一行报错。
8.2 注册计划任务
⚠️ 如果Win+R被精简:用Ctrl+Shift+Esc→ 文件 → 运行新任务 → 勾选「以系统管理权限创建此任务」。
方式 A:图形界面
- 打开
taskschd.msc - 右侧 → 「创建任务」(⚠️ 不是"创建基本任务")
常规:
- 名称
WeChatBridge - 选 「只在用户登录时运行」 ⭐
- 勾 「使用最高权限运行」
- 名称
触发器 → 新建:
- 开始任务 = 「登录时」
- 勾 「延迟任务时间」 填
30 秒⭐(等微信启动)
操作 → 新建:
- 脚本 =
C:\wechat-bridge\start_bridge.cmd - 起始于 =
C:\wechat-bridge
- 脚本 =
设置:
- 勾 「如果任务失败,按以下频率重新启动」 → 1 分钟 / 3 次
- 取消勾选 「如果任务运行时间超过以下时间,停止任务」 ⭐
方式 B:一条命令
powershell -ExecutionPolicy Bypass -File C:\wechat-bridge\add-autostart.ps18.3 重启后流程
① 开机 → 登录 Windows(必须真实登录到桌面,不能只锁屏)
↓
② 打开微信,确认已登录、窗口显示在桌面上
↓
③ 等 30 秒 → 桥接自动启动
↓
✅ 无需任何操作8.4 验证在跑
| 方法 | 操作 |
|---|---|
| 最可靠 | 手机发条消息,看是否自动回复 |
| 任务计划 | taskschd.msc → 看「上次运行结果」= 0x0 |
| 任务管理器 | 看有没有 python.exe |
| 日志 | Get-Content C:\wechat-bridge\bridge_stdout.log -Tail 30 |
九、排查手册
9.1 桥接侧
| 现象 | 原因 | 解决 |
|---|---|---|
无界适配器不可达 | 端口/地址错 | 云服务器 curl 127.0.0.1:9090/wechat/health 先确认本机通 |
鉴权token : 未设置 + HTTP 401 | PC 没设 token | 设 BNCR_TOKEN,与云服务器一致 |
微信连接失败 | 微信没登录 / 32 位 Python / 窗口最小化 | py -3.12 -m wechatauto 体检 |
| 收不到消息 | 微信窗口最小化 | 恢复窗口,用 听 命令单独测 |
| 回复重复 | msgId 不稳定 | 检查 build_payload 的 id 生成 |
| 回复超时 | 队列 key 对不上 | curl :9090/wechat/replies 看队列 |
9.2 无界侧
| 现象 | 原因 | 解决 |
|---|---|---|
日志无 [WeChatBridge] | 适配器没加载 | 确认在 Adapter/ 下,docker restart bncr |
收到[/wechat/incoming] 但无 [新] | receive() 失败 | 看适配器后续日志 |
有 [新] 但无 R:你的插件.js | @rule 不匹配 | 检查插件规则;确认 @admin/@public 都写了 |
有 R:xxx.js 但无回复 | 插件没走到 reply | 看插件自身日志 |
| 404 | 路由没挂上 | router 全局不存在?看启动日志 |
9.3 常见误判(别被吓到)
| 现象 | 真相 |
|---|---|
控件树:拿不到 | 正常 —— 发消息时会自动热激活 |
WAL 合并失败 | 无害 —— 降级到快照模式,仍能读到消息 |
--verify 报"数据库未确认" | 消息通常已发出,只是快照滞后;去微信确认 |
文件传输助手 共 0 条 | 你从没用过文件传输助手,换别的会话测 |
9.4 延迟优化
| 环节 | 默认 | 可调 |
|---|---|---|
| 监听轮询 | 1 秒 | ❌ 库内部 |
| 取回复轮询 | 0.8 秒 | ✅ POLL_INTERVAL(最低建议 0.5) |
| UIA 发送 | 2~6 秒 | ❌ 固有 |
| 拟人节奏 | 2.5~6 秒间隔 | ⚠️ WECHATAUTO_RHYTHM |
拟人节奏档位:
| 档位 | 说明 |
|---|---|
natural(默认) | ✅ 推荐 |
calm | 更慢,最安全 |
fast | 更快,⚠️ 风险上升 |
off | 🔴 无节流,别用 |
⚠️ 强烈建议保持natural。 这层就是作者为真实风控加的。
慢几秒换号安全,值得。
十、附录:文件清单
本压缩包结构
微信机器人对接无界/
├── 微信机器人对接无界教程.md ← 本文档
├── 云服务器/
│ └── Adapter/
│ └── WeChatBridge.js ← 放到无界 Adapter 目录
├── Windows PC/
│ ├── wechat_bridge.py ← 桥接主程序
│ └── add-autostart.ps1 ← 自启注册脚本
└── 测试/
├── WeChatBridge.test.js ← 适配器测试(node)
└── test_log_filter.py ← 日志过滤测试(python)部署位置
| 文件 | 放到哪 |
|---|---|
WeChatBridge.js | 云服务器 /root/BncrData/Adapter/ |
wechat_bridge.py | PC C:\wechat-bridge\ |
start_bridge.cmd | PC C:\wechat-bridge\(需自建,见 8.1) |
add-autostart.ps1 | PC C:\wechat-bridge\ |
必须先改的两处
| # | 文件 | 改什么 |
|---|---|---|
| 1 | WeChatBridge.js | token: 'CHANGE_ME_...' → 你的 32 位随机串 |
| 2 | wechat_bridge.py | YOUR_SERVER_IP → 你的云服务器 IP |
环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
BNCR_URL | http://YOUR_SERVER_IP:9090 | 无界地址 |
BNCR_TOKEN | 空 | 鉴权 token(与云服务器一致) |
POLL_INTERVAL | 0.8 | 取回复轮询间隔(秒) |
HANDLE_PRIVATE | 1 | 是否处理私聊 |
HANDLE_GROUP | 1 | 是否处理群聊 |
GROUP_WHITELIST | 空 | 群白名单(逗号分隔) |
PRIVATE_WHITELIST | 空 | 私聊白名单 |
IGNORE_SELF | 1 | 忽略自己发的消息 |
BRIDGE_QUIET | 1 | 压制 WAL 刷屏日志 |
HTTP 接口
| 方法 | 路径 | 鉴权 | 说明 |
|---|---|---|---|
GET | /wechat/health | ❌ | 健康检查 |
POST | /wechat/incoming | ✅ | 上报消息 → 注入事件流 |
GET | /wechat/pull | ✅ | 取回复队列(取走即清空) |
GET | /wechat/replies | ✅ | 查看队列(不清空,调试用) |
运行测试
# 适配器测试(需 node)
node 测试\WeChatBridge.test.js # 期望 53 项全绿
# 日志过滤测试(需 Python 3.12)
py -3.12 测试\test_log_filter.py十一、风险声明
技术层面:本方案做了什么、没做什么
| 事项 | 状态 |
|---|---|
| 逆向微信通信协议 | ❌ 完全没有 |
| 注入微信进程 / Hook API | ❌ 完全没有 |
| 修改微信 DLL / 程序文件 | ❌ 完全没有 |
| 伪装异地设备登录 | ❌ 完全没有 |
| 连接第三方授权服务器 | ❌ 完全没有 |
| 读取微信本地加密数据库 | ✅ 只读 |
| 模拟真人操作本机界面 | ✅ 带拟人节奏 |
| 数据出网 | ✅ 只发到你自己的云服务器 |
风险等级
| 项 | 评估 |
|---|---|
| 封号风险 | 🟡 低,但非零 |
| 风险来源 | 仅「自动化操作界面」这一项,已用拟人节奏层缓解 |
| 作者实测 | 2026-09-21 触发过一次风控(当时无节奏层),加层后持续使用 |
| 数据安全 | ✅ 无第三方服务器,消息不经他人之手 |
| 合规 | ⚠️ 自动化操作微信界面仍属非官方用途 |
降低风险的建议
- ✅ 用专用小号(绝不用主号)
- ✅ 保持
natural节奏(别调fast/off) - ✅ 专用机器(不用于其他工作的 Windows,最好虚拟机)
- ✅ 不群发、不批量加好友(这些是风控重灾区)
- ✅ 微信窗口保持可见(最小化会退回不可靠的 OCR 路径)
- ✅ 版本保持 4.1.15.13 附近(作者已适配)
如果被封怎么办
- 本方案不会导致设备封禁(未改微信程序)
- 最坏情况是该微信号被限制,换小号重来即可
- 不像协议端会连带同 IP 的其他号
十二、参考
| 资源 | 链接 |
|---|---|
| wechatauto-replica 仓库 | https://github.com/fanyuantaier/wechatauto-replica |
| PyPI | https://pypi.org/project/wechatauto-replica/ |
| 无界 Bncr 开发文档 | https://anmours.github.io/Bncr/md/develop |
| 本项目开发速查 | docs/Bncr插件开发速查.md |
十三、文件下载
文档版本:2026-10-13
技术路线:不 Hook、不逆向协议、本地只读 + 拟人化 UI 自动化
评论 (0)