WeChatAuto.SDK:面向AI的现代化微信自动化框架,让微信操作更智能

摘要

WeChatAuto.SDK是基于.NET与UI自动化技术的微信PC客户端自动化框架,支持消息收发、群聊管理等多种功能,专为AI集成设计,兼容.NET 4.8+及6.0+,需微信3.9.12.55版本,可轻松实现微信自动化操作。

一、什么是WeChatAuto.SDK?

如果你经常需要在电脑上对微信进行大量重复操作,比如批量发送消息、管理群聊、监控朋友圈动态,或者想把微信和人工智能(比如大语言模型)结合起来实现智能回复,那WeChatAuto.SDK可能正是你需要的工具。

简单来说,WeChatAuto.SDK是一款面向AI的微信PC客户端自动化框架,它基于.NET技术和UI自动化技术开发。不管是消息的收发、转发,群聊的创建与管理,还是朋友圈的点赞评论,它都能帮你实现自动化操作。而且,它特别适合和人工智能场景结合,比如让大语言模型根据聊天上下文自动回复消息,让微信操作变得更智能、更高效。

二、WeChatAuto.SDK有哪些核心特性?

WeChatAuto.SDK的功能非常丰富,几乎覆盖了微信日常操作的方方面面,同时还考虑到了不同场景下的使用需求,具体来看:

  • 消息操作全面:能发送文字、表情、文件,支持@提醒好友,还能转发消息。不管是一对一聊天还是群聊,消息相关的操作基本都能搞定。
  • 群聊管理便捷:可以创建群聊,添加或移除群成员,更新群公告等。如果你需要管理多个微信群,这些功能能帮你节省不少时间。
  • 朋友圈功能完善:支持点赞、评论朋友圈,还能监听朋友圈动态。想及时了解好友的朋友圈更新,或者批量互动,都很方便。
  • 通讯录管理智能:能自动添加好友、管理联系人,还能处理新的好友请求。对于需要拓展人脉或者维护客户关系的人来说很实用。
  • 事件监听及时:可以监听消息(还能提供LLM上下文,方便AI处理)、朋友圈动态、新好友请求等。一旦有相应事件发生,能及时做出反应。
  • 降低风控风险:同时支持纯软件自动化和结合硬件键鼠模拟器的自动化操作。不同的业务需求和安全等级场景,都能找到合适的操作方式。
  • 易于集成现有项目:支持依赖注入,这意味着它可以轻松融入你已经在开发的项目中,不用为了使用它而重构整个项目。
  • 多微信实例支持:能同时管理多个微信客户端实例。如果需要同时操作多个微信账号,这个功能就很有用了。
  • AI友好集成:原生支持LLM上下文对接,还提供了MCP Server,方便对接主流智能体与平台(如MEAI、SK、MAF),让智能应用的集成更高效。

三、使用WeChatAuto.SDK需要什么系统环境?

要使用WeChatAuto.SDK,你的电脑需要满足这些条件:

  • 操作系统:必须是Windows系统,因为它是针对微信PC客户端的自动化框架,目前只支持Windows。
  • .NET框架:需要.NET Framework 4.8及以上版本,或者.NET 6.0及以上的Windows版本,具体支持的框架包括net48、net481、net6.0-windows、net7.0-windows、net8.0-windows、net9.0-windows、net10.0-windows。
  • 微信客户端:需要安装并运行微信PC客户端,而且要注意,这个SDK是基于微信PC客户端3.9.12.55版本的UI结构开发的,不同版本可能会有兼容性问题,所以最好使用这个版本的微信。

四、如何快速开始使用WeChatAuto.SDK?

如果你想试试WeChatAuto.SDK,按照下面的步骤操作,很快就能上手。

1. 安装WeChatAuto.SDK

最简单的方式是通过NuGet安装,在命令行中输入下面的命令:

dotnet add package WeChatAuto.SDK

2. 基本使用示例

下面通过几个示例,带你看看如何用WeChatAuto.SDK实现具体功能。

示例一:给好友(或群聊昵称)发送消息

