用AppleScript打造稳定的Mac版微信RPA群聊机器人:从搭建到使用全指南
如果你经常需要在微信上处理重复信息,比如群聊中的常规问答、数据记录等,可能会想过有没有办法用机器人自动完成这些工作。市面上常见的微信机器人方案不少,但要么稳定性不足,要么需要额外付费。今天要分享的,是一个基于Mac版微信客户端和AppleScript打造的简易RPA群聊机器人——它速度不快、功能不多,但胜在稳定,而且完全可以自己动手搭建。
为什么需要这个微信机器人?
在做这个机器人之前,我尝试过不少主流方案,比如wechaty。但实际使用中发现,wechaty依赖的puppet(可以理解为“操作接口”)存在一些问题:免费的网页版或UOS版本经常莫名下线,稳定性很差;而像ipadlocal这样稳定且功能全的方案,又需要花钱购买token。
对于只有Mac设备的我来说,这些方案都不够理想。于是就有了这个基于AppleScript和少量Python代码的机器人——它直接操作Mac版微信客户端,不需要依赖第三方接口,只要登录状态稳定,机器人就能一直运行。
简单说,这个机器人适合这样的场景:需要在固定群聊或私聊中自动回复消息,比如记录消费数据、汇总信息,或者对接自己的工具(比如让机器人调用大模型总结文章),而且希望方案稳定、低成本(几乎零成本)、不需要复杂的技术背景。
准备工作:你需要这些工具和环境
在开始搭建之前,先确认你的设备和环境是否满足要求。这个机器人的核心是AppleScript(Mac系统自带的脚本语言,用于自动化操作应用),再配合一点点Python代码实现鼠标点击——因为AppleScript自带的点击功能没法直接作用于微信客户端。
必备条件
-
一台安装了Mac版微信的苹果电脑(我使用的微信版本是3.8.6 (28078),其他版本可能需要微调脚本); -
已登录微信账号(机器人需要用这个账号接收和发送消息); -
Python3解释器(Mac通常自带,可通过 python3 --version检查是否安装); -
安装PyUserInput库(用于模拟鼠标点击)。
安装PyUserInput的步骤
PyUserInput是一个能模拟鼠标和键盘操作的Python库,虽然现在已经标记为“Deprecated”(不再维护),但目前在Mac上仍能正常使用。如果之后它不能用了,你也可以换成其他类似的鼠标模拟工具(比如PyAutoGUI),操作逻辑是一样的。
安装方法很简单,打开终端,输入以下命令:
等待安装完成后,就可以进入下一步了。
核心文件说明:机器人的“大脑”是什么?
这个机器人的核心文件有两个:
-
☾ wemac.applescript:主要脚本文件,负责找到聊天窗口、读取消息、判断是否需要回复、发送消息等核心逻辑; -
☾ mouseclick.py:辅助的Python脚本,用于实现鼠标点击操作(被AppleScript调用)。
你可以从项目中获取这两个文件,然后根据自己的需求修改配置。下面重点说一下如何配置wemac.applescript——这是让机器人正常工作的关键。
详细配置步骤:让机器人认识你的微信环境
打开wemac.applescript文件,你需要修改几个关键变量,这些变量决定了机器人如何找到聊天窗口、识别自己的身份、以及在哪里运行脚本。
必须修改的5个核心变量
这5个变量就像机器人的“设置向导”,直接影响它的工作效果,建议逐个检查并设置:
如何确定这些变量的值?
-
☾ chatWindowName:打开微信,找到你要处理的聊天窗口,直接复制窗口顶部的名称即可(注意不要有多余的空格); -
☾ botName:在微信“我”的页面查看自己的昵称,确保和脚本中的名称完全一致(包括大小写); -
☾ pythonBin:在终端输入which python3,会显示Python3的路径,直接复制过来; -
☾ workingDir:找到你存放mouseclick.py的文件夹,右键选择“显示简介”,复制“位置”路径; -
☾ windowOffset:先查看你的显示器分辨率(Mac系统偏好设置→显示器→分辨率),比如分辨率是1920×1080,那么宽度是1920,计算1920-400-20=1440。如果之后发现机器人删不掉自己发的消息,再微调这个值(比如±50)。
运行机器人:第一次启动需要注意什么?
配置完成后,就可以尝试运行脚本了。不过在运行前,有几个关键点需要确认,否则可能会失败。
运行前的3个检查项
-
微信已登录:确保Mac版微信处于登录状态,并且已经打开了 chatWindowName对应的聊天窗口(不需要置顶,但要能在微信的窗口列表中找到); -
文件路径正确: workingDir中必须有mouseclick.py文件,否则脚本会提示“找不到文件”; -
权限设置:如果运行时提示“没有权限控制微信”,需要在“系统偏好设置→安全性与隐私→隐私→自动化”中,勾选终端(或你运行脚本的工具)对微信的控制权限。
第一次运行脚本的步骤
-
打开终端,进入 wemac.applescript所在的文件夹(比如cd /Users/yourname/wechat-bot); -
输入命令运行脚本: osascript wemac.applescript; -
观察微信窗口:脚本会自动找到目标聊天窗口,点击它,然后删除最近的一条消息(这是正常现象,后面会解释为什么要删消息); -
如果这条被删除的消息中有人@你的机器人( botName),机器人会自动回复一条消息; -
脚本运行结束(一次运行只处理一条消息)。
为什么机器人要删除消息?
这是一个“取巧”的设计:由于这个机器人没有办法记录“哪些消息已经处理过”,所以只能通过“删除消息”来标记——删过的消息就不会再处理了。这样可以避免重复回复同一条消息。
如果你的聊天记录比较重要,担心误删,可以先在测试群里试用,熟悉逻辑后再正式使用。
让机器人持续工作:如何实现24小时运行?
上面的步骤只能让机器人处理一条消息,处理完就会停止。要让它一直运行,需要让脚本循环执行。最直接的方法是写一个run.sh脚本,用死循环不断调用wemac.applescript。
制作run.sh的步骤
-
在 workingDir文件夹中新建一个文本文件,命名为run.sh; -
打开文件,输入以下内容(作用是每3秒运行一次 wemac.applescript):
-
保存文件后,在终端中给文件添加执行权限: chmod +x run.sh; -
运行 run.sh:./run.sh。
这样,机器人就会每隔3秒检查一次聊天窗口,处理新消息了。如果需要停止,按Ctrl+C即可。
间隔时间设置多少合适?
间隔时间(sleep后面的数字)取决于你的聊天频率:
-
☾ 群聊消息多:可以设为2-3秒(但不要太短,避免频繁操作导致微信卡顿); -
☾ 消息少:可以设为5-10秒,减少资源占用。
自定义回复内容:让机器人说你想让它说的话
默认情况下,机器人的回复可能比较简单。但你可以根据自己的需求,让它对接工具(比如大模型、数据记录脚本等),实现更复杂的回复逻辑。
在哪里修改回复逻辑?
打开wemac.applescript,找到大约270行的“消息处理逻辑”注释处,这里就是设置回复内容的地方。
AppleScript本身的功能有限,所以更推荐用“调用外部脚本”的方式来生成回复——比如用Python写一个处理逻辑,让AppleScript调用它,再把结果作为回复发送出去。
调用Python脚本的示例
比如,你有一个reply_handler.py脚本,功能是接收用户的问题,返回对应的回答。可以在wemac.applescript中这样写:
这里的关键点:
-
☾ escaped(question):这是脚本中自带的转义函数,能处理消息中的特殊字符(比如空格、引号),避免“注入攻击”(比如用户发的消息包含; rm -rf *这样的恶意命令); -
☾ quoted form of:用于处理文件路径中的特殊字符,确保脚本能正确找到reply_handler.py。
举个实际场景:让机器人记录消费数据
假设你想让机器人帮你记录“今天花了多少钱”,可以写一个expense_recorder.py脚本,功能是接收类似“买咖啡 30元”的消息,返回“已记录:买咖啡,30元”。然后在AppleScript中调用它,这样当有人@机器人发送“买咖啡 30元”时,机器人就会自动记录并回复。
机器人的局限:这些情况它可能不适用
虽然这个机器人足够稳定,但它的设计原理(模拟人工操作微信客户端)决定了它存在一些局限。在使用前,最好了解这些限制,避免不符合预期。
-
无法获取用户唯一ID:只能识别用户的昵称或备注,无法获取openid、unionid等唯一标识。如果有人改了昵称,机器人可能会“认不出”; -
没有消息唯一ID:因为靠“删除消息”标记已处理,所以无法追溯历史消息,也无法区分重复内容的消息; -
处理速度慢:一次只能处理一条消息,而且依赖脚本循环间隔。如果群聊消息发送速度比处理速度快,就会有消息一直没被处理; -
仅限Mac设备:因为基于AppleScript和Mac版微信,Windows或手机无法直接使用(但可以在Mac上开虚拟机运行多个机器人); -
单窗口处理:一个脚本只能对应一个聊天窗口。如果需要处理多个群聊,得同时运行多个脚本,可能会拖慢电脑速度。
未来可以扩展的功能(TODO列表)
这个机器人目前是基础版本,还有很多可以完善的地方,如果你有兴趣,可以尝试自己开发:
-
☾ 支持处理图片、语音、链接等非文本消息; -
☾ 实现发送图片、文件的功能; -
☾ 对接朋友圈操作(比如自动点赞、发朋友圈); -
☾ 适配企业微信(目前只能用个人微信)。
常见问题(FAQ)
1. 这个机器人会被微信封号吗?
目前来看风险很低。因为它是通过模拟人工点击操作微信客户端,和人自己用微信的行为很像,理论上不会被微信检测为“违规机器人”。但微信的规则可能变化,建议不要用于频繁发送广告等可能违规的行为。
2. 换了显示器,windowOffset需要重新设置吗?
需要。windowOffset和显示器宽度相关,换显示器后分辨率可能变化,建议按新的宽度重新计算(显示器宽度-400-20),如果删除消息不正常,再微调。
3. 可以用其他语言替代Python实现鼠标点击吗?
可以。只要能模拟鼠标点击,并且能被AppleScript调用(比如通过shell命令),用什么语言都可以,比如Node.js、Shell脚本等。
4. 机器人没反应,可能是什么原因?
先检查这几点:
-
☾ 微信是否登录,目标聊天窗口是否存在; -
☾ chatWindowName是否和窗口名称完全一致(包括空格、特殊符号); -
☾ pythonBin和workingDir路径是否正确; -
☾ 终端是否有报错信息(比如“找不到文件”“权限不足”)。
如果是“无法定位元素”的错误,通常重试一次脚本就会解决,这是AppleScript操作应用时的常见小问题。
5. 如何让机器人只回复特定关键词的消息?
在“消息处理逻辑”部分添加判断即可。比如,只处理包含“记录”的消息:
总结:适合自己的才是最好的
这个Mac版微信RPA机器人可能不是功能最强大的,但它胜在稳定、低成本、易上手。如果你需要一个能长期运行的微信自动回复工具,又不想为付费接口买单,或者刚好只有Mac设备,那么这个方案值得一试。
搭建过程中如果遇到问题,可以多检查配置变量和文件路径——大部分问题都出在这些细节上。随着使用场景的深入,你也可以不断扩展它的功能,让它更贴合自己的需求。

