
Volcengine Troubleshooting
- 30 installs
- 16 repo stars
- Updated August 3, 2026
- volcengine/volcengine-skills
Helps with ai & agent building tasks.
About
volcengine-troubleshooting is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.
- volcengine-troubleshooting
- AI & Agent Building
- AI-coding skill
Volcengine Troubleshooting by the numbers
- 30 all-time installs (skills.sh)
- +1 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #9,223 of 16,556 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/volcengine/volcengine-skills --skill volcengine-troubleshootingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 30 |
|---|---|
| repo stars | ★ 16 |
| Last updated | August 3, 2026 |
| Repository | volcengine/volcengine-skills ↗ |
What it does
Helps with ai & agent building tasks.
Files
火山引擎平台账号与权限排障技能
这是面向火山引擎全平台账号、身份、IAM、角色、STS、AccessKey 和产品资源权限问题的横向 skill。它回答的是“谁在以什么身份,对哪个 Action/Resource 被拒绝”,不是替代产品 skill 解释 ECS、TOS、CDN、大模型等产品自身运行态。
上层信息
- 手册定位:处理账号状态、实名认证/风控、IAM 子用户策略、角色扮演、临时凭证、AccessKey、项目/资源级授权和产品侧
AccessDenied。 - 横向分工:产品 skill 负责保留用户场景与资源语义;本 skill 负责身份、策略、角色链和授权范围判断;计费 skill 负责欠费/商业状态;OpenAPI skill 负责签名、SDK、CLI 机制。
- 工具优先级:优先
ve查询 CLI;复杂“主体 -> 组 -> 策略 -> 项目”联动后续可用 Python SDK 脚本聚合。 - 数据来源:产品手册、
火山引擎问题排查手册/README.md、cli-meta/、产品官方文档/、cli/、python-sdk/。 - 安全边界:默认只读;创建用户、创建密钥、附加策略、修改角色、变更组织关系等都必须 Human-in-the-Loop。
先读这些
references/query-cli-catalog.md:按问题域路由查询 CLI。references/api-coverage-matrix.md:本分类cli-meta/API 覆盖审查矩阵,列出已纳入排障候选的只读/诊断 Action 与默认排除的写操作边界。references/python-sdk-script-patterns.md:什么时候从 CLI 切到脚本。references/01-overview-routing/README.md:总入口和横向分工。scripts/README.md:当前脚本状态与脚本入口规范。
同时可查:
- 产品手册:
火山引擎问题排查手册/火山引擎平台账号与权限问题排查手册/README.md - 接口元数据:
cli-meta/火山引擎平台账号与权限问题排查手册/<产品>/接口清单.md - 官方文档:
产品官方文档/火山引擎平台账号与权限问题排查手册/<产品>/...
使用边界
Use this skill when the user describes:
AccessDenied、NoPermission、IAM无权限诊断、子用户没有权限、策略不生效。AssumeRole、RoleNotExist、服务角色不存在、STS 临时凭证过期或权限不足。- 查询当前身份、AccessKey、账号下用户/角色/策略、项目授权。
- 实名认证异常、风控拦截、账号状态异常。
- 产品操作报权限错误,需要判断是 IAM、项目、角色还是产品资源权限。
Do not use this as the primary skill for:
- 纯签名错误、SDK 安装、CLI 参数错误:转 OpenAPI / SDK / CLI skill。
- 余额不足、欠费、套餐到期:转计费 skill。
- 产品自身故障、资源状态异常:产品 skill 主导,本 skill 只补权限机制。
强约束
- 默认只执行查询动作:
Get/List/Describe/Search。 - 命令统一写成
ve <service> <Action> [--Param value...]。 - 不执行
ve configure、登录、SSO、凭证写入。 - 不创建/删除用户、密钥、角色、策略,不附加/解绑策略,不修改组织关系。
- 输出最小必要身份和权限证据,不泄露完整策略文档、完整 AK 或敏感联系人信息。
ListAccessKeys、GetAccessKeyLastUsed等密钥相关查询的原始 JSON 不能整段贴给用户;AccessKeyId必须脱敏,只保留前 4 位和后 4 位或仅保留末 4 位,SecretAccessKey/SecretKey一律不得输出。
交互式确认与 Human-in-the-Loop
| 动作类型 | 示例 | 确认要求 |
|---|---|---|
| 用户/组/角色管理 | CreateUser、DeleteUser、CreateRole、UpdateRole | 说明目标主体、影响范围、回滚边界 |
| 策略授权 | AttachUserPolicy、AttachRolePolicy、AttachPolicyInProject | 说明主体、策略、资源范围、最小授权理由 |
| AccessKey 管理 | CreateAccessKey、DeleteAccessKey、UpdateAccessKey | 说明密钥归属、轮转风险和不可回显原则 |
| 组织/控制台权限 | EnableConsoleLogin、MoveAccount、SCP 变更 | 说明组织影响面,默认不在本 skill 直接执行 |
快速路由
| 用户现象 | 优先证据 | 必读 reference |
|---|---|---|
| 不确定是谁在调用、当前凭证属于谁 | Caller identity、主体类型、账号 ID | `01-overview-routing/README.md` |
| 实名认证异常、风控拦截、账号状态不同步 | 错误文本、主体账号、产品开通状态 | `02-account-verification-risk/README.md` |
| 子用户无权限、策略不生效、IAM 无权限诊断 | 用户、组、已附加策略、Action/Resource/Project | `03-iam-user-policy/README.md` |
AssumeRole、RoleNotExist、服务角色 | 角色存在性、信任关系、附加策略、临时凭证 | `04-role-sts/README.md` |
| ECS/TOS/CDN/大模型等产品操作报权限错 | 产品 Action、资源 ID、项目、产品资源模型 | `05-product-resource-access/README.md` |
| 创建/查看 AccessKey、AK 归属问题 | 当前主体、密钥列表、最近使用时间 | `06-access-key/README.md` |
| 高频错误码、标准卡片 | 原始错误文本 | `07-playbooks/README.md` |
高频固定流程
权限报错总入口
先识别调用主体,不要一上来猜策略:
ve sts GetCallerIdentity然后抽取四元组:
1. Principal:主账号、IAM 用户、Role、STS。 2. Action:失败 API Action。 3. Resource:资源 ID / TRN / Project。 4. Condition:Region、Project、IP、组织或服务角色。
IAM 子用户策略链
拿到 UserName 后,按最小链路查:
ve iam GetUser --UserName <user-name>
ve iam ListAttachedUserPolicies --UserName <user-name>
ve iam ListGroupsForUser --UserName <user-name>如果用户走组授权,再查组策略;不要只看直绑策略就下结论。
章节目录
| 上层章节 | 本 skill reference |
|---|---|
| 1. 排查总入口 | `01-overview-routing/README.md` |
| 2. 账号与实名认证状态 | `02-account-verification-risk/README.md` |
| 3. IAM 子账号与策略权限 | `03-iam-user-policy/README.md` |
| 4. 角色与 STS 授权 | `04-role-sts/README.md` |
| 5. 产品资源访问权限 | `05-product-resource-access/README.md` |
| 6. API Key / AccessKey 管理权限 | `06-access-key/README.md` |
| 7. 权限问题 Playbook | `07-playbooks/README.md` |
脚本调用协议
当前首版以 CLI 为主。只有在需要把用户、组、策略、项目授权和角色链批量聚合时,才补 Python 脚本。脚本必须:
1. 先读 scripts/README.md。 2. 只做查询。 3. 优先读取 VOLCENGINE_ACCESS_KEY、VOLCENGINE_SECRET_KEY、VOLCENGINE_SESSION_TOKEN。 4. 输出 summary、findings、raw,并避免完整策略文档原样回显。
工作流
1. 收集 RequestId、错误码、原始错误文本、Action、Service、Resource、Region、Project。 2. 用 GetCallerIdentity 确认当前凭证代表谁。 3. 判断属于账号状态、IAM 用户策略、角色/STS、产品资源权限还是 AccessKey 管理。 4. 路由到一个章节 reference,只执行当前问题需要的最小命令集合。 5. 如果是产品场景里的权限错,保留产品 skill 作为主入口,本 skill 只解释授权机制。 6. 输出时分开写:已确认事实、最可能缺口、仍缺哪些证据、最小授权建议、需要横向跳转的位置。
输出格式
现象归类调用主体已查证据结论最小授权建议横向跳转
排查总入口
用于先回答“当前是谁在调用、失败发生在哪一层”。
前置输入
- 错误码、原始错误文本、RequestId、发生时间。
- Service、Action、Resource、Region、Project。
- 用户自述身份:主账号、IAM 子用户、Role、STS、服务角色。
命令包
ve sts GetCallerIdentity
ve iam GetAccountSummary关注字段:
AccountId/IdentityType/Trn:当前凭证代表谁。- IAM 账号摘要:用户、组、角色、策略数量是否符合预期。
真实验证提示:GetCallerIdentity 的当前返回字段为 AccountId、IdentityId、IdentityType、Trn。CLI 在本地可能先输出用户目录配置文件读取告警,只要后续 JSON 正常返回,不影响环境变量凭证查询。
先判断方向
| 现象 | 下一步 |
|---|---|
| 认证/风控错误文本 | 进 02-account-verification-risk |
AccessDenied 且有明确用户 | 进 03-iam-user-policy |
AssumeRole / RoleNotExist | 进 04-role-sts |
| 产品 Action 被拒绝 | 进 05-product-resource-access |
| 创建/查看 AccessKey 失败 | 进 06-access-key |
结果解读
| 证据 | 常见结论 |
|---|---|
| 当前 caller 与用户以为的身份不同 | 先修正凭证/主体,再谈授权 |
| 没有 Action / Resource | 证据不足,先补失败 API 和资源范围 |
| 产品 Action 明确 | 保留产品 skill 入口,本 skill 只补权限链 |
账号与实名认证状态
用于处理实名认证异常、风控拦截、账号状态不同步。
前置输入
- 原始错误文本、logid、账号主体、产品名、发生时间。
- 用户是否已完成实名认证、服务是否已开通。
典型 case
Your verification status is abnormal, we can not provide you with service base on risk system decision.account status abnormal: unsynchronized判断方式
- 这类问题优先依赖错误文本、账号主体和产品开通状态。
- 当前公共 CLI / SDK 中没有足够稳定的“账号认证状态查询”能力,不要假装能自动查到风控判定。
- 如果产品已经开通但账号状态不同步,保留产品上下文并升级工单。
结果解读
| 证据 | 常见结论 |
|---|---|
| 风控明确拒绝 | 需要账号侧处理或工单,不是 IAM 策略缺失 |
| 实名已通过但产品仍报状态未同步 | 可能是状态同步链路问题,需产品 + 账号联合处理 |
变更边界
本 ref 不执行账号信息修改、认证提交或风控申诉动作。
IAM 子账号与策略权限
用于处理子用户无权限、策略不生效、IAM无权限诊断。
前置输入
UserName、失败 Action、Service、Resource、Project、Region。- 是否通过用户组授权。
命令包
1. 用户与直绑策略
ve iam GetUser --UserName <user-name>
ve iam ListAttachedUserPolicies --UserName <user-name>2. 用户组链路
ve iam ListGroupsForUser --UserName <user-name>
ve iam GetGroup --GroupName <group-name>
ve iam ListAttachedUserGroupPolicies --GroupName <group-name>3. 项目授权
ve iam20210801 ListProjects
ve iam20210801 ListProjectIdentities --ProjectName <project-name>
ve iam20210801 ListProjectResources --ProjectName <project-name>关注字段
- 是否存在用户。
- 用户
Status是否为active。 - 策略是直绑还是通过组继承。
- 策略覆盖的 Action / Resource / Project 是否与失败请求一致。
真实验证提示:当前样本主体可用以下链路成功查询:
ve iam GetUser --UserName <user-name>
ve iam ListAttachedUserPolicies --UserName <user-name>
ve iam ListGroupsForUser --UserName <user-name>ListGroupsForUser 返回空数组不代表用户没有权限,仍需查看直绑策略。
结果解读
| 证据 | 常见结论 |
|---|---|
| 用户存在但没有相关策略 | 缺少授权 |
| 用户直绑没有、组里有 | 继续核对组策略范围,不能只看直绑 |
| 有 Action 但 Resource / Project 不匹配 | 不是“没策略”,而是授权范围不够 |
典型 case
IAM无权限诊断: 用户 USER_NAME 服务 访问控制(iam) 操作 ListUsersUser is not authorized to perform: CDN:ListPagesProject on resource角色与 STS 授权
用于处理 AssumeRole、RoleNotExist、服务角色缺失、临时凭证权限不足。
前置输入
- RoleName / RoleArn。
- 调用主体、目标角色、失败 Action、临时凭证到期时间。
命令包
ve sts GetCallerIdentity
ve iam ListRoles --Limit 20
ve iam GetRole --RoleName <role-name>
ve iam ListAttachedRolePolicies --RoleName <role-name>关注字段
- 目标角色是否存在。
- 当前 caller 是否是预期主体。
- 当前账号下是否能枚举到同名/近似角色,帮助区分“确实不存在”与“角色名/账号写错”。
- 角色信任策略是否允许当前主体扮演。
- 角色附加策略是否覆盖后续目标 Action。
结果解读
| 证据 | 常见结论 |
|---|---|
ListRoles 中找不到目标角色 | 角色很可能不存在,或目标账号不是当前账号 |
GetRole 查不到 | Role 不存在或名字/账号错 |
Role 存在但 AssumeRole 被拒绝 | 查 caller 权限和信任策略 |
| AssumeRole 成功但后续产品 Action 被拒绝 | 角色自己的权限策略不足 |
典型 case
Action: AssumeRole
Service: sts
AccessDeniedRoleNotExist: Role 'trn:iam::ACCOUNT_ID:role/ServiceRoleForVolcObserve' does not exist产品资源访问权限
用于把 ECS、TOS、CDN、大模型等产品里的权限报错,翻译回 IAM / 项目 / 资源范围。
前置输入
- 产品、Action、Resource ID / TRN、Project、Region。
- 失败主体、是否跨账号、是否涉及关联资源。
命令包
ve iam20210801 ListProjects
ve iam20210801 GetProject --ProjectName <project-name>
ve iam20210801 ListProjectResources --ProjectName <project-name>产品自身资源状态和资源模型仍由对应产品 skill 查询。
结果解读
| 证据 | 常见结论 |
|---|---|
| Action 已授权但资源不在项目内 | 项目范围不匹配 |
| 主资源有权,关联资源无权 | 需要补关联资源权限 |
| 跨账号资源 | 还要检查资源策略或信任关系 |
产品回跳
| 产品 | 回跳 skill |
|---|---|
| ECS / VPC / EIP | compute-container-network |
| TOS | storage-database |
| CDN / 域名 | domain-cdn-ingress |
| 大模型 | llm-ecosystem |
API Key / AccessKey 管理权限
用于处理创建密钥、查看密钥列表、密钥归属、密钥最近使用。
前置输入
- 当前主体、目标 UserName、AccessKeyId(可脱敏)。
- 用户说的是 Ark API Key、AccessKey,还是 STS Token。
命令包
ve iam ListAccessKeys --UserName <user-name>
ve iam GetAccessKeyLastUsed --AccessKeyId <access-key-id>安全输出要求:
- 不要把
ListAccessKeys的原始 JSON 整段贴给用户。 AccessKeyId必须脱敏展示,例如AKLT...9DGM或****9DGM;如需定位多把密钥,只展示状态、UserName、创建时间、最近使用时间和脱敏后的短标识。- 任何
SecretAccessKey、SecretKey、会话 Token 或用户提供的测试密钥都不得出现在回答、日志摘录、benchmark 报告或本地文档中。
结果解读
| 证据 | 常见结论 |
|---|---|
| 用户把 Ark API Key 和 AccessKey 混用 | 先纠正密钥类型 |
| 当前主体无权管理他人 AccessKey | IAM 管理权限不足 |
| AccessKey 不属于当前账号 | 凭证归属不一致 |
真实验证提示:
ListAccessKeys可返回AccessKeyId、Status、UserName等字段。- 输出给用户时必须对
AccessKeyId脱敏,只保留前 4 位和后 4 位或仅保留末 4 位;不要粘贴完整AccessKeyMetadata。 GetAccessKeyLastUsed返回最近使用的Service、Region、RequestTime,可帮助判断密钥是否仍在使用。
变更边界
不执行 CreateAccessKey、DeleteAccessKey、UpdateAccessKey。密钥轮转属于高敏操作,必须确认。
权限问题 Playbook
AccessDenied 通用卡片
1. ve sts GetCallerIdentity 2. 抽取 Action / Resource / Project。 3. IAM 用户场景查用户策略和组策略。 4. Role 场景查角色存在性、信任关系、角色策略。 5. 产品 Action 场景回到对应产品 skill 判断资源模型。
IAM 无权限诊断卡片
1. 识别用户、服务、Action。 2. 判断是 IAM 自身管理权限,还是某产品 Action。 3. 用最小授权原则补 Action + Resource + Project,不要给整产品全权限。
RoleNotExist 卡片
1. ve iam GetRole --RoleName <role-name> 2. 若确实不存在,区分自定义角色与服务角色。 3. 服务角色通常回产品控制台重新授权,不要手工猜角色策略。
账号风控卡片
1. 保留完整错误文本和 logid。 2. 不把风控错误误判成 IAM 策略缺失。 3. 升级账号侧工单。
API 覆盖审查矩阵
本文件由 2026-05-22 审查生成,用于证明本 skill 已对 cli-meta/ 中对应分类的 OpenAPI / CLI / Python SDK 能力做过覆盖盘点。它不是执行顺序清单;Agent 仍应先按主 SKILL.md 和章节 reference 选择最小必要证据。
审查口径
- 纳入排障优先级:
Describe/List/Get/Query/Check/Search/BatchGet/Verify/Validate/Test/Diagnose/Preview/Estimate等只读或诊断型 Action。 - 默认排除自动执行:
Create/Modify/Delete/Update/Attach/Detach/Start/Stop/Run/Invoke/Pay/Renew/Set等会改变资源、资金、权限或任务状态的 Action;只能作为解释错误码或 Human-in-the-Loop 建议背景。 - 命令形态:执行时统一写作
ve <service> <Action> [--Param value...];参数不确定时先查ve <service> <Action> --help或对应cli-meta。 - 凭证边界:只从临时环境读取
VOLCENGINE_ACCESS_KEY、VOLCENGINE_SECRET_KEY、VOLCENGINE_REGION,不得写入配置、文档或日志。
总览
- 覆盖产品数:10
- 官方文档识别 OpenAPI Action 数合计:388
- 纳入排障候选的只读/诊断 Action 数:356
- 默认不自动执行的写/变更 Action 数:457
- 需人工判断语义的其它 Action 数:47
产品级覆盖
API访问密钥(Access Key)
- 官方文档识别 Action 数:0
- 纳入只读/诊断 Action:36
- 排除自动执行的写/变更 Action:60
- 其它需按场景人工判断 Action:AssumeRole
| Action | CLI 服务 | 排障用途 |
|---|---|---|
GetAccessKeyLastUsed | iam | 身份、权限、密钥或授权证据 |
GetAccountSummary | iam | 资源存在性、状态、配置或诊断证据 |
GetAllowedIPAddresses | iam | 资源存在性、状态、配置或诊断证据 |
GetAllowedIpAddresses | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetCallerIdentity | sts | 身份、权限、密钥或授权证据 |
GetGroup | iam | 资源存在性、状态、配置或诊断证据 |
GetLoginProfile | iam | 资源存在性、状态、配置或诊断证据 |
GetOAuthProvider | iam | 身份、权限、密钥或授权证据 |
GetOIDCProvider | iam | 资源存在性、状态、配置或诊断证据 |
GetOidcProvider | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetPolicy | iam | 身份、权限、密钥或授权证据 |
GetRole | iam | 身份、权限、密钥或授权证据 |
GetSAMLProvider | iam | 资源存在性、状态、配置或诊断证据 |
GetSamlProvider | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetSecurityConfig | iam | 网络路径、入口、路由或安全策略证据 |
GetServiceInfo | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetUser | iam | 身份、权限、密钥或授权证据 |
ListAccessKeys | iam | 身份、权限、密钥或授权证据 |
ListAttachedRolePolicies | iam | 身份、权限、密钥或授权证据 |
ListAttachedUserGroupPolicies | iam | 身份、权限、密钥或授权证据 |
ListAttachedUserPolicies | iam | 身份、权限、密钥或授权证据 |
ListEntitiesForPolicy | iam | 身份、权限、密钥或授权证据 |
ListGroups | iam | 资源存在性、状态、配置或诊断证据 |
ListGroupsForUser | iam | 身份、权限、密钥或授权证据 |
ListIdentityProviders | iam | 身份、权限、密钥或授权证据 |
ListOIDCProviders | iam | 资源存在性、状态、配置或诊断证据 |
ListOidcProviders | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
ListPolicies | iam | 资源存在性、状态、配置或诊断证据 |
ListRoles | iam | 身份、权限、密钥或授权证据 |
ListSAMLProviderCertificates | iam | 域名、证书、CDN、直播或入口链路证据 |
ListSAMLProviders | iam | 资源存在性、状态、配置或诊断证据 |
ListSamlProviderCertificates | Python SDK-only/未匹配 CLI | 域名、证书、CDN、直播或入口链路证据 |
ListSamlProviders | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
ListTagsForResources | iam | 资源存在性、状态、配置或诊断证据 |
ListUsers | iam | 身份、权限、密钥或授权证据 |
ListUsersForGroup | iam | 身份、权限、密钥或授权证据 |
云身份中心
- 官方文档识别 Action 数:56
- 纳入只读/诊断 Action:24
- 排除自动执行的写/变更 Action:34
- 其它需按场景人工判断 Action:DeprovisionPermissionSet, ProvisionPermissionSet, RetryUserProvisioningEvent
| Action | CLI 服务 | 排障用途 |
|---|---|---|
GetExternalSAMLIdentityProvider | cloudidentity | 身份、权限、密钥或授权证据 |
GetExternalSamlIdentityProvider | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
GetGroup | cloudidentity | 资源存在性、状态、配置或诊断证据 |
GetPermissionSet | cloudidentity | 身份、权限、密钥或授权证据 |
GetPortalLoginConfig | cloudidentity | 资源存在性、状态、配置或诊断证据 |
GetSAMLServiceProvider | cloudidentity | 资源存在性、状态、配置或诊断证据 |
GetSamlServiceProvider | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetServiceStatus | cloudidentity | 资源存在性、状态、配置或诊断证据 |
GetTaskStatus | cloudidentity | 资源存在性、状态、配置或诊断证据 |
GetUser | cloudidentity | 身份、权限、密钥或授权证据 |
GetUserProvisioning | cloudidentity | 身份、权限、密钥或授权证据 |
ListAccountAssignments | cloudidentity | 资源存在性、状态、配置或诊断证据 |
ListGroupMembers | cloudidentity | 资源存在性、状态、配置或诊断证据 |
ListGroups | cloudidentity | 资源存在性、状态、配置或诊断证据 |
ListPermissionPoliciesInPermissionSet | cloudidentity | 身份、权限、密钥或授权证据 |
ListPermissionSetProvisionings | cloudidentity | 身份、权限、密钥或授权证据 |
ListPermissionSets | cloudidentity | 身份、权限、密钥或授权证据 |
ListPortalLoginSettings | cloudidentity | 资源存在性、状态、配置或诊断证据 |
ListSCIMServerCredentials | cloudidentity | 资源状态、实例/节点/集群运行态证据 |
ListScimServerCredentials | Python SDK-only/未匹配 CLI | 资源状态、实例/节点/集群运行态证据 |
ListTasks | cloudidentity | 资源存在性、状态、配置或诊断证据 |
ListUserProvisioningEvents | cloudidentity | 身份、权限、密钥或授权证据 |
ListUserProvisionings | cloudidentity | 身份、权限、密钥或授权证据 |
ListUsers | cloudidentity | 身份、权限、密钥或授权证据 |
企业组织
- 官方文档识别 Action 数:51
- 纳入只读/诊断 Action:18
- 排除自动执行的写/变更 Action:22
- 其它需按场景人工判断 Action:AcceptInvitation, AcceptQuitApplication, InviteAccount, MoveAccount, QuitOrganization, ReInviteAccount, RejectInvitation, RejectQuitApplication, RetryChangeAccountSecureContactInfo
| Action | CLI 服务 | 排障用途 |
|---|---|---|
DescribeAccount | organization | 资源存在性、状态、配置或诊断证据 |
DescribeAccountInvitation | organization | 资源存在性、状态、配置或诊断证据 |
DescribeOrganization | organization | 资源存在性、状态、配置或诊断证据 |
DescribeOrganizationalUnit | organization | 资源存在性、状态、配置或诊断证据 |
DescribeQuitApplication | organization | 资源存在性、状态、配置或诊断证据 |
GetAccountSecureContactInfo | organization | 资源存在性、状态、配置或诊断证据 |
GetServiceControlPolicy | organization | 身份、权限、密钥或授权证据 |
GetServiceControlPolicyEnablement | organization | 身份、权限、密钥或授权证据 |
ListAccounts | organization | 资源存在性、状态、配置或诊断证据 |
ListInvitations | organization | 资源存在性、状态、配置或诊断证据 |
ListOrganizationalUnits | organization | 资源存在性、状态、配置或诊断证据 |
ListOrganizationalUnitsForParent | organization | 资源存在性、状态、配置或诊断证据 |
ListPoliciesForTarget | organization | 资源存在性、状态、配置或诊断证据 |
ListServiceControlPolicies | organization | 资源存在性、状态、配置或诊断证据 |
ListTagResources | organization | 资源存在性、状态、配置或诊断证据 |
ListTagsKeys | organization | 密钥、安全策略、风险或告警证据 |
ListTagsValues | organization | 资源存在性、状态、配置或诊断证据 |
ListTargetsForPolicy | organization | 身份、权限、密钥或授权证据 |
操作审计
- 官方文档识别 Action 数:7
- 纳入只读/诊断 Action:2
- 排除自动执行的写/变更 Action:5
| Action | CLI 服务 | 排障用途 |
|---|---|---|
DescribeTrails | cloudtrail20180101 | 资源存在性、状态、配置或诊断证据 |
LookupEvents | cloudtrail | 资源存在性、状态、配置或诊断证据 |
智能体身份和权限管理平台
- 官方文档识别 Action 数:133
- 纳入只读/诊断 Action:102
- 排除自动执行的写/变更 Action:120
- 其它需按场景人工判断 Action:BatchCreateRoutes, BatchListDepartmentsForUsers, BatchSyncDepartmentMembers, BatchUpsertDepartments, CommitDepartmentSyncSession, CompleteResourceTokenAuth, LinkIdentityProviderToUser, Oauth2Callback, PublishRoute, PublishService, RegisterService
| Action | CLI 服务 | 排障用途 |
|---|---|---|
BatchGetApiKeyCredentialProviders | id | 身份、权限、密钥或授权证据 |
BatchGetDepartments | id | 资源存在性、状态、配置或诊断证据 |
BatchGetInboundAuthConfig | id | 身份、权限、密钥或授权证据 |
BatchGetOauth2CredentialProviders | id | 身份、权限、密钥或授权证据 |
CheckApiKey | id | 身份、权限、密钥或授权证据 |
CheckPermission | id | 身份、权限、密钥或授权证据 |
CheckServiceName | id | 资源存在性、状态、配置或诊断证据 |
DescribeRouteTemplateOptions | id | 网络路径、入口、路由或安全策略证据 |
DescribeTagOptions | id | 资源存在性、状态、配置或诊断证据 |
DescribeTemplateOptions | id | 资源存在性、状态、配置或诊断证据 |
GetApiKeyCredentialProvider | id | 身份、权限、密钥或授权证据 |
GetDepartment | id | 资源存在性、状态、配置或诊断证据 |
GetDepartmentPath | id | 资源存在性、状态、配置或诊断证据 |
GetDepartmentSyncJob | id | 资源存在性、状态、配置或诊断证据 |
GetDepartmentSyncSession | id | 资源存在性、状态、配置或诊断证据 |
GetDepartmentTree | id | 资源存在性、状态、配置或诊断证据 |
GetDocumentStatus | id | 资源存在性、状态、配置或诊断证据 |
GetFaasService | id | 资源存在性、状态、配置或诊断证据 |
GetGroup | id | 资源存在性、状态、配置或诊断证据 |
GetIamRoleAttachment | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderFeishuScopes | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderLDAPADAgent | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderLdapadAgent | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
GetIdentityProviderOAuth | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderOIDC | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderOidc | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
GetIdentityProviderSAML | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderSaml | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
GetIdentityProviderWeCom | id | 身份、权限、密钥或授权证据 |
GetInboundAuthConfig | id | 身份、权限、密钥或授权证据 |
GetNamespace | id | 资源存在性、状态、配置或诊断证据 |
GetOauth2CredentialProvider | id | 身份、权限、密钥或授权证据 |
GetPermissionPoint | id | 身份、权限、密钥或授权证据 |
GetPolicy | id | 身份、权限、密钥或授权证据 |
GetResourceApiKey | id | 身份、权限、密钥或授权证据 |
GetResourceOauth2Token | id | 身份、权限、密钥或授权证据 |
GetRoleCredentialProvider | id | 身份、权限、密钥或授权证据 |
GetRoleCredentials | id | 身份、权限、密钥或授权证据 |
GetRoute | id | 网络路径、入口、路由或安全策略证据 |
GetSCIMProvisioningDefaults | id | 资源存在性、状态、配置或诊断证据 |
GetScimProvisioningDefaults | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetService | id | 资源存在性、状态、配置或诊断证据 |
GetSmsService | id | 资源存在性、状态、配置或诊断证据 |
GetTask | id | 资源存在性、状态、配置或诊断证据 |
GetTaskStateUserSync | id | 身份、权限、密钥或授权证据 |
GetTenantServiceStatus | id | 资源存在性、状态、配置或诊断证据 |
GetTrustAnchor | id | 资源存在性、状态、配置或诊断证据 |
GetUser | id | 身份、权限、密钥或授权证据 |
GetUserCSVTemplate | id | 身份、权限、密钥或授权证据 |
GetUserCredential | id | 身份、权限、密钥或授权证据 |
GetUserCsvTemplate | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
GetUserPool | id | 身份、权限、密钥或授权证据 |
GetUserPoolClient | id | 身份、权限、密钥或授权证据 |
GetUserPoolIamCredentialsServiceConfig | id | 身份、权限、密钥或授权证据 |
GetUserPoolMaus | id | 身份、权限、密钥或授权证据 |
GetWorkloadAccessToken | id | 资源存在性、状态、配置或诊断证据 |
GetWorkloadAccessTokenForJWT | id | 资源存在性、状态、配置或诊断证据 |
GetWorkloadAccessTokenForJwt | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetWorkloadAccessTokenForUserId | id | 身份、权限、密钥或授权证据 |
GetWorkloadIdentity | id | 身份、权限、密钥或授权证据 |
GetWorkloadPool | id | 资源存在性、状态、配置或诊断证据 |
ListApiKeyCredentialProviders | id | 身份、权限、密钥或授权证据 |
ListCredentialProviders | id | 资源存在性、状态、配置或诊断证据 |
ListDepartmentMembers | id | 资源存在性、状态、配置或诊断证据 |
ListDepartmentSyncJobs | id | 资源存在性、状态、配置或诊断证据 |
ListDepartments | id | 资源存在性、状态、配置或诊断证据 |
ListDepartmentsForUser | id | 身份、权限、密钥或授权证据 |
ListFaasServices | id | 资源存在性、状态、配置或诊断证据 |
ListGroups | id | 资源存在性、状态、配置或诊断证据 |
ListGroupsForUser | id | 身份、权限、密钥或授权证据 |
ListGroupsForUsers | id | 身份、权限、密钥或授权证据 |
ListIdentityProviderLDAPADAgent | id | 身份、权限、密钥或授权证据 |
ListIdentityProviderLdapadAgent | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
ListIdentityProviders | id | 身份、权限、密钥或授权证据 |
ListIdentityProvidersOAuth | id | 身份、权限、密钥或授权证据 |
ListIdentityProvidersOIDC | id | 身份、权限、密钥或授权证据 |
ListIdentityProvidersOidc | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
ListIdentityProvidersSAML | id | 身份、权限、密钥或授权证据 |
ListIdentityProvidersSaml | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
ListIdentityProvidersWeCom | id | 身份、权限、密钥或授权证据 |
ListInboundAuthConfigs | id | 身份、权限、密钥或授权证据 |
ListMergeUserSyncResultUsers | id | 身份、权限、密钥或授权证据 |
ListNamespaces | id | 资源存在性、状态、配置或诊断证据 |
ListOauth2CredentialProviders | id | 身份、权限、密钥或授权证据 |
ListPermissionPoints | id | 身份、权限、密钥或授权证据 |
ListPolicies | id | 资源存在性、状态、配置或诊断证据 |
ListRoleCredentialProviders | id | 身份、权限、密钥或授权证据 |
ListRoutes | id | 网络路径、入口、路由或安全策略证据 |
ListSCIMTokens | id | 资源存在性、状态、配置或诊断证据 |
ListScimTokens | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
ListServices | id | 资源存在性、状态、配置或诊断证据 |
ListTagsForResources | id | 资源存在性、状态、配置或诊断证据 |
ListTasks | id | 资源存在性、状态、配置或诊断证据 |
ListTrustAnchors | id | 资源存在性、状态、配置或诊断证据 |
ListUserPoolClients | id | 身份、权限、密钥或授权证据 |
ListUserPools | id | 身份、权限、密钥或授权证据 |
ListUsers | id | 身份、权限、密钥或授权证据 |
ListUsersInDepartment | id | 身份、权限、密钥或授权证据 |
ListUsersInGroup | id | 身份、权限、密钥或授权证据 |
ListWorkloadIdentities | id | 资源存在性、状态、配置或诊断证据 |
ListWorkloadPools | id | 资源存在性、状态、配置或诊断证据 |
ValidateDepartmentSyncSession | id | 资源存在性、状态、配置或诊断证据 |
智能体身份网关
- 官方文档识别 Action 数:0
- 纳入只读/诊断 Action:102
- 排除自动执行的写/变更 Action:120
- 其它需按场景人工判断 Action:BatchCreateRoutes, BatchListDepartmentsForUsers, BatchSyncDepartmentMembers, BatchUpsertDepartments, CommitDepartmentSyncSession, CompleteResourceTokenAuth, LinkIdentityProviderToUser, Oauth2Callback, PublishRoute, PublishService, RegisterService
| Action | CLI 服务 | 排障用途 |
|---|---|---|
BatchGetApiKeyCredentialProviders | id | 身份、权限、密钥或授权证据 |
BatchGetDepartments | id | 资源存在性、状态、配置或诊断证据 |
BatchGetInboundAuthConfig | id | 身份、权限、密钥或授权证据 |
BatchGetOauth2CredentialProviders | id | 身份、权限、密钥或授权证据 |
CheckApiKey | id | 身份、权限、密钥或授权证据 |
CheckPermission | id | 身份、权限、密钥或授权证据 |
CheckServiceName | id | 资源存在性、状态、配置或诊断证据 |
DescribeRouteTemplateOptions | id | 网络路径、入口、路由或安全策略证据 |
DescribeTagOptions | id | 资源存在性、状态、配置或诊断证据 |
DescribeTemplateOptions | id | 资源存在性、状态、配置或诊断证据 |
GetApiKeyCredentialProvider | id | 身份、权限、密钥或授权证据 |
GetDepartment | id | 资源存在性、状态、配置或诊断证据 |
GetDepartmentPath | id | 资源存在性、状态、配置或诊断证据 |
GetDepartmentSyncJob | id | 资源存在性、状态、配置或诊断证据 |
GetDepartmentSyncSession | id | 资源存在性、状态、配置或诊断证据 |
GetDepartmentTree | id | 资源存在性、状态、配置或诊断证据 |
GetDocumentStatus | id | 资源存在性、状态、配置或诊断证据 |
GetFaasService | id | 资源存在性、状态、配置或诊断证据 |
GetGroup | id | 资源存在性、状态、配置或诊断证据 |
GetIamRoleAttachment | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderFeishuScopes | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderLDAPADAgent | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderLdapadAgent | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
GetIdentityProviderOAuth | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderOIDC | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderOidc | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
GetIdentityProviderSAML | id | 身份、权限、密钥或授权证据 |
GetIdentityProviderSaml | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
GetIdentityProviderWeCom | id | 身份、权限、密钥或授权证据 |
GetInboundAuthConfig | id | 身份、权限、密钥或授权证据 |
GetNamespace | id | 资源存在性、状态、配置或诊断证据 |
GetOauth2CredentialProvider | id | 身份、权限、密钥或授权证据 |
GetPermissionPoint | id | 身份、权限、密钥或授权证据 |
GetPolicy | id | 身份、权限、密钥或授权证据 |
GetResourceApiKey | id | 身份、权限、密钥或授权证据 |
GetResourceOauth2Token | id | 身份、权限、密钥或授权证据 |
GetRoleCredentialProvider | id | 身份、权限、密钥或授权证据 |
GetRoleCredentials | id | 身份、权限、密钥或授权证据 |
GetRoute | id | 网络路径、入口、路由或安全策略证据 |
GetSCIMProvisioningDefaults | id | 资源存在性、状态、配置或诊断证据 |
GetScimProvisioningDefaults | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetService | id | 资源存在性、状态、配置或诊断证据 |
GetSmsService | id | 资源存在性、状态、配置或诊断证据 |
GetTask | id | 资源存在性、状态、配置或诊断证据 |
GetTaskStateUserSync | id | 身份、权限、密钥或授权证据 |
GetTenantServiceStatus | id | 资源存在性、状态、配置或诊断证据 |
GetTrustAnchor | id | 资源存在性、状态、配置或诊断证据 |
GetUser | id | 身份、权限、密钥或授权证据 |
GetUserCSVTemplate | id | 身份、权限、密钥或授权证据 |
GetUserCredential | id | 身份、权限、密钥或授权证据 |
GetUserCsvTemplate | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
GetUserPool | id | 身份、权限、密钥或授权证据 |
GetUserPoolClient | id | 身份、权限、密钥或授权证据 |
GetUserPoolIamCredentialsServiceConfig | id | 身份、权限、密钥或授权证据 |
GetUserPoolMaus | id | 身份、权限、密钥或授权证据 |
GetWorkloadAccessToken | id | 资源存在性、状态、配置或诊断证据 |
GetWorkloadAccessTokenForJWT | id | 资源存在性、状态、配置或诊断证据 |
GetWorkloadAccessTokenForJwt | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetWorkloadAccessTokenForUserId | id | 身份、权限、密钥或授权证据 |
GetWorkloadIdentity | id | 身份、权限、密钥或授权证据 |
GetWorkloadPool | id | 资源存在性、状态、配置或诊断证据 |
ListApiKeyCredentialProviders | id | 身份、权限、密钥或授权证据 |
ListCredentialProviders | id | 资源存在性、状态、配置或诊断证据 |
ListDepartmentMembers | id | 资源存在性、状态、配置或诊断证据 |
ListDepartmentSyncJobs | id | 资源存在性、状态、配置或诊断证据 |
ListDepartments | id | 资源存在性、状态、配置或诊断证据 |
ListDepartmentsForUser | id | 身份、权限、密钥或授权证据 |
ListFaasServices | id | 资源存在性、状态、配置或诊断证据 |
ListGroups | id | 资源存在性、状态、配置或诊断证据 |
ListGroupsForUser | id | 身份、权限、密钥或授权证据 |
ListGroupsForUsers | id | 身份、权限、密钥或授权证据 |
ListIdentityProviderLDAPADAgent | id | 身份、权限、密钥或授权证据 |
ListIdentityProviderLdapadAgent | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
ListIdentityProviders | id | 身份、权限、密钥或授权证据 |
ListIdentityProvidersOAuth | id | 身份、权限、密钥或授权证据 |
ListIdentityProvidersOIDC | id | 身份、权限、密钥或授权证据 |
ListIdentityProvidersOidc | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
ListIdentityProvidersSAML | id | 身份、权限、密钥或授权证据 |
ListIdentityProvidersSaml | Python SDK-only/未匹配 CLI | 身份、权限、密钥或授权证据 |
ListIdentityProvidersWeCom | id | 身份、权限、密钥或授权证据 |
ListInboundAuthConfigs | id | 身份、权限、密钥或授权证据 |
ListMergeUserSyncResultUsers | id | 身份、权限、密钥或授权证据 |
ListNamespaces | id | 资源存在性、状态、配置或诊断证据 |
ListOauth2CredentialProviders | id | 身份、权限、密钥或授权证据 |
ListPermissionPoints | id | 身份、权限、密钥或授权证据 |
ListPolicies | id | 资源存在性、状态、配置或诊断证据 |
ListRoleCredentialProviders | id | 身份、权限、密钥或授权证据 |
ListRoutes | id | 网络路径、入口、路由或安全策略证据 |
ListSCIMTokens | id | 资源存在性、状态、配置或诊断证据 |
ListScimTokens | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
ListServices | id | 资源存在性、状态、配置或诊断证据 |
ListTagsForResources | id | 资源存在性、状态、配置或诊断证据 |
ListTasks | id | 资源存在性、状态、配置或诊断证据 |
ListTrustAnchors | id | 资源存在性、状态、配置或诊断证据 |
ListUserPoolClients | id | 身份、权限、密钥或授权证据 |
ListUserPools | id | 身份、权限、密钥或授权证据 |
ListUsers | id | 身份、权限、密钥或授权证据 |
ListUsersInDepartment | id | 身份、权限、密钥或授权证据 |
ListUsersInGroup | id | 身份、权限、密钥或授权证据 |
ListWorkloadIdentities | id | 资源存在性、状态、配置或诊断证据 |
ListWorkloadPools | id | 资源存在性、状态、配置或诊断证据 |
ValidateDepartmentSyncSession | id | 资源存在性、状态、配置或诊断证据 |
管理控制台
- 官方文档识别 Action 数:0
- 纳入只读/诊断 Action:0
- 排除自动执行的写/变更 Action:0
当前未在 CLI/SDK 元数据中识别到只读/诊断 Action;排障时依赖产品文档、专用工具或横向 skill。
访问控制
- 官方文档识别 Action 数:83
- 纳入只读/诊断 Action:39
- 排除自动执行的写/变更 Action:65
- 其它需按场景人工判断 Action:MoveProjectResource
| Action | CLI 服务 | 排障用途 |
|---|---|---|
GetAccessKeyLastUsed | iam | 身份、权限、密钥或授权证据 |
GetAccountSummary | iam | 资源存在性、状态、配置或诊断证据 |
GetAllowedIPAddresses | iam | 资源存在性、状态、配置或诊断证据 |
GetAllowedIpAddresses | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetGroup | iam | 资源存在性、状态、配置或诊断证据 |
GetLoginProfile | iam | 资源存在性、状态、配置或诊断证据 |
GetOAuthProvider | iam | 身份、权限、密钥或授权证据 |
GetOIDCProvider | iam | 资源存在性、状态、配置或诊断证据 |
GetOidcProvider | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetPolicy | iam | 身份、权限、密钥或授权证据 |
GetProject | iam20210801 | 资源存在性、状态、配置或诊断证据 |
GetRole | iam | 身份、权限、密钥或授权证据 |
GetSAMLProvider | iam | 资源存在性、状态、配置或诊断证据 |
GetSamlProvider | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetSecurityConfig | iam | 网络路径、入口、路由或安全策略证据 |
GetServiceInfo | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
GetUser | iam | 身份、权限、密钥或授权证据 |
ListAccessKeys | iam | 身份、权限、密钥或授权证据 |
ListAttachedRolePolicies | iam | 身份、权限、密钥或授权证据 |
ListAttachedUserGroupPolicies | iam | 身份、权限、密钥或授权证据 |
ListAttachedUserPolicies | iam | 身份、权限、密钥或授权证据 |
ListEntitiesForPolicy | iam | 身份、权限、密钥或授权证据 |
ListGroups | iam | 资源存在性、状态、配置或诊断证据 |
ListGroupsForUser | iam | 身份、权限、密钥或授权证据 |
ListIdentityProviders | iam | 身份、权限、密钥或授权证据 |
ListOIDCProviders | iam | 资源存在性、状态、配置或诊断证据 |
ListOidcProviders | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
ListPolicies | iam | 资源存在性、状态、配置或诊断证据 |
ListProjectIdentities | iam20210801 | 资源存在性、状态、配置或诊断证据 |
ListProjectResources | iam20210801 | 资源存在性、状态、配置或诊断证据 |
ListProjects | iam20210801 | 资源存在性、状态、配置或诊断证据 |
ListRoles | iam | 身份、权限、密钥或授权证据 |
ListSAMLProviderCertificates | iam | 域名、证书、CDN、直播或入口链路证据 |
ListSAMLProviders | iam | 资源存在性、状态、配置或诊断证据 |
ListSamlProviderCertificates | Python SDK-only/未匹配 CLI | 域名、证书、CDN、直播或入口链路证据 |
ListSamlProviders | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
ListTagsForResources | iam | 资源存在性、状态、配置或诊断证据 |
ListUsers | iam | 身份、权限、密钥或授权证据 |
ListUsersForGroup | iam | 身份、权限、密钥或授权证据 |
账号相关
- 官方文档识别 Action 数:0
- 纳入只读/诊断 Action:0
- 排除自动执行的写/变更 Action:0
当前未在 CLI/SDK 元数据中识别到只读/诊断 Action;排障时依赖产品文档、专用工具或横向 skill。
资源管理
- 官方文档识别 Action 数:58
- 纳入只读/诊断 Action:33
- 排除自动执行的写/变更 Action:31
- 其它需按场景人工判断 Action:AcceptInvitation, AcceptQuitApplication, ExecuteSQLQuery, ExecuteSqlQuery, InviteAccount, MoveAccount, QuitOrganization, ReInviteAccount, RejectInvitation, RejectQuitApplication, RetryChangeAccountSecureContactInfo
| Action | CLI 服务 | 排障用途 |
|---|---|---|
DescribeAccount | organization | 资源存在性、状态、配置或诊断证据 |
DescribeAccountInvitation | organization | 资源存在性、状态、配置或诊断证据 |
DescribeOrganization | organization | 资源存在性、状态、配置或诊断证据 |
DescribeOrganizationalUnit | organization | 资源存在性、状态、配置或诊断证据 |
DescribeQuitApplication | organization | 资源存在性、状态、配置或诊断证据 |
GetAccountSecureContactInfo | organization | 资源存在性、状态、配置或诊断证据 |
GetExampleQuery | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetMultiAccountResourceCenterStatus | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetMultiAccountResourceCounts | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetQuery | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetResourceCenterStatus | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetResourceCounts | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetResources | tag | 资源存在性、状态、配置或诊断证据 |
GetServiceControlPolicy | organization | 身份、权限、密钥或授权证据 |
GetServiceControlPolicyEnablement | organization | 身份、权限、密钥或授权证据 |
GetTagKeys | tag | 密钥、安全策略、风险或告警证据 |
GetTagValues | tag | 资源存在性、状态、配置或诊断证据 |
GetTags | tag | 资源存在性、状态、配置或诊断证据 |
ListAccounts | organization | 资源存在性、状态、配置或诊断证据 |
ListExampleQueries | resourcecenter | 资源存在性、状态、配置或诊断证据 |
ListInvitations | organization | 资源存在性、状态、配置或诊断证据 |
ListOrganizationalUnits | organization | 资源存在性、状态、配置或诊断证据 |
ListOrganizationalUnitsForParent | organization | 资源存在性、状态、配置或诊断证据 |
ListPoliciesForTarget | organization | 资源存在性、状态、配置或诊断证据 |
ListQueries | resourcecenter | 资源存在性、状态、配置或诊断证据 |
ListResourceTypes | resourcecenter, tag | 资源存在性、状态、配置或诊断证据 |
ListServiceControlPolicies | organization | 资源存在性、状态、配置或诊断证据 |
ListTagResources | organization | 资源存在性、状态、配置或诊断证据 |
ListTagsKeys | organization | 密钥、安全策略、风险或告警证据 |
ListTagsValues | organization | 资源存在性、状态、配置或诊断证据 |
ListTargetsForPolicy | organization | 身份、权限、密钥或授权证据 |
SearchMultiAccountResources | resourcecenter | 资源存在性、状态、配置或诊断证据 |
SearchResources | resourcecenter | 资源存在性、状态、配置或诊断证据 |
使用建议
- 优先使用章节 reference 中已经编排好的命令包;当用户问题落在未细化章节时,再从本矩阵选择最小只读 Action 补充证据。
- 如果某个只读 Action 需要分页、跨产品联动或深层字段归一,再考虑新增
scripts/只读脚本,并同步更新脚本说明。 - 如果只读证据指向写操作修复,必须先输出影响面、资源 ID、回滚/恢复建议,并等待用户确认。
Python SDK 脚本模式
CLI 优先。只有这些场景再考虑脚本:
- 一个用户需要同时展开直绑策略、组、组策略、项目授权。
- 一个 Role 需要同时展开角色详情、附加策略、信任关系和临时凭证上下文。
- 需要分页聚合大量用户、角色或项目授权。
- 长策略 JSON 需要抽取 Action / Resource / Condition 摘要,避免 Agent 直接读整段。
当前首版尚未提供脚本;先以 CLI 完成基础证据采集。
账号与权限查询 CLI 入口索引
| 问题域 | 必读 reference | 主要服务 | 典型查询 Action |
|---|---|---|---|
| 总入口 | 01-overview-routing/README.md | sts、iam | GetCallerIdentity、GetAccountSummary |
| 账号状态 / 风控 | 02-account-verification-risk/README.md | 官方文档为主 | 账号相关无明确公共 CLI |
| IAM 用户与策略 | 03-iam-user-policy/README.md | iam、iam20210801 | GetUser、ListAttachedUserPolicies、ListGroupsForUser、ListProjectIdentities |
| Role / STS | 04-role-sts/README.md | iam、sts | ListRoles、GetRole、ListAttachedRolePolicies、GetCallerIdentity |
| 产品资源权限 | 05-product-resource-access/README.md | iam20210801 + 产品服务 | GetProject、ListProjectResources |
| AccessKey | 06-access-key/README.md | iam | ListAccessKeys、GetAccessKeyLastUsed |
| Playbook | 07-playbooks/README.md | 视 case 而定 | 按错误码映射 |
公共约定:
- 只默认使用查询 Action。
- 产品问题先保留产品上下文,再回到本 skill 判定权限机制。
- 账号风控/实名认证类问题往往没有足够公共 CLI,先按错误文本和官方流程分流,不要伪造查询能力。
账号与权限排障脚本
当前首版先以 CLI 为主,暂不提供可执行脚本。
后续优先补:
| 脚本 | 目的 |
|---|---|
collect_iam_user_context.py | 聚合用户、组、直绑策略、组策略、项目授权 |
collect_role_context.py | 聚合角色、信任策略、角色策略和 caller identity |
脚本必须只读,并优先读取:
VOLCENGINE_ACCESS_KEYVOLCENGINE_SECRET_KEYVOLCENGINE_SESSION_TOKEN
火山引擎计费排障技能
这是面向火山引擎全平台计费、余额、欠费、订阅、资源包、订单、用量、配额和账单问题的 Agent skill。它对应上层手册 火山引擎计费问题排查手册,职责是判断“商业状态为什么导致服务不可用或用户无法继续使用”,而不是解释单个产品的运行时故障。
上层信息
本技能继承的上层设计信息如下:
- 手册定位:处理余额不足、欠费、预扣费失败、套餐/订阅过期、资源包不抵扣、quota/调用次数耗尽、购买/开通失败、账单/成本明细查询等问题。
- 横向分工:账号/IAM 负责“有没有权限查账单或购买”;OpenAPI/Python SDK/CLI 负责“签名、参数、客户端调用机制”;产品 skill 负责“具体云服务运行态”。本 skill 保留产品上下文并判断计费机制。
- 工具优先级:优先使用
ve查询 CLI;复杂账单分页、成本聚合、资源包抵扣分析可后续补 Python SDK 只读脚本。 - 数据来源:产品手册、
火山引擎问题排查手册/README.md的产品/Python SDK/CLI 总表、cli-meta/接口元数据、产品官方文档/官方原始文档、cli/和python-sdk/本地源码。 - 安全边界:默认只做查询;支付、续费、退订、购买、取消订单、预算/财务关系变更、配额申请等动作必须先进行 Human-in-the-Loop 确认。
先读这些
处理本领域问题前,先阅读当前目录下的参考文档:
references/query-cli-catalog.md:查询型 CLI 入口索引,按问题域路由到细分 reference。references/api-coverage-matrix.md:本分类cli-meta/API 覆盖审查矩阵,列出已纳入排障候选的只读/诊断 Action 与默认排除的写操作边界。references/provider-code-aliases.md:配额中心ProviderCode速查;处理 quota 时优先读,避免参数名或产品编码试错。references/python-sdk-script-patterns.md:什么时候从 CLI 切换到 Python SDK 脚本,以及只读脚本的安全边界。references/01-overview-routing/README.md:排查总入口,按用户现象收集证据,以及计费手册和其他横向/产品手册如何分工。scripts/README.md:当前脚本状态和未来脚本入口规范。任何 `RunSkillScript` 调用前都必须先读它或对应 reference 中的完整脚本签名,不能凭脚本名猜参数。
同时可查阅:
- 产品手册:
火山引擎问题排查手册/火山引擎计费问题排查手册/README.md - 产品/Python SDK/CLI 总表:
火山引擎问题排查手册/README.md - 接口元数据:
cli-meta/火山引擎计费问题排查手册/<产品>/接口清单.md - 官方原始文档:
产品官方文档/火山引擎计费问题排查手册/<产品>/...
使用边界
Use this skill when the user describes:
AccountOverdueError、BalanceNotEnough、余额不足、欠费停服、预扣费失败、代金券不可用。- Coding Plan、套餐、订阅、资源包、节省计划、权益、到期、续费、抵扣不生效。
- quota、调用次数耗尽、推理次数上限、安全用量上限、配额不足、资源冻结。
- 购买、开通、订单、支付、CreatePreorder、CreateOrder、商品不可购、无购买权限。
- 账单、成本分析、消费明细、账单总览、分账账单、费用突增、预算、发票。
Do not use this as the primary skill for pure IAM 策略配置、AK/SK 签名、SDK 安装、模型参数错误、ECS/TOS/CDN/VKE 等产品运行态故障。遇到这些机制问题时,保留计费上下文并转向对应横向技能或产品技能。
强约束
- 默认只执行查询命令。当前阶段只设计
Describe/List/Get/Query/Check/Search类读接口,不设计购买、支付、退订、续费、取消订单、创建预算、创建配额申请等写操作。 - 查询优先使用
ve <service> <Action> [--Param value...]。cli-meta里可能显示历史形态volcengine <service> <Action>,在执行设计中统一写成ve。 - 不执行
ve configure、登录、SSO、凭证写入或任何密钥管理命令。凭证只能来自运行环境,不能在 skill 中硬编码 AK/SK。 - 计费结果通常涉及敏感金额、账号、合同、发票、资源 ID。输出时只保留排障必要字段,避免泄露完整账单明细。
- 如果用户请求修复性动作,先给出将要执行的资源、Action、金额/订单影响、不可逆风险和替代方案,获得用户明确确认后再转入写操作设计。
交互式确认与 Human-in-the-Loop
概述
本 skill 默认只执行查询动作。账单、余额、订单、资源包、配额、资源归属等查询可以作为证据采集自动执行;任何可能改变资金、订单、订阅、配额申请、预算或财务关系的动作必须先获得用户明确确认。
需要确认的动作
| 动作类型 | 示例 | 确认要求 |
|---|---|---|
| 订单与支付 | PayOrder、CommonBuy、购买资源包、开通服务 | 说明商品、金额、账号、订单 ID、扣费方式和失败回滚边界 |
| 续费与退订 | RenewInstance、UnsubscribeInstance、SetRenewalType | 说明实例、周期、费用、到期时间和退订影响 |
| 预算与财务关系 | CreateBudget、UpdateBudget、财务托管/解除 | 说明影响账户、预算阈值、通知对象和组织范围 |
| 配额申请与告警变更 | CreateQuotaApplication、CreateAlarmRule、UpdateAlarmRule | 说明产品、地域、额度、业务必要性和审批预期 |
| 资源归属/组织变更 | 账号移动、财务关系调整、组织关系变更 | 本 skill 不直接执行;转账号/IAM 或组织管理流程并要求确认 |
快速路由
| 用户现象 | 优先证据 | 先查产品/工具 |
|---|---|---|
| 不确定是余额、订阅、配额、订单还是账单权限 | 错误码、RequestId、产品、账号、时间、资源 ID | `01-overview-routing/README.md` |
| 余额不足、欠费、预扣费失败 | 账户余额、代金券、预留金额、欠费状态、错误码 | `02-balance-arrears-precharge/README.md` |
| Coding Plan、套餐、订阅、资源包不生效 | 订阅有效期、资源包范围、抵扣明细、产品/地域/规格 | `03-subscription-package/README.md` |
| quota、调用次数耗尽、推理上限 | 产品配额、配额维度、申请记录、当期用量、错误码 | `04-usage-quota-limit/README.md` |
| 购买、开通、订单、支付失败 | 订单状态、商品、购买资格、余额、账号认证、购买 Action | `05-order-purchase-activation/README.md` |
| 查询账单、成本、余额、费用突增 | 账期、产品、实例、用量、成本口径、分账/摊销 | `06-bill-cost-detail/README.md` |
| 高频错误码或已知 case | 错误文本、产品、账号、发生时间 | `07-playbooks/README.md` |
高频固定流程
MaaS 月度配额 / quota
用户提到 MaaS、火山方舟、方舟、大模型、模型 Endpoint、API Key 或 You have exceeded the monthly usage quota 时,按这个顺序执行:
1. 读取 references/provider-code-aliases.md。 2. 直接执行:
ve quota ListProductQuotas --ProviderCode MaaS3. 再用 scripts/collect_billing_context.py --region cn-beijing --include-packages 查资源包和余额。
禁止先执行无 ProviderCode 的 ve quota ListProductQuotas,禁止执行 --ProviderCode ark。
费用突增 / 完整分页
用户提到费用突增、完整归因、全量、分页、尽量完整时,按这个模板执行:
python3 scripts/collect_billing_context.py --region cn-beijing --bill-period <yyyy-MM> --include-bill-detail --include-packages --all-pages --max-pages 3 --max-results 20禁止只传 --max-results 100 来冒充分页;没有 --all-pages 就不是分页查询。
章节目录
| 上层章节 | 本 skill reference |
|---|---|
| 1. 排查总入口 | `01-overview-routing/README.md` |
| 2. 余额、欠费与预扣费 | `02-balance-arrears-precharge/README.md` |
| 3. 套餐、订阅与资源包 | `03-subscription-package/README.md` |
| 4. 用量、配额与调用次数 | `04-usage-quota-limit/README.md` |
| 5. 购买、开通与订单失败 | `05-order-purchase-activation/README.md` |
| 6. 账单、成本与消费明细 | `06-bill-cost-detail/README.md` |
| 7. 计费问题 Playbook | `07-playbooks/README.md` |
已验证易错参数
这些约束来自真实沙箱 benchmark,优先级高于通用接口命名直觉:
- 配额中心查询产品配额时,
ve quota ListProductQuotas、ListProductQuotaDimensions、GetProductQuota使用--ProviderCode <provider-code>,不要使用--ProductCode。 - 不确定产品对应的
ProviderCode时,先读references/provider-code-aliases.md;仍不确定再执行ve quota ListProducts,不要凭产品名猜参数。 - 禁止调用缺少
--ProviderCode的ve quota ListProductQuotas/GetProductQuota/ListQuotaApplications。 - MaaS/火山方舟的配额中心
ProviderCode是MaaS。ark是控制台/地域路径里的概念,不是配额中心ProviderCode;不要执行--ProviderCode ark。 - MaaS/火山方舟相关配额的已验证查询形态:
ve quota ListProductQuotas --ProviderCode MaaS用户明确提到 MaaS、火山方舟、方舟、大模型、模型 Endpoint 或 API Key 时,直接使用 --ProviderCode MaaS;不要先用无参数 ListProductQuotas 试探。
- 如果用户说的是“月度调用次数、套餐次数、模型推理上限”,配额中心正常并不代表问题结束;继续查资源包/套餐和余额,必要时转大模型生态产品 skill 判断产品侧安全上限。
脚本调用协议
脚本是复杂场景的提效层,不是跳过 reference 的捷径。当前提供 1 个只读 Python SDK 脚本,用于账单/资源包/费用突增这类 CLI body 查询不稳定或返回字段复杂的场景。使用脚本时必须遵守:
1. 先读取 scripts/README.md 或当前问题 reference 中的脚本段落,确认用途、必填参数和可选参数。 2. 只有在已拿到脚本的最小必填参数时才调用;缺参数时先向用户补问或先用 CLI 定位资源,不能先试错。 3. 脚本必须只读,只能查询余额、账单、订单、资源包、配额、资源归属,不得执行支付、购买、续费、退订或配额申请。 4. 脚本返回后,先读 summary 和 findings,再按需展开 raw;不要把完整账单 JSON 原样倾倒给用户。
| 脚本 | 适用入口 | 最小必填参数 | 可选参数 |
|---|---|---|---|
scripts/collect_billing_context.py | 余额/欠费、订单、账单、资源包、费用突增初筛 | 无;默认使用 --region 或 VOLCENGINE_REGION | --region、--bill-period <yyyy-MM>、--max-results <n>、--include-orders、--include-packages、--include-bill-detail、--include-raw |
费用突增、资源包耗尽和账单归因需要尽量覆盖更多分页时,使用:
python3 scripts/collect_billing_context.py --region cn-beijing --bill-period <yyyy-MM> --include-bill-detail --include-packages --all-pages --max-pages 3 --max-results 20脚本会返回 *_pagination 字段;只有 is_complete=true 时才能把结果表述为“已覆盖全量”,否则只能说“已采集前 N 页/TopN 样本”。 费用中心列表接口单页上限按 100 的安全值处理;不要传 --max-results 1000。脚本会自动限幅并启用分页,但 Agent 应优先使用 20-100 的页大小。
用户明确说“全量、完整、分页、尽量完整、费用突增归因”时,必须带 --all-pages;只传 --max-results 100 仍然是单页样本,不满足完整分页查询。
工作流
1. 明确产品、账号/主子账号关系、资源 ID、订单 ID、账期、地域、错误码、RequestId、发生时间。 2. 判断这是余额/欠费、订阅/资源包、quota/调用次数、订单/购买、账单/成本,还是权限/OpenAPI/产品运行态问题。 3. 打开 references/query-cli-catalog.md,路由到一个细分 reference;只读取当前问题必要的 reference。 4. 如果命令不在清单里,查看对应 cli-meta/.../<产品>/接口清单.md 和官方文档后再补充。 5. 对跨产品问题,保留产品上下文:例如“大模型调用报 AccountOverdue”由本 skill 查余额/欠费,同时提示大模型 skill 只负责 endpoint/model/限流细节。 6. 对账单类问题,先确认账期和口径:账单、成本账单、摊销账单、分账账单、资源包抵扣明细不是同一个口径。若需要同时查询账单、订单、资源包,优先使用 scripts/collect_billing_context.py --bill-period <yyyy-MM> 聚合证据。 7. 对权限类表现,先确认是“用户无权查/买”,还是“账户商业状态不可用”;前者转账号/IAM skill,后者留在本 skill。 8. 输出诊断结论时分层说明:已确认事实、最可能根因、还缺哪些证据、下一步安全动作。
输出格式
排障回复应优先给出可执行判断,而不是堆命令:
现象归类:这是哪类计费/商业状态问题。已查证据:列出关键余额、订单、订阅、资源包、配额或账单字段。结论:最可能根因,必要时给置信度。建议动作:只读补查、用户侧验证、或需要确认的变更动作。横向跳转:如果根因是 IAM、OpenAPI/Python SDK/CLI 或产品运行态,明确转到哪个横向/产品手册。
计费排查总入口
用于不知道问题属于余额、订阅、配额、订单、账单还是权限时的第一层分流。
前置输入
- 错误文本、错误码、RequestId、发生时间。
- 产品名、资源 ID、Region、实例规格或模型名。
- 主账号/子账号、付款账号、资源归属账号。
- 订单 ID、账期、套餐/资源包名称。
先判断方向
| 现象 | 优先路径 |
|---|---|
AccountOverdueError、欠费、余额不足、预扣费失败 | 读 02-balance-arrears-precharge |
valid coding plan subscription、订阅过期、资源包不抵扣 | 读 03-subscription-package |
quota、调用次数耗尽、推理上限、资源限额 | 读 04-usage-quota-limit |
| 下单失败、商品不可购、无购买权限、CreatePreorder | 读 05-order-purchase-activation |
| 费用突增、账单明细、成本分析、余额查询 | 读 06-bill-cost-detail |
AccessDenied、无权查账单/无权购买 | 保留计费上下文,转账号/IAM skill |
| API 签名、SDK 参数、CLI 命令报错 | 保留计费 Action,转 OpenAPI/Python SDK/CLI skill |
最小查询包
1. 余额与账户商业状态
ve billing QueryBalanceAcct关注字段:
- 可用余额、现金余额、代金券余额、欠费相关字段。
- 如果 API 返回权限错误,转账号/IAM;如果余额为 0 或不足,继续
02。
2. 资源归属与主子账号关系
ve organization DescribeOrganization
ve organization ListAccounts
ve resourcecenter SearchResources --ResourceIds '["<resource-id>"]'关注字段:
- 资源属于哪个账号、项目、标签、Region。
- 付款账号和资源拥有账号是否一致。
3. 配额产品列表
ve quota ListProducts关注字段:
- 目标产品是否接入配额中心。
- 产品名和产品编码,后续查
ListProductQuotas。
结果解读
| 证据 | 常见结论/下一步 |
|---|---|
| 余额不足或欠费 | 进入余额/欠费排查,给出充值、续费、释放欠费限制路径 |
| 有资源包但仍扣费 | 查资源包范围、抵扣明细和账单明细 |
| 有 quota 错误但余额正常 | 查配额中心或产品级调用上限,不按欠费处理 |
| 查询账单 API AccessDenied | 转账号/IAM 手册,检查计费相关权限 |
| 订单失败且 BalanceNotEnough | 同时进入订单和余额章节 |
变更边界
本 ref 只做查询。充值、支付、购买、退订、续费、配额申请和预算变更都需要用户明确确认。
余额、欠费与预扣费查询
用于处理余额不足、欠费、预扣费失败、代金券不可用、AccountOverdueError、BalanceNotEnough。
前置输入
- 错误码和完整错误文本。
- 发生产品、Action、资源 ID、订单 ID、RequestId。
- 预扣费金额、用户看到的余额、账期。
先判断方向
| 现象 | 优先路径 |
|---|---|
AccountOverdueError | 先查账户余额和欠费状态,再解释后付费欠费限制 |
BalanceNotEnough | 查余额、代金券、订单预留金额 |
预扣费额度失败 | 对比剩余额度与预扣费额度 |
| 用户问余额/续费 | 查余额;续费动作只给路径,执行需确认 |
命令包
1. 查询账户余额
ve billing QueryBalanceAcct关注字段:
- 可用余额、现金余额、授信/额度、代金券余额。
- 响应是否指向欠费、冻结或不可用状态。
判读约束:
- 如果
ArrearsBalance > 0,可以判断存在历史欠费或逾期账单风险。 - 如果
ArrearsBalance = 0,但AvailableBalance = 0且CreditLimit = 0,不要直接说“已经欠费”;应表述为“当前没有可用余额/授信,容易触发预扣费、开通或新调用失败”,并结合原始错误码、订单或产品侧 RequestId 继续确认。 - 如果报错文本是
AccountOverdueError,但余额证据没有欠费金额,要把“产品侧按欠费类错误拒绝”和“账户余额字段显示无历史欠费”同时说明,避免过度归因。
2. 查询代金券及使用记录
ve billing ListCoupons --body '{"Limit":5,"Offset":0}'
ve billing ListCouponUsageRecords --body '{"Limit":5,"Offset":0}'关注字段:
- 代金券是否过期、是否适用于目标产品、是否有用量/地域/计费项限制。
- 代金券是否已经被其他订单或账单消耗。
3. 查询相关账单和订单
ve billing ListBill --BillPeriod <yyyy-MM>
ve billing ListOrders --body '{"MaxResults":5}'
ve billing GetOrder --body '{"OrderNo":"<order-no>"}'关注字段:
- 欠费是否来自历史账单。
- 订单是否因余额不足、预扣失败、支付失败而失败。
典型 case
HTTP 403: 预扣费额度失败, 用户剩余额度: $0.217626, 需要预扣费额度: $0.226494AccountOverdueError: The request failed because your account has an overdue balance.BalanceNotEnough: 您的账户余额及可用代金券低于该商品的下单预留金额,无法开通此服务!结果解读
| 证据 | 常见结论/下一步 |
|---|---|
| 可用余额低于预扣金额 | 余额不足,建议充值或降低购买/调用规格 |
| 现金余额足够但代金券不可用 | 检查代金券产品/地域/计费项限制 |
| 后付费欠费 | 先处理欠费账单,恢复后再重试业务调用 |
| 无历史欠费但可用余额/授信为 0 | 优先按预扣费/新消费可用额度不足解释,保留产品侧欠费错误码作为待确认线索 |
| 查询余额无权限 | 转账号/IAM,检查计费读权限 |
变更边界
本 ref 不执行充值、支付、续费、购买。涉及资金动作时,只能在用户确认后转入对应变更流程。
套餐、订阅与资源包查询
用于处理 Coding Plan、订阅过期、套餐升级不生效、资源包不抵扣、资源包用量耗尽。
前置输入
- 套餐/资源包名称,产品名,Region,规格,模型名或实例 ID。
- 错误文本,例如
valid coding plan subscription、subscription expired。 - 购买/升级时间、订单 ID、用户认为应抵扣的用量。
先判断方向
| 现象 | 优先路径 |
|---|---|
| Coding Plan 不存在或过期 | 查资源包/订单,必要时转大模型生态 skill 查模型侧现象 |
| 套餐升级后仍限流 | 先查订单和生效时间,再区分套餐限制和 API 限流 |
| 资源包不抵扣 | 查资源包范围、抵扣明细、账单明细 |
| 套餐内调用次数耗尽 | 查资源包使用明细和产品用量口径 |
命令包
1. 查询资源包和抵扣明细
ve billing ListResourcePackages --body '{"MaxResults":"5","ResourceType":"Package"}'
ve billing ListPackageUsageDetails --body '{"MaxResults":"5","ResourceType":"Package","DeductBeginTime":"<yyyy-MM-dd>","DeductEndTime":"<yyyy-MM-dd>"}'关注字段:
- 资源包状态、有效期、适用产品、适用地域、剩余量。
- 抵扣明细是否覆盖用户报错的产品、计费项、时间范围。
真实验证提示:当前 CLI 对 ListResourcePackages 这类 body 查询可能出现签名兼容问题。若 CLI 失败,优先使用已验证脚本:
python3 scripts/collect_billing_context.py --region cn-beijing --include-packages2. 查询订单和可用实例
ve billing ListOrders --body '{"MaxResults":5}'
ve billing GetOrder --body '{"OrderNo":"<order-no>"}'
ve billing ListAvailableInstances关注字段:
- 订单是否支付成功、是否已生效、是否仍在处理中。
- 资源包/订阅是否绑定到当前账号或资源。
3. 查询账单明细辅助判断
ve billing ListBillDetail --BillPeriod <yyyy-MM>
ve billing ListBillOverviewByProd --BillPeriod <yyyy-MM>关注字段:
- 费用是否已被资源包抵扣。
- 未抵扣行的产品、计费项、Region、实例 ID 是否与资源包范围匹配。
典型 case
400 Your account does not have a valid coding plan subscription, or your subscription has expired.升级套餐后仍旧提示 API rate limit reached. Please try again later.codingplan 充的钱能用吗结果解读
| 证据 | 常见结论/下一步 |
|---|---|
| 无有效资源包/订阅 | 提示购买或续订,执行购买需确认 |
| 订单成功但未生效 | 说明生效延迟或等待订单状态流转 |
| 资源包有效但不抵扣 | 对比产品、Region、计费项、规格限制 |
| 套餐有效但 429 | 转 OpenAPI/大模型限流方向,区别于计费 |
变更边界
本 ref 不执行购买、升级、续费或退订。涉及资源包购买/续费时必须先确认金额、商品、账号和影响。
用量、配额与调用次数查询
用于处理 quota、调用次数耗尽、推理次数上限、资源限额、配额不足和安全用量上限。
前置输入
- 产品名、产品编码、Region、资源 ID、模型名。
- 错误文本、RequestId、发生时间。
- 用户想创建/调用/扩容的规格和数量。
先判断方向
| 现象 | 优先路径 |
|---|---|
| 创建资源提示配额不足 | 查配额中心产品、维度和当前额度 |
| API 调用次数耗尽 | 查资源包/账单用量,必要时转产品 skill |
| 模型推理上限 | 保留模型上下文,查计费/订阅,同时转大模型生态 skill |
| 429/rate limit | 先区分限流、配额、余额、订阅 |
命令包
1. 查询支持配额的产品
如果用户问题命中 MaaS、火山方舟、大模型、模型 Endpoint 或 API Key,优先使用已验证映射:
ve quota ListProductQuotas --ProviderCode MaaS不要先调用无 ProviderCode 的 ListProductQuotas,也不要把参数写成 ProductCode。ark 不是配额中心 ProviderCode,不要执行 --ProviderCode ark。
其他产品先查看 ../provider-code-aliases.md;没有映射时再执行:
ve quota ListProducts关注字段:
- 目标产品是否接入配额中心。
ProviderCode,供后续ListProductQuotas使用。
2. 查询产品配额和维度
ve quota ListProductQuotaDimensions --ProviderCode <provider-code>
ve quota ListProductQuotas --ProviderCode <provider-code>
ve quota GetProductQuota --ProviderCode <provider-code> --QuotaCode <quota-code>真实沙箱验证提示:ListProductQuotas 必须使用 --ProviderCode。不要把 ListProducts 中看到的产品信息直接写成 --ProductCode 参数,否则会返回 JSONInvalid / ProviderCode is required。
关注字段:
- 配额名称、维度、当前值、已用值、可申请上限。
- 维度是否包括 Region、Zone、实例规格、账号类型。
3. 查询配额申请和告警
ve quota ListQuotaApplications --ProviderCode <provider-code>
ve quota GetQuotaApplication --ApplicationId <application-id>
ve quota ListQuotaAlarmRules
ve quota ListAlarmHistory关注字段:
- 是否已有申请在审批中或被驳回。
- 告警是否已触达,是否能解释用户看到的资源限制。
典型 case
怎么判断套餐内的调用次数/用量已经耗尽You have exceeded the monthly usage quota.Your account has reached the set inference limit for the doubao-seedance-2-0 model.结果解读
| 证据 | 常见结论/下一步 |
|---|---|
| 当前配额已达上限 | 说明需要申请更配或释放资源,申请动作需确认 |
| 配额正常但调用失败 | 转产品 skill 或 OpenAPI 限流方向 |
| 有申请审批中 | 告知等待审批,不重复申请 |
| 模型安全上限触发 | 转大模型生态 skill 查模型开通和安全上限 |
变更边界
本 ref 不执行 CreateQuotaApplication、创建/修改配额告警或模板。需要申请/修改时必须先确认产品、地域、目标额度和业务理由。
购买、开通与订单失败查询
用于处理购买失败、开通失败、无购买权限、商品停售、订单支付失败、CreatePreorder / CreateOrder 相关问题。
前置输入
- 商品/产品、规格、Region、购买方式、订单 ID。
- 错误文本、RequestId、logid、发生时间。
- 主账号/子账号、付款账号、认证状态。
先判断方向
| 现象 | 优先路径 |
|---|---|
BalanceNotEnough | 同时读余额章节 |
用户没有购买该配置的权限 | 查订单/商品,权限机制转账号/IAM |
ProductStopSelling | 商品停售或规格不可购,转产品可售性判断 |
| 支付/开通失败 | 查订单状态、支付状态、可用实例 |
命令包
1. 查询订单
ve billing ListOrders --body '{"MaxResults":5}'
ve billing GetOrder --body '{"OrderNo":"<order-no>"}'
ve billing ListOrderProductDetails --body '{"OrderNo":"<order-no>"}'关注字段:
- 订单状态、支付状态、失败原因、商品信息、购买账号。
- 订单是否已取消、已支付、处理中、失败。
2. 查询可用实例与财务关系
ve billing ListAvailableInstances
ve billing ListFinancialRelation关注字段:
- 实例是否可续费/退订/购买。
- 主子账号或财务托管关系是否影响支付和开通。
3. 查询组织账号辅助判断
ve organization DescribeOrganization
ve organization ListAccounts关注字段:
- 当前操作者是否是付款账号或资源拥有账号。
- 是否需要主账号统一购买。
典型 case
logid:LOG_ID service:bill_volcano_engine error:用户没有购买该配置的权限ProductStopSellingOperation is denied because create order in one step failed. BalanceNotEnough结果解读
| 证据 | 常见结论/下一步 |
|---|---|
| 订单因余额不足失败 | 转余额章节,建议充值后重试 |
| 订单因权限失败 | 转账号/IAM,检查购买/费用中心权限 |
| 商品停售或规格不可购 | 转产品手册,确认可售规格和地域 |
| 支付成功但开通失败 | 查订单产品明细和产品侧开通状态 |
变更边界
本 ref 不执行 PayOrder、CommonBuy、CancelOrder、购买或开通。涉及资金和商品状态变更时必须先确认。
账单、成本与消费明细查询
用于处理账单查询、余额查询、成本分析、费用突增、分账账单、摊销成本、资源包抵扣口径解释。
前置输入
- 账期:月账期
yyyy-MM,或日粒度时间范围。 - 产品、实例 ID、项目、标签、Region、计费模式。
- 用户关注的是账单金额、成本金额、分账金额还是资源包抵扣。
先判断方向
| 现象 | 优先路径 |
|---|---|
| 查询余额 | QueryBalanceAcct |
| 查某月账单明细 | ListBillDetail / ListBill |
| 产品汇总费用 | ListBillOverviewByProd |
| 成本分析/费用突增 | ListCostAnalysisOpenApi、摊销成本账单 |
| 分账/项目/标签口径 | ListSplitBillDetail、资源中心/标签查询 |
命令包
1. 账单明细与汇总
ve billing ListBill --body '{"BillPeriod":"<yyyy-MM>","Limit":5,"Offset":0}'
ve billing ListBillDetail --body '{"BillPeriod":"<yyyy-MM>","Limit":5,"Offset":0}'
ve billing ListBillOverviewByProd --body '{"BillPeriod":"<yyyy-MM>","Limit":5,"Offset":0}'
ve billing ListBillOverviewByCategory --body '{"BillPeriod":"<yyyy-MM>","Limit":5,"Offset":0}'关注字段:
- 产品、计费项、实例 ID、用量、费用、抵扣、应付金额。
- 分页参数,避免只看第一页。
真实验证提示:当前 CLI 对账单 body 查询可能出现签名兼容问题。费用突增、账单明细、资源包抵扣归因优先使用已验证脚本:
python3 scripts/collect_billing_context.py --region cn-beijing --bill-period <yyyy-MM> --include-bill-detail --include-packages --max-results 5脚本判读约束:--max-results 控制每类查询的分页样本大小。除非脚本或后续分页已经明确覆盖全量,否则回复用户时只能说“当前页/TopN 样本显示”,不能把 TopN 结果表述成完整账期全量占比。
如果用户问“费用突增到底是谁导致的”“尽量完整归因”“资源包是不是全耗尽”,使用分页模式:
python3 scripts/collect_billing_context.py --region cn-beijing --bill-period <yyyy-MM> --include-bill-detail --include-packages --all-pages --max-pages 3 --max-results 20这个场景必须带 --all-pages。只传 --max-results 100 仍然只会采集单页,不能满足“完整分页”。
不要传 --max-results 1000。费用中心列表接口单页使用 100 作为安全上限,脚本会自动限幅并启用分页;常规排障建议 --max-results 20,需要更完整样本时使用 --max-results 100 并控制 --max-pages。
资源包接口更保守,脚本会自动把资源包查询的单页大小压到 20 以内。
判读 summary.bill_overview_pagination、summary.bill_detail_pagination、summary.resource_packages_pagination:
is_complete=true:脚本已覆盖当前查询可见全量。is_complete=false:仍有后续页,回答必须注明“当前采集前 N 页”,不要写成全量结论。expected_total或next_token存在时,可用于说明是否还需要继续分页。
脚本输出前部包含 headline,优先读取 headline.bill_overview.pagination、headline.bill_detail.pagination、headline.resource_packages.pagination;不要只凭后续样本表格判断是否全量。
2. 成本与摊销账单
ve billing ListCostAnalysisOpenApi
ve billing ListAmortizedCostBillMonthly --BillPeriod <yyyy-MM>
ve billing ListAmortizedCostBillDaily --BillPeriod <yyyy-MM>
ve billing ListAmortizedCostBillDetail --BillPeriod <yyyy-MM>关注字段:
- 成本口径是否与账单口径不同。
- 日粒度费用突增的产品、实例、计费项。
3. 分账、标签和资源归属
ve billing ListSplitBillDetail --BillPeriod <yyyy-MM>
ve resourcecenter SearchResources --ResourceIds '["<resource-id>"]'
ve tag GetResources关注字段:
- 项目、标签、成本单元、资源归属账号。
- 分账规则是否解释用户看到的费用归属。
典型 case
我的账户余额是多少?如何续费?ListCostAnalysisOpenApiListBillOverviewByProd查询已购商品信息结果解读
| 证据 | 常见结论/下一步 |
|---|---|
| 费用集中在某产品/实例 | 转对应产品 skill 分析用量增长原因 |
| 账单与成本金额不同 | 解释账单、摊销、分账口径差异 |
| 资源包抵扣后仍有应付 | 查未覆盖的计费项、地域或规格 |
| 查询账单无权限 | 转账号/IAM,检查费用中心权限 |
变更边界
本 ref 不修改预算、标签、成本单元或账单订阅设置。预算/预警变更必须先确认。
计费问题 Playbook
用于高频计费错误的快速排查卡片。每张卡片都要先确认错误文本和产品上下文,再执行最小查询。
AccountOverdueError
触发信号:
The request failed because your account has an overdue balance.路径:
1. ve billing QueryBalanceAcct 2. ve billing ListBill --BillPeriod <yyyy-MM> 3. 如果查询无权限,转账号/IAM。
结论:
- 欠费导致服务调用被拒绝,优先处理欠费账单。
BalanceNotEnough / 预扣费失败
触发信号:
BalanceNotEnough
预扣费额度失败, 用户剩余额度不足路径:
1. ve billing QueryBalanceAcct 2. ve billing ListCoupons 3. 如果和订单相关,补 ve billing GetOrder --OrderNo <order-no>。
结论:
- 可用余额或可用代金券低于商品预留金额。
Coding Plan 订阅过期
触发信号:
Your account does not have a valid coding plan subscription, or your subscription has expired.路径:
1. ve billing ListResourcePackages 2. ve billing ListOrders 3. 保留模型/ArkClaw 上下文,必要时转大模型生态 skill。
结论:
- 无有效订阅、订阅过期、订阅未在当前账号生效,或错误被模型层包装。
套餐升级后仍 rate limit
触发信号:
升级套餐后仍旧提示 API rate limit reached.路径:
1. ve billing GetOrder --OrderNo <order-no> 2. ve billing ListResourcePackages 3. 如果订阅已生效,转 OpenAPI/大模型限流排查。
结论:
- 需要区分套餐生效延迟、产品限流和模型侧 QPS/TPM/RPM 限制。
资源包不抵扣
路径:
1. ve billing ListResourcePackages 2. ve billing ListPackageUsageDetails 3. ve billing ListBillDetail --BillPeriod <yyyy-MM>
结论:
- 对比资源包的产品、地域、计费项、规格和账单行。
无购买权限
触发信号:
service:bill_volcano_engine error:用户没有购买该配置的权限路径:
1. ve billing ListOrders 2. ve billing ListFinancialRelation 3. ve organization ListAccounts 4. 转账号/IAM 检查购买和费用中心权限。
结论:
- 可能是商品资格、账号认证、主子账号财务关系或 IAM 权限问题。
账单查询无权限
路径:
1. 确认用户要查余额、账单、成本还是订单。 2. 尝试对应只读 Action。 3. 如果返回 AccessDenied,转账号/IAM。
结论:
- 业务入口是计费,但根因是权限机制。
API 覆盖审查矩阵
本文件由 2026-05-22 审查生成,用于证明本 skill 已对 cli-meta/ 中对应分类的 OpenAPI / CLI / Python SDK 能力做过覆盖盘点。它不是执行顺序清单;Agent 仍应先按主 SKILL.md 和章节 reference 选择最小必要证据。
审查口径
- 纳入排障优先级:
Describe/List/Get/Query/Check/Search/BatchGet/Verify/Validate/Test/Diagnose/Preview/Estimate等只读或诊断型 Action。 - 默认排除自动执行:
Create/Modify/Delete/Update/Attach/Detach/Start/Stop/Run/Invoke/Pay/Renew/Set等会改变资源、资金、权限或任务状态的 Action;只能作为解释错误码或 Human-in-the-Loop 建议背景。 - 命令形态:执行时统一写作
ve <service> <Action> [--Param value...];参数不确定时先查ve <service> <Action> --help或对应cli-meta。 - 凭证边界:只从临时环境读取
VOLCENGINE_ACCESS_KEY、VOLCENGINE_SECRET_KEY、VOLCENGINE_REGION,不得写入配置、文档或日志。
总览
- 覆盖产品数:6
- 官方文档识别 OpenAPI Action 数合计:135
- 纳入排障候选的只读/诊断 Action 数:87
- 默认不自动执行的写/变更 Action 数:52
- 需人工判断语义的其它 Action 数:13
产品级覆盖
售后技术支持
- 官方文档识别 Action 数:0
- 纳入只读/诊断 Action:0
- 排除自动执行的写/变更 Action:0
当前未在 CLI/SDK 元数据中识别到只读/诊断 Action;排障时依赖产品文档、专用工具或横向 skill。
消息中心
- 官方文档识别 Action 数:0
- 纳入只读/诊断 Action:0
- 排除自动执行的写/变更 Action:0
当前未在 CLI/SDK 元数据中识别到只读/诊断 Action;排障时依赖产品文档、专用工具或横向 skill。
账号相关
- 官方文档识别 Action 数:0
- 纳入只读/诊断 Action:0
- 排除自动执行的写/变更 Action:0
当前未在 CLI/SDK 元数据中识别到只读/诊断 Action;排障时依赖产品文档、专用工具或横向 skill。
费用中心
- 官方文档识别 Action 数:57
- 纳入只读/诊断 Action:43
- 排除自动执行的写/变更 Action:13
- 其它需按场景人工判断 Action:CommonBuy, UnsubscribeInstance
| Action | CLI 服务 | 排障用途 |
|---|---|---|
GetFilterInfoForCostAnalysis | billing | 计费、订单、成本、配额或资源包证据 |
GetOrder | billing | 计费、订单、成本、配额或资源包证据 |
GetServiceInfo | Python SDK-only/未匹配 CLI | 资源存在性、状态、配置或诊断证据 |
ListAmortizedCostBillDaily | billing | 计费、订单、成本、配额或资源包证据 |
ListAmortizedCostBillDetail | billing | 计费、订单、成本、配额或资源包证据 |
ListAmortizedCostBillMonthly | billing | 计费、订单、成本、配额或资源包证据 |
ListAvailableInstances | billing | 资源状态、实例/节点/集群运行态证据 |
ListBill | billing | 计费、订单、成本、配额或资源包证据 |
ListBillDetail | billing | 计费、订单、成本、配额或资源包证据 |
ListBillOverviewByCategory | billing | 计费、订单、成本、配额或资源包证据 |
ListBillOverviewByProd | billing | 计费、订单、成本、配额或资源包证据 |
ListBudget | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetAmountByBudgetID | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetAmountByBudgetId | Python SDK-only/未匹配 CLI | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterBillingMode | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterOwnerID | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterOwnerId | Python SDK-only/未匹配 CLI | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterPayerID | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterPayerId | Python SDK-only/未匹配 CLI | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterProduct | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterProject | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterRegionCode | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterSubjectInfo | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterTagKey | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterTagValue | billing | 计费、订单、成本、配额或资源包证据 |
ListBudgetFilterZoneCode | billing | 计费、订单、成本、配额或资源包证据 |
ListCostAnalysisOpenApi | billing | 计费、订单、成本、配额或资源包证据 |
ListCouponUsageRecords | billing | 计费、订单、成本、配额或资源包证据 |
ListCoupons | billing | 计费、订单、成本、配额或资源包证据 |
ListFinancialRelation | billing | 资源存在性、状态、配置或诊断证据 |
ListInvitation | billing | 资源存在性、状态、配置或诊断证据 |
ListOrderProductDetails | billing | 计费、订单、成本、配额或资源包证据 |
ListOrders | billing | 计费、订单、成本、配额或资源包证据 |
ListPackageUsageDetails | billing | 计费、订单、成本、配额或资源包证据 |
ListRecipientInformation | billing | 资源存在性、状态、配置或诊断证据 |
ListResourcePackages | billing | 计费、订单、成本、配额或资源包证据 |
ListSplitBillDetail | billing | 计费、订单、成本、配额或资源包证据 |
QueryBalanceAcct | billing | 计费、订单、成本、配额或资源包证据 |
QueryBudgetDetail | billing | 计费、订单、成本、配额或资源包证据 |
QueryPriceForPayAsYouGo | billing | 资源存在性、状态、配置或诊断证据 |
QueryPriceForRenew | billing | 资源存在性、状态、配置或诊断证据 |
QueryPriceForSubscription | billing | 资源存在性、状态、配置或诊断证据 |
QueryTagValueByTagKey | billing | 密钥、安全策略、风险或告警证据 |
资源管理
- 官方文档识别 Action 数:58
- 纳入只读/诊断 Action:33
- 排除自动执行的写/变更 Action:31
- 其它需按场景人工判断 Action:AcceptInvitation, AcceptQuitApplication, ExecuteSQLQuery, ExecuteSqlQuery, InviteAccount, MoveAccount, QuitOrganization, ReInviteAccount, RejectInvitation, RejectQuitApplication, RetryChangeAccountSecureContactInfo
| Action | CLI 服务 | 排障用途 |
|---|---|---|
DescribeAccount | organization | 资源存在性、状态、配置或诊断证据 |
DescribeAccountInvitation | organization | 资源存在性、状态、配置或诊断证据 |
DescribeOrganization | organization | 资源存在性、状态、配置或诊断证据 |
DescribeOrganizationalUnit | organization | 资源存在性、状态、配置或诊断证据 |
DescribeQuitApplication | organization | 资源存在性、状态、配置或诊断证据 |
GetAccountSecureContactInfo | organization | 资源存在性、状态、配置或诊断证据 |
GetExampleQuery | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetMultiAccountResourceCenterStatus | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetMultiAccountResourceCounts | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetQuery | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetResourceCenterStatus | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetResourceCounts | resourcecenter | 资源存在性、状态、配置或诊断证据 |
GetResources | tag | 资源存在性、状态、配置或诊断证据 |
GetServiceControlPolicy | organization | 身份、权限、密钥或授权证据 |
GetServiceControlPolicyEnablement | organization | 身份、权限、密钥或授权证据 |
GetTagKeys | tag | 密钥、安全策略、风险或告警证据 |
GetTagValues | tag | 资源存在性、状态、配置或诊断证据 |
GetTags | tag | 资源存在性、状态、配置或诊断证据 |
ListAccounts | organization | 资源存在性、状态、配置或诊断证据 |
ListExampleQueries | resourcecenter | 资源存在性、状态、配置或诊断证据 |
ListInvitations | organization | 资源存在性、状态、配置或诊断证据 |
ListOrganizationalUnits | organization | 资源存在性、状态、配置或诊断证据 |
ListOrganizationalUnitsForParent | organization | 资源存在性、状态、配置或诊断证据 |
ListPoliciesForTarget | organization | 资源存在性、状态、配置或诊断证据 |
ListQueries | resourcecenter | 资源存在性、状态、配置或诊断证据 |
ListResourceTypes | resourcecenter, tag | 资源存在性、状态、配置或诊断证据 |
ListServiceControlPolicies | organization | 资源存在性、状态、配置或诊断证据 |
ListTagResources | organization | 资源存在性、状态、配置或诊断证据 |
ListTagsKeys | organization | 密钥、安全策略、风险或告警证据 |
ListTagsValues | organization | 资源存在性、状态、配置或诊断证据 |
ListTargetsForPolicy | organization | 身份、权限、密钥或授权证据 |
SearchMultiAccountResources | resourcecenter | 资源存在性、状态、配置或诊断证据 |
SearchResources | resourcecenter | 资源存在性、状态、配置或诊断证据 |
配额中心
- 官方文档识别 Action 数:20
- 纳入只读/诊断 Action:11
- 排除自动执行的写/变更 Action:8
| Action | CLI 服务 | 排障用途 |
|---|---|---|
GetAlarmRule | quota | 密钥、安全策略、风险或告警证据 |
GetProductQuota | quota | 计费、订单、成本、配额或资源包证据 |
GetQuotaApplication | quota | 计费、订单、成本、配额或资源包证据 |
GetQuotaTemplateServiceStatus | quota | 计费、订单、成本、配额或资源包证据 |
ListAlarmHistory | quota | 密钥、安全策略、风险或告警证据 |
ListProductQuotaDimensions | quota | 计费、订单、成本、配额或资源包证据 |
ListProductQuotas | quota | 计费、订单、成本、配额或资源包证据 |
ListProducts | quota | 资源存在性、状态、配置或诊断证据 |
ListQuotaAlarmRules | quota | 计费、订单、成本、配额或资源包证据 |
ListQuotaApplicationTemplates | quota | 计费、订单、成本、配额或资源包证据 |
ListQuotaApplications | quota | 计费、订单、成本、配额或资源包证据 |
使用建议
- 优先使用章节 reference 中已经编排好的命令包;当用户问题落在未细化章节时,再从本矩阵选择最小只读 Action 补充证据。
- 如果某个只读 Action 需要分页、跨产品联动或深层字段归一,再考虑新增
scripts/只读脚本,并同步更新脚本说明。 - 如果只读证据指向写操作修复,必须先输出影响面、资源 ID、回滚/恢复建议,并等待用户确认。
配额中心 ProviderCode 速查
本文件记录真实验证或高置信来源确认过的配额中心 ProviderCode。处理 quota、资源限额、月度用量上限时,先查这里;不确定时再执行 ve quota ListProducts 搜索确认。
使用原则
- 查询配额必须使用
--ProviderCode <provider-code>,不要使用--ProductCode。 - 用户说产品中文名、控制台名、报错里的产品简称时,先映射为
ProviderCode。 - 本表没有覆盖时,先执行
ve quota ListProducts,再从返回中找最接近的产品项;仍不确定时不要猜。
已验证映射
| 用户常说 | 产品/场景 | ProviderCode | 已验证命令 |
|---|---|---|---|
| MaaS、火山方舟、方舟、大模型、模型推理、Endpoint、API Key | 火山方舟 / 大模型服务相关资源配额 | MaaS | ve quota ListProductQuotas --ProviderCode MaaS |
注意:ark 不是配额中心 ProviderCode。不要执行 ve quota ListProductQuotas --ProviderCode ark。
常用命令模板
ve quota ListProducts
ve quota ListProductQuotas --ProviderCode <provider-code>
ve quota ListProductQuotaDimensions --ProviderCode <provider-code>
ve quota GetProductQuota --ProviderCode <provider-code> --QuotaCode <quota-code>
ve quota ListQuotaApplications --ProviderCode <provider-code>结果解读
ListProductQuotas适合先看是否已经超资源配额。GetProductQuota适合用户给出明确QuotaCode或要确认单个配额详情。ListQuotaApplications适合用户问“是否已经申请过提额/为什么提额还没生效”。- 月度调用次数、套餐次数、模型推理上限不一定在配额中心体现;配额中心正常后继续查询资源包/账单/余额,必要时转大模型生态 skill。
Python SDK 脚本模式
计费 skill 提供少量只读 Python SDK 脚本。CLI 能覆盖部分单点查询,但真实验证发现 billing 的部分 body 查询和 quota 查询在当前 CLI 环境下可能出现签名/参数兼容问题;多页聚合、跨账期对比、资源包抵扣归因、费用突增分析优先使用脚本。
什么时候需要脚本
| 触发条件 | CLI 不足点 | 脚本应做什么 |
|---|---|---|
| 账单明细跨多页、多产品、多账期 | Agent 手工翻页和比对容易漏项 | 自动分页,按产品/实例/标签聚合费用变化 |
| 资源包是否抵扣某类用量 | 需要同时查资源包、抵扣明细、账单行 | 关联 ListResourcePackages、ListPackageUsageDetails、ListBillDetail |
| 费用突增 | 需要对比日/月粒度、产品、实例、计费项 | 输出增量 TopN 和异常账单项 |
| 配额问题要关联产品配额与申请历史 | quota 多接口需要拼接维度 | 归一产品、地域、维度、当前值、申请状态 |
脚本安全规范
- 只调用查询 Action。
- 凭证只从环境变量读取,优先使用
VOLCENGINE_ACCESS_KEY、VOLCENGINE_SECRET_KEY、VOLCENGINE_SESSION_TOKEN。 - 不接收命令行 AK/SK,不写配置文件,不打印完整凭证。
- 金额、账号、发票、合同等敏感字段只输出排障必要摘要。
- 输出固定包含
summary、findings、raw。
暂不需要脚本的场景
- 只查询当前余额:用
ve billing QueryBalanceAcct。 - 只查一个订单:用
ve billing GetOrder。 - 只查某产品配额:用
ve quota GetProductQuota或ListProductQuotas。 - 只是解释
AccountOverdueError、BalanceNotEnough等错误码。
候选脚本
| 脚本名 | 状态 | 用途 | 最小输入 |
|---|---|---|---|
collect_billing_context.py | 已实现 | 聚合余额、最近订单、资源包、账单总览/明细摘要 | 无;--bill-period 可选 |
analyze_cost_spike.py | 规划中 | 对比账期费用并输出产品/实例 TopN | --start-period --end-period |
collect_quota_context.py | 规划中 | 聚合产品配额、维度、申请历史 | --product,可选 --region |
计费查询 CLI 入口索引
本文件只做入口索引,不承载完整接口清单。处理具体问题时先根据用户现象跳到章节 reference,再按最小证据集调用查询 CLI。
公共约定:
- 执行形态统一写成
ve <service> <Action> [--Param value...]。 cli-meta中展示的volcengine <service> <Action>是来源形态,执行设计中统一映射为ve。- 只默认使用查询 Action:
Describe/List/Get/Query/Search/Check。 - 配额中心真实 CLI 参数使用
ProviderCode:例如ve quota ListProductQuotas --ProviderCode MaaS。不要写成--ProductCode。 - 不允许调用无
--ProviderCode的ve quota ListProductQuotas、GetProductQuota、ListQuotaApplications。 - 配额中心产品编码先看
provider-code-aliases.md;没有映射再执行ve quota ListProducts。 - 写操作如
PayOrder、RenewInstance、UnsubscribeInstance、CommonBuy、CreateQuotaApplication、CreateBudget必须先 Human-in-the-Loop 确认。
快速入口
| 问题域 | 必读 reference | 主要服务 | 典型查询 Action |
|---|---|---|---|
| 总入口与分流 | 01-overview-routing/README.md | billing、quota、resourcecenter、organization | QueryBalanceAcct、ListProducts、SearchResources |
| 余额、欠费、预扣费 | 02-balance-arrears-precharge/README.md | billing | QueryBalanceAcct、ListCoupons、ListCouponUsageRecords、ListBill |
| 套餐、订阅、资源包 | 03-subscription-package/README.md | billing | ListResourcePackages、ListPackageUsageDetails、ListAvailableInstances、GetOrder |
| 用量、配额、调用次数 | 04-usage-quota-limit/README.md | quota、billing | ListProducts、ListProductQuotas --ProviderCode <provider-code>、GetProductQuota --ProviderCode <provider-code>、ListQuotaApplications --ProviderCode <provider-code> |
| 购买、开通、订单失败 | 05-order-purchase-activation/README.md | billing、organization | ListOrders、GetOrder、ListOrderProductDetails、ListFinancialRelation |
| 账单、成本、消费明细 | 06-bill-cost-detail/README.md | billing、resourcecenter、tag | ListBillDetail、ListBillOverviewByProd、ListCostAnalysisOpenApi、SearchResources |
| 高频 Playbook | 07-playbooks/README.md | 视 case 而定 | 按错误码映射 |
来源
cli-meta/火山引擎计费问题排查手册/费用中心/接口清单.mdcli-meta/火山引擎计费问题排查手册/配额中心/接口清单.mdcli-meta/火山引擎计费问题排查手册/资源管理/接口清单.md产品官方文档/火山引擎计费问题排查手册/费用中心/费用中心/_目录.md产品官方文档/火山引擎计费问题排查手册/配额中心/配额中心/_目录.md
#!/usr/bin/env python3
"""Collect read-only billing context for Volcengine troubleshooting.
SDK source: volcengine-python-sdk / volcenginesdkbilling.
Credentials are read only from environment variables:
VOLCENGINE_ACCESS_KEY / VOLCENGINE_SECRET_KEY / VOLCENGINE_SESSION_TOKEN.
The script only calls read actions:
QueryBalanceAcct, ListOrders, ListBill, ListBillDetail,
ListBillOverviewByProd, ListResourcePackages.
It never pays, purchases, renews, unsubscribes, or changes billing settings.
"""
from __future__ import annotations
import argparse
import json
import os
import sys
from typing import Any, Callable, Dict, List, Optional
import volcenginesdkbilling as billing
import volcenginesdkcore
from volcenginesdkbilling.api.billing_api import BILLINGApi
from volcenginesdkcore.rest import ApiException
SCRIPT_VERSION = "0.1.1"
def to_dict(value: Any) -> Any:
if hasattr(value, "to_dict"):
return value.to_dict()
return value
def require_env(name: str) -> str:
value = os.environ.get(name)
if not value:
raise RuntimeError(f"missing required environment variable: {name}")
return value
def build_client(region: str) -> BILLINGApi:
cfg = volcenginesdkcore.Configuration()
cfg.ak = require_env("VOLCENGINE_ACCESS_KEY")
cfg.sk = require_env("VOLCENGINE_SECRET_KEY")
cfg.region = region
token = os.environ.get("VOLCENGINE_SESSION_TOKEN")
if token:
cfg.session_token = token
cfg.client_side_validation = True
return BILLINGApi(volcenginesdkcore.ApiClient(cfg))
def compact_error(exc: Exception) -> Dict[str, Any]:
if isinstance(exc, ApiException):
return {
"error": "api_exception",
"status": exc.status,
"reason": str(exc.reason)[:500],
}
return {"error": type(exc).__name__, "reason": str(exc)[:500]}
def raw_summary(data: Any) -> Dict[str, Any]:
if isinstance(data, dict):
items = first_list(data)
return {
"omitted": True,
"type": "dict",
"top_level_keys": sorted(data.keys())[:20],
"list_count_in_page": len(items),
}
return {"omitted": True, "type": type(data).__name__}
def try_call(result: Dict[str, Any], key: str, fn: Callable[[], Any], include_raw: bool) -> Optional[Any]:
try:
data = to_dict(fn())
result["raw"][key] = data if include_raw else raw_summary(data)
return data
except Exception as exc: # Keep going so one failed bill query does not hide balance/order evidence.
result["raw"][key] = compact_error(exc)
result["findings"].append(f"{key} query failed: {result['raw'][key].get('reason')}")
return None
def first_list(data: Optional[Dict[str, Any]]) -> List[Dict[str, Any]]:
if not isinstance(data, dict):
return []
items = data.get("list") or data.get("order_infos") or data.get("result", {}).get("list") or []
return items if isinstance(items, list) else []
def next_token(data: Optional[Dict[str, Any]]) -> Optional[str]:
if not isinstance(data, dict):
return None
token = data.get("next_token") or data.get("NextToken") or data.get("result", {}).get("next_token")
return str(token) if token else None
def total_count(data: Optional[Dict[str, Any]]) -> Optional[int]:
if not isinstance(data, dict):
return None
for key in ("total", "total_count", "record_num", "total_record_num", "Total", "TotalCount"):
value = data.get(key)
if isinstance(value, int):
return value
if isinstance(value, str) and value.isdigit():
return int(value)
nested = data.get("result")
if isinstance(nested, dict):
return total_count(nested)
return None
def collect_offset_pages(
result: Dict[str, Any],
key: str,
page_size: int,
max_pages: int,
include_raw: bool,
fn: Callable[[int], Any],
) -> Dict[str, Any]:
rows: List[Dict[str, Any]] = []
pages = 0
totals: List[int] = []
last_error = None
for page in range(max_pages):
offset = page * page_size
data = try_call(result, f"{key}_page_{page + 1}", lambda offset=offset: fn(offset), include_raw)
if not isinstance(data, dict):
last_error = result["raw"].get(f"{key}_page_{page + 1}")
break
page_rows = first_list(data)
rows.extend(page_rows)
pages += 1
total = total_count(data)
if total is not None:
totals.append(total)
if len(page_rows) < page_size:
break
expected_total = totals[-1] if totals else None
return {
"rows": rows,
"pages_fetched": pages,
"page_size": page_size,
"max_pages": max_pages,
"expected_total": expected_total,
"is_complete": expected_total is not None and len(rows) >= expected_total or pages < max_pages,
"last_error": last_error,
}
def collect_token_pages(
result: Dict[str, Any],
key: str,
page_size: int,
max_pages: int,
include_raw: bool,
fn: Callable[[Optional[str]], Any],
) -> Dict[str, Any]:
rows: List[Dict[str, Any]] = []
pages = 0
token: Optional[str] = None
last_error = None
for page in range(max_pages):
data = try_call(result, f"{key}_page_{page + 1}", lambda token=token: fn(token), include_raw)
if not isinstance(data, dict):
last_error = result["raw"].get(f"{key}_page_{page + 1}")
break
rows.extend(first_list(data))
pages += 1
token = next_token(data)
if not token:
break
return {
"rows": rows,
"pages_fetched": pages,
"page_size": page_size,
"max_pages": max_pages,
"next_token": token,
"is_complete": not bool(token),
"last_error": last_error,
}
def summarize_money_rows(rows: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
compact = []
for row in rows[:10]:
compact.append(
{
"product": row.get("product") or row.get("Product"),
"product_zh": row.get("product_zh") or row.get("ProductZh"),
"instance_no": row.get("instance_no") or row.get("InstanceNo"),
"bill_period": row.get("bill_period") or row.get("BillPeriod"),
"payable_amount": row.get("payable_amount") or row.get("PayableAmount"),
"original_bill_amount": row.get("original_bill_amount") or row.get("OriginalBillAmount"),
"coupon_amount": row.get("coupon_amount") or row.get("CouponAmount"),
"pay_status": row.get("pay_status") or row.get("PayStatus"),
}
)
return compact
def build_headline(result: Dict[str, Any]) -> Dict[str, Any]:
summary = result.get("summary", {})
balance = summary.get("balance", {})
return {
"balance": {
"available_balance": balance.get("available_balance"),
"arrears_balance": balance.get("arrears_balance"),
"credit_limit": balance.get("credit_limit"),
},
"bill_overview": {
"items_returned": len(summary.get("bill_overview_by_prod", [])),
"pagination": summary.get("bill_overview_pagination"),
},
"bill_detail": {
"items_returned": len(summary.get("bill_detail", [])),
"pagination": summary.get("bill_detail_pagination"),
},
"resource_packages": {
"items_returned": len(summary.get("resource_packages", [])),
"pagination": summary.get("resource_packages_pagination"),
},
}
def collect(
region: str,
bill_period: Optional[str],
max_results: int,
all_pages: bool,
max_pages: int,
include_bill_detail: bool,
include_packages: bool,
include_orders: bool,
include_raw: bool,
) -> Dict[str, Any]:
requested_max_results = max_results
if max_results < 1:
max_results = 1
if max_results > 100:
max_results = 100
if requested_max_results > max_results and not all_pages:
all_pages = True
if bill_period and include_bill_detail and max_results >= 100 and not all_pages:
all_pages = True
api = build_client(region)
result: Dict[str, Any] = {
"script_version": SCRIPT_VERSION,
"region": region,
"bill_period": bill_period,
"pagination": {
"all_pages": all_pages,
"page_size": max_results,
"requested_page_size": requested_max_results,
"max_pages": max_pages,
},
"findings": [],
"headline": {},
"summary": {},
"raw": {},
}
if requested_max_results != max_results:
result["findings"].append(
f"max_results was clamped from {requested_max_results} to {max_results}; billing list APIs are safest at 100 or fewer per page."
)
if requested_max_results > max_results:
result["findings"].append("all_pages was enabled automatically because requested_max_results exceeded the safe page size.")
if bill_period and include_bill_detail and max_results >= 100 and all_pages:
result["findings"].append("all_pages is enabled for bill detail because page_size is 100 and bill_period/include_bill_detail were provided.")
balance = try_call(
result,
"query_balance_acct",
lambda: api.query_balance_acct(billing.QueryBalanceAcctRequest()),
include_raw,
)
if isinstance(balance, dict):
result["summary"]["balance"] = {
"account_id": balance.get("account_id"),
"available_balance": balance.get("available_balance"),
"cash_balance": balance.get("cash_balance"),
"arrears_balance": balance.get("arrears_balance"),
"freeze_amount": balance.get("freeze_amount"),
"credit_limit": balance.get("credit_limit"),
}
if str(balance.get("arrears_balance", "0")) not in ("0", "0.0", "0.00", ""):
result["findings"].append("Account has arrears balance; billing state may block service use.")
if str(balance.get("available_balance", "0")) in ("0", "0.0", "0.00", ""):
result["findings"].append("Available balance is zero; precharge or purchase may fail.")
if include_orders:
if all_pages:
orders_page = collect_token_pages(
result,
"list_orders",
max_results,
max_pages,
include_raw,
lambda token: api.list_orders(
billing.ListOrdersRequest(max_results=max_results, next_token=token)
),
)
order_rows = orders_page["rows"]
result["summary"]["orders_pagination"] = {
k: v for k, v in orders_page.items() if k != "rows"
}
else:
orders = try_call(
result,
"list_orders",
lambda: api.list_orders(billing.ListOrdersRequest(max_results=max_results)),
include_raw,
)
order_rows = first_list(orders)
result["summary"]["orders_pagination"] = {
"pages_fetched": 1 if isinstance(orders, dict) else 0,
"page_size": max_results,
"next_token": next_token(orders),
"is_complete": not bool(next_token(orders)),
}
result["summary"]["orders"] = {
"count_collected": len(order_rows),
"sample_status": [row.get("status") for row in order_rows[:5]],
}
if bill_period:
if all_pages:
overview_page = collect_offset_pages(
result,
"list_bill_overview_by_prod",
max_results,
max_pages,
include_raw,
lambda offset: api.list_bill_overview_by_prod(
billing.ListBillOverviewByProdRequest(
bill_period=bill_period,
limit=max_results,
offset=offset,
need_record_num=1,
)
),
)
overview_rows = overview_page["rows"]
result["summary"]["bill_overview_pagination"] = {
k: v for k, v in overview_page.items() if k != "rows"
}
else:
bill_overview = try_call(
result,
"list_bill_overview_by_prod",
lambda: api.list_bill_overview_by_prod(
billing.ListBillOverviewByProdRequest(
bill_period=bill_period,
limit=max_results,
offset=0,
need_record_num=1,
)
),
include_raw,
)
overview_rows = first_list(bill_overview)
result["summary"]["bill_overview_pagination"] = {
"pages_fetched": 1 if isinstance(bill_overview, dict) else 0,
"page_size": max_results,
"expected_total": total_count(bill_overview),
"is_complete": len(overview_rows) < max_results,
}
result["summary"]["bill_overview_by_prod"] = summarize_money_rows(overview_rows)
if include_bill_detail:
if all_pages:
detail_page = collect_offset_pages(
result,
"list_bill_detail",
max_results,
max_pages,
include_raw,
lambda offset: api.list_bill_detail(
billing.ListBillDetailRequest(
bill_period=bill_period,
limit=max_results,
offset=offset,
need_record_num=1,
)
),
)
detail_rows = detail_page["rows"]
result["summary"]["bill_detail_pagination"] = {
k: v for k, v in detail_page.items() if k != "rows"
}
else:
bill_detail = try_call(
result,
"list_bill_detail",
lambda: api.list_bill_detail(
billing.ListBillDetailRequest(
bill_period=bill_period,
limit=max_results,
offset=0,
need_record_num=1,
)
),
include_raw,
)
detail_rows = first_list(bill_detail)
result["summary"]["bill_detail_pagination"] = {
"pages_fetched": 1 if isinstance(bill_detail, dict) else 0,
"page_size": max_results,
"expected_total": total_count(bill_detail),
"is_complete": len(detail_rows) < max_results,
}
result["summary"]["bill_detail"] = summarize_money_rows(detail_rows)
if include_packages:
package_page_size = min(max_results, 20)
if package_page_size != max_results:
result["findings"].append(
f"resource package page size was clamped from {max_results} to {package_page_size}; ListResourcePackages is safest at 20 or fewer per page."
)
if all_pages:
package_page = collect_token_pages(
result,
"list_resource_packages",
package_page_size,
max_pages,
include_raw,
lambda token: api.list_resource_packages(
billing.ListResourcePackagesRequest(
max_results=str(package_page_size),
next_token=token,
resource_type="Package",
)
),
)
package_rows = package_page["rows"]
result["summary"]["resource_packages_pagination"] = {
k: v for k, v in package_page.items() if k != "rows"
}
else:
packages = try_call(
result,
"list_resource_packages",
lambda: api.list_resource_packages(
billing.ListResourcePackagesRequest(
max_results=str(package_page_size),
resource_type="Package",
)
),
include_raw,
)
package_rows = first_list(packages)
result["summary"]["resource_packages_pagination"] = {
"pages_fetched": 1 if isinstance(packages, dict) else 0,
"page_size": package_page_size,
"next_token": next_token(packages),
"is_complete": not bool(next_token(packages)),
}
result["summary"]["resource_packages"] = [
{
"instance_no": row.get("instance_no"),
"product": row.get("product"),
"product_name": row.get("product_name"),
"region_code": row.get("region_code"),
"status": row.get("status"),
"available_amount": row.get("available_amount"),
"total_amount": row.get("total_amount"),
"unit": row.get("unit"),
"effective_time": row.get("effective_time"),
"expiry_time": row.get("expiry_time"),
}
for row in package_rows[:10]
]
result["headline"] = build_headline(result)
return result
def main() -> int:
parser = argparse.ArgumentParser(description="Collect read-only Volcengine billing context.")
parser.add_argument("--region", default=os.environ.get("VOLCENGINE_REGION", "cn-beijing"))
parser.add_argument("--bill-period", help="Billing period in yyyy-MM, for bill overview/detail queries.")
parser.add_argument("--max-results", type=int, default=5)
parser.add_argument("--all-pages", action="store_true", help="Fetch multiple pages for supported list queries.")
parser.add_argument("--max-pages", type=int, default=3, help="Maximum pages to fetch when --all-pages is set.")
parser.add_argument("--include-bill-detail", action="store_true")
parser.add_argument("--include-packages", action="store_true")
parser.add_argument("--include-orders", action="store_true")
parser.add_argument("--include-raw", action="store_true", help="Include full raw SDK responses. Use only when needed.")
args = parser.parse_args()
try:
data = collect(
region=args.region,
bill_period=args.bill_period,
max_results=args.max_results,
all_pages=args.all_pages,
max_pages=args.max_pages,
include_bill_detail=args.include_bill_detail,
include_packages=args.include_packages,
include_orders=args.include_orders,
include_raw=args.include_raw,
)
print(json.dumps(data, ensure_ascii=False, indent=2))
return 0
except Exception as exc:
print(json.dumps(compact_error(exc), ensure_ascii=False), file=sys.stderr)
return 1
if __name__ == "__main__":
raise SystemExit(main())
排查总入口
用于先判断问题属于短信、RTC、点播、直播还是 CV/OCR。
前置输入
- 产品名、Region、错误码、RequestId、发生时间。
- app/room/user、vid、domain/vhost/app/stream、task_id、模板/签名/资质等关键标识。
- 问题发生在提交、审核、处理、回调、分发还是客户端接入阶段。
先判断方向
| 现象 | 优先路径 |
|---|---|
SY:0500、RE:0500、短信回执、模板/签名/资质 | 短信服务 |
StartVoiceChat、INVALID_TOKEN、房间、实时音视频 | RTC |
GetPlayInfo、播放地址、媒资、转码产物 | VOD / 点播 |
| 推流、拉流、直播回调、录制、流状态 | Live / 直播 |
CVSync2Async*、OCR、图片处理、任务状态 | CV / OCR |
横向跳转
AccessDenied、产品开通权限:账号权限 skill。Action/Version/ 签名 / SDK 机制:OpenAPI / SDK / CLI skill。- 余额、套餐、额度、欠费:计费 skill。
- 直播域名、CNAME、HTTPS、CDN:域名 CDN 与流量入口 skill。
最小判别原则
- 短信先区分“接口受理失败”和“最终投递失败”。
- RTC 先区分“控制面 Action 报错”和“客户端入会/音视频链路问题”。
- VOD 先区分“媒资还没准备好”和“播放域名/播放器问题”。
- Live 先区分“源流没进来”和“边缘分发出不去”。
- CV/OCR 先区分“提交失败”和“异步任务执行失败”。
Scripts
当前首版没有默认脚本。
何时新增
- 一个问题需要多接口联动才能判断。
- 单个 SDK 返回过深、分页过多或很难稳定回归。
- 需要把多个媒体阶段汇总成
summary/findings。
固定约束
- 只读。
- 优先读取
VOLCENGINE_ACCESS_KEY、VOLCENGINE_SECRET_KEY、VOLCENGINE_SESSION_TOKEN。 - 明确声明 SDK 来源与调用 Action。
- 不在脚本里发送短信、呼叫、推流、禁流、创建或删除资源。