步骤一:新建一个项目,在命令行中输入:

dotnet new console -n demo01

步骤二:修改项目文件demo01.csproj,把TargetFramework改成net10.0-windows,修改后的内容如下:

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0-windows</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

这里要注意,必须把TargetFramework设置为netxx.0-windows,否则编译时可能会出现警告,因为这个项目只支持Windows系统。

步骤三:安装所需的依赖,在命令行中输入:

dotnet add package WeChatAuto.SdK
dotnet add package Microsoft.Extensions.DependencyInjection

步骤四:修改Program.cs文件,代码如下:

using Microsoft.Extensions.DependencyInjection;
using WeChatAuto.Components;
using WeChatAuto.Services;

// 初始化WeAutomation服务
var serviceProvider = WeAutomation.Initialize(options =>
{
    options.DebugMode = true;   //开启调试模式,调试模式会在获得焦点时边框高亮,生产环境建议关闭
    //options.EnableRecordVideo = true;  //开启录制视频功能,录制的视频会保存在项目的运行目录下的Videos文件夹中
});

using var clientFactory = serviceProvider.GetRequiredService<WeChatClientFactory>();
Console.WriteLine($"当前客户端打开的微信客户端为:{string.Join(",", clientFactory.GetWeChatClientNames())},共计{clientFactory.GetWeChatClientNames().Count}个微信客户端。");
//获取当前打开的微信客户端名称列表
var clentNames = clientFactory.GetWeChatClientNames();    
//获取第一个微信客户端
var wxClient = clientFactory.GetWeChatClient(clentNames.First());  
 //通过微信客户端发送消息给好友昵称AI.Net,测试时请把AI.Net修改成自己的好友昵称
wxClient?.SendWho("AI.Net","你好,欢迎使用AI.Net微信自动化框架!"); 

这段代码的作用是初始化服务,获取当前打开的微信客户端,然后给指定的好友发送一条消息。需要注意的是,如果你是手动管理WeChatClientFactory,要在应用结束时运行clientFactory.Dispose(),或者像示例中这样把代码放在using块里自动释放;如果把WeChatAuto.SDK加入到依赖注入容器,就没有这个问题了。另外,WeAutomation.Initialize()方法有两个重载,分别适用于加入外部依赖注入和使用内部依赖注入的情况。

示例二:监听好友(或者群聊昵称)的消息并回复

前置步骤:安装依赖,在命令行中输入:

dotnet add package WeChatAuto.SdK
dotnet add package Microsoft.Extensions.Hosting

然后修改Program.cs文件,代码如下:

using Microsoft.Extensions.Hosting;
using WeChatAuto.Services;
using WeChatAuto.Components;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

var builder = Host.CreateApplicationBuilder(args);

WeAutomation.Initialize(builder.Services, options =>
{
    //开启调试模式,调试模式会在获得焦点时边框高亮,生产环境建议关闭
    options.DebugMode = true;
    //开启录制视频功能,录制的视频会保存在项目的运行目录下的Videos文件夹中
    //options.EnableRecordVideo = true;  
});

//这里注入自已的服务(或者对象),如LLM服务等
builder.Services.AddSingleton<LLMService>();

