avatar

mdo

Hello

  • 首页
  • 知识库
  • 归档
  • 标签
  • 关于
主页 Weixin OC (ClawBot) 协议实现最安全、不封号的自动化推送
文章

Weixin OC (ClawBot) 协议实现最安全、不封号的自动化推送

发表于 2026-08-18 更新于 2026-08- 18
作者 mdo
32~41 分钟 阅读

在 AstrBot 中接入个人微信,主要有两种主流方式:一种是基于微信官方最新开放的 Weixin OC (ClawBot 智联协议),另一种是社区广泛使用的第三方 iPad 协议 Gewechat。 [1, 2, 3]

以下是这两种方式的详细配置与主动消息推送指南。


方案一:微信官方 Weixin OC (ClawBot) 接入(推荐,最安全稳定)

这是腾讯官方底层基于 iLink(智联)协议提供的个人 Bot API。支持干净的 Markdown 渲染,不容易被封号,但原生不支持纯主动异步推送(必须由用户先发起对话,或者通过特定工具绕过)。 [1]

1. 准备工作

  • 确保你的手机微信已升级到最新版本(iOS ≥ 8.0.70,Android ≥ 8.0.69)。 []

2. AstrBot 配置步骤 [1]

  1. 进入 AstrBot 管理面板,点击左侧导航栏的 机器人。

  2. 点击右上角的 + 创建机器人。

  3. 选择 个人微信 (weixin_oc)。

  4. 勾选 启用,其他参数(如轮询间隔、超时时间)保持默认即可。

  5. 点击保存。此时弹窗或控制台会向微信接口申请登录二维码。

  6. 使用手机微信扫码,并在手机上确认加入“ClawBot 插件功能”。 [1]

3. 实现主动消息推送(重点)

微信官方 ClawBot 原生对主动发起对话有严格限制。如果你想用它做定时任务、警报等主动推送,可以通过社区方案(如 wxclawbot-cli 命令行工具)或编写 AstrBot 自定义插件来维持会话上下文进行推送。 [1]


方案二:Gewechat 协议接入(功能最全,支持完美推送)

Gewechat 模拟了 iPad 微信客户端,不需要你的电脑保持微信登录,且天生完美支持主动向任何好友、群聊发送消息。 [1, 2]

1. 准备工作(部署 Gewechat 容器) [1]

由于 Gewechat 是独立的服务,你需要先使用 Docker 部署它。

bash

# 拉取社区优化过的 Gewechat 镜像(避免 cgroupv2 错误)
docker pull registry.cn-chengdu.aliyuncs.com/tu1h/wechotd

# 运行容器(开放 2531 和 2532 端口)
docker run -d --name gewechat -p 2531:2531 -p 2532:2532 -v /root/temp:/root/temp registry.cn-chengdu.aliyuncs.com/tu1h/wechotd

请谨慎使用此类代码。

2. AstrBot 配置步骤 [1]

  1. 进入 AstrBot 管理面板 -> 机器人 -> + 创建机器人。

  2. 选择 Gewechat 适配器。 [1]

  3. 填写关键参数:

    • ID:任意填写(如 wx_bot)。

    • base_url:填写你部署 Gewechat 的服务器地址(例如 http://<你的服务器IP>:2531)。

    • host / port:填写 AstrBot 本身的回调地址与端口(默认端口通常为 11451)。 [1]

  4. 点击保存并重启项目。 [1]

  5. 访问 AstrBot 控制台日志,复制日志中输出的二维码链接,用手机微信扫码登录即可。 [1]

3. 代码实现:利用 AstrBot 插件主动推送消息

一旦使用 Gewechat 接入,你可以编写简单的 Python 脚本或 AstrBot 插件,利用框架的 send_message 接口随时主动推送消息。

Python 主动推送示例代码:

python

from astrbot.api.event import Context
from astrbot.api.message_components import Plain

async def send_notification(ctx: Context, target_wxid: str, text: str):
    """
    target_wxid: 接收者的微信内部ID(好友通常以 wxid_ 开头,群聊以 @chatroom 结尾)
    text: 要推送的文字内容
    """
    # 获取已经登录的 Gewechat 平台实例
    platform = ctx.get_platform("gewechat") 
    
    if platform:
        # 构建消息链并主动发送
        message_chain = [Plain(text)]
        await platform.send_message(target_wxid, message_chain)
        print("主动消息推送成功!")
    else:
        print("未找到对应的微信机器人实例")

请谨慎使用此类代码。


💡 避坑与安全提示

  1. 防止风控封号:个人微信(尤其是使用第三方 iPad 协议如 Gewechat 时)极易受到微信官方的风控风险。建议使用微信小号进行测试,日常不要短时间内发送大量、高频的主动推送消息。

  2. 账号在线状态:由于 Gewechat 独占一个 iPad 登录槽位,你必须保持手机端微信同时在线,否则机器人会掉线。 [1, 2]

你想选择哪种方案来实现?如果需要,我可以为你提供完整的自定义定时推送插件模板代码。

wxclawbot-cli 命令行工具)或编写 AstrBot 自定义插件

