钉钉 OA 后台 (oa.dingtalk.com) 应用管理 CLI 插件,基于 OpenCLI 框架。
- 全局安装 OpenCLI:
npm i -g @jackwener/opencli - 安装 Qoder 浏览器扩展并启动 daemon(
opencli doctor验证) - 在 Chrome 中登录 https://oa.dingtalk.com 并选择组织
cd /path/to/opencli-plugin-dingtalk-oa
opencli plugin install .| 命令 | 说明 |
|---|---|
dtoa apps-list |
应用清单(支持 --status/--scope/--type/--q 过滤) |
dtoa apps-detail <appId> |
单应用详情 |
dtoa apps-visible <appId> |
单应用可见范围明细 |
dtoa apps-admins <appId> |
管理员列表(v0.1 占位) |
dtoa apps-stats <appId> |
使用统计(v0.1 占位) |
所有写操作默认 --dry-run=true,仅预览不执行。加 --dry-run=false 实际生效。
| 命令 | 说明 |
|---|---|
dtoa apps-enable <appId> |
启用已停用的应用 |
dtoa apps-disable <appId> |
停用应用(可恢复) |
dtoa apps-set-visible <appId> --scope <all|depts|users> |
设置可见范围 |
dtoa apps-uninstall <appId> --confirm=yes |
物理删除(不可恢复) |
策略:INTERCEPT + hash-change
┌─ Chrome (用户已登录 oa.dingtalk.com) ─┐
│ │
│ 1. goto oa.dingtalk.com/#/welcome │
│ 2. installInterceptor('get_org_app') │
│ 3. location.hash = '#/microApp/...' │ ← hash-change 不刷新 context
│ 4. SPA AngularJS 自动发 XHR │ ← 带完整 auth (HttpOnly cookie)
│ 5. interceptor 捕获 response body │
│ │
└────────────────────────────────────────┘
↕ CDP (via Browser Bridge)
┌─ opencli daemon (localhost:19825) ─────┐
│ waitForCapture → getInterceptedRequests│
└────────────────────────────────────────┘
写操作额外利用 Angular $injector 直接调 SPA 内部的 request service,
自动走 apiList URL 映射 + auth 拦截器(X-csrf-token + urlFormData 编码)。
- 不支持批量操作
- apps-admins / apps-stats 接口未落定,返回占位错误
- 每条命令 3-8s 延迟(取决于 SPA 加载和 API 响应速度)
- 需要 Chrome 保持 oa.dingtalk.com 的登录态
| apiList key | URL path | 用途 |
|---|---|---|
| get_org_app | /omp/api/micro_app/get_org_app | 应用清单 |
| edit_micro_app | /omp/api/micro_app/edit | 编辑(含可见范围) |
| delete_micro_app | /omp/api/micro_app/delete | 停用/物理删除 |
| open_micro_app | /omp/api/micro_app/restore | 恢复(启用) |
| sort_micro_app | /omp/api/micro_app/sort | 排序 |
MIT