企业微信机器人自动化实操指南:WorkTool 用一台手机搞定群管+自动回复
【免费下载链接】worktool一款安全稳定的Android无障碍服务工具,支持控制企微/微信来运行的无人值守群管理企业微信机器人项目地址: https://gitcode.com/GitHub_Trending/wo/worktool
WorkTool 是一款基于 Android 官方无障碍服务的企业微信机器人自动化工具,用一台安卓机驱动企微完成收发消息、建群拉人、自动回复等动作,无需 Root,适合想搭无人值守群管系统的运维和开发者。
WorkTool 是什么:一台安卓机跑通的企业微信自动化底座
先给结论:WorkTool 不是一个独立客户端,它是"安卓端 APP + 任务调度平台"的组合。手机负责"看"和"点",云端平台负责"下指令"。
拆开看就是三块:
- 安卓端 APP:跑在你自备的安卓机上,登录你的企业微信账号。APP 通过无障碍服务读取界面控件、模拟点击,把"读消息 → 找到输入框 → 填内容 → 点发送"这条链路自动化。
- 任务调度平台:提供 HTTP/WebSocket 接口,你可以从自己的后端、脚本或定时任务里调用它,驱动机器人干活。
- 中间通道:手机与平台之间走一条 WSS 长连接(
wss://api.worktool.ymdyes.cn/webserver/wework/{robotId}),指令下发、结果回执、心跳保活都走这条链路。
技术上它明确声明"无 hook 函数、无侵入、无内存修改",走的是 Android 官方无障碍 API,这一点可以从源码里 accessibility_service_config.xml 直接看到:监听范围限定为com.tencent.wework,开启了canPerformGestures(允许模拟手势)和canRetrieveWindowContent(允许读取窗口内容)。
一个前置事实要说清楚:开源仓库里的代码是历史版本,用于学习和二次开发;持续维护的商业版在仓库 README 里有说明,两者功能接口大体一致,但版本适配会有差异。
无障碍权限怎么开:从系统设置到服务启动的完整链路
先说结论:必须先在系统里开启无障碍服务,然后回到 WorkTool APP 里让机器人"挂"到这条服务上。APP 自己不会帮你申请,因为 Android 无障碍权限是系统级开关,只能手动打开。
具体步骤:
- 打开系统设置 → 无障碍(或"辅助功能"),找到 WorkTool 对应的服务项(
WeworkService),打开开关。 - 部分厂商(华为、小米、OPPO、vivo、魅族等)会有额外的"辅助功能"权限提示,WorkTool 内置了针对这些机型的跳转工具,见 PermissionPageManagement.java,会直接把你带到对应设置页。
- 回到 WorkTool APP,进入设置页(SettingsActivity.kt),确认机器人 ID、连接地址等参数后,启动机器人。
- 启动成功后,
WeworkService的onServiceConnected()会被触发,APP 会自动建立 WebSocket 长连接、初始化消息循环(MyLooper)、并开始监听企微图片缓存目录(用于接收图片消息)。
一个容易踩的点:无障碍服务被系统杀掉或用户手动关闭后,机器人会立刻失效。建议在系统里把 WorkTool 和企微都加入电池白名单,避免后台被回收。
机器人怎么连上任务调度平台:WebSocket 长连接配置
先说结论:手机侧不用你配服务器地址,默认走wss://api.worktool.ymdyes.cn,你需要做的只是把"机器人 ID"(robotId)配对上。
从 Constant.kt 里能看到默认逻辑:
- 长连接地址拼接规则:
$host/webserver/wework/$robotId - 心跳节奏:每 5 秒发一次心跳包
{"type":...HEART_BEAT} - 断线重连间隔:5 秒
- 通讯加密:可选 AES/CBC/PKCS7Padding,
robotKeyCheck控制是否校验 Key
robotId是你在任务调度平台注册机器人后拿到的标识,APP 里会把它持久化到SharedPreferences(键名robotId)。修改机器人后,APP 内部会触发一条modify_channel广播,自动断开旧连接、用新 ID 重建长连接,不用重启 APP。
如果你在私有化部署场景下换了host,APP 侧会自动把wss前缀替换成https走 HTTP 请求,把ws前缀替换成http,逻辑都封装在getBaseUrl()里,不用改代码。
企业微信机器人支持哪些操作:从发消息到群管的接口清单
先说结论:WorkTool 暴露的接口是"指令集"风格,每个指令对应企微里一个具体动作,从源码 WeworkController.kt 可以数出 30+ 个方法,全部走@RequestMapping分发。
按使用频率排一下:
| 类别 | 指令 | 说明 |
|---|---|---|
| 消息 | sendMessage/replyMessage | 群内发消息 / 针对某条消息回复 |
| 消息 | recallMessage | 撤回机器人发出去的消息 |
| 消息 | relayMessage/relayMultiMessage/relayMergeMessage | 单条/批量/合并转发 |
| 消息 | sendMultiMessage/sendMergeMessage | 批量发送 / 合并发送 |
| 群管 | initGroup/updateGroup/dismissGroup | 建群 / 改群(改名、公告、备注、模板、拉人、踢人)/ 解散群 |
| 群管 | getGroupInfo/getAllGroupInfo/showGroupInfo | 查询群信息 |
| 好友 | addFriendByGroup/addFriendByPhone/deleteContact | 从群内加友 / 按手机号加友 / 删除联系人 |
| 好友 | getFriendInfo/getAllFriendInfo | 查询好友信息 |
| 文件 | pushFile/pushMicroDiskFile/pushMicroDiskImage | 推送任意文件 / 微盘文件 / 微盘图片 |
| 内容 | pushLink/pushOffice/pushMicroprogram | 推送图文链接 / 腾讯文档 / 小程序 |
| 其他 | scanQrCode | 用机器人账号扫码 |
| 其他 | clockIn | 打卡 |
| 其他 | switchCorp | 多企业账号切换 |
| 其他 | stopAndGoHome | 停止所有任务回到首页待命 |
回复策略也在这里能配,replyStrategy有三个值:0不回复、1只回复被 @ 的、2群内所有消息都回复。默认是1,这也是最保守、最不容易"打扰"用户的设置。
群发频率怎么设:三档间隔参数控制操作节奏
先说结论:WorkTool 内置了三层间隔参数,分别控制"整条指令之间"、"页面切换之间"、"弹窗出现之后"的等待时长,不要自己写死 sleep,直接用这三档。
在 Constant.kt 里:
LONG_INTERVAL:默认5000ms,两个任务/指令之间的基础等待CHANGE_PAGE_INTERVAL:默认1000ms,切换页面(打开聊天、进入设置页等)的等待POP_WINDOW_INTERVAL:默认500ms,弹窗出现后的等待
这三档都是var,意味着运行期可以调。调法上有两条路:
- 在 APP 设置页里改:
SettingsActivity和SettingsAdvanceActivity里暴露了相关开关,普通用户直接改即可。 - 源码里改默认值:如果你二次开发,直接改 Constant.kt 里的
BASE_*常量。
经验值:批量群发场景下,把LONG_INTERVAL从默认 5s 提到 8~10s 更稳;页面密集型操作(连续建群、连续拉人)主要受CHANGE_PAGE_INTERVAL影响,一般不用动。
另外还有一个"防卡顿模式"(v2.6.2 引入),在设置页里可以打开,它会在检测到界面响应变慢时自动拉长等待。
常见踩坑和排查:从权限到版本的 5 个高频问题
按出现频率排:
1. 无障碍服务被系统回收。表现:机器人突然"不响应了"。排查:进系统设置看 WorkTool 的无障碍开关是否还开着;如果厂商杀后台,把 WorkTool 加入自启动和电池白名单。
2. 企微版本不在兼容列表内。开源版代码里AVAILABLE_VERSION维护了一份白名单(4.0.2 ~ 4.1.10),商业版会持续扩展到 5.0.x。如果你装的企微版本不在白名单里,APP 启动时会提示升级或降级。别用"最新"版本的企微做测试,先用兼容列表内的版本跑通。
3. WebSocket 连不上。表现:APP 日志里能看到新建链接,但没有后续心跳。排查:
robotId是否填对、平台上机器人是否处于"运行中"- 手机网络是否能访问
api.worktool.ymdyes.cn(443 端口) - 如果是私有化部署,
host是否改成了正确的 wss 地址
4. 收不到图片消息。图片走的是文件监听,路径固定在/storage/emulated/0/Android/data/com.tencent.wework/files/imagecache/imagemsg2(见 WeworkService.kt 的initObserver)。如果企微更新了缓存目录结构,监听就会失效。同时需要在Constant.pushImage开关为true时才会启动监听。
5. 群名带(...)或省略号匹配不上。企微会把长群名截断成XXX…(3)这种形式,WorkTool 在 Constant.kt 里维护了一组正则(regTrimTitle、suffixRegex、groupSuffixRegex、digitalRegex)用来剥离这些后缀再匹配。如果你自定义了群名匹配逻辑,直接复用这几条正则,别自己写。
快速上手两步走:先测试再上量
给两个能立刻执行的建议:
第一步:先用"测试群 + 单条消息"跑通全链路。建一个 3~5 人的测试群,用sendMessage发一条文本,再用replyMessage回复,最后recallMessage撤回。这一步能验证:无障碍权限、WebSocket 长连接、企微版本兼容、群名匹配四件事。跑通再谈批量。
第二步:批量前把三档间隔调稳。群发场景默认LONG_INTERVAL=5s起步,跑 100 条看有没有卡顿,卡顿就加到 8s 并打开"防卡顿模式"。群管场景(连续建群、拉人)保持默认,不要图快把CHANGE_PAGE_INTERVAL改到 500ms 以下——企微的页面转场没那么快。
下面是 WorkTool 在实际企微群里跑 AI 对话的效果截图(图片来自仓库 images/chatgpt.png),可以看到机器人账号在群里连续应答,回复策略走的是"被 @ 才回":
跑通之后,把stopAndGoHome留在调度平台的一个"急停"按钮里,任何异常情况下一条指令让机器人回首页待命,这是最省心的兜底。
【免费下载链接】worktool一款安全稳定的Android无障碍服务工具,支持控制企微/微信来运行的无人值守群管理企业微信机器人项目地址: https://gitcode.com/GitHub_Trending/wo/worktool
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考