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一直在持续迭代优化,目前已经完成了不少功能,还有一些功能在计划开发中,具体如下:
未来,开发团队会持续迭代优化核心功能,提升稳定性与兼容性,推出更丰富的自动化操作场景,完善开发文档与示例,并且会优先考虑社区的需求,欢迎大家反馈建议。
七、使用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能帮你实现高效的微信自动化操作,让工作和生活更便捷。