对于个人微信,如果你希望使用官方 Weixin OC (ClawBot) 协议实现最安全、不封号的自动化推送,你既可以利用 wxclawbot-cli 命令行工具在外部脚本中调用,也可以直接在 AstrBot 内部编写自定义插件。

以下是这两种实现方式的详细教程和代码:


方法一:编写 AstrBot 自定义插件(推荐,一体化管理)

由于官方 ClawBot 协议要求必须有上下文或特定凭证,在 AstrBot 框架内编写插件是最直接的方式。它可以利用现有的机器人实例,直接向指定的微信用户或群聊发送消息。

1. 创建插件结构

在 AstrBot 的 data/plugins/ 目录下创建一个名为 wx_pusher 的文件夹,并在内部新建 __init__.py:

text

astrbot/
└── data/
    └── plugins/
        └── wx_pusher/
            └── __init__.py

请谨慎使用此类代码。

2. 编写插件代码 __init__.py

将以下代码写入 __init__.py。该插件不仅提供了一个通用的主动推送函数,还顺便注册了一个定时器,演示如何每隔一小时主动向你推送天气或提醒。

python

import asyncio
from astrbot.api.all import *

@register("wx_pusher", "你的名字", "个人微信主动推送插件", "1.0.0")
class WxPusherPlugin(Plugin):
    def __init__(self, context: Context):
        super().__init__(context)
        # 激活定时任务(示例:每1小时推送一次)
        self.context.register_task(self.timed_push_task, trigger="interval", hours=1)

    async def send_wx_notification(self, target_id: str, text: str):
        """
        核心推送函数
        :param target_id: 接收者的微信内部ID(获取方式见后文)
        :param text: 推送的文本内容(支持Markdown)
        """
        # 获取当前运行的 weixin_oc 平台实例
        platform = self.context.get_platform("weixin_oc")
        
        if not platform:
            logger.error("未找到 weixin_oc 机器人实例,请确认已在后台启用并扫码。")
            return False
            
        try:
            # 构建消息链
            message_chain = MessageChain().message(Plain(text))
            
            # 调用底层发送接口
            # 注意:weixin_oc 协议底层通常需要对应的 session,若报错可尝试通过模拟事件回复
            await platform.send_message(target_id, message_chain)
            logger.info(f"成功向 {target_id} 推送消息!")
            return True
        except Exception as e:
            logger.error(f"消息推送失败: {e}")
            return False

    async def timed_push_task(self):
        """定时任务示例"""
        # 替换为你要推送的微信用户 ID 或群 ID
        MY_WX_ID = "wxid_xxxxxxxxxxxxxx" 
        await self.send_wx_notification(MY_WX_ID, "⏰ **定时提醒**\n这是一条来自 AstrBot 的主动推送消息。")

    @command("push_test")
    async def push_test_cmd(self, event: CommandResult):
        """在聊天框输入 /push_test 测试主动推送接口"""
        user_id = event.message_obj.sender.user_id
        success = await self.send_wx_notification(user_id, "✅ 收到测试指令,主动推送函数工作正常!")
        if success:
            yield event.plain_result("已触发主动推送。")

请谨慎使用此类代码。


方法二:使用 wxclawbot-cli 命令行工具(适合外部脚本)

如果你有其他独立的 Python 脚本、服务器监控脚本(如 Shell、宝塔定时任务),想在它们报错时通过微信通知你,可以使用基于 ClawBot 协议的命令行工具。

