byted-vms-number-pool · 号码池 / 号码 / 资质
环境变量
按以下优先级解析鉴权 (与其他 vms-* skill 一致):
ARK_SKILL_API_KEY + ARK_SKILL_API_BASE → 火山引擎 arkclaw 企业版. 请先在火山后台页面配置好 AK/SK, 由 arkclaw 注入这两个环境变量 (ARK_SKILL_API_KEY 为 API 密钥, ARK_SKILL_API_BASE 为 API 基础地址), 脚本以 Bearer 鉴权直连该网关, 无需本地签名;
VOLC_ACCESS_KEY + VOLC_SECRET_KEY (兼容 VOLCENGINE_ACCESS_KEY/VOLCENGINE_SECRET_KEY) → 个人版 arkclaw / openclaw / coco / aime / claudecode 等普通 agent, 用户直接把 AK/SK 告诉 agent, 脚本本地做 HMAC-SHA256 (Volc V4) 签名;
- 否则报错并提示用户填入 AK/SK.
命令
# 1. 查号码池 (默认 SubServiceType=102 语音通知, 智能外呼填 104, 隐私号填 201~206)
# 完整枚举见 references/vms-fundamentals.md §1
python3 scripts/number_pool.py list_pool [--sub-service-type 102] [--name 北京]
# 2. 创建号码池
python3 scripts/number_pool.py create_pool \
--name "语音通知-默认池" --sub-service-type 102 \
--qualification-id <QualificationId> [--choose-pretty false]
# 2.1. 更新号码池 (改名/改备注/换资质)
python3 scripts/number_pool.py update_pool \
--number-pool-no <NumberPoolNo> \
[--name "新名称"] [--remark "新备注"] [--qualification-id <NewQualId>]
# 3. 查号码池下号码
python3 scripts/number_pool.py list_number --number-pool-no <NumberPoolNo>
# 3.0. 按手机号反查所属号码池 + 号码详情 (业务层 skill 在只拿到号码时的入口)
# 不传 --sub-service-type 会按 101~108 / 201~206 默认顺序遍历;
# 命中返回 { ok:true, NumberPoolNo, SubServiceType, Pool, Number },
# 未命中返回 { ok:false, errorCode:"NUMBER_NOT_FOUND" }.
python3 scripts/number_pool.py query_number --phone <Phone> [--sub-service-type 201]
# 3.1. 申请号码 (购号 / 入池)
# 平台未开放 OpenAPI 写入, 命令仅返回控制台引导信息.
# 请前往 https://console.volcengine.com/cloud_vms/number 页面点击「申请号码」操作.
python3 scripts/number_pool.py apply_number \
[--number-pool-no <NumberPoolNo>] [--count 5] [--qualification-id <Id>]
# 3.2. 查申请记录 (QueryNumberApplyRecordList, 看审核进度/号码归属/数量等)
python3 scripts/number_pool.py query_apply_record \
[--number-pool-no <NumberPoolNo>] [--sub-service-type 102] \
[--apply-status 7] [--limit 20] [--offset 0]
# 4. 启用/停用号码
python3 scripts/number_pool.py toggle_number \
--number-pool-no <NumberPoolNo> --phone-list <PhoneA>,<PhoneB> --enable true
# 5. 提交资质
python3 scripts/number_pool.py add_qualification \
--payload '{"Name":"xx有限公司","QualificationType":0,"BusinessType":1,...}'
# 5.1. 上传资质材料 (营业执照/身份证 等图片或 PDF, FileUrl 必须公网可访问)
python3 scripts/number_pool.py upload_qualification_file \
--file-url "https://your-tos.com/license.jpg" \
--qualification-id <QualificationId> \
--file-type 1 --file-name "营业执照"
# 6. 查资质 (单条精查)
python3 scripts/number_pool.py query_qualification [--status 1]
# 6.1. 查资质列表 (QueryQualificationList, 推荐, doc=173331)
# 支持按主体名称/状态/资质类型/业务类型筛选, 已规整 Items 字段
python3 scripts/number_pool.py list_qualification \
[--status 1] [--name "广州"] \
[--qualification-type 0] [--business-type 3] \
[--limit 20] [--offset 0]
# 7. 更新资质
python3 scripts/number_pool.py update_qualification \
--qualification-id <Id> --payload '{"BusinessType":2}'
何时被业务层 Skill 调用
byted-vms-voice-notify 预检号码池 → list_pool --sub-service-type 102
byted-vms-aicall 预检 → list_pool --sub-service-type 104
byted-vms-secret-number 预检 → list_pool --sub-service-type 201 (或其他隐私号子类型 202~206)
- 业务层只拿到号码 (例如 X 号、A 号) 需要 NumberPoolNo 时 →
query_number --phone <X>,
Agent 拿到返回里的 NumberPoolNo 后再去调用业务层接口 (如
byted-vms-secret-number query_subscription_list / unbind_*).
业务层 Skill 通过 Agent 触发本 Skill 执行命令, 拿回结果后再决定下一步, 不直接 import 本包的 python.
错误兜底
- 资质
Status=0 (待审核) → 提示用户审核约 1 工作日, 期间不能创建号码池.
- 资质
Status=2 (驳回) → 引导用户用 update_qualification 修改后重新提交.
- 没有任何号码池 → 引导用户先
add_qualification → create_pool → 在控制台购号 https://console.volcengine.com/cloud_vms/number .
- 申请号码 / 购号: 平台 未开放 OpenAPI 写入, 用户调
apply_number 时
返回控制台引导, 必须前往 https://console.volcengine.com/cloud_vms/number
页面点击「申请号码」操作, 提交申请单等待平台审核, 审核通过后号码自动入池.
申请进度可用 query_apply_record 接口查询.
- 鉴权失败: 提示检查 AK/SK. 普通 agent (个人版 arkclaw / openclaw / coco / aime / claudecode) 检查
VOLC_ACCESS_KEY/VOLC_SECRET_KEY; 火山引擎 arkclaw 企业版需先在火山后台页面配置好 AK/SK, 再确认 ARK_SKILL_API_KEY/ARK_SKILL_API_BASE 已注入.
📚 基础知识 / 参数传递参考
add_qualification 的 payload 字段对资质类型 (QualificationType) /
业务类型 (BusinessType) / 主体材料字段有强约束, create_pool /
update_pool 的 SubServiceType (101/102/103/104/201~206) 不能混用.
这些通用规范沉淀在本 skill 内置的本地基础知识文档:
references/vms-fundamentals.md
所有 vms-* skill 共用同一份内容. 本地加载无外网依赖, 比拉飞书更快更稳.
飞书原文 (可选): https://bytedance.sg.larkoffice.com/docx/Mv32dc0yooBn7txDxW8lsDdDgYb
1---2name: byted-vms-number-pool3description: 火山云通信通用能力层 Skill. 号码池 / 号码 / 资质三类资源管理. 当用户问号码池有哪些、要新建号码池、查/启停号码、提交或查询资质时调用. 业务层 Skill 在预检阶段也会复用本 Skill.4license: Apache-2.05---6
7# byted-vms-number-pool · 号码池 / 号码 / 资质
8
9## 环境变量
10
11按以下优先级解析鉴权 (与其他 vms-* skill 一致):
12
131. `ARK_SKILL_API_KEY` + `ARK_SKILL_API_BASE` → 火山引擎 arkclaw 企业版. 请先在火山后台页面配置好 AK/SK, 由 arkclaw 注入这两个环境变量 (`ARK_SKILL_API_KEY` 为 API 密钥, `ARK_SKILL_API_BASE` 为 API 基础地址), 脚本以 `Bearer` 鉴权直连该网关, 无需本地签名;
142. `VOLC_ACCESS_KEY` + `VOLC_SECRET_KEY` (兼容 `VOLCENGINE_ACCESS_KEY`/`VOLCENGINE_SECRET_KEY`) → 个人版 arkclaw / openclaw / coco / aime / claudecode 等普通 agent, 用户直接把 AK/SK 告诉 agent, 脚本本地做 HMAC-SHA256 (Volc V4) 签名;
153. 否则报错并提示用户填入 AK/SK.
16
17## 命令
18
19```bash
20# 1. 查号码池 (默认 SubServiceType=102 语音通知, 智能外呼填 104, 隐私号填 201~206)
21# 完整枚举见 references/vms-fundamentals.md §1
22python3 scripts/number_pool.py list_pool [--sub-service-type 102] [--name 北京]
23
24# 2. 创建号码池
25python3 scripts/number_pool.py create_pool \
26 --name "语音通知-默认池" --sub-service-type 102 \
27 --qualification-id <QualificationId> [--choose-pretty false]
28
29# 2.1. 更新号码池 (改名/改备注/换资质)
30python3 scripts/number_pool.py update_pool \
31 --number-pool-no <NumberPoolNo> \
32 [--name "新名称"] [--remark "新备注"] [--qualification-id <NewQualId>]
33
34# 3. 查号码池下号码
35python3 scripts/number_pool.py list_number --number-pool-no <NumberPoolNo>
36
37# 3.0. 按手机号反查所属号码池 + 号码详情 (业务层 skill 在只拿到号码时的入口)
38# 不传 --sub-service-type 会按 101~108 / 201~206 默认顺序遍历;
39# 命中返回 { ok:true, NumberPoolNo, SubServiceType, Pool, Number },
40# 未命中返回 { ok:false, errorCode:"NUMBER_NOT_FOUND" }.
41python3 scripts/number_pool.py query_number --phone <Phone> [--sub-service-type 201]
42
43# 3.1. 申请号码 (购号 / 入池)
44# 平台未开放 OpenAPI 写入, 命令仅返回控制台引导信息.
45# 请前往 https://console.volcengine.com/cloud_vms/number 页面点击「申请号码」操作.
46python3 scripts/number_pool.py apply_number \
47 [--number-pool-no <NumberPoolNo>] [--count 5] [--qualification-id <Id>]
48
49# 3.2. 查申请记录 (QueryNumberApplyRecordList, 看审核进度/号码归属/数量等)
50python3 scripts/number_pool.py query_apply_record \
51 [--number-pool-no <NumberPoolNo>] [--sub-service-type 102] \
52 [--apply-status 7] [--limit 20] [--offset 0]
53
54# 4. 启用/停用号码
55python3 scripts/number_pool.py toggle_number \
56 --number-pool-no <NumberPoolNo> --phone-list <PhoneA>,<PhoneB> --enable true
57
58# 5. 提交资质
59python3 scripts/number_pool.py add_qualification \
60 --payload '{"Name":"xx有限公司","QualificationType":0,"BusinessType":1,...}'
61
62# 5.1. 上传资质材料 (营业执照/身份证 等图片或 PDF, FileUrl 必须公网可访问)
63python3 scripts/number_pool.py upload_qualification_file \
64 --file-url "https://your-tos.com/license.jpg" \
65 --qualification-id <QualificationId> \
66 --file-type 1 --file-name "营业执照"
67
68# 6. 查资质 (单条精查)
69python3 scripts/number_pool.py query_qualification [--status 1]
70
71# 6.1. 查资质列表 (QueryQualificationList, 推荐, doc=173331)
72# 支持按主体名称/状态/资质类型/业务类型筛选, 已规整 Items 字段
73python3 scripts/number_pool.py list_qualification \
74 [--status 1] [--name "广州"] \
75 [--qualification-type 0] [--business-type 3] \
76 [--limit 20] [--offset 0]
77
78# 7. 更新资质
79python3 scripts/number_pool.py update_qualification \
80 --qualification-id <Id> --payload '{"BusinessType":2}'
81```
82
83## 何时被业务层 Skill 调用
84
85- `byted-vms-voice-notify` 预检号码池 → `list_pool --sub-service-type 102`
86- `byted-vms-aicall` 预检 → `list_pool --sub-service-type 104`
87- `byted-vms-secret-number` 预检 → `list_pool --sub-service-type 201` (或其他隐私号子类型 202~206)
88- 业务层只拿到号码 (例如 X 号、A 号) 需要 NumberPoolNo 时 → `query_number --phone <X>`,
89 Agent 拿到返回里的 `NumberPoolNo` 后再去调用业务层接口 (如
90 `byted-vms-secret-number query_subscription_list` / `unbind_*`).
91
92业务层 Skill 通过 Agent 触发本 Skill 执行命令, 拿回结果后再决定下一步, **不直接 import 本包的 python**.
93
94## 错误兜底
95
96- 资质 `Status=0` (待审核) → 提示用户审核约 1 工作日, 期间不能创建号码池.
97- 资质 `Status=2` (驳回) → 引导用户用 `update_qualification` 修改后重新提交.
98- 没有任何号码池 → 引导用户先 `add_qualification` → `create_pool` → 在控制台购号 https://console.volcengine.com/cloud_vms/number .
99- **申请号码 / 购号**: 平台 **未开放 OpenAPI 写入**, 用户调 `apply_number` 时
100 返回控制台引导, **必须前往 https://console.volcengine.com/cloud_vms/number
101 页面点击「申请号码」操作**, 提交申请单等待平台审核, 审核通过后号码自动入池.
102 申请进度可用 `query_apply_record` 接口查询.
103- 鉴权失败: 提示检查 AK/SK. 普通 agent (个人版 arkclaw / openclaw / coco / aime / claudecode) 检查 `VOLC_ACCESS_KEY`/`VOLC_SECRET_KEY`; 火山引擎 arkclaw 企业版需先在火山后台页面配置好 AK/SK, 再确认 `ARK_SKILL_API_KEY`/`ARK_SKILL_API_BASE` 已注入.
104
105## 📚 基础知识 / 参数传递参考
106
107`add_qualification` 的 `payload` 字段对资质类型 (QualificationType) /
108业务类型 (BusinessType) / 主体材料字段有强约束, `create_pool` /
109`update_pool` 的 SubServiceType (101/102/103/104/201~206) 不能混用.
110这些通用规范沉淀在本 skill 内置的本地基础知识文档:
111
112> `references/vms-fundamentals.md`
113
114所有 vms-* skill 共用同一份内容. 本地加载无外网依赖, 比拉飞书更快更稳.
115飞书原文 (可选): https://bytedance.sg.larkoffice.com/docx/Mv32dc0yooBn7txDxW8lsDdDgYb