var serviceProvider = builder.Services.BuildServiceProvider();
var clientFactory = serviceProvider.GetRequiredService<WeChatClientFactory>();
// 得到名称为"Alex"的微信客户端实例,测试时请将AI.net替换为你自己的微信昵称
var client = clientFactory.GetWeChatClient("Alex");
// 监听微信群测试11
await client.AddMessageListener("测试11", (messageContext) =>
{
    var index = 0;
    //打印收到最新消息
    foreach (var message in messageContext.NewMessages)
    {
        index++;
        Console.WriteLine($"收到消息:{index}{message.ToString()}");
        Console.WriteLine($"收到消息:{index}{message.Who}{message.MessageContent}");
    }
    //打印收到所有消息的后十条
    var allMessages = messageContext.AllMessages.Skip(messageContext.AllMessages.Count - 10).ToList();
    index = 0;
    foreach (var message in allMessages)
    {
        index++;
        Console.WriteLine($"...收到所有消息的前10条之第{index}条:{message.Who}{message.MessageContent}");
        Console.WriteLine($".................详细之第{index}条:{message.ToString()}");
    }
    //是否有人@我
    if (messageContext.IsBeAt())
    {
        var messageBubble = messageContext.MessageBubbleIsBeAt().FirstOrDefault();
        if (messageBubble != null)
        {
            messageContext.SendMessage("我被@了!!!!我马上就回复你!!!!", new List<string> { messageBubble.Who });
        }
        else
        {
            messageContext.SendMessage("我被@了!!!!我马上就回复你!!!!");
        }
    }
    //是否有人引用了我的消息
    if (messageContext.IsBeReferenced())
    {
        messageContext.SendMessage("我被引用了!!!!");
    }
    //是否有人拍了拍我
    if (messageContext.IsBeTap())
    {
        messageContext.SendMessage("我被拍一拍了[微笑]!!!!");
    }
    if (!messageContext.IsBeAt() && !messageContext.IsBeReferenced() && !messageContext.IsBeTap())
    {
        //回复消息,这里可以引入大模型自动回复
        messageContext.SendMessage($"我收到了{messageContext.NewMessages.FirstOrDefault()?.Who}的消息:{messageContext.NewMessages.FirstOrDefault()?.MessageContent}");
    }
    //可以通过注入的服务容器获取你注入的服务实例,然后调用你的业务逻辑,一般都是LLM的自动回复逻辑
    var llmService = messageContext.ServiceProvider.GetRequiredService<LLMService>();
    llmService.DoSomething();
});


var app = builder.Build();
await app.RunAsync();

/// <summary>
/// 一个包含LLM服务的Service类,用于注入到MessageContext中
/// </summary>
public class LLMService
{
    private ILogger<LLMService> _logger;
    public LLMService(ILogger<LLMService> logger)
    {
        _logger = logger;
    }
    public void DoSomething()
    {
        _logger.LogInformation("这里是你注入的服务实例,可以在这里编写你的业务逻辑  ");
    }
}

这个示例主要展示了如何监听指定群聊的消息,并且根据不同的消息情况(比如被@、被引用、被拍一拍等)进行回复。同时,还演示了如何通过依赖注入获取自己的服务实例(比如LLM服务),执行自定义的业务逻辑,这对于集成大模型进行智能回复非常有用。

示例三:MCP Server的使用(以vscode为例)

步骤一:进入源码的.vscode\mcp.json,修改配置如下:

{
	"servers": {
		"wechat_mcp_server": {
			"type": "stdio",
			"command": "dotnet",
			"args": [
				"run",
                "--project",
                "改成你的WeChatAuto.MCP.csproj的路径"
			]
		}
	}
}

步骤二:在mcp.json页面点击“Start”按钮启动mcp server。

步骤三:启动GitHub Copilot Chat,在Chat页提问:请帮我给微信好友:AI.Net发送消息:Hello world! 这样就能通过MCP Server实现相关操作了。

五、WeChatAuto.SDK的架构是怎样的?

WeChatAuto.SDK的架构设计比较清晰,采用了POM(页面对象模型)设计思想,针对微信的各类操作场景提供了清晰、模块化的对象抽象,这能大大提升自动化脚本的可读性和可维护性。

1. 架构图

目前WeChatAuto.SDK的架构图可以参考这里:WeChatAuto.SDK架构图,后续还会持续更新,除了微信聊天自动化,后期还会提供对腾讯会议、微信公众号/订阅号等的自动化与MCP Server。

2. 主要类与关系

主要类之间的关系可以参考这张图:WeChatAuto.SDK 主要类关系示意,通过这些类的协作,实现了各种微信自动化功能。

六、WeChatAuto.SDK的开发计划有哪些?

WeChatAuto.SDK一直在持续迭代优化,目前已经完成了不少功能,还有一些功能在计划开发中,具体如下:

