| name | byted-vms-secret-number |
| version | 2.0.0 |
| description | 火山云通信隐私号 Skill. 管理 AXB / AXN / AXNE / AXG 等绑定关系生命周期, 不负责发起呼叫. 用户表达「绑定隐私号」「中间号」「号码保护」「解绑」「查绑定关系」时调用. |
| license | Apache-2.0 |
| metadata | {"author":"leixin.alex@bytedance.com","homepage":"https://www.volcengine.com/docs/6358/172141?lang=zh","knowledge_base":"references/vms-fundamentals.md","openclaw":{"emoji":"🛡️","requires":{"env":["VOLC_ACCESS_KEY","VOLC_SECRET_KEY"]},"os":["darwin","linux"],"triggers":["隐私号","中间号","号码保护","AXB绑定","AXN绑定","AXNE绑定","绑定隐私号","解绑.*隐私号","查.*绑定关系"]}} |
byted-vms-secret-number · 火山云通信隐私号
只处理「绑定关系生命周期」: 创建 / 解绑 / 查询. 真实通话由 A → X → B 触发, Skill 不发起呼叫.
环境变量
按以下优先级解析鉴权 (与其他 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.
命令
python3 scripts/secret_number.py bind_axb \
--phone-a <PhoneA> --phone-b <PhoneB> --phone-x <PhoneX> \
--number-pool-no <NumberPoolNo> [--expire-time 2592000] \
[--record-flag 1] [--asr-flag 0]
python3 scripts/secret_number.py select_and_bind_axb \
--phone-a <PhoneA> --phone-b <PhoneB> \
--number-pool-no <NumberPoolNo> [--city-code 010]
python3 scripts/secret_number.py bind_axn \
--phone-a <PhoneA> --phone-x <PhoneX> \
--number-pool-no <NumberPoolNo>
python3 scripts/secret_number.py select_and_bind_axn \
--phone-a <PhoneA> --phone-b <PhoneB> \
--number-pool-no <NumberPoolNo> [--city-code 010] \
[--expire-time 2592000] [--audio-record-flag 0] \
[--city-code-by-phone-no A|B] [--random-flag false]
python3 scripts/secret_number.py bind_axne \
--phone-a <PhoneA> --phone-x <PhoneX> --phone-b <PhoneB> \
--extension 8001 --number-pool-no <NumberPoolNo>
python3 scripts/secret_number.py unbind_axb --sub-id <SubId> --number-pool-no <NumberPoolNo>
python3 scripts/secret_number.py unbind_axn --sub-id <SubId> --number-pool-no <NumberPoolNo>
python3 scripts/secret_number.py unbind_axne --sub-id <SubId> --number-pool-no <NumberPoolNo>
python3 scripts/secret_number.py query_subscription --sub-id <SubId>
python3 scripts/secret_number.py query_subscription_list \
--number-pool-no <NumberPoolNo> \
[--phone-a <PhoneA>] [--phone-b <PhoneB>] [--phone-x <PhoneX>] \
[--sub-type AXB|AXN|AXNE] [--limit 20] [--offset 0]
关键差异 (相对语音通知)
- 用户没指定 X 号 → 用
select_and_bind_axb (SelectNumberAndBindAXB), 让平台依据 --city-code 同城选号.
--expire-time 是绑定生命周期, 接受两种写法: ① 相对秒数 (< 1e9, 例如 2592000 = 30 天后过期), skill 会自动叠加当前时间戳; ② 绝对秒级 unix 时间戳 (>= 1e9), 直接透传到 TOP. 默认 30 天. TOP 端要求最终值至少比当前时间晚 60 秒, 否则返回 ExpireTime must be 1 minute later. 用户说「半年」「3 个月」时, 用相对秒数即可 (例如 180 天 = 15552000).
--record-flag 控制是否对该绑定关系开启录音, --asr-flag 控制是否开启 ASR 识别.
标准执行流程
- 从用户语义抽取 A / B 号码、可选 X、过期时长、是否录音.
- 通过 byted-vms-number-pool 查隐私号号码池: 隐私号 SubServiceType 是 201~206 (
201 AXB / 202 AXN / 203 AXNE / 204 AXYB / 205 PAXYB / 206 AXG), 通常用 --sub-service-type 201. 没有就引导用户去 https://console.volcengine.com/cloud_vms/number 申请号码池+号码.
- 默认走
select_and_bind_axb. 用户明确「我要用某个特定 X 号」才走 bind_axb.
- 返回
SubId + PhoneNoX 给用户; 后续解绑/排查时拿 SubId 调 unbind_axb 或 query_subscription.
- 用户只给出某个号码 (常见是 X 号) 要查绑定关系时, 先调度 byted-vms-number-pool
的
query_number --phone <号码> 拿到 NumberPoolNo (返回里还会带
SubServiceType / Pool / Number 详情), 再回到本 skill 执行
query_subscription_list --number-pool-no <NumberPoolNo> --phone-x <号码>.
不在本 skill 内部直接调 NumberPoolList / NumberList, 保持原子能力分层.
错误兜底
参考
📚 基础知识 / 参数传递参考
bind_axb / bind_axn / bind_axne 的 --expire-time 支持相对秒数 (默认 30 天)
或绝对秒级 unix 时间戳, skill 会自动归一化, 同步参考下面 §错误兜底.
--record-flag / --asr-flag 取值, --city-code-by-phone-no 的 A/B 选号
策略, 以及隐私号 SubServiceType (201~206) 的区分等通用规范, 都沉淀在本 skill
内置的本地基础知识文档:
references/vms-fundamentals.md
所有 vms-* skill 共用同一份内容, 本地加载无外网依赖.
飞书原文 (可选): https://bytedance.sg.larkoffice.com/docx/Mv32dc0yooBn7txDxW8lsDdDgYb