OpenClaw Skill 教程:自定义skill 在 MacOS 上自动发送微信消息

本项目演示如何在 macOS 上使用 OpenClaw 自定义 Skill,通过 GUI 自动化实现向指定微信联系人发送消息。文章从准备工作、Python 脚本编写,到 Skill 文件创建和配置,逐步讲解整个流程,包含窗口检测、联系人搜索、消息发送等核心功能,并提供错误处理与调试方法。通过该 Skill,用户可以轻松自动化重复消息任务、测试微信机器人功能或批量发送消息,提高办公效率。教程还涵盖了依赖安装、系统权限设置及故障排查,让初学者也能快速上手。附带演示视频和示例代码,便于实践操作和理解。
1
介绍skill




12
https://docs.openclaw.ai/zh-CN/tools/creating-skills 这个是skill 的相关文档说明
其实skill就是基于上下文的处理 包括我们之前用到的知识库 mcp这种
skill:上下文工程的渐进式公开
在传统方式(例如 mcp)中,系统通常会在会话开始时就把所有可用工具的定义一次性加载到模型上下文中。这些工具描述和参数定义往往会消耗数千甚至上万 Token,在对话尚未开始时就占用了大量上下文空间。并且处理大量的上下文信息也会影响模型的判断.
渐进式公开策略不会在一开始就暴露所有工具,而是根据当前任务或用户意图,逐步向模型提供相关能力。例如,系统可以先根据用户请求选择最相关的 MCP Server 或工具类别,然后只将少量候选工具加载到上下文中。当需要更具体的能力时,再进一步公开对应的工具定义。
我们如图2所示可以看到md文件里面有name 和description,大概意思是就是说模型会先读取我们这些文件中的name和description这样就可以知道每个skill是做什么的然后再来决定加载哪个skill的全部信息
2
编写python代码
- 接下来我们进行编写python自动发送消息的代码(mac版本) 演示效果看视频
import pyautogui
import pyperclip
import time
import Quartz
import subprocess
# ---------- 配置变量 ----------
FRIEND_NAME = "演示用户"
MESSAGE_CONTENT = "你好,这是一条测试消息"
# -------------------------------
# 获取窗体信息
def get_wechat_window():
options = Quartz.kCGWindowListOptionOnScreenOnly
window_list = Quartz.CGWindowListCopyWindowInfo(options, Quartz.kCGNullWindowID)
for win in window_list:
owner_name = win.get('kCGWindowOwnerName', '')
if '微信' in owner_name:
bounds = win['kCGWindowBounds']
x = int(bounds['X'])
y = int(bounds['Y'])
w = int(bounds['Width'])
h = int(bounds['Height'])
return x, y, w, h
raise Exception("找不到微信窗口,请确保微信已打开")
# 打开微信窗口
# 如果微信没开 → 启动
# 如果已经开 → 直接切到前台
def open_wechat():
subprocess.run(["open", "-a", "WeChat"])
time.sleep(1)
# 搜索用户
def search_user(friend_name):
pyautogui.keyDown('command')
time.sleep(0.05)
pyautogui.press('f')
pyautogui.keyUp('command')
time.sleep(0.5)
pyperclip.copy(friend_name)
pyautogui.keyDown('command')
time.sleep(0.05)
pyautogui.press('v')
pyautogui.keyUp('command')
time.sleep(0.05)
pyautogui.press('enter')
time.sleep(0.5)
# 点击输入框
def click_input_box():
x, y, w, h = get_wechat_window()
input_x = x + w - (w * 0.3)
input_y = y + h - (h * 0.2)
pyautogui.click(input_x, input_y)
time.sleep(0.1)
# 粘贴并发送内容
def paste_and_send(msg):
pyperclip.copy(str(msg))
time.sleep(0.05)
pyautogui.keyDown('command')
pyautogui.press('v')
pyautogui.keyUp('command')
time.sleep(0.05)
pyautogui.press('enter')
time.sleep(0.1)
# 发送消息
def send(msg):
click_input_box()
paste_and_send(msg)
if __name__ == '__main__':
open_wechat()
search_user(FRIEND_NAME)
send(MESSAGE_CONTENT)
3
创建skill







12345
- 我们跟着文档操作 如图1所示大家用命令创建还是手动都可以 如图2所示 我这个文件夹叫wechat-message-send
- 然后根据文档我们创建一个SKILL.md的文件 如图3所示(我没装快捷软件就用命令创建了)内容的话我们把官网的先复制过来进行修改如图4 图5所示 内容如下
---
name: wechat-message-send
description: 在 macOS 上使用 GUI 自动化,通过微信桌面版发送消息,适用于自动发送>微信消息、自动化重复任务、测试微信机器人功能以及批量发送消息,可提高办公效率和操
作便捷性。
---
# 微信消息发送技能 Skill
4
设置python脚本