类别 功能 完成度 备注
消息管理 发送文字消息
消息管理 发送文件
消息管理 发送自定义表情包 可按表情包索引、名称或者描述发送
消息管理 引用消息
消息管理 发送语音聊天/语音会议 适用于单个好友与群聊
消息管理 发送视频聊天 适用于单个好友
消息管理 发起直播 适用于群聊
消息管理 @群好友
消息管理 @所有人 适用于自有群管理
消息管理 合并转发
消息管理 获取消息
消息管理 监听消息
消息管理 引用时@
消息管理 通过消息添加好友
消息管理 通过消息获取详情
消息管理 获取卡片消息链接
消息管理 子窗口(好友/群)守护 误关闭子窗口重新打开
通讯录管理 获取好友列表
通讯录管理 发送好友请求
通讯录管理 接受好友请求
通讯录管理 删除好友
通讯录管理 监听好友请求
通讯录管理 监听好友请求,并自动通过
通讯通讯录管理 监听好友请求,并仅通过指定关键词的好友,自动加备注、标签
通讯管理 修改备注
通讯管理 增加标签
群管理 新建群
群管理 邀请入群
群管理 修改群名
群管理 修改群备注
群管理 修改群公告
群管理 修改我在本群昵称
群管理 消息免打扰
群管理 获取群列表
朋友圈 获取朋友圈内容
朋友圈 下载朋友圈图片
朋友圈 点赞朋友圈
朋友圈 自动评论朋友圈
MCP MCP Server
企业客服 自动根据企业知识库回答客户问题 根据公司知识库回答问题
企业督办 企业客户群提出问题的督办 企业客服的各种督办场景
腾迅会议 自动安排腾迅会议 对腾迅会议的自动化
公众号/订阅号 自动发布公众号/订阅号文章 对公众号/订阅号的自动化
效率 计划任务

未来,开发团队会持续迭代优化核心功能,提升稳定性与兼容性,推出更丰富的自动化操作场景,完善开发文档与示例,并且会优先考虑社区的需求,欢迎大家反馈建议。

七、使用WeChatAuto.SDK需要注意什么?

使用WeChatAuto.SDK时,有几个重要的注意事项需要了解,避免出现问题:

1. 风控风险

微信有严格的风控机制,频繁操作可能会触发风控,导致账号受限等问题。所以使用时建议:

  • 尽量使用键鼠模拟器来降低风险,因为它模拟的输入更接近人工操作。
  • 控制操作频率,不要在短时间内进行大量重复操作。
  • 避免短时间内大量添加好友、发送相同消息等可能被判定为异常的行为。

2. 微信版本兼容

WeChatAuto.SDK是基于微信PC客户端3.9.12.55版本的UI结构开发的,不同版本的微信客户端UI可能会有变化,这可能导致SDK的某些功能无法正常使用。所以最好使用指定版本的微信,如果要使用其他版本,建议先测试兼容性。

3. 多实例支持

虽然SDK支持同时管理多个微信客户端实例,但每个实例都是独立的,操作时要注意区分,避免混淆不同的微信账号。

八、什么是键鼠模拟器,为什么要用它?

键鼠模拟器是一种专门的硬件设备,它能模拟物理键盘和鼠标的真实输入。可能你会问,直接用软件调用API(比如PostMessage、SetInput)来模拟输入不行吗?

其实,传统的软件方式模拟输入往往会留下可被识别的痕迹,很容易被微信等应用检测出是自动化行为,从而引发风控。而键鼠模拟器是通过硬件底层发送信号,模拟出的输入和人手操作几乎一样,很难被识别出是自动化操作,在风控安全性和隐蔽性方面更有优势。

实际测试发现,在微信的一些高敏感操作场景(比如在群聊里加好友),用键鼠模拟器能有效降低被风控的概率。不过要注意,就算是手动操作,在一些极端高风险情况下也可能触发风控。所以,在高敏感度和易风控的场景,建议优先考虑使用键鼠模拟器,并且规范操作。

WeChatAuto.SDK同时支持纯软件自动化和结合硬件键鼠模拟器的自动化操作,你可以根据自己的业务需求和安全等级来选择。如果想更深入地了解键鼠模拟器,可以参考:键鼠模拟器

