Install
openclaw skills install user-provision在 Office 365(世纪互联)与 Adobe Creative Cloud 批量或单人开户——自动授权、重置密码、发通知邮件。两侧相互独立,用户可选一个或两个。USE WHEN 新增用户, 开户, 新员工开账号, 建账号, 批量开户, provision user, 加 office, 加 adobe, 给 XX 开账号.
openclaw skills install user-provision🔗 https://github.com/eggyrooch-blip/office365-tools
本 skill 依赖上面这个 Python CLI。Agent 执行前先确认 repo 已 clone 到本地;遇到任何不确定的实现细节(CLI 子命令签名、.env 变量名、产品 ID、Adobe 用户类型)优先去仓库查 README.md / CLAUDE.md / docs/,不要凭本 skill 描述臆断。仓库是 single source of truth。
git clone https://github.com/eggyrooch-blip/office365-tools && cd office365-tools && pip install -r requirements.txt.env,按下方模板填写User.ReadWrite.All / LicenseAssignment.ReadWrite.All / User-PasswordProfile.ReadWrite.All 管理员同意python main.py office365 init 和 python main.py adobe init --force-default(选默认产品,例如 All Apps).env 模板(复制到 office-usertools/.env 后按实际填写)# --------- Office 365(世纪互联) ---------
CLIENT_ID=your-entra-app-client-id
TENANT_ID=your-entra-tenant-id
CLIENT_SECRET=your-entra-app-secret
DEFAULT_PASSWORD=ChangeMe@2025
DEFAULT_DOMAIN=yourcorp.partner.onmschina.cn
FORCE_CHANGE_PASSWORD=true
# 通知邮件(推荐开启)
NOTIFICATION_ENABLED=true
NOTIFICATION_FROM_EMAIL=it-tools@yourcorp.com
NOTIFICATION_BCC_EMAILS=it@yourcorp.com
NOTIFICATION_EMAIL_DOMAIN=yourcorp.com
# SMTP(示例:飞书邮箱)
SMTP_HOST=smtp.feishu.cn
SMTP_PORT=465
SMTP_USERNAME=it-tools@yourcorp.com
SMTP_PASSWORD=your-smtp-password
SMTP_USE_SSL=true
# --------- Adobe UMAPI ---------
ADOBE_CLIENT_ID=your-adobe-client-id
ADOBE_CLIENT_SECRET=your-adobe-client-secret
ADOBE_ORG_ID=xxxxxxxxxxxxxxxxxxxxxxxx@AdobeOrg
ADOBE_API_BASE_URL=https://usermanagement.adobe.io/v2/usermanagement
ADOBE_DEFAULT_DOMAIN=yourcorp.com
| 用户说 | 动作 |
|---|---|
| "给 XX 开账号" / "新建用户" / "新增用户" | 询问 provider 后执行 |
| "新员工开账号" / "入职开账号" | 同时 O365 + Adobe |
| "给 XX 开 Office" / "加 Office" | 仅 O365 |
| "给 XX 开 Adobe" / "加 Adobe" | 仅 Adobe(默认 All Apps) |
| "批量开户" | 需要列表(CSV 或粘贴),批量执行 |
| 参数 | 必填 | 说明 |
|---|---|---|
| identifier (LDAP) | ✅ | 用户名前缀,如 zhangsan01 |
| provider | ✅ | office365 / adobe / both |
| display_name / 姓名 | 建议 | 若无则从 LDAP 自动拆分 |
| product | 可选 | O365: SKU Part Number;Adobe: Profile ID 或别名 cc / ps / acrobat;Adobe 默认 All Apps |
| force_change_password | 可选 | O365 首次登录强制改密,默认 true |
| country | 可选 | 默认 CN |
/Users/kite/Documents/office-usertools(或通过 OFFICE_USERTOOLS_PATH 环境变量指定).env 配齐 O365 + Adobe 凭据(见下方"环境变量清单")python main.py office365 init
python main.py adobe init --force-default # 选 All Apps 作为默认
若用户只说了名字没说 provider/LDAP,用 AskUserQuestion 一次拿齐:
python main.py office365 create <ldap> --display-name "<中文名>" [--product O365_BUSINESS]
--product 时用 state 里 init 设置的默认 license.env 的 SMTP 发通知邮件(含初始密码)id、userPrincipalName、passwordpython main.py adobe create <ldap>@<domain> [--product cc|ps|acrobat]
--product cc / all → All Apps--product ps → Photoshop--product acrobat → Acrobat ProaddAdobeID + add group 一次请求完成邀请与授权{"completed":1, "result":"success"}注意:
yourcorp.com 是 adobeID 路径(非 org 声明域)若 provider=both,顺序执行 O365 → Adobe。任何一侧失败都继续但最后汇总:
✅ Office 365: zhangsan01@yourcorp.partner.onmschina.cn (密码已邮件发送)
✅ Adobe: zhangsan01@yourcorp.com (All Apps, 邀请已发)
失败项标 ❌ 并保留错误信息,让用户决定补救。
对每一侧用 inspect 验证:
python main.py office365 inspect <ldap> --json
python main.py adobe inspect <ldap>@yourcorp.com --json
给用户一份摘要:
Office 365(世纪互联)
CLIENT_ID=<Entra App Client ID>
TENANT_ID=<Entra Tenant ID>
CLIENT_SECRET=<Entra App Secret>
DEFAULT_PASSWORD=<初始密码>
DEFAULT_DOMAIN=<租户域,如 yourcorp.partner.onmschina.cn>
FORCE_CHANGE_PASSWORD=true
# 通知邮件(可选)
NOTIFICATION_ENABLED=true
NOTIFICATION_FROM_EMAIL=<发件邮箱>
NOTIFICATION_BCC_EMAILS=<抄送>
NOTIFICATION_EMAIL_DOMAIN=<用户收件邮箱域>
# SMTP(飞书邮箱示例)
SMTP_HOST=smtp.feishu.cn
SMTP_PORT=465
SMTP_USERNAME=<发件邮箱>
SMTP_PASSWORD=<SMTP 密码>
SMTP_USE_SSL=true
Adobe UMAPI
ADOBE_CLIENT_ID=<Adobe Developer Console Client ID>
ADOBE_CLIENT_SECRET=<Client Secret>
ADOBE_ORG_ID=<IMS Org ID,格式 xxx@AdobeOrg>
ADOBE_TECH_ACCOUNT_ID=<Technical Account ID,可选>
ADOBE_API_BASE_URL=https://usermanagement.adobe.io/v2/usermanagement
ADOBE_DEFAULT_DOMAIN=yourcorp.com
| 症状 | 原因 | 处理 |
|---|---|---|
O365 Insufficient privileges | App 权限未授予管理员同意 | 去 Entra → API 权限 → 授予管理员同意 |
O365 License not available | license 池用完 | 购买或回收,不要硬删其他人 |
Adobe error.group.license_quota_exceeded | 产品座位不够 | 报告给用户,不要默默降级到其他产品 |
Adobe error.domain.trust.nonexistent | 尝试用 federatedID 但域名未被本 org 声明 | 改用 adobeID 类型(默认就是) |
| Adobe 429 Retry-After >30min | get_all_users 打满配额 | 本 skill 不需要 get_all_users;若被调用了说明走错了路径 |