1. 安装与登录

在你的服务器或电脑终端执行以下命令安装工具(需确保本地已配置好 Python 环境):

bash

pip install wxclawbot-cli

请谨慎使用此类代码。

安装完成后进行初始化登录,它会在终端打印出官方的登录二维码,使用手机微信扫码:

bash

wxclawbot login

请谨慎使用此类代码。

2. 在外部 Python 脚本中调用推送

登录成功后,你可以在任何外部 Python 自动化脚本中通过 subprocess 调用该工具进行消息主动推送:

python

import subprocess
import json

def send_wechat_notification(target_id: str, message: str):
    """
    通过调用系统命令实现个人微信主动推送
    """
    # 构建执行命令
    # wxclawbot send --to <目标ID> --text <内容>
    cmd = ["wxclawbot", "send", "--to", target_id, "--text", message]
    
    try:
        result = subprocess.run(cmd, capture_output=True, text=True, check=True)
        print("推送成功:", result.stdout)
    except subprocess.CalledProcessError as e:
        print("推送失败, 错误信息:", e.stderr)

# 示例:服务器硬盘满了,报警推送
send_wechat_notification("wxid_xxxxxxxxxxxxxx", "🚨 【服务器报警】\n硬盘空间已不足 10%,请及时清理!")

请谨慎使用此类代码。


🔍 关键问题:如何获取好友或自己的 wxid?

无论是插件形式还是命令行形式,你都需要知道接收者的“内部 ID”(格式通常为 wxid_xxxxxxxxxxxxxx 或微信号,群聊通常是以 @chatroom 结尾的字符串)。

最简单的获取方法:

  1. 启动 AstrBot 并成功扫码登录你的个人微信。

  2. 用你的手机微信(或让好友)给机器人随便发送一条消息,例如发送:hello。

  3. 立即查看 AstrBot 的后台控制台日志,日志中会清晰地打印出接收到的事件详情,里面就包含了发送人的 user_id(即 wxid)。将其复制下来写入代码即可。

知识库
许可协议:  CC BY 4.0
分享

相关文章

10月 7, 2026

比尔盖茨的智慧:想多赚钱,就每天循环做这3件事

我们总有一种非常固执的错觉,认为那些站在财富金字塔顶端的人,必然拥有某种超越常人的特异功能。我们在脑海中给比尔盖茨这样的大佬描绘了一幅极其悲壮的奋斗画像。大家总觉得,他之所以能富可敌国,肯定是因为他每天只睡三个小时,同时对着八个电脑屏幕疯狂敲击键盘,每一秒钟都在做出价值几亿美金的生死抉择。 为了模仿

9月 28, 2026

程序员越想创业,越不要急着动手

一个能源方面的前辈找到我,希望通过我把一些人工的工作 AI 自动化。 能源方面我不懂,找 Gemini 聊完发现这个是可以复制的,非常兴奋。我跟老婆说,这个项目做好以后可以做成平台,推广到其他公司,你就等着做总裁夫人吧! 她听完以后跟我说,这个项目还是太定制化,和我之前做的一个项目很像。 那个项目一

9月 25, 2026

忍了一年多,我终于对i18n下手了过去一年,我主要参与国际机票业务的开发工作,因此每天都要和多语言(i18n)打交道

前言 大家好,我是奈德丽。 过去一年,我主要参与国际机票业务的开发工作,因此每天都要和多语言(i18n)打交道。熟悉我的朋友都知道,我这个人比较“惜力”(并不是,实际上只是忍不下去了),对于重复笨拙的工作非常抵触,于是,我开始思考如何优化团队的多语言管理模式。 痛点背景 先说说我们在机票项目中遇到的

下一篇

完美地解决 TP3 老系统数据的平滑读取

上一篇

内置一个简易的 HTTP API 接口

最近更新

  • 比尔盖茨的智慧:想多赚钱,就每天循环做这3件事
  • iOS 侧载(Sideloading)工具
  • 程序员越想创业,越不要急着动手
  • 注册 Chat Participant
  • 中秋给在外游子的一封信

热门标签

API CodeGeex Coding Cursor DeepSeek Docker Gitkraken Harness Laravel Management

目录

©2026 mdo. 保留部分权利。