九、微信4.X版本有什么新进展?

微信4.x.x版本目前正在研发中,新的方案是基于机器视觉实现的。不过,目前受限于机器视觉技术,对聊天记录的监控还存在难度,暂时不支持在生产环境中使用。如果你有更好的解决思路或建议,欢迎交流讨论。

十、VIP服务有什么特别之处?

由于开发团队的时间和精力有限,为了更好地投入研发和持续改进产品,目前只为已购买VIP服务的客户提供优先和深入的技术支持。这样做是为了通过区分服务对象,专注为VIP客户带来更高品质、更有保障的体验。

当然,普通用户依然可以通过Issue反馈和交流,只是服务响应的优先级和深度会有所不同。

VIP客户可享受的专属服务保障:

  • BUG优先响应:出现Bug时,会第一时间定位和解决,保障VIP项目的稳定运行。
  • 完整开发文档:提供详细、及时更新的API开发文档,帮助快速集成与开发。
  • 系统教学视频:涵盖从入门到进阶的全流程教学视频,让用户能高效掌握SDK的使用。
  • VIP技术交流群:专属的VIP交流群,能优先、及时地解答问题,提供实时高效的支持。
  • 专属VIP私有仓库:VIP客户会获得专属的私有仓库,里面会不定期提供丰富的应用层扩展与独享内容。

非VIP客户:

WeChatAuto.SDK的非VIP与VIP在核心代码层面完全一致,非VIP没有任何功能与代码层面的限制。欢迎非VIP用户通过Issue提问或反馈问题,开发团队会在时间允许的情况下进行处理,只是响应和解决可能会有延迟,敬请谅解。

如果想升级成为VIP,或者了解VIP的具体权益和支持方案,可以联系开发团队。

十一、WeChatAuto.SDK的许可证是什么?

本项目采用MIT许可证,具体详情可以查看LICENSE文件。

十二、常见问题(FAQ)

1. WeChatAuto.SDK支持Mac或Linux系统吗?

不支持,目前WeChatAuto.SDK只能在Windows操作系统上使用。

2. 安装WeChatAuto.SDK后,编译时出现警告怎么办?

这很可能是因为项目的TargetFramework没有设置为netxx.0-windows,比如net10.0-windows。修改项目文件中的TargetFramework为对应的Windows版本即可。

3. 为什么我的微信版本是3.9.12.55,但有些功能还是不能用?

虽然SDK基于该版本开发,但可能存在一些特殊的环境差异或操作场景没有覆盖到。可以检查操作步骤是否正确,或者通过Issue反馈具体问题。

4. 使用WeChatAuto.SDK会导致微信账号被封吗?

存在一定的风控风险,频繁或不当操作可能会触发微信的风控机制。建议遵循注意事项中的建议,控制操作频率,必要时使用键鼠模拟器。

5. 非VIP用户能使用WeChatAuto.SDK的所有功能吗?

是的,非VIP用户和VIP用户在功能和代码层面没有任何区别,只是在技术支持的优先级和深度上有所不同。

6. 如何将自己的服务(比如LLM服务)集成到WeChatAuto.SDK中?

可以通过依赖注入的方式,像示例二中那样,将自己的服务注入到服务容器中,然后在消息监听等场景中获取并使用。

7. WeChatAuto.SDK的开发计划中,哪些功能会优先开发?

开发团队会优先考虑社区的需求反馈,同时持续优化已有的核心功能,提升稳定性和兼容性。

8. 微信4.X版本什么时候能投入生产使用?

目前微信4.X版本还在研发中,受限于机器视觉技术对聊天记录监控的难度,暂时没有明确的生产环境投入时间,需要等待技术成熟后才能确定。

通过以上内容,相信你对WeChatAuto.SDK已经有了全面的了解。如果你有进一步的需求,比如具体功能的实现细节,或者在使用过程中遇到问题,都可以参考官方文档或通过Issue进行交流。希望WeChatAuto.SDK能帮你实现高效的微信自动化操作,让工作和生活更便捷。