12
这个是skill的一种基础结构
my-skill/
├── SKILL.md # 必需:指令 + 元数据
├── scripts/ # 可选:可执行代码
├── references/ # 可选:文档资料
└── assets/ # 可选:模板、资源
我们在微信消息发送里面新建一个scripts文件夹 如图所示,然后把我们的python代码放进来如图2所示
5
完善SKILL.md

https://www.runoob.com/ai-agent/skills-agent.html 这个教程里有一些相关的参数简介大家可以看一下
- trigger_keywords是触发关键词可以提升触发概率
- dependencies是所需要的依赖
skill 内容如下 也可以在附件中直接下载
---
name: wechat-message-send
description: 在 macOS 上使用 GUI 自动化,通过微信桌面版发送消息,适用于自动发送微信消息、自动化重复任务、测试微信机器人功能以及批量发送消息,可提高办公效率和操作便捷性。
dependencies:
- pyautogui
- pyperclip
- Quartz
trigger_keywords:
- 发微信消息
- 发消息
- 微信发送
- wechat send
author: gjq
---
# 微信消息发送技能 Skill
该 Skill 通过 GUI 自动化,在 macOS 的微信桌面版中自动发送消息。
适用场景:
1. 在 macOS 上自动发送微信消息
2. 自动化重复发送消息任务
3. 测试微信机器人功能
4. 使用微信桌面版进行批量消息发送
# 前置条件
## 必需的 Python 依赖
先安装依赖包:
pip3 install pyautogui pyperclip Quartz
## 系统要求
- macOS 系统(使用 Quartz 进行窗口管理)
- 已安装微信桌面版并且已经登录
- 屏幕分辨率应保持稳定,否则可能影响坐标识别
---
# 使用方法
## 基础配置
编辑文件:
scripts/wechat_send.py
需要配置:
FRIEND_NAME:微信联系人名称
MESSAGE_CONTENT:要发送的消息内容
---
## 运行脚本
python3 scripts/wechat_send.py
---
# 重要注意事项
1. 微信必须已经运行并登录
2. 屏幕必须处于可见状态(不能锁屏)
3. 脚本运行时不要移动鼠标或使用键盘
4. 建议先使用非重要联系人进行测试
5. 不同分辨率或微信 UI 更新可能导致坐标失效
---
# 功能说明
## 1. 微信窗口检测
get_wechat_window()
用于获取微信窗口在屏幕上的位置坐标。
---
## 2. 激活微信
open_wechat()
通过快捷键:
Command + Shift + W
激活微信窗口。
---
## 3. 搜索联系人
search_user(friend_name)
根据联系人名称搜索用户。
---
## 4. 发送消息
click_input_box()
点击消息输入框。
paste_and_send(msg)
粘贴消息并发送。
send(msg)
组合函数:点击输入框并发送消息。
---
# 错误处理
脚本包含以下错误处理:
- 找不到微信窗口
- 坐标计算错误
- UI 响应延迟
---
# 安全建议
**删除临时文件**
把修改之后的脚本运行完之后进行删除避免垃圾堆叠
**测试环境**
建议先在测试联系人上验证脚本。
**手动终止脚本**
将鼠标移动到屏幕左上角可以触发 pyautogui 的 failsafe 机制,从而立即终止脚本。
---
# 故障排查
## 常见问题:
### 1. 找不到微信窗口
可能原因:
- 微信未运行
- 微信窗口未显示
- 窗口名称不同(中文“微信”或英文“WeChat”)
---
### 2. 点击输入框位置错误
解决方法:
修改 click_input_box() 中的坐标计算:
input_x
input_y
不同微信版本或 UI 布局可能不同。
---
### 3. 消息未发送
检查:
- ENTER 键是否正确触发
- 屏幕是否解锁
- 微信窗口是否处于激活状态
---
# 调试模式
调试时可以增加打印信息查看坐标:
print(f"Window found at: x={x}, y={y}, width={w}, height={h}")
print(f"Clicking input at: x={input_x}, y={input_y}")xxxxxxxxxx print(f"Window found at: x={x}, y={y}, width={w}, height={h}")print(f"Clicking input at: x={input_x}, y={input_y}")python
SKILL.md
3.23KB
6
重启网关

输入命令 openclaw gateway restart 重启网关 如图所示
7
演示效果


12
看视频效果演示
当然通过飞书远程也是可以的看视频2
0
0
0
qq空间
微博
复制链接
分享 更多相关项目
猜你喜欢
评论/提问(已发布 0 条)
0