{"id":51215801,"url":"https://github.com/LAVARONG/wechat-automation-api","last_synced_at":"2026-07-16T14:01:05.248Z","repository":{"id":326602781,"uuid":"1087047412","full_name":"LAVARONG/wechat-automation-api","owner":"LAVARONG","description":"微信 Windows 版自动化发送服务（支持 4.0+ 版本）  基于 Flask + uiautomation 的 HTTP API 服务，通过 UI 自动化控制微信客户端发送消息。 支持文本、图片、批量发送和队列管理。非 HOOK、非协议，安全可靠。已支持Agent Skill，可让openclaw安装。","archived":false,"fork":false,"pushed_at":"2026-05-23T09:08:04.000Z","size":59,"stargazers_count":114,"open_issues_count":4,"forks_count":32,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-23T11:14:59.017Z","etag":null,"topics":["agent-skill","flask","python","uiautomation","wechat","wechat-bot"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LAVARONG.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-31T09:48:04.000Z","updated_at":"2026-05-23T09:08:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/LAVARONG/wechat-automation-api","commit_stats":null,"previous_names":["lavarong/wechat-automation-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LAVARONG/wechat-automation-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LAVARONG%2Fwechat-automation-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LAVARONG%2Fwechat-automation-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LAVARONG%2Fwechat-automation-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LAVARONG%2Fwechat-automation-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LAVARONG","download_url":"https://codeload.github.com/LAVARONG/wechat-automation-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LAVARONG%2Fwechat-automation-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35546267,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-16T02:00:06.687Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-skill","flask","python","uiautomation","wechat","wechat-bot"],"created_at":"2026-06-28T04:01:00.194Z","updated_at":"2026-07-16T14:01:05.231Z","avatar_url":"https://github.com/LAVARONG.png","language":"Python","funding_links":[],"categories":["⭐ 精选第三方技能"],"sub_categories":["📣 平台运营 / 自媒体 / 办公流量"],"readme":"# 微信自动化发信 Skill / HTTP API\n\n这是一个面向 Windows 桌面微信的自动化发信工具，核心能力是通过 `uiautomation` 控制已登录的微信客户端发送文本、图片 URL 或本地文件。项目提供两种入口：\n\n- **Skill / CLI 入口**：推荐给各类 Agent 使用。一次命令完成一次发送，执行后立即退出；只发送消息时无需启动后台 HTTP API。\n- **HTTP API 入口**：适合外部系统长期集成、批量投递和队列处理，需要启动 Flask 后台服务。\n\n本项目不使用 Hook、不接入微信协议，只通过 Windows UI 自动化操作本机微信窗口。\n\n## Skill 用法\n\n这是最推荐的使用方式：你只需要用自然语言告诉智能体要把什么内容发给谁，智能体会自动调用 Skill，不需要你手写命令，也不需要启动后台 HTTP API。\n\n### 安装\n\n```text\n请帮我安装部署这个skill https://github.com/LAVARONG/wechat-automation-api ，完成后给微信联系人“文件传输助手”发送“这是来着微信自动化发信 Skill 的测试信息”\n```\n\n智能体会自动拉取仓库、读取 `SKILL.md`，并按项目说明准备运行环境。如果正常，会操作微信给“文件传输助手”发送测试信息。请提前确保 PC 版微信已经登录。\n\n### 玩法示例\n\n安装完成后，可以直接这样对智能体说：\n\n```text\n查询今天关于 AI 的最新新闻，整理成简洁的总结，然后通过微信发送到联系人“文件传输助手”。\n```\n\n```text\n把这次运行结果整理成 5 条要点，通过微信发送到“项目通知群”。\n```\n\n```text\n下载这张图片并通过微信发给“文件传输助手”。\n```\n\n```text\n给微信的“文件传输助手”发送我下载目录下最新的一张图片。\n```\n\n```text\n把刚生成的 C:\\tmp\\report.xlsx 通过微信发送给“文件传输助手”。\n```\n\n```text\n把当前项目的测试结果总结一下，然后通过微信发给“项目通知群”。\n```\n\n普通发消息、发图片、发本地文件都走 Skill 即可，不需要运行 `run.bat`，也不需要启动 `scripts/app.py`。\n\n## CLI 用法\n\nCLI 适合开发者手动测试、排查环境问题，或在本机脚本里直接调用。\n\n### 手动安装环境\n\n先确保满足以下条件：\n\n- Windows 10/11\n- Python 3.7+\n- 微信 PC 客户端已启动并登录\n- 微信窗口可被系统 UI 自动化识别\n\n在项目根目录安装依赖：\n\n```powershell\npip install -r requirements.txt\n```\n\n### 发送文本\n\n在项目根目录执行：\n\n```powershell\npython scripts/skill_cli.py --to \"文件传输助手\" --content \"这是一条 Skill CLI 测试消息\"\n```\n\n成功时 stdout 会输出：\n\n```text\n发送成功: 已向「文件传输助手」发送文本消息。\n```\n\n失败时会输出明确原因和错误代码，例如：\n\n```text\n发送失败: 未找到联系人或群组: 文件传输助手。请确认名称与微信备注/群名完全一致。\n错误代码: CONTACT_NOT_FOUND\n```\n\n这通常表示微信窗口未找到、联系人名称不匹配、系统 UI 自动化不可用或剪贴板不可用。\n\n### 发送图片 URL\n\n图片发送使用 URL，脚本会下载图片并通过剪贴板粘贴到微信：\n\n```powershell\npython scripts/skill_cli.py --to \"文件传输助手\" --content \"https://example.com/image.png\" --action \"sendpic\"\n```\n\n### 发送本地图片\n\n```powershell\npython scripts/skill_cli.py --to \"文件传输助手\" --content \"C:\\tmp\\screenshot.png\" --action \"sendpic\"\n```\n\n如果传入的是本地路径，`sendpic` 会自动跳过下载，按本地文件粘贴发送。\n\n### 发送本地文件\n\n发送本机上的任意文件时使用 `sendfile`：\n\n```powershell\npython scripts/skill_cli.py --to \"文件传输助手\" --content \"C:\\tmp\\report.xlsx\" --action \"sendfile\"\n```\n\n建议 Agent 使用绝对路径，避免相对路径因工作目录不同而找不到文件。\n\n### JSON 输出\n\n需要稳定解析时可追加 `--json`：\n\n```powershell\npython scripts/skill_cli.py --to \"文件传输助手\" --content \"测试消息\" --json\n```\n\n输出包含 `success`、`code`、`message`、`to`、`action`。退出码 `0` 表示成功，非 `0` 表示失败。\n\n## 系统辅助功能启用\n\n若运行环境为精简版或 Ghost 系统，需确保 Windows 辅助功能正常运行。通过键盘 Win 键唤出开始菜单，输入“讲述人”并开启该功能（开启后可立即关闭），此操作可确保系统底层 UI 自动化接口处于激活状态，避免程序无法识别元素。\n\n## 远程桌面与锁屏\n\n本项目依赖 Windows UI Automation 操作微信窗口。Windows 锁屏状态下 UIA 通常不可用；服务器通过远程桌面 RDP 登录后，如果直接关闭远程桌面窗口，也可能导致鼠标、键盘和 UI 自动化失效，从而无法继续操作微信。\n\n在服务器远程桌面场景中，建议使用项目自带的 `disconnect_rdp.bat` 断开远程桌面连接。它会尝试执行 `tscon \u003c会话ID\u003e /dest:console`，将当前 RDP 会话切回本地控制台并保持会话运行，用于解决关闭远程桌面后鼠标键盘失效的问题。\n\n使用方式：\n\n```powershell\n.\\disconnect_rdp.bat\n```\n\n如执行失败，请尝试以管理员身份运行，并确认当前确实处于远程桌面会话中。\n\n## HTTP API 模式\n\nHTTP API 模式适合长期运行的服务化场景，例如外部系统通过 HTTP 投递消息、批量发送到多个联系人、使用队列控制发送间隔。\n\n### 准备配置\n\n复制配置示例：\n\n```powershell\nCopy-Item config.json.example config.json\nnotepad config.json\n```\n\n配置示例：\n\n```json\n{\n    \"token\": \"your_secret_token_here\",\n    \"host\": \"127.0.0.1\",\n    \"port\": 8808,\n    \"message_interval\": 1,\n    \"log_level\": \"INFO\",\n    \"log_file\": \"wechat_automation.log\"\n}\n```\n\n`config.json` 已加入 `.gitignore`，可用于保存本地 token。\n\n### 启动服务\n\n```powershell\n.\\run.bat\n```\n\n或直接运行：\n\n```powershell\npython scripts/app.py\n```\n\n启动后默认监听：\n\n```text\nPOST http://127.0.0.1:8808/\nGET  http://127.0.0.1:8808/status\nGET  http://127.0.0.1:8808/health\n```\n\n### HTTP 发送文本\n\n```powershell\n$body = @{\n    token = \"your_secret_token_here\"\n    action = \"sendtext\"\n    to = @(\"文件传输助手\")\n    content = \"这是一条 HTTP API 测试消息\"\n} | ConvertTo-Json\n\nInvoke-RestMethod -Uri \"http://127.0.0.1:8808/\" -Method Post -Body $body -ContentType \"application/json\"\n```\n\n### HTTP 发送图片 URL\n\n```powershell\n$body = @{\n    token = \"your_secret_token_here\"\n    action = \"sendpic\"\n    to = @(\"文件传输助手\")\n    content = \"https://example.com/image.png\"\n} | ConvertTo-Json\n\nInvoke-RestMethod -Uri \"http://127.0.0.1:8808/\" -Method Post -Body $body -ContentType \"application/json\"\n```\n\n### HTTP 发送本地文件\n\n```powershell\n$body = @{\n    token = \"your_secret_token_here\"\n    action = \"sendfile\"\n    to = @(\"文件传输助手\")\n    content = \"C:\\tmp\\report.xlsx\"\n} | ConvertTo-Json\n\nInvoke-RestMethod -Uri \"http://127.0.0.1:8808/\" -Method Post -Body $body -ContentType \"application/json\"\n```\n\n成功响应示例：\n\n```json\n{\n    \"success\": true,\n    \"message\": \"消息已加入队列\",\n    \"queued_count\": 1,\n    \"queue_size\": 1\n}\n```\n\n## 项目结构\n\n```text\nwechat-automation-api/\n├── scripts/\n│   ├── skill_cli.py            # Agent Skill / CLI 同步发送入口\n│   ├── wechat_controller.py    # 微信窗口查找、联系人搜索、文本/图片发送逻辑\n│   ├── app.py                  # Flask HTTP API 服务入口\n│   ├── message_queue.py        # HTTP 模式消息队列\n│   └── monitor.py              # 微信状态监控脚本\n├── examples/\n│   └── wx.py                   # uiautomation 最小验证示例\n├── test/\n│   └── test_api.py             # HTTP API 测试脚本\n├── docs/\n│   └── changelog.md            # 更新日志\n├── SKILL.md                    # Agent Skill 使用说明\n├── requirements.txt            # Python 依赖\n├── config.json.example         # HTTP API 配置示例\n├── run.bat                     # HTTP API 快捷启动脚本\n└── README.md                   # 项目说明\n```\n\n## 工作原理\n\nSkill / CLI 模式：\n\n1. Agent 或用户执行 `python scripts/skill_cli.py ...`\n2. 脚本创建 `WeChatController`\n3. 控制器查找并激活微信窗口\n4. 优先从会话列表定位联系人，失败后使用搜索框\n5. 通过剪贴板粘贴文本、图片或本地文件并按 Enter 发送\n6. 命令返回 `发送成功` 或失败原因并退出\n\nHTTP API 模式：\n\n1. Flask 接收 HTTP 请求并验证 token\n2. 请求被加入消息队列\n3. 后台线程按顺序调用 `WeChatController`\n4. 按配置的 `message_interval` 控制发送间隔\n\n## 开发者辅助工具\n\n编写或调整元素查找逻辑时，建议准备 UI 自动化查看工具：\n\n- 使用 Visual Studio SDK 自带的 `Inspect.exe` 工具，或 Windows SDK 工具包中的 Inspect 工具。\n- 用于实时查看微信窗口的 UI 元素树结构、`Name`、`AutomationID`、`ClassName` 等关键属性。\n- 当微信版本更新导致控件名称或层级变化时，优先用 Inspect 重新确认元素属性，再修改 `scripts/wechat_controller.py` 中的查找逻辑。\n\n当前代码中比较关键的定位点包括：\n\n- 微信主窗口：`Name=\"微信\"`，`ClassName=\"mmui::MainWindow\"`\n- 会话项：`ClassName=\"mmui::ChatSessionCell\"`，`AutomationId=\"session_item_\u003c联系人名\u003e\"`\n- 搜索框：`EditControl(Name=\"搜索\")`\n- 聊天输入框：`EditControl(AutomationId=\"chat_input_field\", ClassName=\"mmui::ChatInputField\")`\n  - 旧版 `EditControl(foundIndex=1)` 在新版微信打开公众号文章/视频后会错位（右侧内置浏览器有自己的输入框），已弃用。\n\n## 常见问题\n\n### 提示未找到微信窗口\n\n确认微信 PC 客户端已启动并登录。程序会尝试通过微信默认快捷键 `Ctrl+Alt+W` 唤醒窗口；如果仍失败，请检查微信快捷键设置、窗口标题和系统 UI 自动化能力。\n\n### 精简版或 Ghost 系统无法识别元素\n\n按“系统辅助功能启用”章节操作一次：Win 键打开开始菜单，搜索并开启“讲述人”，开启后可立即关闭。这可以激活底层 UI 自动化接口。\n\n### 关闭远程桌面后无法操作微信\n\n不要直接锁屏或直接关闭 RDP 窗口后期待 UIA 继续稳定工作。请使用 `disconnect_rdp.bat` 断开远程桌面连接并保持会话回到本地控制台；必要时以管理员身份运行该脚本。\n\n### 找不到联系人或发错会话\n\n检查 `--to` 或 HTTP 请求中的 `to` 是否与微信里的联系人名称、群名称或备注完全一致。建议先用“文件传输助手”完成发送测试，再切换到真实联系人。\n\n### 文本包含中文、换行或特殊字符是否支持\n\n支持。文本发送优先使用剪贴板粘贴，不依赖逐字键盘输入，因此比 `SendKeys` 更适合中文和特殊符号。\n\n### 什么时候需要 HTTP API\n\n只有当你需要外部系统通过 HTTP 调用、后台队列、批量发送、状态查询或长期服务化运行时才需要 HTTP API。普通 Agent 发消息直接使用 Skill / CLI。\n\n### CLI 常见错误代码\n\n- `WECHAT_WINDOW_NOT_FOUND`：未找到微信窗口。确认微信 PC 已启动并登录；精简版或 Ghost 系统可开启一次“讲述人”激活辅助功能。\n- `CONTACT_NOT_FOUND`：未找到联系人或群组。确认名称与微信备注、联系人名或群名完全一致。\n- `SEARCH_BOX_NOT_FOUND`：未找到微信搜索框。可能是微信 UI 变化、窗口未加载完成或系统 UI 自动化不可用。\n- `CHAT_INPUT_NOT_FOUND`：未找到聊天输入框。可能未进入目标会话或微信 UI 结构变化。\n- `CLIPBOARD_TEXT_FAILED`：文本写入剪贴板失败。检查系统剪贴板、`pyperclip` 或远程桌面会话状态。\n- `IMAGE_DOWNLOAD_FAILED` / `IMAGE_URL_NOT_IMAGE`：图片 URL 下载失败或返回内容不是图片。\n- `IMAGE_CLIPBOARD_FAILED`：图片复制到剪贴板失败。\n- `LOCAL_FILE_NOT_FOUND`：本地文件不存在。检查路径是否正确，建议使用绝对路径。\n- `LOCAL_FILE_INVALID`：路径不是文件，当前不支持发送目录。\n- `FILE_CLIPBOARD_FAILED`：本地文件复制到剪贴板失败。检查系统剪贴板或远程桌面会话状态。\n- `SEND_FILE_ERROR`：发送本地文件异常。\n- `DEPENDENCY_MISSING`：缺少 Python 依赖。请在项目根目录执行 `pip install -r requirements.txt`。\n- `CLI_EXCEPTION`：CLI 自身执行异常。\n\n## 日志\n\nHTTP API 模式会写入 `wechat_automation.log`：\n\n```powershell\nGet-Content wechat_automation.log -Tail 50\nGet-Content wechat_automation.log -Wait\n```\n\nSkill / CLI 模式主要通过 stdout 返回执行结果。\n\n## 许可证\n\n本项目仅供学习和研究使用。请遵守微信客户端使用规范，并在自己的账号和设备上谨慎使用。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLAVARONG%2Fwechat-automation-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FLAVARONG%2Fwechat-automation-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLAVARONG%2Fwechat-automation-api/lists"}