Only handles the "binding relationship lifecycle": create / unbind / query. Actual calls are triggered by A → X → B; the Skill does not initiate calls.
Environment Variables
Authentication is resolved in the following priority order (consistent with other vms-* skills):
ARK_SKILL_API_KEY+ARK_SKILL_API_BASE→ Volcano Engine arkclaw Enterprise Edition. Please first configure AK/SK on the Volcano console page; arkclaw injects these two environment variables (ARK_SKILL_API_KEYis the API key,ARK_SKILL_API_BASEis the API base address), and the script usesBearerto authenticate and connect directly to this gateway, with no local signing required;VOLC_ACCESS_KEY+VOLC_SECRET_KEY(compatible withVOLCENGINE_ACCESS_KEY/VOLCENGINE_SECRET_KEY) → ordinary agents such as personal edition arkclaw / openclaw / coco / aime / claudecode, where the user directly tells the agent the AK/SK, and the script performs local HMAC-SHA256 (Volc V4) signing;- otherwise, report an error and prompt the user to fill in the AK/SK.
Commands
# AXB 指定 X 号绑定
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]
# 平台选号 + AXB 绑定 (推荐, 不用预先指定 X)
python3 scripts/secret_number.py select_and_bind_axb \
--phone-a <PhoneA> --phone-b <PhoneB> \
--number-pool-no <NumberPoolNo> [--city-code 010]
# AXN 指定 X 号绑定
python3 scripts/secret_number.py bind_axn \
--phone-a <PhoneA> --phone-x <PhoneX> \
--number-pool-no <NumberPoolNo>
# 平台选号 + AXN 绑定 (推荐)
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]
# AXNE 带分机号
python3 scripts/secret_number.py bind_axne \
--phone-a <PhoneA> --phone-x <PhoneX> --phone-b <PhoneB> \
--extension 8001 --number-pool-no <NumberPoolNo>
# 解绑 (AXB / AXN / AXNE 各自独立 Action, 任选其一)
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>
# 查询绑定关系 (单条, 服务端强制按 SubId 精查)
python3 scripts/secret_number.py query_subscription --sub-id <SubId>
# 批量查询绑定关系列表 (QuerySubscriptionForList)
# --number-pool-no 必填. 若用户只给了 X 号, 先调 byted-vms-number-pool 的
# `query_number --phone <X>` 反查号码所属号码池, 拿到 NumberPoolNo 后再回到本 skill.
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]
Key differences (relative to voice notification)
- The user did not specify the X number → use
select_and_bind_axb(SelectNumberAndBindAXB), letting the platform select a number in the same city based on--city-code. --expire-timeis the binding lifecycle, and accepts two formats: ① relative seconds (< 1e9, for example2592000= expires after 30 days), the skill automatically adds the current timestamp; ② absolute second-level unix timestamp (>= 1e9), passed through directly to TOP. Default is 30 days. The TOP side requires the final value to be at least 60 seconds later than the current time, otherwise it returnsExpireTime must be 1 minute later. When the user says "half a year" or "3 months", use relative seconds (for example, 180 days =15552000).--record-flagcontrols whether recording is enabled for that binding relationship,--asr-flagcontrols whether ASR recognition is enabled.
Standard Execution Flow
- Extract the A / B numbers, optional X, expiration duration, and whether to record from the user's semantics.
- Use byted-vms-number-pool to query the privacy number pool: the privacy number SubServiceType is 201~206 (
201AXB /202AXN /203AXNE /204AXYB /205PAXYB /206AXG), usually use--sub-service-type 201. If there is none, guide the user to https://console.volcengine.com/cloud_vms/number to apply for a number pool + number. - Default to
select_and_bind_axb. Only when the user explicitly says "I want to use a specific X number" go tobind_axb. - Return
SubId+PhoneNoXto the user; for subsequent unbinding/troubleshooting, useSubIdto callunbind_axborquery_subscription. - When the user only provides a certain number (commonly the X number) and wants to query the binding relationship, first dispatch byted-vms-number-pool
's
query_number --phone <号码>to obtainNumberPoolNo(the return will also includeSubServiceType/Pool/Numberdetails), then return to this skill to executequery_subscription_list --number-pool-no <NumberPoolNo> --phone-x <号码>. Do not directly call NumberPoolList / NumberList inside this skill, to maintain the layering of atomic capabilities.
Error Fallback
- Authentication failure: prompt to check AK/SK. For ordinary agents (personal edition arkclaw / openclaw / coco / aime / claudecode), check
VOLC_ACCESS_KEY/VOLC_SECRET_KEY; for Volcano Engine arkclaw Enterprise Edition, first configure AK/SK on the Volcano console page, then confirmARK_SKILL_API_KEY/ARK_SKILL_API_BASEhas been injected. NOT_IN_NUMBER_POOL: No available X number under the number pool → guide the user to https://console.volcengine.com/cloud_vms/number purchase additional privacy numbers.QUALIFICATION_*: Qualification issue → https://console.volcengine.com/cloud_vms/qualification.
Reference
- Privacy Number official documentation: https://www.volcengine.com/docs/6358/172141?lang=zh
- SelectNumberAndBindAXN
- QuerySubscriptionForList
- UnbindAXB / UnbindAXN / UnbindAXNE
📚 Basic Knowledge / Parameter Passing Reference
bind_axb / bind_axn / bind_axne of --expire-time Supports relative seconds (default 30 days)
or absolute second-level unix timestamps; skill will automatically normalize, and for synchronization refer to §Error Fallback below.
--record-flag / --asr-flag value, --city-code-by-phone-no A/B number selection
strategy, as well as general specifications such as the distinction of privacy number SubServiceType (201~206), are all consolidated in this skill's
built-in local foundational knowledge document:
references/vms-fundamentals.md
All vms-* skills share the same content, loaded locally with no external network dependency. Feishu original text (optional): https://bytedance.sg.larkoffice.com/docx/Mv32dc0yooBn7txDxW8lsDdDgYb