{"id":"377f83ad-a708-4352-a2cf-789158d1abb9","entityType":"agent","slug":"clawhub-ziliangzhu-vox-custom-phone-agent","name":"Vox 自定义电话 Bot","canonicalUrl":"https://www.xpersona.co/agent/clawhub-ziliangzhu-vox-custom-phone-agent","canonicalPath":"/agent/clawhub-ziliangzhu-vox-custom-phone-agent","generatedAt":"2026-10-14T14:39:58.459Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T00:25:37.359Z","emptyReason":null},"description":"Convert natural language phone tasks into structured Vox custom bot outbound calls with guided prompts and voice options, ensuring compliance and secure dial...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 968 downloads reported by the source. Last updated 10/12/2026.","installCommand":"clawhub skill install s175sche5fq6wyqyvyvy6pqfrs86n4yr:vox-custom-phone-agent","sourceUrl":"https://clawhub.ai/ziliangzhu/vox-custom-phone-agent","homepage":"https://clawhub.ai/ziliangzhu/skills/vox-custom-phone-agent","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/ziliangzhu/vox-custom-phone-agent","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/ziliangzhu/skills/vox-custom-phone-agent","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Vox 自定义电话 Bot technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-12T00:25:37.359Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T00:25:37.359Z","emptyReason":null},"stars":null,"forks":null,"downloads":968,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.0.6","tractionLabel":"968 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T00:25:37.294Z","emptyReason":null},"lastUpdatedAt":"2026-10-12T00:25:37.359Z","lastCrawledAt":"2026-10-12T00:25:37.294Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-13T00:25:37.294Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.6","createdAt":"2026-06-11T08:30:16.879Z","changelog":"**Default trial-first entry and removal of legacy configuration files.** - Now defaults to “promotion trial mode” on first use, without prompting the user to select usage mode, unless the user explicitly requests formal account access. - Missing use mode is automatically set to trial; the skill now asks only for essential call details upfront. - User is informed about trial mode and that credentials are not required unless they mention having a formal account. - Analytics fields (`use_mode=trial`, `use_mode_source=default`, `entry_strategy=default_trial`) added for backend usage tracking. - Removed legacy files: .env, .gitignore, and skill-card.md.","fileCount":41,"zipByteSize":72897},{"version":"1.0.5","createdAt":"2026-06-05T07:28:00.547Z","changelog":"vox-custom-phone-agent 1.0.5 - Added environment/configuration files: `.env`, `.env.example`, `.gitignore`. - Introduced analytics and call state resources: `analytics_client.js`, `analytics_manifest.json`, `call_job_store.js`, `distribution_channel.js`, `post_call_callback_client.js`, `vox_call_result_client.js`, `vox_result_poller.js` in the `resources` directory. - Removed old documentation file: `skill-card.md`. - SKILL.md unchanged in feature description, but infrastructure and resource structure improved for deployment and analytics support.","fileCount":43,"zipByteSize":72718},{"version":"1.0.4","createdAt":"2026-05-26T10:20:00.626Z","changelog":"- Removed the bundled trial credential file (`resources/trial_credentials.json`); trial mode now uses the credential-free endpoint, increasing security. - Updated trial mode behavior: now uses `POST https://vox.teddymobile.cn/vox/v2/outbound` without credentials, rather than packaged credentials. - Documentation in SKILL.md updated to cover new trial endpoint, clarify trial/formal distinction, and add guidance for lightweight trial flows. - No functional changes to API or task extraction other than trial endpoint; security and documentation improvements only.","fileCount":34,"zipByteSize":51133},{"version":"1.0.3","createdAt":"2026-05-26T08:08:10.363Z","changelog":"No user-facing changes in this version. - No file changes detected; documentation and functionality remain the same.","fileCount":35,"zipByteSize":50090},{"version":"1.0.2","createdAt":"2026-05-26T07:54:52.091Z","changelog":"- Adds a mandatory first step to always confirm usage mode (trial or formal account) before collecting any phone-call details, with a precise required prompt. - Updates the requirements so that useMode must be confirmed first, and if missing, no other fields are requested. - Clarifies user guidance: all other call-related questions are only asked after usage mode is confirmed. - Removes file: skill-card.md.","fileCount":35,"zipByteSize":49726},{"version":"1.0.1","createdAt":"2026-05-26T02:59:27.582Z","changelog":"Version 1.0.1 - Added a new skill metadata file: skill.json. - No other changes to logic or functionality.","fileCount":35,"zipByteSize":49192},{"version":"1.0.0","createdAt":"2026-05-25T11:36:11.268Z","changelog":"Vox Custom Phone Agent Skill 1.0.0 – Initial Release - Converts natural-language phone task requests into structured outbound TeddyMobile Vox custom bot calls. - Extracts call target, bot role, business goal, tone, and other context; prompts for missing information. - Validates fields and safely blocks high-risk or non-compliant call intents. - Supports promotion trial mode with visible usage tracking and registration guidance. - Requires explicit user choice of Vox voice type and trial/formal mode before making the call. - Returns clear call status, request ID, structured action prompts, and summary fields for host integration.","fileCount":33,"zipByteSize":46880}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s175sche5fq6wyqyvyvy6pqfrs86n4yr:vox-custom-phone-agent","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s175sche5fq6wyqyvyvy6pqfrs86n4yr:vox-custom-phone-agent` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/ziliangzhu/vox-custom-phone-agent before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-vox-custom-phone-agent/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-vox-custom-phone-agent/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-vox-custom-phone-agent/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-vox-custom-phone-agent/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-vox-custom-phone-agent/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-vox-custom-phone-agent/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-14T14:39:58.457Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-vox-custom-phone-agent/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-vox-custom-phone-agent/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-vox-custom-phone-agent/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-vox-custom-phone-agent/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T00:25:37.359Z","emptyReason":null},"readme":"Skill: Vox 自定义电话 Bot\n\nOwner: ziliangzhu\n\nSummary: Convert natural language phone tasks into structured Vox custom bot outbound calls with guided prompts and voice options, ensuring compliance and secure dial...\n\nTags: latest:1.0.6\n\nVersion history:\n\nv1.0.6 | 2026-06-11T08:30:16.879Z | user\n\n**Default trial-first entry and removal of legacy configuration files.**\n\n- Now defaults to “promotion trial mode” on first use, without prompting the user to select usage mode, unless the user explicitly requests formal account access.\n- Missing use mode is automatically set to trial; the skill now asks only for essential call details upfront.\n- User is informed about trial mode and that credentials are not required unless they mention having a formal account.\n- Analytics fields (`use_mode=trial`, `use_mode_source=default`, `entry_strategy=default_trial`) added for backend usage tracking.\n- Removed legacy files: .env, .gitignore, and skill-card.md.\n\nv1.0.5 | 2026-06-05T07:28:00.547Z | user\n\nvox-custom-phone-agent 1.0.5\n\n- Added environment/configuration files: `.env`, `.env.example`, `.gitignore`.\n- Introduced analytics and call state resources: `analytics_client.js`, `analytics_manifest.json`, `call_job_store.js`, `distribution_channel.js`, `post_call_callback_client.js`, `vox_call_result_client.js`, `vox_result_poller.js` in the `resources` directory.\n- Removed old documentation file: `skill-card.md`.\n- SKILL.md unchanged in feature description, but infrastructure and resource structure improved for deployment and analytics support.\n\nv1.0.4 | 2026-05-26T10:20:00.626Z | user\n\n- Removed the bundled trial credential file (`resources/trial_credentials.json`); trial mode now uses the credential-free endpoint, increasing security.\n- Updated trial mode behavior: now uses `POST https://vox.teddymobile.cn/vox/v2/outbound` without credentials, rather than packaged credentials.\n- Documentation in SKILL.md updated to cover new trial endpoint, clarify trial/formal distinction, and add guidance for lightweight trial flows.\n- No functional changes to API or task extraction other than trial endpoint; security and documentation improvements only.\n\nv1.0.3 | 2026-05-26T08:08:10.363Z | user\n\nNo user-facing changes in this version.\n\n- No file changes detected; documentation and functionality remain the same.\n\nv1.0.2 | 2026-05-26T07:54:52.091Z | user\n\n- Adds a mandatory first step to always confirm usage mode (trial or formal account) before collecting any phone-call details, with a precise required prompt.\n- Updates the requirements so that useMode must be confirmed first, and if missing, no other fields are requested.\n- Clarifies user guidance: all other call-related questions are only asked after usage mode is confirmed.\n- Removes file: skill-card.md.\n\nv1.0.1 | 2026-05-26T02:59:27.582Z | user\n\nVersion 1.0.1\n\n- Added a new skill metadata file: skill.json.\n- No other changes to logic or functionality.\n\nv1.0.0 | 2026-05-25T11:36:11.268Z | user\n\nVox Custom Phone Agent Skill 1.0.0 – Initial Release\n\n- Converts natural-language phone task requests into structured outbound TeddyMobile Vox custom bot calls.\n- Extracts call target, bot role, business goal, tone, and other context; prompts for missing information.\n- Validates fields and safely blocks high-risk or non-compliant call intents.\n- Supports promotion trial mode with visible usage tracking and registration guidance.\n- Requires explicit user choice of Vox voice type and trial/formal mode before making the call.\n- Returns clear call status, request ID, structured action prompts, and summary fields for host integration.\n\nArchive index:\n\nArchive v1.0.6: 41 files, 72897 bytes\n\nFiles: bmad_skill_manifest.yaml (1429b), FIRST_SETUP.md (1609b), GET_STARTED.md (2579b), package.json (644b), REGISTRATION_GUIDE.md (3008b), resources/analytics_client.js (16507b), resources/analytics_manifest.json (11083b), resources/business_context_rules.js (9268b), resources/call_job_store.js (1743b), resources/call_task.js (1306b), resources/content_safety_guard.js (2747b), resources/credentials_loader.js (2295b), resources/credentials.example.json (122b), resources/distribution_channel.js (936b), resources/hmac_outbound_client.js (3054b), resources/hosted_api_example.js (1808b), resources/implementation_checklist.md (1688b), resources/index.js (48048b), resources/intent_completeness.js (4025b), resources/phone_validator.js (1317b), resources/post_call_callback_client.js (3708b), resources/prompt_to_agent_profile.js (6389b), resources/prompt_to_call_intent.js (9002b), resources/request_id.js (329b), resources/result_advice.js (2096b), resources/risk_classifier.js (2534b), resources/run_demo.js (1106b), resources/run_tests.js (8513b), resources/task_briefing.js (2191b), resources/test_prompts.json (3782b), resources/trial_state.js (2147b), resources/voice_requirements.js (2507b), resources/voice_type_selector.js (5050b), resources/vox_call_result_client.js (2937b), resources/vox_result_poller.js (3202b), skill-card.md (2848b), skill.json (11210b), SKILL.md (10154b), WORKBUDDY.md (2189b), workflow.md (5893b), _meta.json (141b)\n\nFile v1.0.6:SKILL.md\n\n# Vox Custom Phone Agent Skill\r\n\r\nTurn a user's natural-language phone task into a TeddyMobile Vox `botType=custom` outbound call.\r\n\r\nThis skill is designed for Agent or Claw environments. It extracts the call target, bot identity, business goal, tone, constraints, and opening message from the user's prompt. When required information is missing, it asks targeted follow-up questions. Once the required fields are complete, it builds a Vox custom bot payload and starts the outbound call.\n\n## Default Trial Entry For WorkBuddy\n\nStart in promotion trial mode by default unless the user already clearly said `正式注册`, `正式账号`, `自己的凭证`, `VOX_APP_ID`, `VOX_SECRET`, `企业接入`, or `生产环境`.\n\nDo not ask the user to choose between trial and formal registration at the beginning. If the task is missing required call details, tell the user that the skill will use trial mode first and ask only for the most important missing call detail:\n\n```text\n我会先使用 Vox 试用模式帮你完成一次电话体验，不需要配置 VOX_APP_ID / VOX_SECRET。\n\n请提供要拨打的手机号和这通电话要完成的目标。\n如果你已有正式账号，也可以直接说“使用正式账号”。\n```\n\nIn default trial mode, call the credential-free Vox trial endpoint `POST https://vox.teddymobile.cn/vox/v2/outbound`. Do not ask the user for `VOX_APP_ID` or `VOX_SECRET` during trial mode. Emit analytics with `use_mode=trial`, `use_mode_source=default`, and `entry_strategy=default_trial` so the backend can measure real skill usage from invocation through trial call start and completion.\n\r\n## What This Skill Does\r\n\r\n- Parses natural-language prompts into a structured custom phone-agent task.\r\n- Guides the user when required fields are missing.\r\n- Generates Vox `extra.agent_profile` for `botType=custom`.\r\n- Requires the user to choose a Vox `voiceType` by code or voice name.\r\n- Validates phone numbers and blocks unsafe phone tasks.\r\n- Calls `POST https://vox.teddymobile.cn/vox/v1/outbound` with HMAC authentication for formal accounts.\n- Calls `POST https://vox.teddymobile.cn/vox/v2/outbound` without credentials for trial mode.\n- Returns the Vox request status and generated `requestId`.\r\n\r\n## What This Skill Does Not Do\r\n\r\n- It does not implement real-time `HTTP POST + SSE` conversation control.\r\n- It does not receive live call transcripts.\r\n- It does not expose or ship real Vox secrets in the skill package.\r\n- It does not support batch outbound calls in the MVP.\r\n- It does not run dry-run previews. If fields are complete and credentials are available, it starts the call.\r\n\r\n## Required Runtime Configuration\r\n\r\nFor formal direct Vox calls from the host environment:\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n\r\nOptional:\r\n\r\n- `VOX_BOT_ID` - may be empty for `botType=custom` if Vox has enabled that mode.\r\n- `VOX_OUTBOUND_BASE_URL` - defaults to `https://vox.teddymobile.cn`.\r\n- `VOX_CREDENTIALS_FILE` - path to a JSON credentials file.\r\n- `VOX_TRIAL_MODE` - when true, result messages include registration guidance. Trial calls use `/vox/v2/outbound` and do not require credentials.\n- `VOX_REGISTER_URL` - registration or trial application URL.\r\n- `VOX_TRIAL_LIMIT` - maximum local trial call attempts, defaults to 10.\r\n- `VOX_TRIAL_STATE_FILE` - optional path for local trial usage state.\r\n\r\nRecommended hosted mode:\r\n\r\n- Keep `VOX_SECRET` only on your backend.\r\n- Let Agent or Claw call your backend, and let your backend call Vox.\r\n- Never publish real credentials in the skill package.\r\n\r\n## Trial-To-Registration Flow\n\nWhen the user chooses trial mode, the skill uses the credential-free promotion trial endpoint. After generating or starting a call, it guides the user to register for formal Vox access so they can get their own `VOX_APP_ID`, `VOX_SECRET`, permissions, quota, and number resources.\n\nTrial mode should stay lightweight: if `callee`, `goal`, `role`, `voiceType`, and safety checks are complete, start the trial call without forcing detailed business-context collection. Ask for only the single most important missing field at a time. Keep the main result message short; detailed registration guidance can remain in structured fields such as `registrationMessage`, `actions`, and `buttons`.\n\r\nThe trial journey must be visible to the user:\r\n\r\n- Before missing-field prompts, mention that the user is currently in promotion trial mode.\r\n- After a call request is generated or started, say that the trial experience has been completed first.\r\n- Show visible trial usage, such as `已使用 1/10 次，剩余 9 次`.\r\n- Then give a clear call to action to register for formal enterprise access, including the registration URL and the benefits of registering.\r\n\r\nFor hosts such as WorkBuddy that render structured fields instead of full text, the skill also returns top-level fields: `actionPrompt`, `actions`, `buttons`, `quickReplies`, `suggestedActions`, `registrationMessage`, `registrationUrl`, `registrationBenefits`, `registrationSwitchInstruction`, and `nextStep`. Hosts should display these after trial calls. If button rendering is supported, render `actions` or `buttons` so the user can choose `注册正式账号`, `继续试用`, or `我已有正式凭证`.\r\n\r\nThe skill also returns `callTask`, `taskBriefing`, `briefingQuality`, `resultMeaning`, `failureAdvice`, `risk`, `voiceAnalysis`, `summaryRows`, and `summaryFooter` so hosts can render a clearer task summary and explain that `accepted` means Vox accepted the outbound task, not that the call has completed.\r\n\r\n## Required User Information\r\n\r\nThe skill must have these fields before it can start a call:\n\n1. `useMode` - defaults to promotion trial unless the user explicitly requests formal account mode.\n2. `callee` - destination mobile phone number.\n3. `goal` - what the call should accomplish.\n4. `role` - who the bot is calling as, unless the role can be safely inferred from the scenario.\n5. `voiceType` - user-selected voice code or voice name.\n6. `businessContext` - scenario-specific details when the prompt is too generic. Required for formal mode and complex/high-risk flows; optional for lightweight trial mode.\n\r\nFields that may be inferred or generated:\r\n\r\n- `name`\r\n- `gender`\r\n- `age`\r\n- `communicationStyle`\r\n- `background`\r\n- `skills`\r\n- `workflow`\r\n- `constraint`\r\n- `openingPrompt`\r\n- `requestId`\r\n\r\nVoice options:\r\n\r\n- `0` / 知愈：女，适合安抚、售后回访、心理陪伴。\r\n- `1` / 安辰：男，适合长辈、老人、用药或健康提醒。\r\n- `2` / 景珩：男，适合商务、课程、企业合作、科普讲解。\r\n- `3` / 知言：女，适合通知、公告、正式播报。\r\n- `4` / 星苒：女，适合闲聊、电商、生活服务。\r\n\r\n## User Guidance Rules\r\n\r\nIf `useMode` is missing, automatically set it to trial and continue collecting the minimum call details. If another required field is missing after defaulting to trial, do not call Vox. In trial mode, ask for only one missing field at a time; in formal mode, ask at most two concise follow-up questions.\n\r\nExamples:\r\n\r\n- Missing phone number: \"请提供要拨打的手机号。\"\r\n- Missing goal: \"请说明这通电话希望达成什么目标，例如通知、预约确认、回访或邀约。\"\r\n- Missing role: \"请说明 Bot 应以什么身份联系对方，例如客服、课程顾问、招聘助理、会议通知助理或商务经理。\"\r\n- Missing voice: \"请选择音色：0 知愈；1 安辰；2 景珩；3 知言；4 星苒。\"\r\n- Missing use mode: do not ask; default to trial and continue.\n- Missing business context: \"请补充更具体的业务背景，例如事项内容、时间、对象、处理边界和对方不同反馈时的跟进方式。\"\r\n- Multiple missing fields: \"请补充两个信息：要拨打的手机号；这通电话希望达成的具体目标。\"\r\n\r\nFor chat or companionship scenarios, require additional boundaries before calling: caller identity, chat purpose, allowed topics, forbidden topics, duration or stop condition, and refusal handling.\r\n\r\nAsk at most two questions at a time. Use the existing conversation context to merge follow-up answers into the pending call intent.\r\n\r\n## Safety Policy\n\nBlock or require rewriting for requests that involve:\n\r\n- Impersonation of banks, government, police, courts, or official institutions.\r\n- Asking for verification codes, passwords, bank cards, or private credentials.\r\n- Threats, harassment, abusive language, coercion, or illegal debt collection.\r\n- Investment inducement, transfer requests, illegal sales, or fraud-like behavior.\r\n- Medical, legal, or financial promises beyond basic notification or appointment reminders.\r\n\r\nIf blocked, explain briefly and suggest a compliant alternative.\n\n## AI Identity Handling\n\nThe skill does not proactively disclose AI identity in the opening prompt by default. The bot should introduce itself by the user-selected role, such as course advisor, after-sales support, notification assistant, or community care assistant.\n\nIf the callee explicitly asks whether the caller is AI, a robot, or a real human, the bot must answer truthfully that it is an AI voice assistant and then continue the conversation naturally if the callee is willing.\n\nDo not generate prompts that deny being AI when directly asked.\n\r\n## Typical Prompt\r\n\r\n```text\r\n先试用。帮我给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，语气专业但不要强推，使用景珩音色。\r\n```\r\n\r\n## Typical Result\r\n\r\n```text\r\n已发起 Vox 自定义 Bot 外呼。\r\n\r\n- 被叫号码：138****8000\r\n- Bot 角色：课程顾问\r\n- 任务目标：确认是否愿意预约试听\r\n- requestId：req_20260522153000001_ab12cd\r\n- 状态：accepted\r\n```\r\n\r\n## Implementation Entry Points\r\n\r\n- Workflow: `workflow.md`\r\n- Demo runner: `resources/run_demo.js`\r\n- Hosted API example: `resources/hosted_api_example.js`\r\n- Direct Vox client: `resources/hmac_outbound_client.js`\r\n- Intent extraction and completion: `resources/prompt_to_call_intent.js`, `resources/intent_completeness.js`\r\n- Profile generation: `resources/prompt_to_agent_profile.js`\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn7eq90b1gaf526fnsk07zn9t986me0d\",\n  \"slug\": \"vox-custom-phone-agent\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1781166616879\n}\n\nFile v1.0.6:FIRST_SETUP.md\n\n# First Setup\r\n\r\n## Vox Platform Requirements\r\n\r\nBefore real calls can work, the Vox account behind `VOX_APP_ID` and `VOX_SECRET` must be enabled by TeddyMobile Vox.\r\n\r\nChecklist:\r\n\r\n- Enterprise account is registered and approved.\r\n- Outbound API permission is enabled.\r\n- `botType=custom` is enabled.\r\n- Server egress IP is in the Vox IP whitelist.\r\n- Account has available outbound quota and number resources.\r\n- Server clock is accurate for GMT HMAC signing.\r\n\r\n## Environment Variables\r\n\r\nMinimum:\r\n\r\n```text\r\nVOX_APP_ID=...\r\nVOX_SECRET=...\r\n```\r\n\r\nFor local development, create `.env` from `.env.example` and keep it private. Do not publish `.env` or real credentials with the skill package.\r\n\r\nOptional:\r\n\r\n```text\r\nVOX_BOT_ID=\r\nVOX_OUTBOUND_BASE_URL=https://vox.teddymobile.cn\r\nVOX_CREDENTIALS_FILE=/secure/path/credentials.json\r\nSKILL_API_TOKEN=change-me\r\nVOX_TRIAL_MODE=true\r\nVOX_TRIAL_LIMIT=10\r\nVOX_TRIAL_STATE_FILE=/secure/path/trial-state.json\r\n```\r\n\r\n## Credential File Alternative\r\n\r\nCreate a secure file outside the public skill package:\r\n\r\n```json\r\n{\r\n  \"appId\": \"your-vox-app-id\",\r\n  \"secret\": \"your-vox-secret\",\r\n  \"botId\": \"\",\r\n  \"baseUrl\": \"https://vox.teddymobile.cn\"\r\n}\r\n```\r\n\r\nThen set:\r\n\r\n```text\r\nVOX_CREDENTIALS_FILE=/secure/path/credentials.json\r\n```\r\n\r\n## Production Recommendation\r\n\r\nUse `resources/hosted_api_example.js` as a starting point, then replace it with a production backend that adds:\r\n\r\n- User authentication.\r\n- User-level call quotas.\r\n- Content safety logging.\r\n- Phone number masking in logs.\r\n- Abuse prevention and audit trails.\r\n- TLS termination with HTTPS.\n\nFile v1.0.6:GET_STARTED.md\n\n# Get Started\r\n\r\n## Install\r\n\r\nThis package uses only Node.js built-ins. Use Node.js 18 or newer.\r\n\r\n```bash\r\ncd vox-custom-phone-agent\r\nnpm run smoke\r\n```\r\n\r\nThe smoke command runs with `--no-call`, so it does not call Vox.\r\n\r\n## Direct Vox Mode\n\nTrial prompts such as `先试用...` call `https://vox.teddymobile.cn/vox/v2/outbound` and do not require `VOX_APP_ID` or `VOX_SECRET`.\n\nFormal account calls use `https://vox.teddymobile.cn/vox/v1/outbound` and require credentials.\n\nConfigure credentials in environment variables:\n\r\n```bash\r\nexport VOX_APP_ID=\"your-vox-app-id\"\r\nexport VOX_SECRET=\"your-vox-secret\"\r\nexport VOX_BOT_ID=\"\"\r\n```\r\n\r\nOn Windows PowerShell:\r\n\r\n```powershell\r\n$env:VOX_APP_ID=\"your-vox-app-id\"\r\n$env:VOX_SECRET=\"your-vox-secret\"\r\n$env:VOX_BOT_ID=\"\"\r\n```\r\n\r\nThen run:\r\n\r\n```bash\r\nnode resources/run_demo.js \"给 13800138000 打电话，作为会议通知助理通知明天下午三点会议改到四点，使用知言音色。\"\r\n```\r\n\r\nDirect mode sends the call request to Vox as soon as required fields are complete.\r\n\r\n## Hosted Mode\r\n\r\nHosted mode is recommended for Agent or Claw distribution because the Vox secret stays on your backend.\r\n\r\n```bash\r\nexport VOX_APP_ID=\"your-vox-app-id\"\r\nexport VOX_SECRET=\"your-vox-secret\"\r\nexport SKILL_API_TOKEN=\"change-me\"\r\nnode resources/hosted_api_example.js\r\n```\r\n\r\nAgent or Claw calls:\r\n\r\n```http\r\nPOST http://localhost:3000/api/vox/custom-call\r\nAuthorization: Bearer change-me\r\nContent-Type: application/json\r\n```\r\n\r\n```json\r\n{\r\n  \"prompt\": \"给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，使用景珩音色。\"\r\n}\r\n```\r\n\r\n## Missing Field Guidance\r\n\r\nIf the prompt is incomplete, the handler returns `status: needs_input` and a user-facing question.\r\n\r\nExample:\r\n\r\n```json\r\n{\r\n  \"status\": \"needs_input\",\r\n  \"missing\": [\"callee\"],\r\n  \"message\": \"请提供要拨打的手机号。\"\r\n}\r\n```\r\n\r\nPass the saved `intent` back as `previousIntent` when the user answers.\r\n\r\n```json\r\n{\r\n  \"prompt\": \"手机号是 13800138000\",\r\n  \"previousIntent\": {\r\n    \"scenario\": \"会议通知\",\r\n    \"role\": \"会议通知助理\",\r\n    \"goal\": \"通知明天下午三点会议改到四点\"\r\n  }\r\n}\r\n```\r\n\r\n## Important\r\n\r\n- Do not put real `VOX_SECRET` in a public skill package.\r\n- Use hosted mode when distributing the skill to third-party users.\r\n- Confirm with Vox that your account is authorized for `botType=custom`, outbound calls, and your server IP whitelist.\r\n- Trial mode can guide users to register after testing. See `REGISTRATION_GUIDE.md`.\n\nFile v1.0.6:REGISTRATION_GUIDE.md\n\n# Registration Guide\n\nThis skill can run in two modes:\n\n## Promotion Trial Mode\n\nPromotion trial mode uses packaged trial Vox credentials so users can test the custom phone bot flow quickly before registering.\n\nThe user should be able to clearly perceive the journey:\n\n```text\n1. User enters the phone task prompt.\n2. User chooses the use mode: promotion trial or formal account.\n3. If trial is selected, complete the trial call first.\n4. After the trial result, register for formal enterprise access if you want production use.\n```\n\nEnable it with:\n\n```text\nVOX_TRIAL_MODE=true\nVOX_REGISTER_URL=https://vox-ai.teddymobile.cn/trial/apply\nVOX_TRIAL_LIMIT=10\n```\n\nWhen trial mode is enabled, missing-field guidance starts with a trial-mode reminder:\n\n```text\n当前为推广试用模式：你可以先完成一次试用外呼；体验后可注册企业账号获得专属凭证、额度和号码资源。\n试用额度：已使用 0/10 次，剩余 10 次。\n```\n\nSuccessful and failed call results include next-step registration guidance:\n\n```text\n试用进度：本次已优先使用推广试用能力完成体验流程。\n试用额度：已使用 1/10 次，剩余 9 次。\n\n正式使用建议：如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号。\n注册入口：https://vox-ai.teddymobile.cn/trial/apply\n注册后你将获得：专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n完成注册后，把新的 VOX_APP_ID / VOX_SECRET 替换当前试用配置，即可切换为正式账号。\n```\n\nTrial usage is stored locally in `.trial-state.json` by default. You can override this path with `VOX_TRIAL_STATE_FILE`.\n\nWhen trial usage reaches `VOX_TRIAL_LIMIT`, the skill stops using the credential-free trial endpoint and asks the user to register for formal access.\n\nUse this mode for demos, promotion, and low-risk testing.\n\n## Formal Production Mode\n\nProduction users should register and configure their own Vox credentials:\n\n```text\nVOX_APP_ID=your-enterprise-app-id\nVOX_SECRET=your-enterprise-secret\nVOX_TRIAL_MODE=false\n```\n\nFormal registration is needed for:\n\n- Dedicated enterprise identity.\n- Higher quota or production traffic.\n- Dedicated number resources.\n- IP whitelist and production permissions.\n- Better auditability and responsibility boundaries.\n\n## Suggested User Message\n\nAfter a trial call succeeds, tell the user:\n\n```text\n本次电话已使用推广试用能力发起。如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号并完成认证。注册后可获得专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n```\n\n## Notes\n\n- Trial mode uses `/vox/v2/outbound` without bundled credentials; use formal credentials only for production `/vox/v1/outbound` calls.\n- If the skill is publicly distributed, hosted backend mode is safer than shipping real credentials.\n- Keep rate limits and content-safety checks enabled during trial mode.\n\nFile v1.0.6:resources/implementation_checklist.md\n\n# Implementation Checklist\n\n## Skill Behavior\n\n- [ ] Extract `callee`, `goal`, `role`, `voiceType`, scenario, tone, and constraints from prompt.\n- [ ] Ask for missing `callee`, `goal`, `role`, or `voiceType` before calling Vox.\n- [ ] Ask no more than two follow-up questions at a time.\n- [ ] Merge follow-up answers into pending intent.\n- [ ] Do not run dry-run preview in normal flow.\n- [ ] Call Vox immediately when required fields and credentials are available.\n\n## Vox Payload\n\n- [ ] `botType` is always `custom`.\n- [ ] `botid` is `VOX_BOT_ID` or empty string.\n- [ ] `requestId` is unique per call attempt.\n- [ ] `extra` is a JSON string.\n- [ ] `extra.voiceType` is selected by the user and is one of `0`, `1`, `2`, `3`, `4`.\n- [ ] `extra.agent_profile` includes all required Vox fields.\n\n## Security\n\n- [ ] Do not publish real `VOX_SECRET`.\n- [ ] Prefer hosted mode for public Agent or Claw use.\n- [ ] Block impersonation, credential collection, threats, harassment, and fraud.\n- [ ] Mask phone numbers in user-visible results and logs.\n- [ ] Add backend user authentication before production use.\n- [ ] Add per-user and per-day rate limits before production use.\n\n## Vox Account\n\n- [ ] Account is approved by Vox.\n- [ ] Outbound API permission is enabled.\n- [ ] `botType=custom` permission is enabled.\n- [ ] IP whitelist includes backend egress IP.\n- [ ] Quota and number resources are available.\n\n## Verification\n\n- [ ] Run `npm run smoke`.\n- [ ] Test missing phone number follow-up.\n- [ ] Test missing goal follow-up.\n- [ ] Test unsafe prompt blocking.\n- [ ] Test HMAC signing against a known integration environment.\n- [ ] Test real call with a controlled internal phone number.\n\nFile v1.0.6:skill-card.md\n\n## Description:\n\nConverts natural-language phone tasks into TeddyMobile Vox custom bot outbound calls with guided missing-field collection, voice selection, safety checks, and trial or formal-account execution.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[ziliangzhu](https://clawhub.ai/user/ziliangzhu)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to turn a natural-language outbound calling goal into a structured Vox custom phone-agent request. It is suited for guided trial calls, formal Vox account integrations, and hosted deployments that keep Vox credentials outside the public skill package.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can place real outbound phone calls.\n\nMitigation: Require explicit user confirmation before any call is started and enforce per-user call quotas.\n\nRisk: Hosted API use can expose call initiation capability if left unauthenticated.\n\nMitigation: Require authentication for hosted endpoints and keep Vox credentials only on a controlled backend.\n\nRisk: Call data, transcripts, analytics, or callbacks may expose sensitive information.\n\nMitigation: Minimize analytics, mask phone numbers, avoid returning full transcripts by default, and restrict callback destinations.\n\nRisk: Callees may not understand that the caller is an AI voice assistant.\n\nMitigation: Disclose AI identity at call start and answer truthfully if the callee asks whether the caller is AI.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/ziliangzhu/skills/vox-custom-phone-agent)\n- [SKILL.md](artifact/SKILL.md)\n- [Get Started](artifact/GET_STARTED.md)\n- [First Setup](artifact/FIRST_SETUP.md)\n- [Registration Guide](artifact/REGISTRATION_GUIDE.md)\n- [WorkBuddy Result Display Notes](artifact/WORKBUDDY.md)\n- [Vox trial registration](https://vox-ai.teddymobile.cn/trial/apply)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, json, api calls, configuration, guidance]\n\n**Output Format:** [Markdown or JSON-like structured results with follow-up questions, masked phone numbers, Vox request status, requestId, task summaries, and registration guidance.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May initiate outbound Vox API calls when required fields are complete and safety checks pass; trial mode uses the credential-free Vox trial endpoint, while formal mode requires Vox credentials.]\n\n## Skill Version(s):\n\n1.0.6 (source: ClawHub server release evidence; artifact manifests report 0.1.0)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.6:WORKBUDDY.md\n\n# WorkBuddy Result Display Notes\n\nWorkBuddy may render tool results from selected top-level fields instead of showing the full `message` string. For that reason, the skill returns formal registration guidance in several redundant top-level fields after trial usage.\n\n## Fields To Display After Trial\n\nPrefer displaying these fields when present:\n\n- `summaryTitle`\n- `summaryRows`\n- `summaryFooter`\n- `callTask`\n- `taskBriefing.taskBriefing`\n- `resultMeaning.meaning`\n- `failureAdvice.userMessage`\n- `actionPrompt`\n- `actions`\n- `buttons`\n- `quickReplies`\n- `suggestedActions`\n- `registrationMessage`\n- `registrationUrl`\n- `registrationBenefits`\n- `registrationSwitchInstruction`\n- `nextStep`\n\nIf WorkBuddy supports clickable choices, render `buttons` or `actions` as user-selectable options. The skill returns three actions:\n\n```json\n[\n  {\n    \"id\": \"register_formal_account\",\n    \"type\": \"url\",\n    \"label\": \"注册正式账号\",\n    \"url\": \"https://vox-ai.teddymobile.cn/trial/apply\",\n    \"value\": \"正式注册\"\n  },\n  {\n    \"id\": \"continue_trial\",\n    \"type\": \"reply\",\n    \"label\": \"继续试用\",\n    \"value\": \"继续试用\"\n  },\n  {\n    \"id\": \"setup_formal_credentials\",\n    \"type\": \"reply\",\n    \"label\": \"我已有正式凭证\",\n    \"value\": \"我已有正式凭证\"\n  }\n]\n```\n\nThe most complete field is:\n\n```text\nregistrationMessage\n```\n\nExample:\n\n```text\n正式使用建议\n如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号。\n注册入口：https://vox-ai.teddymobile.cn/trial/apply\n注册后你将获得：专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n完成注册后，把新的 VOX_APP_ID / VOX_SECRET 替换当前试用配置，即可切换为正式账号。\n```\n\nIf WorkBuddy supports nested display fields, it can also use:\n\n```text\ndisplay.registrationGuide\ndisplay.actionPrompt\ndisplay.actions\ndisplay.buttons\ndisplay.nextStep\ndisplay.registrationUrl\n```\n\n## Why This Exists\n\nThe user must perceive the full journey:\n\n```text\nchoose trial or formal mode -> complete trial -> see formal registration guidance\n```\n\nDo not hide the formal registration guidance after an accepted trial call.\n\nFile v1.0.6:workflow.md\n\n# Vox Custom Phone Agent Workflow\n\n## Goal\n\nConvert a user's natural-language prompt into a Vox `botType=custom` outbound call. If required fields are missing, ask for the missing fields. If all required fields are present and the request is safe, call Vox immediately.\n\n## Runtime Flow\n\n1. Receive the user prompt.\n2. Check whether the user has selected usage mode: trial or formal registration.\n3. If usage mode is missing, ask only: `请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。` Then stop.\n4. Load any pending call intent from conversation state.\n5. Extract new fields from the prompt.\n6. Merge extracted fields into the pending intent.\n7. Run content-safety checks.\n8. Validate required fields.\n9. If required fields are missing, ask targeted follow-up questions and stop.\n10. Generate `agent_profile`.\n11. Use the user-selected `voiceType`.\n12. Load Vox credentials only for formal mode. Trial mode uses the credential-free `/vox/v2/outbound` endpoint and must not ask for `VOX_APP_ID` or `VOX_SECRET`.\n13. Build the outbound payload with `botType=custom`.\n14. Sign the request with HMAC-SHA256.\n15. POST formal calls to `https://vox.teddymobile.cn/vox/v1/outbound`, or trial calls to `https://vox.teddymobile.cn/vox/v2/outbound`.\n16. Return masked phone number, bot role, task goal, `requestId`, and status.\n\n## Required Intent Fields\n\n- `callee`: destination phone number.\n- `goal`: concrete purpose of the call.\n- `role`: caller identity, unless safely inferred.\n- `voiceType`: selected by code `0-4` or name 知愈、安辰、景珩、知言、星苒.\n- `useMode`: selected by the user before collecting other fields. `trial` means promotion trial. `formal` means using formal enterprise credentials or registering first.\n- `businessContext`: scenario-specific background if the prompt is too generic, such as service item, event time, product, follow-up boundaries, or branch handling rules.\n\n## Follow-Up Behavior\n\nWhen `useMode` is missing, ask only for trial/formal mode and stop. After usage mode is known, ask no more than two questions for other missing fields. Do not show a dry-run preview. Do not call Vox until all required fields are available.\n\nTrial mode uses a lightweight flow: require only phone number, goal, Bot role, selected voice, and safety approval. Do not block trial calls on detailed `businessContext`; collect richer scenario details only for formal mode, complex tasks, or risky domains. Trial follow-up should ask for the single highest-priority missing field.\n\nExamples:\n\n```text\n请提供要拨打的手机号。\n```\n\n```text\n请补充两个信息：要拨打的手机号；这通电话希望达成的具体目标。\n```\n\n```text\n请说明 Bot 应以什么身份联系对方，例如客服、课程顾问、招聘助理、会议通知助理或商务经理。\n```\n\n```text\n请选择音色：0 知愈（女，安抚/回访）；1 安辰（男，长辈/老人）；2 景珩（男，商务/课程/科普）；3 知言（女，通知/公告）；4 星苒（女，闲聊/电商/生活服务）。\n```\n\n```text\n请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。\n```\n\n```text\n请补充这次售后/维修回访的业务背景，例如：是哪次维修、维修内容或产品、希望确认哪些问题、不满意时是否安排人工客服跟进，以及不能承诺哪些事项。\n```\n\n```text\n请补充聊天场景的边界：Bot 身份、聊天目的、可聊话题、不能聊的话题、通话时长或结束条件，以及对方不想聊时是否立即礼貌结束。\n```\n\n## Voice Selection\n\nDo not silently choose the voice in normal flow. If the user does not specify a voice, ask them to choose one. Accept either code or name, for example `3`, `知言`, `用知言音色`, or `voiceType=3`.\n\n## Safe Defaults\n\nIf unspecified, generate these defaults:\n\n- `name`: 小知\n- `gender`: 女\n- `age`: 26\n- `communicationStyle`: 礼貌, 清晰, 专业\n- `constraint`: 保持礼貌；尊重对方意愿；不得索要敏感隐私信息；对方拒绝或不方便时礼貌结束\n\nIdentity default: do not proactively disclose AI identity in the opening prompt, but if the callee directly asks whether the caller is AI, a robot, or a real human, answer truthfully that it is an AI voice assistant.\n\n## Scenario Defaults\n\n| Scenario | Role | Suggested Voice Type | Style |\n| --- | --- | --- | --- |\n| 会议通知 | 会议通知助理 | 3 知言 | 正式, 简洁, 清晰 |\n| 售后回访 | 售后客服 | 0 知愈 | 耐心, 真诚, 礼貌 |\n| 课程邀约 | 课程顾问 | 2 景珩 | 专业, 温和, 克制 |\n| 面试通知 | 招聘助理 | 3 知言 | 正式, 友好, 清晰 |\n| 商务合作 | 商务经理 | 2 景珩 | 专业, 稳重, 高效 |\n| 健康提醒 | 健康提醒助手 | 1 安辰 | 温和, 清楚, 耐心 |\n| 活动提醒 | 活动通知助理 | 3 知言 | 清晰, 友好, 简洁 |\n\n## Vox Outbound Payload Shape\n\nTrial mode uses the same payload shape except it omits `appId` and sends the request to `/vox/v2/outbound` without HMAC headers.\n\n```json\n{\n  \"appId\": \"VOX_APP_ID\",\n  \"botid\": \"\",\n  \"callee\": \"13800138000\",\n  \"requestId\": \"req_20260522153000001_ab12cd\",\n  \"botType\": \"custom\",\n  \"extra\": \"{\\\"voiceType\\\":\\\"2\\\",\\\"agent_profile\\\":{...}}\"\n}\n```\n\nImportant: `extra` is a JSON string, not a nested object.\n\n## Error Handling\n\n- Missing user fields: ask follow-up questions.\n- Unsafe content: refuse and suggest a safe rewrite.\n- Missing credentials: say which Vox configuration is missing.\n- Vox `401`: check credentials, server time, and signature.\n- Vox `403`: check interface permission, IP whitelist, and account authorization.\n- Vox non-zero `code`: return `code`, `msg`, and `requestId` if present.\n\nFile v1.0.6:package.json\n\n{\r\n  \"name\": \"vox-custom-phone-agent\",\r\n  \"version\": \"0.1.0\",\r\n  \"description\": \"Agent/Claw skill resources for Vox botType=custom outbound phone calls.\",\r\n  \"type\": \"commonjs\",\r\n  \"main\": \"resources/index.js\",\r\n  \"scripts\": {\r\n    \"demo\": \"node resources/run_demo.js\",\r\n    \"smoke\": \"node resources/run_demo.js \\\"先试用。给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，语气专业但不要强推，使用景珩音色。\\\" --no-call\",\r\n    \"test:prompts\": \"node resources/run_tests.js\"\r\n  },\r\n  \"engines\": {\r\n    \"node\": \">=18\"\r\n  },\r\n  \"license\": \"UNLICENSED\"\r\n}\n\nFile v1.0.6:resources/analytics_manifest.json\n\n{\r\n  \"skill_id\": \"vox-custom-phone-agent\",\r\n  \"skill_name\": \"Vox Custom Phone Agent Skill\",\r\n  \"skill_version\": \"0.1.0\",\r\n  \"analytics\": {\r\n    \"journeyStartEvent\": \"usage_started\",\r\n    \"journeyEndEvents\": [\r\n      \"run_completed\",\r\n      \"run_failed\",\r\n      \"vox.outbound_call_failed\",\r\n      \"vox.safety_blocked\"\r\n    ],\r\n    \"successEvents\": [\r\n      \"run_completed\"\r\n    ],\r\n    \"failureEvents\": [\r\n      \"run_failed\",\r\n      \"vox.outbound_call_failed\",\r\n      \"vox.safety_blocked\"\r\n    ],\r\n    \"abandonEvents\": [\r\n      \"vox.needs_input\",\r\n      \"vox.credentials_missing\"\r\n    ],\r\n    \"funnelEvents\": [\r\n      \"usage_started\",\r\n      \"skill_invoked\",\r\n      \"vox_custom_phone_agent.input_received\",\r\n      \"vox.trial_auto_selected\",\r\n      \"vox_custom_phone_agent.intent_parsed\",\r\n      \"vox_custom_phone_agent.policy_checked\",\r\n      \"vox.task_ready\",\r\n      \"run_started\",\r\n      \"vox.outbound_call_started\",\r\n      \"vox.outbound_call_completed\",\r\n      \"run_completed\"\r\n    ],\r\n    \"businessStages\": [\r\n      {\r\n        \"stage\": \"start\",\r\n        \"events\": [\r\n          \"usage_started\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"invoke\",\r\n        \"events\": [\r\n          \"skill_invoked\",\r\n          \"vox_custom_phone_agent.input_received\",\r\n          \"vox.trial_auto_selected\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"intent\",\r\n        \"events\": [\r\n          \"vox_custom_phone_agent.intent_parsed\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"policy\",\r\n        \"events\": [\r\n          \"vox_custom_phone_agent.policy_checked\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"prepare\",\r\n        \"events\": [\r\n          \"vox.task_ready\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"run\",\r\n        \"events\": [\r\n          \"run_started\",\r\n          \"vox.outbound_call_started\",\r\n          \"vox.outbound_call_completed\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"completed\",\r\n        \"events\": [\r\n          \"run_completed\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"failed\",\r\n        \"events\": [\r\n          \"run_failed\",\r\n          \"vox.outbound_call_failed\",\r\n          \"vox.safety_blocked\",\r\n          \"vox.credentials_missing\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"needs_input\",\r\n        \"events\": [\r\n          \"vox.needs_input\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"conversion\",\r\n        \"events\": [\r\n          \"vox.registration_prompted\"\r\n        ]\r\n      }\r\n    ],\r\n    \"eventAliases\": {\r\n      \"skill_invoked\": [\r\n        \"usage_started\",\r\n        \"skill_invoked\",\r\n        \"journey_started\",\r\n        \"invoked\"\r\n      ],\r\n      \"skill_needs_input\": [\r\n        \"vox.needs_input\",\r\n        \"skill_needs_input\",\r\n        \"needs_input\"\r\n      ],\r\n      \"skill_safety_blocked\": [\r\n        \"vox.safety_blocked\",\r\n        \"skill_safety_blocked\",\r\n        \"safety_blocked\",\r\n        \"blocked\"\r\n      ],\r\n      \"skill_credentials_missing\": [\r\n        \"vox.credentials_missing\",\r\n        \"skill_credentials_missing\",\r\n        \"credentials_missing\"\r\n      ],\r\n      \"skill_task_ready\": [\r\n        \"vox.task_ready\",\r\n        \"skill_task_ready\",\r\n        \"skill_config_completed\",\r\n        \"task_ready\",\r\n        \"ready\"\r\n      ],\r\n      \"skill_run_started\": [\r\n        \"run_started\",\r\n        \"skill_run_started\",\r\n        \"execution_started\"\r\n      ],\r\n      \"skill_run_completed\": [\r\n        \"run_completed\",\r\n        \"skill_run_completed\",\r\n        \"usage_finished\",\r\n        \"journey_finished\",\r\n        \"completed\"\r\n      ],\r\n      \"skill_run_failed\": [\r\n        \"run_failed\",\r\n        \"skill_run_failed\",\r\n        \"journey_failed\",\r\n        \"failed\"\r\n      ],\r\n      \"skill_registration_prompted\": [\r\n        \"vox.registration_prompted\",\r\n        \"skill_registration_prompted\",\r\n        \"registration_prompted\",\r\n        \"needs_registration\"\r\n      ],\r\n      \"business_step_completed\": [\r\n        \"vox_custom_phone_agent.input_received\",\r\n        \"vox_custom_phone_agent.intent_parsed\",\r\n        \"vox_custom_phone_agent.policy_checked\",\r\n        \"business_step_completed\",\r\n        \"step_completed\",\r\n        \"vox.trial_auto_selected\"\r\n      ],\r\n      \"tool_call_started\": [\r\n        \"vox.outbound_call_started\",\r\n        \"tool_call_started\",\r\n        \"tool_called\",\r\n        \"api_request_started\"\r\n      ],\r\n      \"tool_call_completed\": [\r\n        \"vox.outbound_call_completed\",\r\n        \"tool_call_completed\",\r\n        \"tool_result_received\",\r\n        \"api_request_completed\"\r\n      ],\r\n      \"tool_call_failed\": [\r\n        \"vox.outbound_call_failed\",\r\n        \"tool_call_failed\",\r\n        \"tool_failed\",\r\n        \"api_request_failed\"\r\n      ],\r\n      \"business_step_failed\": [\r\n        \"business_step_failed\",\r\n        \"step_failed\"\r\n      ],\r\n      \"skill_trial_auto_selected\": [\r\n        \"vox.trial_auto_selected\",\r\n        \"skill_trial_auto_selected\",\r\n        \"trial_auto_selected\",\r\n        \"default_trial_selected\"\r\n      ]\r\n    },\r\n    \"dimensions\": [\r\n      {\r\n        \"name\": \"source\",\r\n        \"source\": \"metadata.source\"\r\n      },\r\n      {\r\n        \"name\": \"scenario\",\r\n        \"source\": \"metadata.scenario\"\r\n      },\r\n      {\r\n        \"name\": \"voice_type\",\r\n        \"source\": \"metadata.voice_type\"\r\n      },\r\n      {\r\n        \"name\": \"use_mode\",\r\n        \"source\": \"metadata.use_mode\"\r\n      },\r\n      {\r\n        \"name\": \"use_mode_source\",\r\n        \"source\": \"metadata.use_mode_source\"\r\n      },\r\n      {\r\n        \"name\": \"entry_strategy\",\r\n        \"source\": \"metadata.entry_strategy\"\r\n      }\r\n    ],\r\n    \"metrics\": [\r\n      {\r\n        \"name\": \"call_success_count\",\r\n        \"type\": \"count\",\r\n        \"event\": \"run_completed\"\r\n      },\r\n      {\r\n        \"name\": \"call_success_rate\",\r\n        \"type\": \"conversion_rate\",\r\n        \"from\": \"skill_invoked\",\r\n        \"to\": \"run_completed\"\r\n      },\r\n      {\r\n        \"name\": \"avg_call_task_duration\",\r\n        \"type\": \"avg_duration\",\r\n        \"from\": \"run_started\",\r\n        \"to\": \"run_completed\"\r\n      }\r\n    ]\r\n  },\r\n  \"events\": [\r\n    {\r\n      \"event_name\": \"usage_started\",\r\n      \"label\": \"start usage\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"skill_invoked\",\r\n      \"label\": \"skill invoked\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox_custom_phone_agent.input_received\",\r\n      \"label\": \"input received\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.trial_auto_selected\",\r\n      \"label\": \"trial auto selected\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox_custom_phone_agent.intent_parsed\",\r\n      \"label\": \"intent parsed\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox_custom_phone_agent.policy_checked\",\r\n      \"label\": \"policy checked\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.task_ready\",\r\n      \"label\": \"task ready\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"run_started\",\r\n      \"label\": \"run started\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.outbound_call_started\",\r\n      \"label\": \"outbound call started\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.outbound_call_completed\",\r\n      \"label\": \"outbound call completed\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"run_completed\",\r\n      \"label\": \"run completed\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"run_failed\",\r\n      \"label\": \"run failed\",\r\n      \"type\": \"branch_event\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.outbound_call_failed\",\r\n      \"label\": \"outbound call failed\",\r\n      \"type\": \"branch_event\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.safety_blocked\",\r\n      \"label\": \"safety blocked\",\r\n      \"type\": \"branch_event\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.needs_input\",\r\n      \"label\": \"needs input\",\r\n      \"type\": \"branch_event\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.credentials_missing\",\r\n      \"label\": \"credentials missing\",\r\n      \"type\": \"branch_event\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.registration_prompted\",\r\n      \"label\": \"registration prompted\",\r\n      \"type\": \"branch_event\"\r\n    }\r\n  ],\r\n  \"funnel_steps\": [\r\n    \"usage_started\",\r\n    \"skill_invoked\",\r\n    \"vox_custom_phone_agent.input_received\",\r\n    \"vox.trial_auto_selected\",\r\n    \"vox_custom_phone_agent.intent_parsed\",\r\n    \"vox_custom_phone_agent.policy_checked\",\r\n    \"vox.task_ready\",\r\n    \"run_started\",\r\n    \"vox.outbound_call_started\",\r\n    \"vox.outbound_call_completed\",\r\n    \"run_completed\"\r\n  ],\r\n  \"branch_events\": [\r\n    {\r\n      \"key\": \"run_failed\",\r\n      \"label\": \"run failed\",\r\n      \"event_name\": \"run_failed\",\r\n      \"tone\": \"danger\"\r\n    },\r\n    {\r\n      \"key\": \"outbound_call_failed\",\r\n      \"label\": \"outbound call failed\",\r\n      \"event_name\": \"vox.outbound_call_failed\",\r\n      \"tone\": \"danger\"\r\n    },\r\n    {\r\n      \"key\": \"safety_blocked\",\r\n      \"label\": \"safety blocked\",\r\n      \"event_name\": \"vox.safety_blocked\",\r\n      \"tone\": \"danger\"\r\n    },\r\n    {\r\n      \"key\": \"needs_input\",\r\n      \"label\": \"needs input\",\r\n      \"event_name\": \"vox.needs_input\",\r\n      \"tone\": \"warning\"\r\n    },\r\n    {\r\n      \"key\": \"credentials_missing\",\r\n      \"label\": \"credentials missing\",\r\n      \"event_name\": \"vox.credentials_missing\",\r\n      \"tone\": \"warning\"\r\n    },\r\n    {\r\n      \"key\": \"registration_prompted\",\r\n      \"label\": \"registration prompted\",\r\n      \"event_name\": \"vox.registration_prompted\",\r\n      \"tone\": \"success\"\r\n    }\r\n  ],\r\n  \"property_dimensions\": [\r\n    {\r\n      \"key\": \"source\",\r\n      \"label\": \"source\",\r\n      \"type\": \"string\"\r\n    },\r\n    {\r\n      \"key\": \"scenario\",\r\n      \"label\": \"scenario\",\r\n      \"type\": \"string\"\r\n    },\r\n    {\r\n      \"key\": \"voice_type\",\r\n      \"label\": \"voice type\",\r\n      \"type\": \"string\"\r\n    },\r\n    {\r\n      \"key\": \"use_mode\",\r\n      \"label\": \"use mode\",\r\n      \"type\": \"string\"\r\n    },\r\n    {\r\n      \"key\": \"use_mode_source\",\r\n      \"label\": \"use mode source\",\r\n      \"type\": \"string\"\r\n    },\r\n    {\r\n      \"key\": \"entry_strategy\",\r\n      \"label\": \"entry strategy\",\r\n      \"type\": \"string\"\r\n    }\r\n  ],\r\n  \"allowed_sources\": [\r\n    \"skillhub\",\r\n    \"clawhub\",\r\n    \"unknown\",\r\n    \"internal\"\r\n  ],\r\n  \"allowed_events\": [\r\n    \"usage_started\",\r\n    \"skill_invoked\",\r\n    \"vox_custom_phone_agent.input_received\",\r\n    \"vox.trial_auto_selected\",\r\n    \"vox_custom_phone_agent.intent_parsed\",\r\n    \"vox_custom_phone_agent.policy_checked\",\r\n    \"vox.task_ready\",\r\n    \"run_started\",\r\n    \"vox.outbound_call_started\",\r\n    \"vox.outbound_call_completed\",\r\n    \"run_completed\",\r\n    \"run_failed\",\r\n    \"vox.outbound_call_failed\",\r\n    \"vox.safety_blocked\",\r\n    \"vox.needs_input\",\r\n    \"vox.credentials_missing\",\r\n    \"vox.registration_prompted\",\r\n    \"skill_needs_input\",\r\n    \"skill_safety_blocked\",\r\n    \"skill_credentials_missing\",\r\n    \"skill_task_ready\",\r\n    \"skill_run_started\",\r\n    \"skill_run_completed\",\r\n    \"skill_run_failed\",\r\n    \"skill_registration_prompted\",\r\n    \"business_step_completed\",\r\n    \"business_step_failed\",\r\n    \"tool_call_started\",\r\n    \"tool_call_completed\",\r\n    \"tool_call_failed\",\r\n    \"skill_trial_auto_selected\"\r\n  ]\r\n}\n\nFile v1.0.6:resources/credentials.example.json\n\n{\n  \"appId\": \"your-vox-app-id\",\n  \"secret\": \"your-vox-secret\",\n  \"botId\": \"\",\n  \"baseUrl\": \"https://vox.teddymobile.cn\"\n}\n\nArchive v1.0.5: 43 files, 72718 bytes\n\nFiles: .env (247b), .gitignore (109b), bmad_skill_manifest.yaml (1429b), FIRST_SETUP.md (1609b), GET_STARTED.md (2579b), package.json (644b), REGISTRATION_GUIDE.md (3008b), resources/analytics_client.js (16205b), resources/analytics_manifest.json (10146b), resources/business_context_rules.js (9268b), resources/call_job_store.js (1743b), resources/call_task.js (1306b), resources/content_safety_guard.js (2747b), resources/credentials_loader.js (2295b), resources/credentials.example.json (122b), resources/distribution_channel.js (936b), resources/hmac_outbound_client.js (3054b), resources/hosted_api_example.js (1808b), resources/implementation_checklist.md (1688b), resources/index.js (46895b), resources/intent_completeness.js (4025b), resources/phone_validator.js (1317b), resources/post_call_callback_client.js (3708b), resources/prompt_to_agent_profile.js (6389b), resources/prompt_to_call_intent.js (9002b), resources/request_id.js (329b), resources/result_advice.js (2096b), resources/risk_classifier.js (2534b), resources/run_demo.js (1106b), resources/run_tests.js (8513b), resources/task_briefing.js (2191b), resources/test_prompts.json (3739b), resources/trial_state.js (2147b), resources/voice_requirements.js (2507b), resources/voice_type_selector.js (5050b), resources/vox_call_result_client.js (2937b), resources/vox_result_poller.js (3202b), skill-card.md (2894b), skill.json (10404b), SKILL.md (9963b), WORKBUDDY.md (2189b), workflow.md (5893b), _meta.json (141b)\n\nFile v1.0.5:SKILL.md\n\n# Vox Custom Phone Agent Skill\r\n\r\nTurn a user's natural-language phone task into a TeddyMobile Vox `botType=custom` outbound call.\r\n\r\nThis skill is designed for Agent or Claw environments. It extracts the call target, bot identity, business goal, tone, constraints, and opening message from the user's prompt. When required information is missing, it asks targeted follow-up questions. Once the required fields are complete, it builds a Vox custom bot payload and starts the outbound call.\n\n## Mandatory First Step For WorkBuddy\n\nBefore asking for phone-call details, the skill must first confirm the usage mode unless the user already clearly said `试用`, `先试用`, `体验`, `正式注册`, `正式账号`, or `自己的凭证`.\n\nIf usage mode is missing, do not ask for caller identity, chat purpose, duration, voice, or other fields yet. Reply exactly with a mode choice and stop:\n\n```text\n请选择使用方式：\n1. 先用推广试用体验一次，不需要填写 VOX_APP_ID / VOX_SECRET；\n2. 使用正式账号/注册 Vox 企业账号后接入，需要配置自己的 VOX_APP_ID / VOX_SECRET。\n\n回复“试用”或“正式注册”即可。\n```\n\nIn trial mode, call the credential-free Vox trial endpoint `POST https://vox.teddymobile.cn/vox/v2/outbound`. Do not ask the user for `VOX_APP_ID` or `VOX_SECRET` during trial mode.\n\r\n## What This Skill Does\r\n\r\n- Parses natural-language prompts into a structured custom phone-agent task.\r\n- Guides the user when required fields are missing.\r\n- Generates Vox `extra.agent_profile` for `botType=custom`.\r\n- Requires the user to choose a Vox `voiceType` by code or voice name.\r\n- Validates phone numbers and blocks unsafe phone tasks.\r\n- Calls `POST https://vox.teddymobile.cn/vox/v1/outbound` with HMAC authentication for formal accounts.\n- Calls `POST https://vox.teddymobile.cn/vox/v2/outbound` without credentials for trial mode.\n- Returns the Vox request status and generated `requestId`.\r\n\r\n## What This Skill Does Not Do\r\n\r\n- It does not implement real-time `HTTP POST + SSE` conversation control.\r\n- It does not receive live call transcripts.\r\n- It does not expose or ship real Vox secrets in the skill package.\r\n- It does not support batch outbound calls in the MVP.\r\n- It does not run dry-run previews. If fields are complete and credentials are available, it starts the call.\r\n\r\n## Required Runtime Configuration\r\n\r\nFor formal direct Vox calls from the host environment:\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n\r\nOptional:\r\n\r\n- `VOX_BOT_ID` - may be empty for `botType=custom` if Vox has enabled that mode.\r\n- `VOX_OUTBOUND_BASE_URL` - defaults to `https://vox.teddymobile.cn`.\r\n- `VOX_CREDENTIALS_FILE` - path to a JSON credentials file.\r\n- `VOX_TRIAL_MODE` - when true, result messages include registration guidance. Trial calls use `/vox/v2/outbound` and do not require credentials.\n- `VOX_REGISTER_URL` - registration or trial application URL.\r\n- `VOX_TRIAL_LIMIT` - maximum local trial call attempts, defaults to 10.\r\n- `VOX_TRIAL_STATE_FILE` - optional path for local trial usage state.\r\n\r\nRecommended hosted mode:\r\n\r\n- Keep `VOX_SECRET` only on your backend.\r\n- Let Agent or Claw call your backend, and let your backend call Vox.\r\n- Never publish real credentials in the skill package.\r\n\r\n## Trial-To-Registration Flow\n\nWhen the user chooses trial mode, the skill uses the credential-free promotion trial endpoint. After generating or starting a call, it guides the user to register for formal Vox access so they can get their own `VOX_APP_ID`, `VOX_SECRET`, permissions, quota, and number resources.\n\nTrial mode should stay lightweight: if `callee`, `goal`, `role`, `voiceType`, and safety checks are complete, start the trial call without forcing detailed business-context collection. Ask for only the single most important missing field at a time. Keep the main result message short; detailed registration guidance can remain in structured fields such as `registrationMessage`, `actions`, and `buttons`.\n\r\nThe trial journey must be visible to the user:\r\n\r\n- Before missing-field prompts, mention that the user is currently in promotion trial mode.\r\n- After a call request is generated or started, say that the trial experience has been completed first.\r\n- Show visible trial usage, such as `已使用 1/10 次，剩余 9 次`.\r\n- Then give a clear call to action to register for formal enterprise access, including the registration URL and the benefits of registering.\r\n\r\nFor hosts such as WorkBuddy that render structured fields instead of full text, the skill also returns top-level fields: `actionPrompt`, `actions`, `buttons`, `quickReplies`, `suggestedActions`, `registrationMessage`, `registrationUrl`, `registrationBenefits`, `registrationSwitchInstruction`, and `nextStep`. Hosts should display these after trial calls. If button rendering is supported, render `actions` or `buttons` so the user can choose `注册正式账号`, `继续试用`, or `我已有正式凭证`.\r\n\r\nThe skill also returns `callTask`, `taskBriefing`, `briefingQuality`, `resultMeaning`, `failureAdvice`, `risk`, `voiceAnalysis`, `summaryRows`, and `summaryFooter` so hosts can render a clearer task summary and explain that `accepted` means Vox accepted the outbound task, not that the call has completed.\r\n\r\n## Required User Information\r\n\r\nThe skill must have these fields before it can start a call:\n\n1. `useMode` - user chooses promotion trial or formal account mode. This must be confirmed first.\n2. `callee` - destination mobile phone number.\n3. `goal` - what the call should accomplish.\n4. `role` - who the bot is calling as, unless the role can be safely inferred from the scenario.\n5. `voiceType` - user-selected voice code or voice name.\n6. `businessContext` - scenario-specific details when the prompt is too generic. Required for formal mode and complex/high-risk flows; optional for lightweight trial mode.\n\r\nFields that may be inferred or generated:\r\n\r\n- `name`\r\n- `gender`\r\n- `age`\r\n- `communicationStyle`\r\n- `background`\r\n- `skills`\r\n- `workflow`\r\n- `constraint`\r\n- `openingPrompt`\r\n- `requestId`\r\n\r\nVoice options:\r\n\r\n- `0` / 知愈：女，适合安抚、售后回访、心理陪伴。\r\n- `1` / 安辰：男，适合长辈、老人、用药或健康提醒。\r\n- `2` / 景珩：男，适合商务、课程、企业合作、科普讲解。\r\n- `3` / 知言：女，适合通知、公告、正式播报。\r\n- `4` / 星苒：女，适合闲聊、电商、生活服务。\r\n\r\n## User Guidance Rules\r\n\r\nIf `useMode` is missing, ask only for the usage mode first and stop. If another required field is missing after usage mode is known, do not call Vox. In trial mode, ask for only one missing field at a time; in formal mode, ask at most two concise follow-up questions.\n\r\nExamples:\r\n\r\n- Missing phone number: \"请提供要拨打的手机号。\"\r\n- Missing goal: \"请说明这通电话希望达成什么目标，例如通知、预约确认、回访或邀约。\"\r\n- Missing role: \"请说明 Bot 应以什么身份联系对方，例如客服、课程顾问、招聘助理、会议通知助理或商务经理。\"\r\n- Missing voice: \"请选择音色：0 知愈；1 安辰；2 景珩；3 知言；4 星苒。\"\r\n- Missing use mode: \"请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。\"\r\n- Missing business context: \"请补充更具体的业务背景，例如事项内容、时间、对象、处理边界和对方不同反馈时的跟进方式。\"\r\n- Multiple missing fields: \"请补充两个信息：要拨打的手机号；这通电话希望达成的具体目标。\"\r\n\r\nFor chat or companionship scenarios, require additional boundaries before calling: caller identity, chat purpose, allowed topics, forbidden topics, duration or stop condition, and refusal handling.\r\n\r\nAsk at most two questions at a time. Use the existing conversation context to merge follow-up answers into the pending call intent.\r\n\r\n## Safety Policy\n\nBlock or require rewriting for requests that involve:\n\r\n- Impersonation of banks, government, police, courts, or official institutions.\r\n- Asking for verification codes, passwords, bank cards, or private credentials.\r\n- Threats, harassment, abusive language, coercion, or illegal debt collection.\r\n- Investment inducement, transfer requests, illegal sales, or fraud-like behavior.\r\n- Medical, legal, or financial promises beyond basic notification or appointment reminders.\r\n\r\nIf blocked, explain briefly and suggest a compliant alternative.\n\n## AI Identity Handling\n\nThe skill does not proactively disclose AI identity in the opening prompt by default. The bot should introduce itself by the user-selected role, such as course advisor, after-sales support, notification assistant, or community care assistant.\n\nIf the callee explicitly asks whether the caller is AI, a robot, or a real human, the bot must answer truthfully that it is an AI voice assistant and then continue the conversation naturally if the callee is willing.\n\nDo not generate prompts that deny being AI when directly asked.\n\r\n## Typical Prompt\r\n\r\n```text\r\n先试用。帮我给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，语气专业但不要强推，使用景珩音色。\r\n```\r\n\r\n## Typical Result\r\n\r\n```text\r\n已发起 Vox 自定义 Bot 外呼。\r\n\r\n- 被叫号码：138****8000\r\n- Bot 角色：课程顾问\r\n- 任务目标：确认是否愿意预约试听\r\n- requestId：req_20260522153000001_ab12cd\r\n- 状态：accepted\r\n```\r\n\r\n## Implementation Entry Points\r\n\r\n- Workflow: `workflow.md`\r\n- Demo runner: `resources/run_demo.js`\r\n- Hosted API example: `resources/hosted_api_example.js`\r\n- Direct Vox client: `resources/hmac_outbound_client.js`\r\n- Intent extraction and completion: `resources/prompt_to_call_intent.js`, `resources/intent_completeness.js`\r\n- Profile generation: `resources/prompt_to_agent_profile.js`\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn7eq90b1gaf526fnsk07zn9t986me0d\",\n  \"slug\": \"vox-custom-phone-agent\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1780644480547\n}\n\nFile v1.0.5:FIRST_SETUP.md\n\n# First Setup\r\n\r\n## Vox Platform Requirements\r\n\r\nBefore real calls can work, the Vox account behind `VOX_APP_ID` and `VOX_SECRET` must be enabled by TeddyMobile Vox.\r\n\r\nChecklist:\r\n\r\n- Enterprise account is registered and approved.\r\n- Outbound API permission is enabled.\r\n- `botType=custom` is enabled.\r\n- Server egress IP is in the Vox IP whitelist.\r\n- Account has available outbound quota and number resources.\r\n- Server clock is accurate for GMT HMAC signing.\r\n\r\n## Environment Variables\r\n\r\nMinimum:\r\n\r\n```text\r\nVOX_APP_ID=...\r\nVOX_SECRET=...\r\n```\r\n\r\nFor local development, create `.env` from `.env.example` and keep it private. Do not publish `.env` or real credentials with the skill package.\r\n\r\nOptional:\r\n\r\n```text\r\nVOX_BOT_ID=\r\nVOX_OUTBOUND_BASE_URL=https://vox.teddymobile.cn\r\nVOX_CREDENTIALS_FILE=/secure/path/credentials.json\r\nSKILL_API_TOKEN=change-me\r\nVOX_TRIAL_MODE=true\r\nVOX_TRIAL_LIMIT=10\r\nVOX_TRIAL_STATE_FILE=/secure/path/trial-state.json\r\n```\r\n\r\n## Credential File Alternative\r\n\r\nCreate a secure file outside the public skill package:\r\n\r\n```json\r\n{\r\n  \"appId\": \"your-vox-app-id\",\r\n  \"secret\": \"your-vox-secret\",\r\n  \"botId\": \"\",\r\n  \"baseUrl\": \"https://vox.teddymobile.cn\"\r\n}\r\n```\r\n\r\nThen set:\r\n\r\n```text\r\nVOX_CREDENTIALS_FILE=/secure/path/credentials.json\r\n```\r\n\r\n## Production Recommendation\r\n\r\nUse `resources/hosted_api_example.js` as a starting point, then replace it with a production backend that adds:\r\n\r\n- User authentication.\r\n- User-level call quotas.\r\n- Content safety logging.\r\n- Phone number masking in logs.\r\n- Abuse prevention and audit trails.\r\n- TLS termination with HTTPS.\n\nFile v1.0.5:GET_STARTED.md\n\n# Get Started\r\n\r\n## Install\r\n\r\nThis package uses only Node.js built-ins. Use Node.js 18 or newer.\r\n\r\n```bash\r\ncd vox-custom-phone-agent\r\nnpm run smoke\r\n```\r\n\r\nThe smoke command runs with `--no-call`, so it does not call Vox.\r\n\r\n## Direct Vox Mode\n\nTrial prompts such as `先试用...` call `https://vox.teddymobile.cn/vox/v2/outbound` and do not require `VOX_APP_ID` or `VOX_SECRET`.\n\nFormal account calls use `https://vox.teddymobile.cn/vox/v1/outbound` and require credentials.\n\nConfigure credentials in environment variables:\n\r\n```bash\r\nexport VOX_APP_ID=\"your-vox-app-id\"\r\nexport VOX_SECRET=\"your-vox-secret\"\r\nexport VOX_BOT_ID=\"\"\r\n```\r\n\r\nOn Windows PowerShell:\r\n\r\n```powershell\r\n$env:VOX_APP_ID=\"your-vox-app-id\"\r\n$env:VOX_SECRET=\"your-vox-secret\"\r\n$env:VOX_BOT_ID=\"\"\r\n```\r\n\r\nThen run:\r\n\r\n```bash\r\nnode resources/run_demo.js \"给 13800138000 打电话，作为会议通知助理通知明天下午三点会议改到四点，使用知言音色。\"\r\n```\r\n\r\nDirect mode sends the call request to Vox as soon as required fields are complete.\r\n\r\n## Hosted Mode\r\n\r\nHosted mode is recommended for Agent or Claw distribution because the Vox secret stays on your backend.\r\n\r\n```bash\r\nexport VOX_APP_ID=\"your-vox-app-id\"\r\nexport VOX_SECRET=\"your-vox-secret\"\r\nexport SKILL_API_TOKEN=\"change-me\"\r\nnode resources/hosted_api_example.js\r\n```\r\n\r\nAgent or Claw calls:\r\n\r\n```http\r\nPOST http://localhost:3000/api/vox/custom-call\r\nAuthorization: Bearer change-me\r\nContent-Type: application/json\r\n```\r\n\r\n```json\r\n{\r\n  \"prompt\": \"给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，使用景珩音色。\"\r\n}\r\n```\r\n\r\n## Missing Field Guidance\r\n\r\nIf the prompt is incomplete, the handler returns `status: needs_input` and a user-facing question.\r\n\r\nExample:\r\n\r\n```json\r\n{\r\n  \"status\": \"needs_input\",\r\n  \"missing\": [\"callee\"],\r\n  \"message\": \"请提供要拨打的手机号。\"\r\n}\r\n```\r\n\r\nPass the saved `intent` back as `previousIntent` when the user answers.\r\n\r\n```json\r\n{\r\n  \"prompt\": \"手机号是 13800138000\",\r\n  \"previousIntent\": {\r\n    \"scenario\": \"会议通知\",\r\n    \"role\": \"会议通知助理\",\r\n    \"goal\": \"通知明天下午三点会议改到四点\"\r\n  }\r\n}\r\n```\r\n\r\n## Important\r\n\r\n- Do not put real `VOX_SECRET` in a public skill package.\r\n- Use hosted mode when distributing the skill to third-party users.\r\n- Confirm with Vox that your account is authorized for `botType=custom`, outbound calls, and your server IP whitelist.\r\n- Trial mode can guide users to register after testing. See `REGISTRATION_GUIDE.md`.\n\nFile v1.0.5:REGISTRATION_GUIDE.md\n\n# Registration Guide\n\nThis skill can run in two modes:\n\n## Promotion Trial Mode\n\nPromotion trial mode uses packaged trial Vox credentials so users can test the custom phone bot flow quickly before registering.\n\nThe user should be able to clearly perceive the journey:\n\n```text\n1. User enters the phone task prompt.\n2. User chooses the use mode: promotion trial or formal account.\n3. If trial is selected, complete the trial call first.\n4. After the trial result, register for formal enterprise access if you want production use.\n```\n\nEnable it with:\n\n```text\nVOX_TRIAL_MODE=true\nVOX_REGISTER_URL=https://vox-ai.teddymobile.cn/trial/apply\nVOX_TRIAL_LIMIT=10\n```\n\nWhen trial mode is enabled, missing-field guidance starts with a trial-mode reminder:\n\n```text\n当前为推广试用模式：你可以先完成一次试用外呼；体验后可注册企业账号获得专属凭证、额度和号码资源。\n试用额度：已使用 0/10 次，剩余 10 次。\n```\n\nSuccessful and failed call results include next-step registration guidance:\n\n```text\n试用进度：本次已优先使用推广试用能力完成体验流程。\n试用额度：已使用 1/10 次，剩余 9 次。\n\n正式使用建议：如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号。\n注册入口：https://vox-ai.teddymobile.cn/trial/apply\n注册后你将获得：专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n完成注册后，把新的 VOX_APP_ID / VOX_SECRET 替换当前试用配置，即可切换为正式账号。\n```\n\nTrial usage is stored locally in `.trial-state.json` by default. You can override this path with `VOX_TRIAL_STATE_FILE`.\n\nWhen trial usage reaches `VOX_TRIAL_LIMIT`, the skill stops using the credential-free trial endpoint and asks the user to register for formal access.\n\nUse this mode for demos, promotion, and low-risk testing.\n\n## Formal Production Mode\n\nProduction users should register and configure their own Vox credentials:\n\n```text\nVOX_APP_ID=your-enterprise-app-id\nVOX_SECRET=your-enterprise-secret\nVOX_TRIAL_MODE=false\n```\n\nFormal registration is needed for:\n\n- Dedicated enterprise identity.\n- Higher quota or production traffic.\n- Dedicated number resources.\n- IP whitelist and production permissions.\n- Better auditability and responsibility boundaries.\n\n## Suggested User Message\n\nAfter a trial call succeeds, tell the user:\n\n```text\n本次电话已使用推广试用能力发起。如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号并完成认证。注册后可获得专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n```\n\n## Notes\n\n- Trial mode uses `/vox/v2/outbound` without bundled credentials; use formal credentials only for production `/vox/v1/outbound` calls.\n- If the skill is publicly distributed, hosted backend mode is safer than shipping real credentials.\n- Keep rate limits and content-safety checks enabled during trial mode.\n\nFile v1.0.5:resources/implementation_checklist.md\n\n# Implementation Checklist\n\n## Skill Behavior\n\n- [ ] Extract `callee`, `goal`, `role`, `voiceType`, scenario, tone, and constraints from prompt.\n- [ ] Ask for missing `callee`, `goal`, `role`, or `voiceType` before calling Vox.\n- [ ] Ask no more than two follow-up questions at a time.\n- [ ] Merge follow-up answers into pending intent.\n- [ ] Do not run dry-run preview in normal flow.\n- [ ] Call Vox immediately when required fields and credentials are available.\n\n## Vox Payload\n\n- [ ] `botType` is always `custom`.\n- [ ] `botid` is `VOX_BOT_ID` or empty string.\n- [ ] `requestId` is unique per call attempt.\n- [ ] `extra` is a JSON string.\n- [ ] `extra.voiceType` is selected by the user and is one of `0`, `1`, `2`, `3`, `4`.\n- [ ] `extra.agent_profile` includes all required Vox fields.\n\n## Security\n\n- [ ] Do not publish real `VOX_SECRET`.\n- [ ] Prefer hosted mode for public Agent or Claw use.\n- [ ] Block impersonation, credential collection, threats, harassment, and fraud.\n- [ ] Mask phone numbers in user-visible results and logs.\n- [ ] Add backend user authentication before production use.\n- [ ] Add per-user and per-day rate limits before production use.\n\n## Vox Account\n\n- [ ] Account is approved by Vox.\n- [ ] Outbound API permission is enabled.\n- [ ] `botType=custom` permission is enabled.\n- [ ] IP whitelist includes backend egress IP.\n- [ ] Quota and number resources are available.\n\n## Verification\n\n- [ ] Run `npm run smoke`.\n- [ ] Test missing phone number follow-up.\n- [ ] Test missing goal follow-up.\n- [ ] Test unsafe prompt blocking.\n- [ ] Test HMAC signing against a known integration environment.\n- [ ] Test real call with a controlled internal phone number.\n\nFile v1.0.5:skill-card.md\n\n## Description: <br>\nConverts natural-language phone tasks into TeddyMobile Vox custom outbound-call requests with missing-field guidance, voice selection, and safety checks. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[ziliangzhu](https://clawhub.ai/user/ziliangzhu) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill to collect missing details from natural-language phone-call requests, select a Vox voice, run safety checks, and submit a TeddyMobile Vox custom outbound call in trial or formal mode. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can initiate real outbound phone calls when required fields and credentials or trial mode are available. <br>\nMitigation: Require explicit confirmation before each call and keep content-safety checks enabled for every trial and formal call. <br>\nRisk: The release evidence reports credential-like Vox secrets in the package. <br>\nMitigation: Rotate or remove packaged credentials, keep production secrets on a hosted backend, and avoid publishing real VOX_SECRET values. <br>\nRisk: Telemetry, transcript, and callback behavior may expose sensitive call details if broadly configured. <br>\nMitigation: Disable or minimize analytics, restrict callback URLs, and return or forward transcripts only through authorized workflows. <br>\nRisk: Outbound voice calls can confuse recipients about whether they are speaking with an AI system. <br>\nMitigation: Require AI disclosure at call start or ensure the bot truthfully discloses it is an AI voice assistant when asked. <br>\n\n\n## Reference(s): <br>\n- [ClawHub listing](https://clawhub.ai/ziliangzhu/vox-custom-phone-agent) <br>\n- [Skill instructions](artifact/SKILL.md) <br>\n- [Workflow](artifact/workflow.md) <br>\n- [Get started](artifact/GET_STARTED.md) <br>\n- [Registration guide](artifact/REGISTRATION_GUIDE.md) <br>\n- [Vox trial registration](https://vox-ai.teddymobile.cn/trial/apply) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, JSON, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown or plain text guidance, JSON call payloads and status objects, and optional shell commands.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include masked phone numbers, request IDs, call status, missing-field prompts, registration guidance, and safety-block messages.] <br>\n\n## Skill Version(s): <br>\n1.0.5 (source: server release metadata; packaged skill.json and package.json report 0.1.0) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.5:WORKBUDDY.md\n\n# WorkBuddy Result Display Notes\n\nWorkBuddy may render tool results from selected top-level fields instead of showing the full `message` string. For that reason, the skill returns formal registration guidance in several redundant top-level fields after trial usage.\n\n## Fields To Display After Trial\n\nPrefer displaying these fields when present:\n\n- `summaryTitle`\n- `summaryRows`\n- `summaryFooter`\n- `callTask`\n- `taskBriefing.taskBriefing`\n- `resultMeaning.meaning`\n- `failureAdvice.userMessage`\n- `actionPrompt`\n- `actions`\n- `buttons`\n- `quickReplies`\n- `suggestedActions`\n- `registrationMessage`\n- `registrationUrl`\n- `registrationBenefits`\n- `registrationSwitchInstruction`\n- `nextStep`\n\nIf WorkBuddy supports clickable choices, render `buttons` or `actions` as user-selectable options. The skill returns three actions:\n\n```json\n[\n  {\n    \"id\": \"register_formal_account\",\n    \"type\": \"url\",\n    \"label\": \"注册正式账号\",\n    \"url\": \"https://vox-ai.teddymobile.cn/trial/apply\",\n    \"value\": \"正式注册\"\n  },\n  {\n    \"id\": \"continue_trial\",\n    \"type\": \"reply\",\n    \"label\": \"继续试用\",\n    \"value\": \"继续试用\"\n  },\n  {\n    \"id\": \"setup_formal_credentials\",\n    \"type\": \"reply\",\n    \"label\": \"我已有正式凭证\",\n    \"value\": \"我已有正式凭证\"\n  }\n]\n```\n\nThe most complete field is:\n\n```text\nregistrationMessage\n```\n\nExample:\n\n```text\n正式使用建议\n如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号。\n注册入口：https://vox-ai.teddymobile.cn/trial/apply\n注册后你将获得：专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n完成注册后，把新的 VOX_APP_ID / VOX_SECRET 替换当前试用配置，即可切换为正式账号。\n```\n\nIf WorkBuddy supports nested display fields, it can also use:\n\n```text\ndisplay.registrationGuide\ndisplay.actionPrompt\ndisplay.actions\ndisplay.buttons\ndisplay.nextStep\ndisplay.registrationUrl\n```\n\n## Why This Exists\n\nThe user must perceive the full journey:\n\n```text\nchoose trial or formal mode -> complete trial -> see formal registration guidance\n```\n\nDo not hide the formal registration guidance after an accepted trial call.\n\nFile v1.0.5:workflow.md\n\n# Vox Custom Phone Agent Workflow\n\n## Goal\n\nConvert a user's natural-language prompt into a Vox `botType=custom` outbound call. If required fields are missing, ask for the missing fields. If all required fields are present and the request is safe, call Vox immediately.\n\n## Runtime Flow\n\n1. Receive the user prompt.\n2. Check whether the user has selected usage mode: trial or formal registration.\n3. If usage mode is missing, ask only: `请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。` Then stop.\n4. Load any pending call intent from conversation state.\n5. Extract new fields from the prompt.\n6. Merge extracted fields into the pending intent.\n7. Run content-safety checks.\n8. Validate required fields.\n9. If required fields are missing, ask targeted follow-up questions and stop.\n10. Generate `agent_profile`.\n11. Use the user-selected `voiceType`.\n12. Load Vox credentials only for formal mode. Trial mode uses the credential-free `/vox/v2/outbound` endpoint and must not ask for `VOX_APP_ID` or `VOX_SECRET`.\n13. Build the outbound payload with `botType=custom`.\n14. Sign the request with HMAC-SHA256.\n15. POST formal calls to `https://vox.teddymobile.cn/vox/v1/outbound`, or trial calls to `https://vox.teddymobile.cn/vox/v2/outbound`.\n16. Return masked phone number, bot role, task goal, `requestId`, and status.\n\n## Required Intent Fields\n\n- `callee`: destination phone number.\n- `goal`: concrete purpose of the call.\n- `role`: caller identity, unless safely inferred.\n- `voiceType`: selected by code `0-4` or name 知愈、安辰、景珩、知言、星苒.\n- `useMode`: selected by the user before collecting other fields. `trial` means promotion trial. `formal` means using formal enterprise credentials or registering first.\n- `businessContext`: scenario-specific background if the prompt is too generic, such as service item, event time, product, follow-up boundaries, or branch handling rules.\n\n## Follow-Up Behavior\n\nWhen `useMode` is missing, ask only for trial/formal mode and stop. After usage mode is known, ask no more than two questions for other missing fields. Do not show a dry-run preview. Do not call Vox until all required fields are available.\n\nTrial mode uses a lightweight flow: require only phone number, goal, Bot role, selected voice, and safety approval. Do not block trial calls on detailed `businessContext`; collect richer scenario details only for formal mode, complex tasks, or risky domains. Trial follow-up should ask for the single highest-priority missing field.\n\nExamples:\n\n```text\n请提供要拨打的手机号。\n```\n\n```text\n请补充两个信息：要拨打的手机号；这通电话希望达成的具体目标。\n```\n\n```text\n请说明 Bot 应以什么身份联系对方，例如客服、课程顾问、招聘助理、会议通知助理或商务经理。\n```\n\n```text\n请选择音色：0 知愈（女，安抚/回访）；1 安辰（男，长辈/老人）；2 景珩（男，商务/课程/科普）；3 知言（女，通知/公告）；4 星苒（女，闲聊/电商/生活服务）。\n```\n\n```text\n请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。\n```\n\n```text\n请补充这次售后/维修回访的业务背景，例如：是哪次维修、维修内容或产品、希望确认哪些问题、不满意时是否安排人工客服跟进，以及不能承诺哪些事项。\n```\n\n```text\n请补充聊天场景的边界：Bot 身份、聊天目的、可聊话题、不能聊的话题、通话时长或结束条件，以及对方不想聊时是否立即礼貌结束。\n```\n\n## Voice Selection\n\nDo not silently choose the voice in normal flow. If the user does not specify a voice, ask them to choose one. Accept either code or name, for example `3`, `知言`, `用知言音色`, or `voiceType=3`.\n\n## Safe Defaults\n\nIf unspecified, generate these defaults:\n\n- `name`: 小知\n- `gender`: 女\n- `age`: 26\n- `communicationStyle`: 礼貌, 清晰, 专业\n- `constraint`: 保持礼貌；尊重对方意愿；不得索要敏感隐私信息；对方拒绝或不方便时礼貌结束\n\nIdentity default: do not proactively disclose AI identity in the opening prompt, but if the callee directly asks whether the caller is AI, a robot, or a real human, answer truthfully that it is an AI voice assistant.\n\n## Scenario Defaults\n\n| Scenario | Role | Suggested Voice Type | Style |\n| --- | --- | --- | --- |\n| 会议通知 | 会议通知助理 | 3 知言 | 正式, 简洁, 清晰 |\n| 售后回访 | 售后客服 | 0 知愈 | 耐心, 真诚, 礼貌 |\n| 课程邀约 | 课程顾问 | 2 景珩 | 专业, 温和, 克制 |\n| 面试通知 | 招聘助理 | 3 知言 | 正式, 友好, 清晰 |\n| 商务合作 | 商务经理 | 2 景珩 | 专业, 稳重, 高效 |\n| 健康提醒 | 健康提醒助手 | 1 安辰 | 温和, 清楚, 耐心 |\n| 活动提醒 | 活动通知助理 | 3 知言 | 清晰, 友好, 简洁 |\n\n## Vox Outbound Payload Shape\n\nTrial mode uses the same payload shape except it omits `appId` and sends the request to `/vox/v2/outbound` without HMAC headers.\n\n```json\n{\n  \"appId\": \"VOX_APP_ID\",\n  \"botid\": \"\",\n  \"callee\": \"13800138000\",\n  \"requestId\": \"req_20260522153000001_ab12cd\",\n  \"botType\": \"custom\",\n  \"extra\": \"{\\\"voiceType\\\":\\\"2\\\",\\\"agent_profile\\\":{...}}\"\n}\n```\n\nImportant: `extra` is a JSON string, not a nested object.\n\n## Error Handling\n\n- Missing user fields: ask follow-up questions.\n- Unsafe content: refuse and suggest a safe rewrite.\n- Missing credentials: say which Vox configuration is missing.\n- Vox `401`: check credentials, server time, and signature.\n- Vox `403`: check interface permission, IP whitelist, and account authorization.\n- Vox non-zero `code`: return `code`, `msg`, and `requestId` if present.\n\nFile v1.0.5:package.json\n\n{\r\n  \"name\": \"vox-custom-phone-agent\",\r\n  \"version\": \"0.1.0\",\r\n  \"description\": \"Agent/Claw skill resources for Vox botType=custom outbound phone calls.\",\r\n  \"type\": \"commonjs\",\r\n  \"main\": \"resources/index.js\",\r\n  \"scripts\": {\r\n    \"demo\": \"node resources/run_demo.js\",\r\n    \"smoke\": \"node resources/run_demo.js \\\"先试用。给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，语气专业但不要强推，使用景珩音色。\\\" --no-call\",\r\n    \"test:prompts\": \"node resources/run_tests.js\"\r\n  },\r\n  \"engines\": {\r\n    \"node\": \">=18\"\r\n  },\r\n  \"license\": \"UNLICENSED\"\r\n}\n\nFile v1.0.5:resources/analytics_manifest.json\n\n{\r\n  \"skill_id\": \"vox-custom-phone-agent\",\r\n  \"skill_name\": \"Vox Custom Phone Agent Skill\",\r\n  \"skill_version\": \"0.1.0\",\r\n  \"analytics\": {\r\n    \"journeyStartEvent\": \"usage_started\",\r\n    \"journeyEndEvents\": [\r\n      \"run_completed\",\r\n      \"run_failed\",\r\n      \"vox.outbound_call_failed\",\r\n      \"vox.safety_blocked\"\r\n    ],\r\n    \"successEvents\": [\r\n      \"run_completed\"\r\n    ],\r\n    \"failureEvents\": [\r\n      \"run_failed\",\r\n      \"vox.outbound_call_failed\",\r\n      \"vox.safety_blocked\"\r\n    ],\r\n    \"abandonEvents\": [\r\n      \"vox.needs_input\",\r\n      \"vox.credentials_missing\"\r\n    ],\r\n    \"funnelEvents\": [\r\n      \"usage_started\",\r\n      \"skill_invoked\",\r\n      \"vox_custom_phone_agent.input_received\",\r\n      \"vox_custom_phone_agent.intent_parsed\",\r\n      \"vox_custom_phone_agent.policy_checked\",\r\n      \"vox.task_ready\",\r\n      \"run_started\",\r\n      \"vox.outbound_call_started\",\r\n      \"vox.outbound_call_completed\",\r\n      \"run_completed\"\r\n    ],\r\n    \"businessStages\": [\r\n      {\r\n        \"stage\": \"start\",\r\n        \"events\": [\r\n          \"usage_started\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"invoke\",\r\n        \"events\": [\r\n          \"skill_invoked\",\r\n          \"vox_custom_phone_agent.input_received\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"intent\",\r\n        \"events\": [\r\n          \"vox_custom_phone_agent.intent_parsed\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"policy\",\r\n        \"events\": [\r\n          \"vox_custom_phone_agent.policy_checked\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"prepare\",\r\n        \"events\": [\r\n          \"vox.task_ready\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"run\",\r\n        \"events\": [\r\n          \"run_started\",\r\n          \"vox.outbound_call_started\",\r\n          \"vox.outbound_call_completed\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"completed\",\r\n        \"events\": [\r\n          \"run_completed\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"failed\",\r\n        \"events\": [\r\n          \"run_failed\",\r\n          \"vox.outbound_call_failed\",\r\n          \"vox.safety_blocked\",\r\n          \"vox.credentials_missing\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"needs_input\",\r\n        \"events\": [\r\n          \"vox.needs_input\"\r\n        ]\r\n      },\r\n      {\r\n        \"stage\": \"conversion\",\r\n        \"events\": [\r\n          \"vox.registration_prompted\"\r\n        ]\r\n      }\r\n    ],\r\n    \"eventAliases\": {\r\n      \"skill_invoked\": [\r\n        \"usage_started\",\r\n        \"skill_invoked\",\r\n        \"journey_started\",\r\n        \"invoked\"\r\n      ],\r\n      \"skill_needs_input\": [\r\n        \"vox.needs_input\",\r\n        \"skill_needs_input\",\r\n        \"needs_input\"\r\n      ],\r\n      \"skill_safety_blocked\": [\r\n        \"vox.safety_blocked\",\r\n        \"skill_safety_blocked\",\r\n        \"safety_blocked\",\r\n        \"blocked\"\r\n      ],\r\n      \"skill_credentials_missing\": [\r\n        \"vox.credentials_missing\",\r\n        \"skill_credentials_missing\",\r\n        \"credentials_missing\"\r\n      ],\r\n      \"skill_task_ready\": [\r\n        \"vox.task_ready\",\r\n        \"skill_task_ready\",\r\n        \"skill_config_completed\",\r\n        \"task_ready\",\r\n        \"ready\"\r\n      ],\r\n      \"skill_run_started\": [\r\n        \"run_started\",\r\n        \"skill_run_started\",\r\n        \"execution_started\"\r\n      ],\r\n      \"skill_run_completed\": [\r\n        \"run_completed\",\r\n        \"skill_run_completed\",\r\n        \"usage_finished\",\r\n        \"journey_finished\",\r\n        \"completed\"\r\n      ],\r\n      \"skill_run_failed\": [\r\n        \"run_failed\",\r\n        \"skill_run_failed\",\r\n        \"journey_failed\",\r\n        \"failed\"\r\n      ],\r\n      \"skill_registration_prompted\": [\r\n        \"vox.registration_prompted\",\r\n        \"skill_registration_prompted\",\r\n        \"registration_prompted\",\r\n        \"needs_registration\"\r\n      ],\r\n      \"business_step_completed\": [\r\n        \"vox_custom_phone_agent.input_received\",\r\n        \"vox_custom_phone_agent.intent_parsed\",\r\n        \"vox_custom_phone_agent.policy_checked\",\r\n        \"business_step_completed\",\r\n        \"step_completed\"\r\n      ],\r\n      \"tool_call_started\": [\r\n        \"vox.outbound_call_started\",\r\n        \"tool_call_started\",\r\n        \"tool_called\",\r\n        \"api_request_started\"\r\n      ],\r\n      \"tool_call_completed\": [\r\n        \"vox.outbound_call_completed\",\r\n        \"tool_call_completed\",\r\n        \"tool_result_received\",\r\n        \"api_request_completed\"\r\n      ],\r\n      \"tool_call_failed\": [\r\n        \"vox.outbound_call_failed\",\r\n        \"tool_call_failed\",\r\n        \"tool_failed\",\r\n        \"api_request_failed\"\r\n      ],\r\n      \"business_step_failed\": [\r\n        \"business_step_failed\",\r\n        \"step_failed\"\r\n      ]\r\n    },\r\n    \"dimensions\": [\r\n      {\r\n        \"name\": \"source\",\r\n        \"source\": \"metadata.source\"\r\n      },\r\n      {\r\n        \"name\": \"scenario\",\r\n        \"source\": \"metadata.scenario\"\r\n      },\r\n      {\r\n        \"name\": \"voice_type\",\r\n        \"source\": \"metadata.voice_type\"\r\n      },\r\n      {\r\n        \"name\": \"use_mode\",\r\n        \"source\": \"metadata.use_mode\"\r\n      }\r\n    ],\r\n    \"metrics\": [\r\n      {\r\n        \"name\": \"call_success_count\",\r\n        \"type\": \"count\",\r\n        \"event\": \"run_completed\"\r\n      },\r\n      {\r\n        \"name\": \"call_success_rate\",\r\n        \"type\": \"conversion_rate\",\r\n        \"from\": \"skill_invoked\",\r\n        \"to\": \"run_completed\"\r\n      },\r\n      {\r\n        \"name\": \"avg_call_task_duration\",\r\n        \"type\": \"avg_duration\",\r\n        \"from\": \"run_started\",\r\n        \"to\": \"run_completed\"\r\n      }\r\n    ]\r\n  },\r\n  \"events\": [\r\n    {\r\n      \"event_name\": \"usage_started\",\r\n      \"label\": \"start usage\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"skill_invoked\",\r\n      \"label\": \"skill invoked\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox_custom_phone_agent.input_received\",\r\n      \"label\": \"input received\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox_custom_phone_agent.intent_parsed\",\r\n      \"label\": \"intent parsed\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox_custom_phone_agent.policy_checked\",\r\n      \"label\": \"policy checked\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.task_ready\",\r\n      \"label\": \"task ready\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"run_started\",\r\n      \"label\": \"run started\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.outbound_call_started\",\r\n      \"label\": \"outbound call started\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.outbound_call_completed\",\r\n      \"label\": \"outbound call completed\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"run_completed\",\r\n      \"label\": \"run completed\",\r\n      \"type\": \"funnel_step\"\r\n    },\r\n    {\r\n      \"event_name\": \"run_failed\",\r\n      \"label\": \"run failed\",\r\n      \"type\": \"branch_event\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.outbound_call_failed\",\r\n      \"label\": \"outbound call failed\",\r\n      \"type\": \"branch_event\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.safety_blocked\",\r\n      \"label\": \"safety blocked\",\r\n      \"type\": \"branch_event\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.needs_input\",\r\n      \"label\": \"needs input\",\r\n      \"type\": \"branch_event\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.credentials_missing\",\r\n      \"label\": \"credentials missing\",\r\n      \"type\": \"branch_event\"\r\n    },\r\n    {\r\n      \"event_name\": \"vox.registration_prompted\",\r\n      \"label\": \"registration prompted\",\r\n      \"type\": \"branch_event\"\r\n    }\r\n  ],\r\n  \"funnel_steps\": [\r\n    \"usage_started\",\r\n    \"skill_invoked\",\r\n    \"vox_custom_phone_agent.input_received\",\r\n    \"vox_custom_phone_agent.intent_parsed\",\r\n    \"vox_custom_phone_agent.policy_checked\",\r\n    \"vox.task_ready\",\r\n    \"run_started\",\r\n    \"vox.outbound_call_started\",\r\n    \"vox.outbound_call_completed\",\r\n    \"run_completed\"\r\n  ],\r\n  \"branch_events\": [\r\n    {\r\n      \"key\": \"run_failed\",\r\n      \"label\": \"run failed\",\r\n      \"event_name\": \"run_failed\",\r\n      \"tone\": \"danger\"\r\n    },\r\n    {\r\n      \"key\": \"outbound_call_failed\",\r\n      \"label\": \"outbound call failed\",\r\n      \"event_name\": \"vox.outbound_call_failed\",\r\n      \"tone\": \"danger\"\r\n    },\r\n    {\r\n      \"key\": \"safety_blocked\",\r\n      \"label\": \"safety blocked\",\r\n      \"event_name\": \"vox.safety_blocked\",\r\n      \"tone\": \"danger\"\r\n    },\r\n    {\r\n      \"key\": \"needs_input\",\r\n      \"label\": \"needs input\",\r\n      \"event_name\": \"vox.needs_input\",\r\n      \"tone\": \"warning\"\r\n    },\r\n    {\r\n      \"key\": \"credentials_missing\",\r\n      \"label\": \"credentials missing\",\r\n      \"event_name\": \"vox.credentials_missing\",\r\n      \"tone\": \"warning\"\r\n    },\r\n    {\r\n      \"key\": \"registration_prompted\",\r\n      \"label\": \"registration prompted\",\r\n      \"event_name\": \"vox.registration_prompted\",\r\n      \"tone\": \"success\"\r\n    }\r\n  ],\r\n  \"property_dimensions\": [\r\n    {\r\n      \"key\": \"source\",\r\n      \"label\": \"source\",\r\n      \"type\": \"string\"\r\n    },\r\n    {\r\n      \"key\": \"scenario\",\r\n      \"label\": \"scenario\",\r\n      \"type\": \"string\"\r\n    },\r\n    {\r\n      \"key\": \"voice_type\",\r\n      \"label\": \"voice type\",\r\n      \"type\": \"string\"\r\n    },\r\n    {\r\n      \"key\": \"use_mode\",\r\n      \"label\": \"use mode\",\r\n      \"type\": \"string\"\r\n    }\r\n  ],\r\n  \"allowed_sources\": [\r\n    \"skillhub\",\r\n    \"clawhub\",\r\n    \"unknown\",\r\n    \"internal\"\r\n  ],\r\n  \"allowed_events\": [\r\n    \"usage_started\",\r\n    \"skill_invoked\",\r\n    \"vox_custom_phone_agent.input_received\",\r\n    \"vox_custom_phone_agent.intent_parsed\",\r\n    \"vox_custom_phone_agent.policy_checked\",\r\n    \"vox.task_ready\",\r\n    \"run_started\",\r\n    \"vox.outbound_call_started\",\r\n    \"vox.outbound_call_completed\",\r\n    \"run_completed\",\r\n    \"run_failed\",\r\n    \"vox.outbound_call_failed\",\r\n    \"vox.safety_blocked\",\r\n    \"vox.needs_input\",\r\n    \"vox.credentials_missing\",\r\n    \"vox.registration_prompted\",\r\n    \"skill_needs_input\",\r\n    \"skill_safety_blocked\",\r\n    \"skill_credentials_missing\",\r\n    \"skill_task_ready\",\r\n    \"skill_run_started\",\r\n    \"skill_run_completed\",\r\n    \"skill_run_failed\",\r\n    \"skill_registration_prompted\",\r\n    \"business_step_completed\",\r\n    \"business_step_failed\",\r\n    \"tool_call_started\",\r\n    \"tool_call_completed\",\r\n    \"tool_call_failed\"\r\n  ]\r\n}\n\nFile v1.0.5:resources/credentials.example.json\n\n{\n  \"appId\": \"your-vox-app-id\",\n  \"secret\": \"your-vox-secret\",\n  \"botId\": \"\",\n  \"baseUrl\": \"https://vox.teddymobile.cn\"\n}\n\nArchive v1.0.4: 34 files, 51133 bytes\n\nFiles: bmad_skill_manifest.yaml (1175b), FIRST_SETUP.md (1609b), GET_STARTED.md (2579b), package.json (644b), REGISTRATION_GUIDE.md (3008b), resources/business_context_rules.js (9268b), resources/call_task.js (1306b), resources/content_safety_guard.js (2747b), resources/credentials_loader.js (2123b), resources/credentials.example.json (122b), resources/hmac_outbound_client.js (2862b), resources/hosted_api_example.js (1598b), resources/implementation_checklist.md (1688b), resources/index.js (18809b), resources/intent_completeness.js (4025b), resources/phone_validator.js (1317b), resources/prompt_to_agent_profile.js (6389b), resources/prompt_to_call_intent.js (9002b), resources/request_id.js (329b), resources/result_advice.js (2096b), resources/risk_classifier.js (2534b), resources/run_demo.js (1106b), resources/run_tests.js (1338b), resources/task_briefing.js (2191b), resources/test_prompts.json (3739b), resources/trial_state.js (2147b), resources/voice_requirements.js (2507b), resources/voice_type_selector.js (5050b), skill-card.md (2770b), skill.json (1538b), SKILL.md (9963b), WORKBUDDY.md (2189b), workflow.md (5893b), _meta.json (141b)\n\nFile v1.0.4:SKILL.md\n\n# Vox Custom Phone Agent Skill\r\n\r\nTurn a user's natural-language phone task into a TeddyMobile Vox `botType=custom` outbound call.\r\n\r\nThis skill is designed for Agent or Claw environments. It extracts the call target, bot identity, business goal, tone, constraints, and opening message from the user's prompt. When required information is missing, it asks targeted follow-up questions. Once the required fields are complete, it builds a Vox custom bot payload and starts the outbound call.\n\n## Mandatory First Step For WorkBuddy\n\nBefore asking for phone-call details, the skill must first confirm the usage mode unless the user already clearly said `试用`, `先试用`, `体验`, `正式注册`, `正式账号`, or `自己的凭证`.\n\nIf usage mode is missing, do not ask for caller identity, chat purpose, duration, voice, or other fields yet. Reply exactly with a mode choice and stop:\n\n```text\n请选择使用方式：\n1. 先用推广试用体验一次，不需要填写 VOX_APP_ID / VOX_SECRET；\n2. 使用正式账号/注册 Vox 企业账号后接入，需要配置自己的 VOX_APP_ID / VOX_SECRET。\n\n回复“试用”或“正式注册”即可。\n```\n\nIn trial mode, call the credential-free Vox trial endpoint `POST https://vox.teddymobile.cn/vox/v2/outbound`. Do not ask the user for `VOX_APP_ID` or `VOX_SECRET` during trial mode.\n\r\n## What This Skill Does\r\n\r\n- Parses natural-language prompts into a structured custom phone-agent task.\r\n- Guides the user when required fields are missing.\r\n- Generates Vox `extra.agent_profile` for `botType=custom`.\r\n- Requires the user to choose a Vox `voiceType` by code or voice name.\r\n- Validates phone numbers and blocks unsafe phone tasks.\r\n- Calls `POST https://vox.teddymobile.cn/vox/v1/outbound` with HMAC authentication for formal accounts.\n- Calls `POST https://vox.teddymobile.cn/vox/v2/outbound` without credentials for trial mode.\n- Returns the Vox request status and generated `requestId`.\r\n\r\n## What This Skill Does Not Do\r\n\r\n- It does not implement real-time `HTTP POST + SSE` conversation control.\r\n- It does not receive live call transcripts.\r\n- It does not expose or ship real Vox secrets in the skill package.\r\n- It does not support batch outbound calls in the MVP.\r\n- It does not run dry-run previews. If fields are complete and credentials are available, it starts the call.\r\n\r\n## Required Runtime Configuration\r\n\r\nFor formal direct Vox calls from the host environment:\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n\r\nOptional:\r\n\r\n- `VOX_BOT_ID` - may be empty for `botType=custom` if Vox has enabled that mode.\r\n- `VOX_OUTBOUND_BASE_URL` - defaults to `https://vox.teddymobile.cn`.\r\n- `VOX_CREDENTIALS_FILE` - path to a JSON credentials file.\r\n- `VOX_TRIAL_MODE` - when true, result messages include registration guidance. Trial calls use `/vox/v2/outbound` and do not require credentials.\n- `VOX_REGISTER_URL` - registration or trial application URL.\r\n- `VOX_TRIAL_LIMIT` - maximum local trial call attempts, defaults to 10.\r\n- `VOX_TRIAL_STATE_FILE` - optional path for local trial usage state.\r\n\r\nRecommended hosted mode:\r\n\r\n- Keep `VOX_SECRET` only on your backend.\r\n- Let Agent or Claw call your backend, and let your backend call Vox.\r\n- Never publish real credentials in the skill package.\r\n\r\n## Trial-To-Registration Flow\n\nWhen the user chooses trial mode, the skill uses the credential-free promotion trial endpoint. After generating or starting a call, it guides the user to register for formal Vox access so they can get their own `VOX_APP_ID`, `VOX_SECRET`, permissions, quota, and number resources.\n\nTrial mode should stay lightweight: if `callee`, `goal`, `role`, `voiceType`, and safety checks are complete, start the trial call without forcing detailed business-context collection. Ask for only the single most important missing field at a time. Keep the main result message short; detailed registration guidance can remain in structured fields such as `registrationMessage`, `actions`, and `buttons`.\n\r\nThe trial journey must be visible to the user:\r\n\r\n- Before missing-field prompts, mention that the user is currently in promotion trial mode.\r\n- After a call request is generated or started, say that the trial experience has been completed first.\r\n- Show visible trial usage, such as `已使用 1/10 次，剩余 9 次`.\r\n- Then give a clear call to action to register for formal enterprise access, including the registration URL and the benefits of registering.\r\n\r\nFor hosts such as WorkBuddy that render structured fields instead of full text, the skill also returns top-level fields: `actionPrompt`, `actions`, `buttons`, `quickReplies`, `suggestedActions`, `registrationMessage`, `registrationUrl`, `registrationBenefits`, `registrationSwitchInstruction`, and `nextStep`. Hosts should display these after trial calls. If button rendering is supported, render `actions` or `buttons` so the user can choose `注册正式账号`, `继续试用`, or `我已有正式凭证`.\r\n\r\nThe skill also returns `callTask`, `taskBriefing`, `briefingQuality`, `resultMeaning`, `failureAdvice`, `risk`, `voiceAnalysis`, `summaryRows`, and `summaryFooter` so hosts can render a clearer task summary and explain that `accepted` means Vox accepted the outbound task, not that the call has completed.\r\n\r\n## Required User Information\r\n\r\nThe skill must have these fields before it can start a call:\n\n1. `useMode` - user chooses promotion trial or formal account mode. This must be confirmed first.\n2. `callee` - destination mobile phone number.\n3. `goal` - what the call should accomplish.\n4. `role` - who the bot is calling as, unless the role can be safely inferred from the scenario.\n5. `voiceType` - user-selected voice code or voice name.\n6. `businessContext` - scenario-specific details when the prompt is too generic. Required for formal mode and complex/high-risk flows; optional for lightweight trial mode.\n\r\nFields that may be inferred or generated:\r\n\r\n- `name`\r\n- `gender`\r\n- `age`\r\n- `communicationStyle`\r\n- `background`\r\n- `skills`\r\n- `workflow`\r\n- `constraint`\r\n- `openingPrompt`\r\n- `requestId`\r\n\r\nVoice options:\r\n\r\n- `0` / 知愈：女，适合安抚、售后回访、心理陪伴。\r\n- `1` / 安辰：男，适合长辈、老人、用药或健康提醒。\r\n- `2` / 景珩：男，适合商务、课程、企业合作、科普讲解。\r\n- `3` / 知言：女，适合通知、公告、正式播报。\r\n- `4` / 星苒：女，适合闲聊、电商、生活服务。\r\n\r\n## User Guidance Rules\r\n\r\nIf `useMode` is missing, ask only for the usage mode first and stop. If another required field is missing after usage mode is known, do not call Vox. In trial mode, ask for only one missing field at a time; in formal mode, ask at most two concise follow-up questions.\n\r\nExamples:\r\n\r\n- Missing phone number: \"请提供要拨打的手机号。\"\r\n- Missing goal: \"请说明这通电话希望达成什么目标，例如通知、预约确认、回访或邀约。\"\r\n- Missing role: \"请说明 Bot 应以什么身份联系对方，例如客服、课程顾问、招聘助理、会议通知助理或商务经理。\"\r\n- Missing voice: \"请选择音色：0 知愈；1 安辰；2 景珩；3 知言；4 星苒。\"\r\n- Missing use mode: \"请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。\"\r\n- Missing business context: \"请补充更具体的业务背景，例如事项内容、时间、对象、处理边界和对方不同反馈时的跟进方式。\"\r\n- Multiple missing fields: \"请补充两个信息：要拨打的手机号；这通电话希望达成的具体目标。\"\r\n\r\nFor chat or companionship scenarios, require additional boundaries before calling: caller identity, chat purpose, allowed topics, forbidden topics, duration or stop condition, and refusal handling.\r\n\r\nAsk at most two questions at a time. Use the existing conversation context to merge follow-up answers into the pending call intent.\r\n\r\n## Safety Policy\n\nBlock or require rewriting for requests that involve:\n\r\n- Impersonation of banks, government, police, courts, or official institutions.\r\n- Asking for verification codes, passwords, bank cards, or private credentials.\r\n- Threats, harassment, abusive language, coercion, or illegal debt collection.\r\n- Investment inducement, transfer requests, illegal sales, or fraud-like behavior.\r\n- Medical, legal, or financial promises beyond basic notification or appointment reminders.\r\n\r\nIf blocked, explain briefly and suggest a compliant alternative.\n\n## AI Identity Handling\n\nThe skill does not proactively disclose AI identity in the opening prompt by default. The bot should introduce itself by the user-selected role, such as course advisor, after-sales support, notification assistant, or community care assistant.\n\nIf the callee explicitly asks whether the caller is AI, a robot, or a real human, the bot must answer truthfully that it is an AI voice assistant and then continue the conversation naturally if the callee is willing.\n\nDo not generate prompts that deny being AI when directly asked.\n\r\n## Typical Prompt\r\n\r\n```text\r\n先试用。帮我给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，语气专业但不要强推，使用景珩音色。\r\n```\r\n\r\n## Typical Result\r\n\r\n```text\r\n已发起 Vox 自定义 Bot 外呼。\r\n\r\n- 被叫号码：138****8000\r\n- Bot 角色：课程顾问\r\n- 任务目标：确认是否愿意预约试听\r\n- requestId：req_20260522153000001_ab12cd\r\n- 状态：accepted\r\n```\r\n\r\n## Implementation Entry Points\r\n\r\n- Workflow: `workflow.md`\r\n- Demo runner: `resources/run_demo.js`\r\n- Hosted API example: `resources/hosted_api_example.js`\r\n- Direct Vox client: `resources/hmac_outbound_client.js`\r\n- Intent extraction and completion: `resources/prompt_to_call_intent.js`, `resources/intent_completeness.js`\r\n- Profile generation: `resources/prompt_to_agent_profile.js`\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn7eq90b1gaf526fnsk07zn9t986me0d\",\n  \"slug\": \"vox-custom-phone-agent\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1779790800626\n}\n\nFile v1.0.4:FIRST_SETUP.md\n\n# First Setup\r\n\r\n## Vox Platform Requirements\r\n\r\nBefore real calls can work, the Vox account behind `VOX_APP_ID` and `VOX_SECRET` must be enabled by TeddyMobile Vox.\r\n\r\nChecklist:\r\n\r\n- Enterprise account is registered and approved.\r\n- Outbound API permission is enabled.\r\n- `botType=custom` is enabled.\r\n- Server egress IP is in the Vox IP whitelist.\r\n- Account has available outbound quota and number resources.\r\n- Server clock is accurate for GMT HMAC signing.\r\n\r\n## Environment Variables\r\n\r\nMinimum:\r\n\r\n```text\r\nVOX_APP_ID=...\r\nVOX_SECRET=...\r\n```\r\n\r\nFor local development, create `.env` from `.env.example` and keep it private. Do not publish `.env` or real credentials with the skill package.\r\n\r\nOptional:\r\n\r\n```text\r\nVOX_BOT_ID=\r\nVOX_OUTBOUND_BASE_URL=https://vox.teddymobile.cn\r\nVOX_CREDENTIALS_FILE=/secure/path/credentials.json\r\nSKILL_API_TOKEN=change-me\r\nVOX_TRIAL_MODE=true\r\nVOX_TRIAL_LIMIT=10\r\nVOX_TRIAL_STATE_FILE=/secure/path/trial-state.json\r\n```\r\n\r\n## Credential File Alternative\r\n\r\nCreate a secure file outside the public skill package:\r\n\r\n```json\r\n{\r\n  \"appId\": \"your-vox-app-id\",\r\n  \"secret\": \"your-vox-secret\",\r\n  \"botId\": \"\",\r\n  \"baseUrl\": \"https://vox.teddymobile.cn\"\r\n}\r\n```\r\n\r\nThen set:\r\n\r\n```text\r\nVOX_CREDENTIALS_FILE=/secure/path/credentials.json\r\n```\r\n\r\n## Production Recommendation\r\n\r\nUse `resources/hosted_api_example.js` as a starting point, then replace it with a production backend that adds:\r\n\r\n- User authentication.\r\n- User-level call quotas.\r\n- Content safety logging.\r\n- Phone number masking in logs.\r\n- Abuse prevention and audit trails.\r\n- TLS termination with HTTPS.\n\nFile v1.0.4:GET_STARTED.md\n\n# Get Started\r\n\r\n## Install\r\n\r\nThis package uses only Node.js built-ins. Use Node.js 18 or newer.\r\n\r\n```bash\r\ncd vox-custom-phone-agent\r\nnpm run smoke\r\n```\r\n\r\nThe smoke command runs with `--no-call`, so it does not call Vox.\r\n\r\n## Direct Vox Mode\n\nTrial prompts such as `先试用...` call `https://vox.teddymobile.cn/vox/v2/outbound` and do not require `VOX_APP_ID` or `VOX_SECRET`.\n\nFormal account calls use `https://vox.teddymobile.cn/vox/v1/outbound` and require credentials.\n\nConfigure credentials in environment variables:\n\r\n```bash\r\nexport VOX_APP_ID=\"your-vox-app-id\"\r\nexport VOX_SECRET=\"your-vox-secret\"\r\nexport VOX_BOT_ID=\"\"\r\n```\r\n\r\nOn Windows PowerShell:\r\n\r\n```powershell\r\n$env:VOX_APP_ID=\"your-vox-app-id\"\r\n$env:VOX_SECRET=\"your-vox-secret\"\r\n$env:VOX_BOT_ID=\"\"\r\n```\r\n\r\nThen run:\r\n\r\n```bash\r\nnode resources/run_demo.js \"给 13800138000 打电话，作为会议通知助理通知明天下午三点会议改到四点，使用知言音色。\"\r\n```\r\n\r\nDirect mode sends the call request to Vox as soon as required fields are complete.\r\n\r\n## Hosted Mode\r\n\r\nHosted mode is recommended for Agent or Claw distribution because the Vox secret stays on your backend.\r\n\r\n```bash\r\nexport VOX_APP_ID=\"your-vox-app-id\"\r\nexport VOX_SECRET=\"your-vox-secret\"\r\nexport SKILL_API_TOKEN=\"change-me\"\r\nnode resources/hosted_api_example.js\r\n```\r\n\r\nAgent or Claw calls:\r\n\r\n```http\r\nPOST http://localhost:3000/api/vox/custom-call\r\nAuthorization: Bearer change-me\r\nContent-Type: application/json\r\n```\r\n\r\n```json\r\n{\r\n  \"prompt\": \"给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，使用景珩音色。\"\r\n}\r\n```\r\n\r\n## Missing Field Guidance\r\n\r\nIf the prompt is incomplete, the handler returns `status: needs_input` and a user-facing question.\r\n\r\nExample:\r\n\r\n```json\r\n{\r\n  \"status\": \"needs_input\",\r\n  \"missing\": [\"callee\"],\r\n  \"message\": \"请提供要拨打的手机号。\"\r\n}\r\n```\r\n\r\nPass the saved `intent` back as `previousIntent` when the user answers.\r\n\r\n```json\r\n{\r\n  \"prompt\": \"手机号是 13800138000\",\r\n  \"previousIntent\": {\r\n    \"scenario\": \"会议通知\",\r\n    \"role\": \"会议通知助理\",\r\n    \"goal\": \"通知明天下午三点会议改到四点\"\r\n  }\r\n}\r\n```\r\n\r\n## Important\r\n\r\n- Do not put real `VOX_SECRET` in a public skill package.\r\n- Use hosted mode when distributing the skill to third-party users.\r\n- Confirm with Vox that your account is authorized for `botType=custom`, outbound calls, and your server IP whitelist.\r\n- Trial mode can guide users to register after testing. See `REGISTRATION_GUIDE.md`.\n\nFile v1.0.4:REGISTRATION_GUIDE.md\n\n# Registration Guide\n\nThis skill can run in two modes:\n\n## Promotion Trial Mode\n\nPromotion trial mode uses packaged trial Vox credentials so users can test the custom phone bot flow quickly before registering.\n\nThe user should be able to clearly perceive the journey:\n\n```text\n1. User enters the phone task prompt.\n2. User chooses the use mode: promotion trial or formal account.\n3. If trial is selected, complete the trial call first.\n4. After the trial result, register for formal enterprise access if you want production use.\n```\n\nEnable it with:\n\n```text\nVOX_TRIAL_MODE=true\nVOX_REGISTER_URL=https://vox-ai.teddymobile.cn/trial/apply\nVOX_TRIAL_LIMIT=10\n```\n\nWhen trial mode is enabled, missing-field guidance starts with a trial-mode reminder:\n\n```text\n当前为推广试用模式：你可以先完成一次试用外呼；体验后可注册企业账号获得专属凭证、额度和号码资源。\n试用额度：已使用 0/10 次，剩余 10 次。\n```\n\nSuccessful and failed call results include next-step registration guidance:\n\n```text\n试用进度：本次已优先使用推广试用能力完成体验流程。\n试用额度：已使用 1/10 次，剩余 9 次。\n\n正式使用建议：如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号。\n注册入口：https://vox-ai.teddymobile.cn/trial/apply\n注册后你将获得：专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n完成注册后，把新的 VOX_APP_ID / VOX_SECRET 替换当前试用配置，即可切换为正式账号。\n```\n\nTrial usage is stored locally in `.trial-state.json` by default. You can override this path with `VOX_TRIAL_STATE_FILE`.\n\nWhen trial usage reaches `VOX_TRIAL_LIMIT`, the skill stops using the credential-free trial endpoint and asks the user to register for formal access.\n\nUse this mode for demos, promotion, and low-risk testing.\n\n## Formal Production Mode\n\nProduction users should register and configure their own Vox credentials:\n\n```text\nVOX_APP_ID=your-enterprise-app-id\nVOX_SECRET=your-enterprise-secret\nVOX_TRIAL_MODE=false\n```\n\nFormal registration is needed for:\n\n- Dedicated enterprise identity.\n- Higher quota or production traffic.\n- Dedicated number resources.\n- IP whitelist and production permissions.\n- Better auditability and responsibility boundaries.\n\n## Suggested User Message\n\nAfter a trial call succeeds, tell the user:\n\n```text\n本次电话已使用推广试用能力发起。如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号并完成认证。注册后可获得专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n```\n\n## Notes\n\n- Trial mode uses `/vox/v2/outbound` without bundled credentials; use formal credentials only for production `/vox/v1/outbound` calls.\n- If the skill is publicly distributed, hosted backend mode is safer than shipping real credentials.\n- Keep rate limits and content-safety checks enabled during trial mode.\n\nFile v1.0.4:resources/implementation_checklist.md\n\n# Implementation Checklist\n\n## Skill Behavior\n\n- [ ] Extract `callee`, `goal`, `role`, `voiceType`, scenario, tone, and constraints from prompt.\n- [ ] Ask for missing `callee`, `goal`, `role`, or `voiceType` before calling Vox.\n- [ ] Ask no more than two follow-up questions at a time.\n- [ ] Merge follow-up answers into pending intent.\n- [ ] Do not run dry-run preview in normal flow.\n- [ ] Call Vox immediately when required fields and credentials are available.\n\n## Vox Payload\n\n- [ ] `botType` is always `custom`.\n- [ ] `botid` is `VOX_BOT_ID` or empty string.\n- [ ] `requestId` is unique per call attempt.\n- [ ] `extra` is a JSON string.\n- [ ] `extra.voiceType` is selected by the user and is one of `0`, `1`, `2`, `3`, `4`.\n- [ ] `extra.agent_profile` includes all required Vox fields.\n\n## Security\n\n- [ ] Do not publish real `VOX_SECRET`.\n- [ ] Prefer hosted mode for public Agent or Claw use.\n- [ ] Block impersonation, credential collection, threats, harassment, and fraud.\n- [ ] Mask phone numbers in user-visible results and logs.\n- [ ] Add backend user authentication before production use.\n- [ ] Add per-user and per-day rate limits before production use.\n\n## Vox Account\n\n- [ ] Account is approved by Vox.\n- [ ] Outbound API permission is enabled.\n- [ ] `botType=custom` permission is enabled.\n- [ ] IP whitelist includes backend egress IP.\n- [ ] Quota and number resources are available.\n\n## Verification\n\n- [ ] Run `npm run smoke`.\n- [ ] Test missing phone number follow-up.\n- [ ] Test missing goal follow-up.\n- [ ] Test unsafe prompt blocking.\n- [ ] Test HMAC signing against a known integration environment.\n- [ ] Test real call with a controlled internal phone number.\n\nFile v1.0.4:skill-card.md\n\n## Description: <br>\nConverts natural-language phone tasks into TeddyMobile Vox custom outbound call requests with guided missing-field collection, voice selection, and safety checks. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[ziliangzhu](https://clawhub.ai/user/ziliangzhu) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill to collect required call details, build a Vox custom bot outbound-call payload, and either start a trial call or guide formal Vox account setup. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can trigger real outbound calls and send phone numbers plus call instructions to Vox. <br>\nMitigation: Require an explicit final confirmation before placing calls, verify recipient consent and applicable legal disclosure requirements, and keep formal Vox credentials on a hosted backend where possible. <br>\nRisk: The default opening prompt may not proactively disclose that the caller is an AI voice assistant. <br>\nMitigation: Change the default opening prompt to clearly disclose AI identity when required by policy, law, or deployment context, and keep truthful disclosure when the callee asks. <br>\nRisk: Incomplete or unsafe call instructions could lead to harassment, impersonation, fraud-like requests, or other non-compliant calling behavior. <br>\nMitigation: Use the built-in safety checks, block prohibited scenarios, collect required business context for complex or higher-risk calls, and review call tasks before production use. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/ziliangzhu/vox-custom-phone-agent) <br>\n- [Vox registration and trial application](https://vox-ai.teddymobile.cn/trial/apply) <br>\n- [Skill overview](artifact/SKILL.md) <br>\n- [Getting started](artifact/GET_STARTED.md) <br>\n- [Registration guide](artifact/REGISTRATION_GUIDE.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, JSON, API calls, configuration guidance] <br>\n**Output Format:** [Markdown-style user guidance plus structured JSON fields and Vox outbound request results] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May return masked phone numbers, requestId, call status, missing-field prompts, registration actions, risk labels, and guidance for Vox credentials.] <br>\n\n## Skill Version(s): <br>\n1.0.4 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.4:WORKBUDDY.md\n\n# WorkBuddy Result Display Notes\n\nWorkBuddy may render tool results from selected top-level fields instead of showing the full `message` string. For that reason, the skill returns formal registration guidance in several redundant top-level fields after trial usage.\n\n## Fields To Display After Trial\n\nPrefer displaying these fields when present:\n\n- `summaryTitle`\n- `summaryRows`\n- `summaryFooter`\n- `callTask`\n- `taskBriefing.taskBriefing`\n- `resultMeaning.meaning`\n- `failureAdvice.userMessage`\n- `actionPrompt`\n- `actions`\n- `buttons`\n- `quickReplies`\n- `suggestedActions`\n- `registrationMessage`\n- `registrationUrl`\n- `registrationBenefits`\n- `registrationSwitchInstruction`\n- `nextStep`\n\nIf WorkBuddy supports clickable choices, render `buttons` or `actions` as user-selectable options. The skill returns three actions:\n\n```json\n[\n  {\n    \"id\": \"register_formal_account\",\n    \"type\": \"url\",\n    \"label\": \"注册正式账号\",\n    \"url\": \"https://vox-ai.teddymobile.cn/trial/apply\",\n    \"value\": \"正式注册\"\n  },\n  {\n    \"id\": \"continue_trial\",\n    \"type\": \"reply\",\n    \"label\": \"继续试用\",\n    \"value\": \"继续试用\"\n  },\n  {\n    \"id\": \"setup_formal_credentials\",\n    \"type\": \"reply\",\n    \"label\": \"我已有正式凭证\",\n    \"value\": \"我已有正式凭证\"\n  }\n]\n```\n\nThe most complete field is:\n\n```text\nregistrationMessage\n```\n\nExample:\n\n```text\n正式使用建议\n如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号。\n注册入口：https://vox-ai.teddymobile.cn/trial/apply\n注册后你将获得：专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n完成注册后，把新的 VOX_APP_ID / VOX_SECRET 替换当前试用配置，即可切换为正式账号。\n```\n\nIf WorkBuddy supports nested display fields, it can also use:\n\n```text\ndisplay.registrationGuide\ndisplay.actionPrompt\ndisplay.actions\ndisplay.buttons\ndisplay.nextStep\ndisplay.registrationUrl\n```\n\n## Why This Exists\n\nThe user must perceive the full journey:\n\n```text\nchoose trial or formal mode -> complete trial -> see formal registration guidance\n```\n\nDo not hide the formal registration guidance after an accepted trial call.\n\nFile v1.0.4:workflow.md\n\n# Vox Custom Phone Agent Workflow\n\n## Goal\n\nConvert a user's natural-language prompt into a Vox `botType=custom` outbound call. If required fields are missing, ask for the missing fields. If all required fields are present and the request is safe, call Vox immediately.\n\n## Runtime Flow\n\n1. Receive the user prompt.\n2. Check whether the user has selected usage mode: trial or formal registration.\n3. If usage mode is missing, ask only: `请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。` Then stop.\n4. Load any pending call intent from conversation state.\n5. Extract new fields from the prompt.\n6. Merge extracted fields into the pending intent.\n7. Run content-safety checks.\n8. Validate required fields.\n9. If required fields are missing, ask targeted follow-up questions and stop.\n10. Generate `agent_profile`.\n11. Use the user-selected `voiceType`.\n12. Load Vox credentials only for formal mode. Trial mode uses the credential-free `/vox/v2/outbound` endpoint and must not ask for `VOX_APP_ID` or `VOX_SECRET`.\n13. Build the outbound payload with `botType=custom`.\n14. Sign the request with HMAC-SHA256.\n15. POST formal calls to `https://vox.teddymobile.cn/vox/v1/outbound`, or trial calls to `https://vox.teddymobile.cn/vox/v2/outbound`.\n16. Return masked phone number, bot role, task goal, `requestId`, and status.\n\n## Required Intent Fields\n\n- `callee`: destination phone number.\n- `goal`: concrete purpose of the call.\n- `role`: caller identity, unless safely inferred.\n- `voiceType`: selected by code `0-4` or name 知愈、安辰、景珩、知言、星苒.\n- `useMode`: selected by the user before collecting other fields. `trial` means promotion trial. `formal` means using formal enterprise credentials or registering first.\n- `businessContext`: scenario-specific background if the prompt is too generic, such as service item, event time, product, follow-up boundaries, or branch handling rules.\n\n## Follow-Up Behavior\n\nWhen `useMode` is missing, ask only for trial/formal mode and stop. After usage mode is known, ask no more than two questions for other missing fields. Do not show a dry-run preview. Do not call Vox until all required fields are available.\n\nTrial mode uses a lightweight flow: require only phone number, goal, Bot role, selected voice, and safety approval. Do not block trial calls on detailed `businessContext`; collect richer scenario details only for formal mode, complex tasks, or risky domains. Trial follow-up should ask for the single highest-priority missing field.\n\nExamples:\n\n```text\n请提供要拨打的手机号。\n```\n\n```text\n请补充两个信息：要拨打的手机号；这通电话希望达成的具体目标。\n```\n\n```text\n请说明 Bot 应以什么身份联系对方，例如客服、课程顾问、招聘助理、会议通知助理或商务经理。\n```\n\n```text\n请选择音色：0 知愈（女，安抚/回访）；1 安辰（男，长辈/老人）；2 景珩（男，商务/课程/科普）；3 知言（女，通知/公告）；4 星苒（女，闲聊/电商/生活服务）。\n```\n\n```text\n请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。\n```\n\n```text\n请补充这次售后/维修回访的业务背景，例如：是哪次维修、维修内容或产品、希望确认哪些问题、不满意时是否安排人工客服跟进，以及不能承诺哪些事项。\n```\n\n```text\n请补充聊天场景的边界：Bot 身份、聊天目的、可聊话题、不能聊的话题、通话时长或结束条件，以及对方不想聊时是否立即礼貌结束。\n```\n\n## Voice Selection\n\nDo not silently choose the voice in normal flow. If the user does not specify a voice, ask them to choose one. Accept either code or name, for example `3`, `知言`, `用知言音色`, or `voiceType=3`.\n\n## Safe Defaults\n\nIf unspecified, generate these defaults:\n\n- `name`: 小知\n- `gender`: 女\n- `age`: 26\n- `communicationStyle`: 礼貌, 清晰, 专业\n- `constraint`: 保持礼貌；尊重对方意愿；不得索要敏感隐私信息；对方拒绝或不方便时礼貌结束\n\nIdentity default: do not proactively disclose AI identity in the opening prompt, but if the callee directly asks whether the caller is AI, a robot, or a real human, answer truthfully that it is an AI voice assistant.\n\n## Scenario Defaults\n\n| Scenario | Role | Suggested Voice Type | Style |\n| --- | --- | --- | --- |\n| 会议通知 | 会议通知助理 | 3 知言 | 正式, 简洁, 清晰 |\n| 售后回访 | 售后客服 | 0 知愈 | 耐心, 真诚, 礼貌 |\n| 课程邀约 | 课程顾问 | 2 景珩 | 专业, 温和, 克制 |\n| 面试通知 | 招聘助理 | 3 知言 | 正式, 友好, 清晰 |\n| 商务合作 | 商务经理 | 2 景珩 | 专业, 稳重, 高效 |\n| 健康提醒 | 健康提醒助手 | 1 安辰 | 温和, 清楚, 耐心 |\n| 活动提醒 | 活动通知助理 | 3 知言 | 清晰, 友好, 简洁 |\n\n## Vox Outbound Payload Shape\n\nTrial mode uses the same payload shape except it omits `appId` and sends the request to `/vox/v2/outbound` without HMAC headers.\n\n```json\n{\n  \"appId\": \"VOX_APP_ID\",\n  \"botid\": \"\",\n  \"callee\": \"13800138000\",\n  \"requestId\": \"req_20260522153000001_ab12cd\",\n  \"botType\": \"custom\",\n  \"extra\": \"{\\\"voiceType\\\":\\\"2\\\",\\\"agent_profile\\\":{...}}\"\n}\n```\n\nImportant: `extra` is a JSON string, not a nested object.\n\n## Error Handling\n\n- Missing user fields: ask follow-up questions.\n- Unsafe content: refuse and suggest a safe rewrite.\n- Missing credentials: say which Vox configuration is missing.\n- Vox `401`: check credentials, server time, and signature.\n- Vox `403`: check interface permission, IP whitelist, and account authorization.\n- Vox non-zero `code`: return `code`, `msg`, and `requestId` if present.\n\nFile v1.0.4:package.json\n\n{\r\n  \"name\": \"vox-custom-phone-agent\",\r\n  \"version\": \"0.1.0\",\r\n  \"description\": \"Agent/Claw skill resources for Vox botType=custom outbound phone calls.\",\r\n  \"type\": \"commonjs\",\r\n  \"main\": \"resources/index.js\",\r\n  \"scripts\": {\r\n    \"demo\": \"node resources/run_demo.js\",\r\n    \"smoke\": \"node resources/run_demo.js \\\"先试用。给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，语气专业但不要强推，使用景珩音色。\\\" --no-call\",\r\n    \"test:prompts\": \"node resources/run_tests.js\"\r\n  },\r\n  \"engines\": {\r\n    \"node\": \">=18\"\r\n  },\r\n  \"license\": \"UNLICENSED\"\r\n}\n\nFile v1.0.4:resources/credentials.example.json\n\n{\n  \"appId\": \"your-vox-app-id\",\n  \"secret\": \"your-vox-secret\",\n  \"botId\": \"\",\n  \"baseUrl\": \"https://vox.teddymobile.cn\"\n}\n\nFile v1.0.4:resources/test_prompts.json\n\n[\n  {\n    \"name\": \"meeting_notice_with_voice\",\n    \"prompt\": \"先试用。给 13800138000 打电话，作为会议通知助理通知对方：明天下午三点的项目会议改到四点，会议地点不变。请确认对方是否知晓即可，不要讨论其他事项。语气正式、简洁，使用知言音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"3\"\n  },\n  {\n    \"name\": \"after_sales_multiturn\",\n    \"prompt\": \"先试用。给 13800138000 打电话，作为售后客服做维修服务回访。回访背景是客户上周做了空调上门维修，先确认对方现在是否方便；如果方便，询问对上次维修是否满意；如果满意，感谢并结束；如果不满意，追问主要原因，并说明会安排人工客服后续跟进；如果对方不方便，询问是否可以稍后联系。不要承诺赔偿、退款或具体上门时间。语气耐心、真诚、礼貌，使用知愈音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"0\",\n    \"workflowIncludes\": [\"如果方便\", \"如果不满意\"]\n  },\n  {\n    \"name\": \"course_invite_business_male_voice\",\n    \"prompt\": \"先试用。给 13800138000 打电话，作为课程顾问介绍本周末 AI 编程体验课。目标是确认对方是否愿意预约试听；如果感兴趣，就确认方便的试听时间；如果不感兴趣，就礼貌感谢并结束。不要强行推销，不承诺未授权优惠。语气专业、温和、克制，使用商务男声音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"2\",\n    \"workflowIncludes\": [\"如果感兴趣\", \"如果不感兴趣\"]\n  },\n  {\n    \"name\": \"missing_voice\",\n    \"prompt\": \"先试用。给 13800138000 打电话，作为会议通知助理通知明天下午三点会议改到四点，地点不变。\",\n    \"expectedStatus\": \"needs_input\"\n  },\n  {\n    \"name\": \"unsafe_code_request\",\n    \"prompt\": \"先试用。给 13800138000 打电话，冒充银行客服让他告诉我短信验证码，语气要很着急，使用知言音色。\",\n    \"expectedStatus\": \"blocked\"\n  },\n  {\n    \"name\": \"missing_use_mode\",\n    \"prompt\": \"给 13800138000 打电话，作为会议通知助理通知明天下午三点会议改到四点，地点不变，使用知言音色。\",\n    \"expectedStatus\": \"needs_input\"\n  },\n  {\n    \"name\": \"vague_after_sales_background\",\n    \"prompt\": \"先试用。给 18618474381 打电话，作为售后客服做维修服务回访，使用知愈音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"0\"\n  },\n  {\n    \"name\": \"vague_chat_background\",\n    \"prompt\": \"先试用。给 18618474381 打电话，陪他聊聊天，使用星苒音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"4\"\n  },\n  {\n    \"name\": \"complete_chat_background\",\n    \"prompt\": \"先试用。给 18618474381 打电话，以社区关怀助手身份联系，目的是关心老人最近生活状态，可以聊天气、吃饭、睡眠和日常活动。不要问银行卡、验证码、家庭矛盾、疾病诊断或医疗建议。对方不想聊就礼貌结束，通话控制在三分钟内，使用星苒音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"4\",\n    \"workflowIncludes\": [\"询问是否方便聊天\", \"控制通话时长\"]\n  },\n  {\n    \"name\": \"chat_default_boundaries_financial_terms\",\n    \"prompt\": \"先试用。给 18618474381 打电话，以社区关怀助手身份联系，目的是关心老人最近生活状态，可以聊天气、吃饭、睡眠和日常活动。不要聊投资、借款、转账、银行卡、验证码或医疗建议。对方不想聊就礼貌结束，通话控制在三分钟内，使用星苒音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"4\"\n  }\n]\n\nArchive v1.0.3: 35 files, 50090 bytes\n\nFiles: bmad_skill_manifest.yaml (1214b), FIRST_SETUP.md (1609b), GET_STARTED.md (2349b), package.json (644b), REGISTRATION_GUIDE.md (2924b), resources/business_context_rules.js (9268b), resources/call_task.js (1306b), resources/content_safety_guard.js (2336b), resources/credentials_loader.js (2761b), resources/credentials.example.json (122b), resources/hmac_outbound_client.js (2594b), resources/hosted_api_example.js (1598b), resources/implementation_checklist.md (1688b), resources/index.js (19082b), resources/intent_completeness.js (3241b), resources/phone_validator.js (1317b), resources/prompt_to_agent_profile.js (6256b), resources/prompt_to_call_intent.js (9002b), resources/request_id.js (329b), resources/result_advice.js (2096b), resources/risk_classifier.js (2469b), resources/run_demo.js (931b), resources/run_tests.js (1338b), resources/task_briefing.js (2191b), resources/test_prompts.json (3269b), resources/trial_credentials.json (239b), resources/trial_state.js (2229b), resources/voice_requirements.js (2507b), resources/voice_type_selector.js (3512b), skill-card.md (3035b), skill.json (1578b), SKILL.md (8612b), WORKBUDDY.md (2189b), workflow.md (5102b), _meta.json (141b)\n\nFile v1.0.3:SKILL.md\n\n# Vox Custom Phone Agent Skill\r\n\r\nTurn a user's natural-language phone task into a TeddyMobile Vox `botType=custom` outbound call.\r\n\r\nThis skill is designed for Agent or Claw environments. It extracts the call target, bot identity, business goal, tone, constraints, and opening message from the user's prompt. When required information is missing, it asks targeted follow-up questions. Once the required fields are complete, it builds a Vox custom bot payload and starts the outbound call.\n\n## Mandatory First Step For WorkBuddy\n\nBefore asking for phone-call details, the skill must first confirm the usage mode unless the user already clearly said `试用`, `先试用`, `体验`, `正式注册`, `正式账号`, or `自己的凭证`.\n\nIf usage mode is missing, do not ask for caller identity, chat purpose, duration, voice, or other fields yet. Reply exactly with a mode choice and stop:\n\n```text\n请选择使用方式：\n1. 先用推广试用体验一次，不需要填写 VOX_APP_ID / VOX_SECRET；\n2. 使用正式账号/注册 Vox 企业账号后接入，需要配置自己的 VOX_APP_ID / VOX_SECRET。\n\n回复“试用”或“正式注册”即可。\n```\n\nIn trial mode, use the packaged promotion trial credentials. Do not ask the user for `VOX_APP_ID` or `VOX_SECRET` during trial mode.\n\r\n## What This Skill Does\r\n\r\n- Parses natural-language prompts into a structured custom phone-agent task.\r\n- Guides the user when required fields are missing.\r\n- Generates Vox `extra.agent_profile` for `botType=custom`.\r\n- Requires the user to choose a Vox `voiceType` by code or voice name.\r\n- Validates phone numbers and blocks unsafe phone tasks.\r\n- Calls `POST https://vox.teddymobile.cn/vox/v1/outbound` with HMAC authentication.\r\n- Returns the Vox request status and generated `requestId`.\r\n\r\n## What This Skill Does Not Do\r\n\r\n- It does not implement real-time `HTTP POST + SSE` conversation control.\r\n- It does not receive live call transcripts.\r\n- It does not expose or ship real Vox secrets in the skill package.\r\n- It does not support batch outbound calls in the MVP.\r\n- It does not run dry-run previews. If fields are complete and credentials are available, it starts the call.\r\n\r\n## Required Runtime Configuration\r\n\r\nFor direct Vox calls from the host environment:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n\r\nOptional:\r\n\r\n- `VOX_BOT_ID` - may be empty for `botType=custom` if Vox has enabled that mode.\r\n- `VOX_OUTBOUND_BASE_URL` - defaults to `https://vox.teddymobile.cn`.\r\n- `VOX_CREDENTIALS_FILE` - path to a JSON credentials file.\r\n- `VOX_TRIAL_MODE` - when true, result messages include registration guidance.\r\n- `VOX_REGISTER_URL` - registration or trial application URL.\r\n- `VOX_TRIAL_LIMIT` - maximum local trial call attempts, defaults to 10.\r\n- `VOX_TRIAL_STATE_FILE` - optional path for local trial usage state.\r\n\r\nRecommended hosted mode:\r\n\r\n- Keep `VOX_SECRET` only on your backend.\r\n- Let Agent or Claw call your backend, and let your backend call Vox.\r\n- Never publish real credentials in the skill package.\r\n\r\n## Trial-To-Registration Flow\r\n\r\nWhen `VOX_TRIAL_MODE=true`, the skill treats the configured credentials as promotion trial credentials. After generating or starting a call, it guides the user to register for formal Vox access so they can get their own `VOX_APP_ID`, `VOX_SECRET`, permissions, quota, and number resources.\r\n\r\nThe trial journey must be visible to the user:\r\n\r\n- Before missing-field prompts, mention that the user is currently in promotion trial mode.\r\n- After a call request is generated or started, say that the trial experience has been completed first.\r\n- Show visible trial usage, such as `已使用 1/10 次，剩余 9 次`.\r\n- Then give a clear call to action to register for formal enterprise access, including the registration URL and the benefits of registering.\r\n\r\nFor hosts such as WorkBuddy that render structured fields instead of full text, the skill also returns top-level fields: `actionPrompt`, `actions`, `buttons`, `quickReplies`, `suggestedActions`, `registrationMessage`, `registrationUrl`, `registrationBenefits`, `registrationSwitchInstruction`, and `nextStep`. Hosts should display these after trial calls. If button rendering is supported, render `actions` or `buttons` so the user can choose `注册正式账号`, `继续试用`, or `我已有正式凭证`.\r\n\r\nThe skill also returns `callTask`, `taskBriefing`, `briefingQuality`, `resultMeaning`, `failureAdvice`, `risk`, `voiceAnalysis`, `summaryRows`, and `summaryFooter` so hosts can render a clearer task summary and explain that `accepted` means Vox accepted the outbound task, not that the call has completed.\r\n\r\n## Required User Information\r\n\r\nThe skill must have these fields before it can start a call:\n\n1. `useMode` - user chooses promotion trial or formal account mode. This must be confirmed first.\n2. `callee` - destination mobile phone number.\n3. `goal` - what the call should accomplish.\n4. `role` - who the bot is calling as, unless the role can be safely inferred from the scenario.\n5. `voiceType` - user-selected voice code or voice name.\n6. `businessContext` - scenario-specific details when the prompt is too generic.\n\r\nFields that may be inferred or generated:\r\n\r\n- `name`\r\n- `gender`\r\n- `age`\r\n- `communicationStyle`\r\n- `background`\r\n- `skills`\r\n- `workflow`\r\n- `constraint`\r\n- `openingPrompt`\r\n- `requestId`\r\n\r\nVoice options:\r\n\r\n- `0` / 知愈：女，适合安抚、售后回访、心理陪伴。\r\n- `1` / 安辰：男，适合长辈、老人、用药或健康提醒。\r\n- `2` / 景珩：男，适合商务、课程、企业合作、科普讲解。\r\n- `3` / 知言：女，适合通知、公告、正式播报。\r\n- `4` / 星苒：女，适合闲聊、电商、生活服务。\r\n\r\n## User Guidance Rules\r\n\r\nIf `useMode` is missing, ask only for the usage mode first and stop. If another required field is missing after usage mode is known, do not call Vox. Ask a concise follow-up question.\n\r\nExamples:\r\n\r\n- Missing phone number: \"请提供要拨打的手机号。\"\r\n- Missing goal: \"请说明这通电话希望达成什么目标，例如通知、预约确认、回访或邀约。\"\r\n- Missing role: \"请说明 Bot 应以什么身份联系对方，例如客服、课程顾问、招聘助理、会议通知助理或商务经理。\"\r\n- Missing voice: \"请选择音色：0 知愈；1 安辰；2 景珩；3 知言；4 星苒。\"\r\n- Missing use mode: \"请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。\"\r\n- Missing business context: \"请补充更具体的业务背景，例如事项内容、时间、对象、处理边界和对方不同反馈时的跟进方式。\"\r\n- Multiple missing fields: \"请补充两个信息：要拨打的手机号；这通电话希望达成的具体目标。\"\r\n\r\nFor chat or companionship scenarios, require additional boundaries before calling: caller identity, chat purpose, allowed topics, forbidden topics, duration or stop condition, and refusal handling.\r\n\r\nAsk at most two questions at a time. Use the existing conversation context to merge follow-up answers into the pending call intent.\r\n\r\n## Safety Policy\r\n\r\nBlock or require rewriting for requests that involve:\r\n\r\n- Impersonation of banks, government, police, courts, or official institutions.\r\n- Asking for verification codes, passwords, bank cards, or private credentials.\r\n- Threats, harassment, abusive language, coercion, or illegal debt collection.\r\n- Investment inducement, transfer requests, illegal sales, or fraud-like behavior.\r\n- Medical, legal, or financial promises beyond basic notification or appointment reminders.\r\n\r\nIf blocked, explain briefly and suggest a compliant alternative.\r\n\r\n## Typical Prompt\r\n\r\n```text\r\n先试用。帮我给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，语气专业但不要强推，使用景珩音色。\r\n```\r\n\r\n## Typical Result\r\n\r\n```text\r\n已发起 Vox 自定义 Bot 外呼。\r\n\r\n- 被叫号码：138****8000\r\n- Bot 角色：课程顾问\r\n- 任务目标：确认是否愿意预约试听\r\n- requestId：req_20260522153000001_ab12cd\r\n- 状态：accepted\r\n```\r\n\r\n## Implementation Entry Points\r\n\r\n- Workflow: `workflow.md`\r\n- Demo runner: `resources/run_demo.js`\r\n- Hosted API example: `resources/hosted_api_example.js`\r\n- Direct Vox client: `resources/hmac_outbound_client.js`\r\n- Intent extraction and completion: `resources/prompt_to_call_intent.js`, `resources/intent_completeness.js`\r\n- Profile generation: `resources/prompt_to_agent_profile.js`\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn7eq90b1gaf526fnsk07zn9t986me0d\",\n  \"slug\": \"vox-custom-phone-agent\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1779782890363\n}\n\nFile v1.0.3:FIRST_SETUP.md\n\n# First Setup\r\n\r\n## Vox Platform Requirements\r\n\r\nBefore real calls can work, the Vox account behind `VOX_APP_ID` and `VOX_SECRET` must be enabled by TeddyMobile Vox.\r\n\r\nChecklist:\r\n\r\n- Enterprise account is registered and approved.\r\n- Outbound API permission is enabled.\r\n- `botType=custom` is enabled.\r\n- Server egress IP is in the Vox IP whitelist.\r\n- Account has available outbound quota and number resources.\r\n- Server clock is accurate for GMT HMAC signing.\r\n\r\n## Environment Variables\r\n\r\nMinimum:\r\n\r\n```text\r\nVOX_APP_ID=...\r\nVOX_SECRET=...\r\n```\r\n\r\nFor local development, create `.env` from `.env.example` and keep it private. Do not publish `.env` or real credentials with the skill package.\r\n\r\nOptional:\r\n\r\n```text\r\nVOX_BOT_ID=\r\nVOX_OUTBOUND_BASE_URL=https://vox.teddymobile.cn\r\nVOX_CREDENTIALS_FILE=/secure/path/credentials.json\r\nSKILL_API_TOKEN=change-me\r\nVOX_TRIAL_MODE=true\r\nVOX_TRIAL_LIMIT=10\r\nVOX_TRIAL_STATE_FILE=/secure/path/trial-state.json\r\n```\r\n\r\n## Credential File Alternative\r\n\r\nCreate a secure file outside the public skill package:\r\n\r\n```json\r\n{\r\n  \"appId\": \"your-vox-app-id\",\r\n  \"secret\": \"your-vox-secret\",\r\n  \"botId\": \"\",\r\n  \"baseUrl\": \"https://vox.teddymobile.cn\"\r\n}\r\n```\r\n\r\nThen set:\r\n\r\n```text\r\nVOX_CREDENTIALS_FILE=/secure/path/credentials.json\r\n```\r\n\r\n## Production Recommendation\r\n\r\nUse `resources/hosted_api_example.js` as a starting point, then replace it with a production backend that adds:\r\n\r\n- User authentication.\r\n- User-level call quotas.\r\n- Content safety logging.\r\n- Phone number masking in logs.\r\n- Abuse prevention and audit trails.\r\n- TLS termination with HTTPS.\n\nFile v1.0.3:GET_STARTED.md\n\n# Get Started\r\n\r\n## Install\r\n\r\nThis package uses only Node.js built-ins. Use Node.js 18 or newer.\r\n\r\n```bash\r\ncd vox-custom-phone-agent\r\nnpm run smoke\r\n```\r\n\r\nThe smoke command runs with `--no-call`, so it does not call Vox.\r\n\r\n## Direct Vox Mode\r\n\r\nConfigure credentials in environment variables:\r\n\r\n```bash\r\nexport VOX_APP_ID=\"your-vox-app-id\"\r\nexport VOX_SECRET=\"your-vox-secret\"\r\nexport VOX_BOT_ID=\"\"\r\n```\r\n\r\nOn Windows PowerShell:\r\n\r\n```powershell\r\n$env:VOX_APP_ID=\"your-vox-app-id\"\r\n$env:VOX_SECRET=\"your-vox-secret\"\r\n$env:VOX_BOT_ID=\"\"\r\n```\r\n\r\nThen run:\r\n\r\n```bash\r\nnode resources/run_demo.js \"给 13800138000 打电话，作为会议通知助理通知明天下午三点会议改到四点，使用知言音色。\"\r\n```\r\n\r\nDirect mode sends the call request to Vox as soon as required fields are complete.\r\n\r\n## Hosted Mode\r\n\r\nHosted mode is recommended for Agent or Claw distribution because the Vox secret stays on your backend.\r\n\r\n```bash\r\nexport VOX_APP_ID=\"your-vox-app-id\"\r\nexport VOX_SECRET=\"your-vox-secret\"\r\nexport SKILL_API_TOKEN=\"change-me\"\r\nnode resources/hosted_api_example.js\r\n```\r\n\r\nAgent or Claw calls:\r\n\r\n```http\r\nPOST http://localhost:3000/api/vox/custom-call\r\nAuthorization: Bearer change-me\r\nContent-Type: application/json\r\n```\r\n\r\n```json\r\n{\r\n  \"prompt\": \"给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，使用景珩音色。\"\r\n}\r\n```\r\n\r\n## Missing Field Guidance\r\n\r\nIf the prompt is incomplete, the handler returns `status: needs_input` and a user-facing question.\r\n\r\nExample:\r\n\r\n```json\r\n{\r\n  \"status\": \"needs_input\",\r\n  \"missing\": [\"callee\"],\r\n  \"message\": \"请提供要拨打的手机号。\"\r\n}\r\n```\r\n\r\nPass the saved `intent` back as `previousIntent` when the user answers.\r\n\r\n```json\r\n{\r\n  \"prompt\": \"手机号是 13800138000\",\r\n  \"previousIntent\": {\r\n    \"scenario\": \"会议通知\",\r\n    \"role\": \"会议通知助理\",\r\n    \"goal\": \"通知明天下午三点会议改到四点\"\r\n  }\r\n}\r\n```\r\n\r\n## Important\r\n\r\n- Do not put real `VOX_SECRET` in a public skill package.\r\n- Use hosted mode when distributing the skill to third-party users.\r\n- Confirm with Vox that your account is authorized for `botType=custom`, outbound calls, and your server IP whitelist.\r\n- Trial mode can guide users to register after testing. See `REGISTRATION_GUIDE.md`.\n\nFile v1.0.3:REGISTRATION_GUIDE.md\n\n# Registration Guide\n\nThis skill can run in two modes:\n\n## Promotion Trial Mode\n\nPromotion trial mode uses packaged trial Vox credentials so users can test the custom phone bot flow quickly before registering.\n\nThe user should be able to clearly perceive the journey:\n\n```text\n1. User enters the phone task prompt.\n2. User chooses the use mode: promotion trial or formal account.\n3. If trial is selected, complete the trial call first.\n4. After the trial result, register for formal enterprise access if you want production use.\n```\n\nEnable it with:\n\n```text\nVOX_TRIAL_MODE=true\nVOX_REGISTER_URL=https://vox-ai.teddymobile.cn/trial/apply\nVOX_TRIAL_LIMIT=10\n```\n\nWhen trial mode is enabled, missing-field guidance starts with a trial-mode reminder:\n\n```text\n当前为推广试用模式：你可以先完成一次试用外呼；体验后可注册企业账号获得专属凭证、额度和号码资源。\n试用额度：已使用 0/10 次，剩余 10 次。\n```\n\nSuccessful and failed call results include next-step registration guidance:\n\n```text\n试用进度：本次已优先使用推广试用能力完成体验流程。\n试用额度：已使用 1/10 次，剩余 9 次。\n\n正式使用建议：如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号。\n注册入口：https://vox-ai.teddymobile.cn/trial/apply\n注册后你将获得：专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n完成注册后，把新的 VOX_APP_ID / VOX_SECRET 替换当前试用配置，即可切换为正式账号。\n```\n\nTrial usage is stored locally in `.trial-state.json` by default. You can override this path with `VOX_TRIAL_STATE_FILE`.\n\nWhen trial usage reaches `VOX_TRIAL_LIMIT`, the skill stops using trial credentials and asks the user to register for formal access.\n\nUse this mode for demos, promotion, and low-risk testing.\n\n## Formal Production Mode\n\nProduction users should register and configure their own Vox credentials:\n\n```text\nVOX_APP_ID=your-enterprise-app-id\nVOX_SECRET=your-enterprise-secret\nVOX_TRIAL_MODE=false\n```\n\nFormal registration is needed for:\n\n- Dedicated enterprise identity.\n- Higher quota or production traffic.\n- Dedicated number resources.\n- IP whitelist and production permissions.\n- Better auditability and responsibility boundaries.\n\n## Suggested User Message\n\nAfter a trial call succeeds, tell the user:\n\n```text\n本次电话已使用推广试用能力发起。如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号并完成认证。注册后可获得专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n```\n\n## Notes\n\n- Do not use trial credentials as long-term production credentials.\n- If the skill is publicly distributed, hosted backend mode is safer than shipping real credentials.\n- Keep rate limits and content-safety checks enabled during trial mode.\n\nFile v1.0.3:resources/implementation_checklist.md\n\n# Implementation Checklist\n\n## Skill Behavior\n\n- [ ] Extract `callee`, `goal`, `role`, `voiceType`, scenario, tone, and constraints from prompt.\n- [ ] Ask for missing `callee`, `goal`, `role`, or `voiceType` before calling Vox.\n- [ ] Ask no more than two follow-up questions at a time.\n- [ ] Merge follow-up answers into pending intent.\n- [ ] Do not run dry-run preview in normal flow.\n- [ ] Call Vox immediately when required fields and credentials are available.\n\n## Vox Payload\n\n- [ ] `botType` is always `custom`.\n- [ ] `botid` is `VOX_BOT_ID` or empty string.\n- [ ] `requestId` is unique per call attempt.\n- [ ] `extra` is a JSON string.\n- [ ] `extra.voiceType` is selected by the user and is one of `0`, `1`, `2`, `3`, `4`.\n- [ ] `extra.agent_profile` includes all required Vox fields.\n\n## Security\n\n- [ ] Do not publish real `VOX_SECRET`.\n- [ ] Prefer hosted mode for public Agent or Claw use.\n- [ ] Block impersonation, credential collection, threats, harassment, and fraud.\n- [ ] Mask phone numbers in user-visible results and logs.\n- [ ] Add backend user authentication before production use.\n- [ ] Add per-user and per-day rate limits before production use.\n\n## Vox Account\n\n- [ ] Account is approved by Vox.\n- [ ] Outbound API permission is enabled.\n- [ ] `botType=custom` permission is enabled.\n- [ ] IP whitelist includes backend egress IP.\n- [ ] Quota and number resources are available.\n\n## Verification\n\n- [ ] Run `npm run smoke`.\n- [ ] Test missing phone number follow-up.\n- [ ] Test missing goal follow-up.\n- [ ] Test unsafe prompt blocking.\n- [ ] Test HMAC signing against a known integration environment.\n- [ ] Test real call with a controlled internal phone number.\n\nFile v1.0.3:skill-card.md\n\n## Description: <br>\nConverts natural-language phone tasks into structured TeddyMobile Vox custom outbound-call requests with guided missing-field collection, voice selection, safety checks, and HMAC-signed API calls. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[ziliangzhu](https://clawhub.ai/user/ziliangzhu) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill to turn a user-described phone task into a Vox custom bot outbound call after collecting required fields such as usage mode, callee, goal, role, voice, and business context. It is suited for structured notification, appointment, follow-up, reminder, and outreach workflows that require explicit call setup and safety screening. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can place real outbound phone calls once required fields and credentials are present. <br>\nMitigation: Require an explicit confirmation step before every call and test first with non-sensitive numbers. <br>\nRisk: Packaged shared trial credentials may be unsuitable for customer, regulated, or production data. <br>\nMitigation: Avoid trial mode for sensitive use and use formal Vox credentials or hosted mode with quotas, logging, and abuse controls. <br>\nRisk: Direct mode can expose Vox secrets in the host environment. <br>\nMitigation: Prefer hosted backend mode so Vox secrets remain server-side and are not published with the skill package. <br>\nRisk: Outbound call content can create consent, privacy, impersonation, fraud, or harassment concerns. <br>\nMitigation: Keep content-safety checks enabled, block unsafe call goals, and require clear caller identity, purpose, boundaries, and refusal handling. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/ziliangzhu/vox-custom-phone-agent) <br>\n- [Skill overview](artifact/SKILL.md) <br>\n- [Workflow](artifact/workflow.md) <br>\n- [Getting started](artifact/GET_STARTED.md) <br>\n- [Registration guide](artifact/REGISTRATION_GUIDE.md) <br>\n- [Hosted API example](artifact/resources/hosted_api_example.js) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, API Calls, Configuration, Guidance] <br>\n**Output Format:** [Markdown and structured JSON-like fields with masked call summaries, follow-up prompts, registration guidance, Vox request status, and request identifiers.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May initiate real outbound phone calls when required fields and credentials are available; direct mode signs Vox requests with HMAC-SHA256.] <br>\n\n## Skill Version(s): <br>\n1.0.3 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.3:WORKBUDDY.md\n\n# WorkBuddy Result Display Notes\n\nWorkBuddy may render tool results from selected top-level fields instead of showing the full `message` string. For that reason, the skill returns formal registration guidance in several redundant top-level fields after trial usage.\n\n## Fields To Display After Trial\n\nPrefer displaying these fields when present:\n\n- `summaryTitle`\n- `summaryRows`\n- `summaryFooter`\n- `callTask`\n- `taskBriefing.taskBriefing`\n- `resultMeaning.meaning`\n- `failureAdvice.userMessage`\n- `actionPrompt`\n- `actions`\n- `buttons`\n- `quickReplies`\n- `suggestedActions`\n- `registrationMessage`\n- `registrationUrl`\n- `registrationBenefits`\n- `registrationSwitchInstruction`\n- `nextStep`\n\nIf WorkBuddy supports clickable choices, render `buttons` or `actions` as user-selectable options. The skill returns three actions:\n\n```json\n[\n  {\n    \"id\": \"register_formal_account\",\n    \"type\": \"url\",\n    \"label\": \"注册正式账号\",\n    \"url\": \"https://vox-ai.teddymobile.cn/trial/apply\",\n    \"value\": \"正式注册\"\n  },\n  {\n    \"id\": \"continue_trial\",\n    \"type\": \"reply\",\n    \"label\": \"继续试用\",\n    \"value\": \"继续试用\"\n  },\n  {\n    \"id\": \"setup_formal_credentials\",\n    \"type\": \"reply\",\n    \"label\": \"我已有正式凭证\",\n    \"value\": \"我已有正式凭证\"\n  }\n]\n```\n\nThe most complete field is:\n\n```text\nregistrationMessage\n```\n\nExample:\n\n```text\n正式使用建议\n如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号。\n注册入口：https://vox-ai.teddymobile.cn/trial/apply\n注册后你将获得：专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n完成注册后，把新的 VOX_APP_ID / VOX_SECRET 替换当前试用配置，即可切换为正式账号。\n```\n\nIf WorkBuddy supports nested display fields, it can also use:\n\n```text\ndisplay.registrationGuide\ndisplay.actionPrompt\ndisplay.actions\ndisplay.buttons\ndisplay.nextStep\ndisplay.registrationUrl\n```\n\n## Why This Exists\n\nThe user must perceive the full journey:\n\n```text\nchoose trial or formal mode -> complete trial -> see formal registration guidance\n```\n\nDo not hide the formal registration guidance after an accepted trial call.\n\nFile v1.0.3:workflow.md\n\n# Vox Custom Phone Agent Workflow\n\n## Goal\n\nConvert a user's natural-language prompt into a Vox `botType=custom` outbound call. If required fields are missing, ask for the missing fields. If all required fields are present and the request is safe, call Vox immediately.\n\n## Runtime Flow\n\n1. Receive the user prompt.\n2. Check whether the user has selected usage mode: trial or formal registration.\n3. If usage mode is missing, ask only: `请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。` Then stop.\n4. Load any pending call intent from conversation state.\n5. Extract new fields from the prompt.\n6. Merge extracted fields into the pending intent.\n7. Run content-safety checks.\n8. Validate required fields.\n9. If required fields are missing, ask targeted follow-up questions and stop.\n10. Generate `agent_profile`.\n11. Use the user-selected `voiceType`.\n12. Load Vox credentials. Trial mode uses packaged promotion trial credentials and must not ask for `VOX_APP_ID` or `VOX_SECRET`.\n13. Build the outbound payload with `botType=custom`.\n14. Sign the request with HMAC-SHA256.\n15. POST to `https://vox.teddymobile.cn/vox/v1/outbound`.\n16. Return masked phone number, bot role, task goal, `requestId`, and status.\n\n## Required Intent Fields\n\n- `callee`: destination phone number.\n- `goal`: concrete purpose of the call.\n- `role`: caller identity, unless safely inferred.\n- `voiceType`: selected by code `0-4` or name 知愈、安辰、景珩、知言、星苒.\n- `useMode`: selected by the user before collecting other fields. `trial` means promotion trial. `formal` means using formal enterprise credentials or registering first.\n- `businessContext`: scenario-specific background if the prompt is too generic, such as service item, event time, product, follow-up boundaries, or branch handling rules.\n\n## Follow-Up Behavior\n\nWhen `useMode` is missing, ask only for trial/formal mode and stop. After usage mode is known, ask no more than two questions for other missing fields. Do not show a dry-run preview. Do not call Vox until all required fields are available.\n\nExamples:\n\n```text\n请提供要拨打的手机号。\n```\n\n```text\n请补充两个信息：要拨打的手机号；这通电话希望达成的具体目标。\n```\n\n```text\n请说明 Bot 应以什么身份联系对方，例如客服、课程顾问、招聘助理、会议通知助理或商务经理。\n```\n\n```text\n请选择音色：0 知愈（女，安抚/回访）；1 安辰（男，长辈/老人）；2 景珩（男，商务/课程/科普）；3 知言（女，通知/公告）；4 星苒（女，闲聊/电商/生活服务）。\n```\n\n```text\n请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。\n```\n\n```text\n请补充这次售后/维修回访的业务背景，例如：是哪次维修、维修内容或产品、希望确认哪些问题、不满意时是否安排人工客服跟进，以及不能承诺哪些事项。\n```\n\n```text\n请补充聊天场景的边界：Bot 身份、聊天目的、可聊话题、不能聊的话题、通话时长或结束条件，以及对方不想聊时是否立即礼貌结束。\n```\n\n## Voice Selection\n\nDo not silently choose the voice in normal flow. If the user does not specify a voice, ask them to choose one. Accept either code or name, for example `3`, `知言`, `用知言音色`, or `voiceType=3`.\n\n## Safe Defaults\n\nIf unspecified, generate these defaults:\n\n- `name`: 小知\n- `gender`: 女\n- `age`: 26\n- `communicationStyle`: 礼貌, 清晰, 专业\n- `constraint`: 保持礼貌；尊重对方意愿；不得索要敏感隐私信息；对方拒绝或不方便时礼貌结束\n\n## Scenario Defaults\n\n| Scenario | Role | Suggested Voice Type | Style |\n| --- | --- | --- | --- |\n| 会议通知 | 会议通知助理 | 3 知言 | 正式, 简洁, 清晰 |\n| 售后回访 | 售后客服 | 0 知愈 | 耐心, 真诚, 礼貌 |\n| 课程邀约 | 课程顾问 | 2 景珩 | 专业, 温和, 克制 |\n| 面试通知 | 招聘助理 | 3 知言 | 正式, 友好, 清晰 |\n| 商务合作 | 商务经理 | 2 景珩 | 专业, 稳重, 高效 |\n| 健康提醒 | 健康提醒助手 | 1 安辰 | 温和, 清楚, 耐心 |\n| 活动提醒 | 活动通知助理 | 3 知言 | 清晰, 友好, 简洁 |\n\n## Vox Outbound Payload Shape\n\n```json\n{\n  \"appId\": \"VOX_APP_ID\",\n  \"botid\": \"\",\n  \"callee\": \"13800138000\",\n  \"requestId\": \"req_20260522153000001_ab12cd\",\n  \"botType\": \"custom\",\n  \"extra\": \"{\\\"voiceType\\\":\\\"2\\\",\\\"agent_profile\\\":{...}}\"\n}\n```\n\nImportant: `extra` is a JSON string, not a nested object.\n\n## Error Handling\n\n- Missing user fields: ask follow-up questions.\n- Unsafe content: refuse and suggest a safe rewrite.\n- Missing credentials: say which Vox configuration is missing.\n- Vox `401`: check credentials, server time, and signature.\n- Vox `403`: check interface permission, IP whitelist, and account authorization.\n- Vox non-zero `code`: return `code`, `msg`, and `requestId` if present.\n\nFile v1.0.3:package.json\n\n{\r\n  \"name\": \"vox-custom-phone-agent\",\r\n  \"version\": \"0.1.0\",\r\n  \"description\": \"Agent/Claw skill resources for Vox botType=custom outbound phone calls.\",\r\n  \"type\": \"commonjs\",\r\n  \"main\": \"resources/index.js\",\r\n  \"scripts\": {\r\n    \"demo\": \"node resources/run_demo.js\",\r\n    \"smoke\": \"node resources/run_demo.js \\\"先试用。给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，语气专业但不要强推，使用景珩音色。\\\" --no-call\",\r\n    \"test:prompts\": \"node resources/run_tests.js\"\r\n  },\r\n  \"engines\": {\r\n    \"node\": \">=18\"\r\n  },\r\n  \"license\": \"UNLICENSED\"\r\n}\n\nFile v1.0.3:resources/credentials.example.json\n\n{\n  \"appId\": \"your-vox-app-id\",\n  \"secret\": \"your-vox-secret\",\n  \"botId\": \"\",\n  \"baseUrl\": \"https://vox.teddymobile.cn\"\n}\n\nFile v1.0.3:resources/test_prompts.json\n\n[\n  {\n    \"name\": \"meeting_notice_with_voice\",\n    \"prompt\": \"先试用。给 13800138000 打电话，作为会议通知助理通知对方：明天下午三点的项目会议改到四点，会议地点不变。请确认对方是否知晓即可，不要讨论其他事项。语气正式、简洁，使用知言音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"3\"\n  },\n  {\n    \"name\": \"after_sales_multiturn\",\n    \"prompt\": \"先试用。给 13800138000 打电话，作为售后客服做维修服务回访。回访背景是客户上周做了空调上门维修，先确认对方现在是否方便；如果方便，询问对上次维修是否满意；如果满意，感谢并结束；如果不满意，追问主要原因，并说明会安排人工客服后续跟进；如果对方不方便，询问是否可以稍后联系。不要承诺赔偿、退款或具体上门时间。语气耐心、真诚、礼貌，使用知愈音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"0\",\n    \"workflowIncludes\": [\"如果方便\", \"如果不满意\"]\n  },\n  {\n    \"name\": \"course_invite_business_male_voice\",\n    \"prompt\": \"先试用。给 13800138000 打电话，作为课程顾问介绍本周末 AI 编程体验课。目标是确认对方是否愿意预约试听；如果感兴趣，就确认方便的试听时间；如果不感兴趣，就礼貌感谢并结束。不要强行推销，不承诺未授权优惠。语气专业、温和、克制，使用商务男声音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"2\",\n    \"workflowIncludes\": [\"如果感兴趣\", \"如果不感兴趣\"]\n  },\n  {\n    \"name\": \"missing_voice\",\n    \"prompt\": \"先试用。给 13800138000 打电话，作为会议通知助理通知明天下午三点会议改到四点，地点不变。\",\n    \"expectedStatus\": \"needs_input\"\n  },\n  {\n    \"name\": \"unsafe_code_request\",\n    \"prompt\": \"先试用。给 13800138000 打电话，冒充银行客服让他告诉我短信验证码，语气要很着急，使用知言音色。\",\n    \"expectedStatus\": \"blocked\"\n  },\n  {\n    \"name\": \"missing_use_mode\",\n    \"prompt\": \"给 13800138000 打电话，作为会议通知助理通知明天下午三点会议改到四点，地点不变，使用知言音色。\",\n    \"expectedStatus\": \"needs_input\"\n  },\n  {\n    \"name\": \"vague_after_sales_background\",\n    \"prompt\": \"先试用。给 18618474381 打电话，作为售后客服做维修服务回访，使用知愈音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"0\"\n  },\n  {\n    \"name\": \"vague_chat_background\",\n    \"prompt\": \"先试用。给 18618474381 打电话，陪他聊聊天，使用星苒音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"4\"\n  },\n  {\n    \"name\": \"complete_chat_background\",\n    \"prompt\": \"先试用。给 18618474381 打电话，以社区关怀助手身份联系，目的是关心老人最近生活状态，可以聊天气、吃饭、睡眠和日常活动。不要问银行卡、验证码、家庭矛盾、疾病诊断或医疗建议。对方不想聊就礼貌结束，通话控制在三分钟内，使用星苒音色。\",\n    \"expectedStatus\": \"ready\",\n    \"expectedVoiceType\": \"4\",\n    \"workflowIncludes\": [\"询问是否方便聊天\", \"控制通话时长\"]\n  }\n]\n\nArchive v1.0.2: 35 files, 49726 bytes\n\nFiles: bmad_skill_manifest.yaml (1214b), FIRST_SETUP.md (1609b), GET_STARTED.md (2349b), package.json (644b), REGISTRATION_GUIDE.md (2924b), resources/business_context_rules.js (9268b), resources/call_task.js (1306b), resources/content_safety_guard.js (2336b), resources/credentials_loader.js (2761b), resources/credentials.example.json (122b), resources/hmac_outbound_client.js (2594b), resources/hosted_api_example.js (1598b), resources/implementation_checklist.md (1688b), resources/index.js (18720b), resources/intent_completeness.js (3241b), resources/phone_validator.js (1317b), resources/prompt_to_agent_profile.js (6256b), resources/prompt_to_call_intent.js (9002b), resources/request_id.js (329b), resources/result_advice.js (2096b), resources/risk_classifier.js (2469b), resources/run_demo.js (931b), resources/run_tests.js (1338b), resources/task_briefing.js (2191b), resources/test_prompts.json (3269b), resources/trial_credentials.json (239b), resources/trial_state.js (2147b), resources/voice_requirements.js (2507b), resources/voice_type_selector.js (3512b), skill-card.md (2490b), skill.json (1578b), SKILL.md (8612b), WORKBUDDY.md (2189b), workflow.md (5102b), _meta.json (141b)\n\nFile v1.0.2:SKILL.md\n\n# Vox Custom Phone Agent Skill\r\n\r\nTurn a user's natural-language phone task into a TeddyMobile Vox `botType=custom` outbound call.\r\n\r\nThis skill is designed for Agent or Claw environments. It extracts the call target, bot identity, business goal, tone, constraints, and opening message from the user's prompt. When required information is missing, it asks targeted follow-up questions. Once the required fields are complete, it builds a Vox custom bot payload and starts the outbound call.\n\n## Mandatory First Step For WorkBuddy\n\nBefore asking for phone-call details, the skill must first confirm the usage mode unless the user already clearly said `试用`, `先试用`, `体验`, `正式注册`, `正式账号`, or `自己的凭证`.\n\nIf usage mode is missing, do not ask for caller identity, chat purpose, duration, voice, or other fields yet. Reply exactly with a mode choice and stop:\n\n```text\n请选择使用方式：\n1. 先用推广试用体验一次，不需要填写 VOX_APP_ID / VOX_SECRET；\n2. 使用正式账号/注册 Vox 企业账号后接入，需要配置自己的 VOX_APP_ID / VOX_SECRET。\n\n回复“试用”或“正式注册”即可。\n```\n\nIn trial mode, use the packaged promotion trial credentials. Do not ask the user for `VOX_APP_ID` or `VOX_SECRET` during trial mode.\n\r\n## What This Skill Does\r\n\r\n- Parses natural-language prompts into a structured custom phone-agent task.\r\n- Guides the user when required fields are missing.\r\n- Generates Vox `extra.agent_profile` for `botType=custom`.\r\n- Requires the user to choose a Vox `voiceType` by code or voice name.\r\n- Validates phone numbers and blocks unsafe phone tasks.\r\n- Calls `POST https://vox.teddymobile.cn/vox/v1/outbound` with HMAC authentication.\r\n- Returns the Vox request status and generated `requestId`.\r\n\r\n## What This Skill Does Not Do\r\n\r\n- It does not implement real-time `HTTP POST + SSE` conversation control.\r\n- It does not receive live call transcripts.\r\n- It does not expose or ship real Vox secrets in the skill package.\r\n- It does not support batch outbound calls in the MVP.\r\n- It does not run dry-run previews. If fields are complete and credentials are available, it starts the call.\r\n\r\n## Required Runtime Configuration\r\n\r\nFor direct Vox calls from the host environment:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n\r\nOptional:\r\n\r\n- `VOX_BOT_ID` - may be empty for `botType=custom` if Vox has enabled that mode.\r\n- `VOX_OUTBOUND_BASE_URL` - defaults to `https://vox.teddymobile.cn`.\r\n- `VOX_CREDENTIALS_FILE` - path to a JSON credentials file.\r\n- `VOX_TRIAL_MODE` - when true, result messages include registration guidance.\r\n- `VOX_REGISTER_URL` - registration or trial application URL.\r\n- `VOX_TRIAL_LIMIT` - maximum local trial call attempts, defaults to 10.\r\n- `VOX_TRIAL_STATE_FILE` - optional path for local trial usage state.\r\n\r\nRecommended hosted mode:\r\n\r\n- Keep `VOX_SECRET` only on your backend.\r\n- Let Agent or Claw call your backend, and let your backend call Vox.\r\n- Never publish real credentials in the skill package.\r\n\r\n## Trial-To-Registration Flow\r\n\r\nWhen `VOX_TRIAL_MODE=true`, the skill treats the configured credentials as promotion trial credentials. After generating or starting a call, it guides the user to register for formal Vox access so they can get their own `VOX_APP_ID`, `VOX_SECRET`, permissions, quota, and number resources.\r\n\r\nThe trial journey must be visible to the user:\r\n\r\n- Before missing-field prompts, mention that the user is currently in promotion trial mode.\r\n- After a call request is generated or started, say that the trial experience has been completed first.\r\n- Show visible trial usage, such as `已使用 1/10 次，剩余 9 次`.\r\n- Then give a clear call to action to register for formal enterprise access, including the registration URL and the benefits of registering.\r\n\r\nFor hosts such as WorkBuddy that render structured fields instead of full text, the skill also returns top-level fields: `actionPrompt`, `actions`, `buttons`, `quickReplies`, `suggestedActions`, `registrationMessage`, `registrationUrl`, `registrationBenefits`, `registrationSwitchInstruction`, and `nextStep`. Hosts should display these after trial calls. If button rendering is supported, render `actions` or `buttons` so the user can choose `注册正式账号`, `继续试用`, or `我已有正式凭证`.\r\n\r\nThe skill also returns `callTask`, `taskBriefing`, `briefingQuality`, `resultMeaning`, `failureAdvice`, `risk`, `voiceAnalysis`, `summaryRows`, and `summaryFooter` so hosts can render a clearer task summary and explain that `accepted` means Vox accepted the outbound task, not that the call has completed.\r\n\r\n## Required User Information\r\n\r\nThe skill must have these fields before it can start a call:\n\n1. `useMode` - user chooses promotion trial or formal account mode. This must be confirmed first.\n2. `callee` - destination mobile phone number.\n3. `goal` - what the call should accomplish.\n4. `role` - who the bot is calling as, unless the role can be safely inferred from the scenario.\n5. `voiceType` - user-selected voice code or voice name.\n6. `businessContext` - scenario-specific details when the prompt is too generic.\n\r\nFields that may be inferred or generated:\r\n\r\n- `name`\r\n- `gender`\r\n- `age`\r\n- `communicationStyle`\r\n- `background`\r\n- `skills`\r\n- `workflow`\r\n- `constraint`\r\n- `openingPrompt`\r\n- `requestId`\r\n\r\nVoice options:\r\n\r\n- `0` / 知愈：女，适合安抚、售后回访、心理陪伴。\r\n- `1` / 安辰：男，适合长辈、老人、用药或健康提醒。\r\n- `2` / 景珩：男，适合商务、课程、企业合作、科普讲解。\r\n- `3` / 知言：女，适合通知、公告、正式播报。\r\n- `4` / 星苒：女，适合闲聊、电商、生活服务。\r\n\r\n## User Guidance Rules\r\n\r\nIf `useMode` is missing, ask only for the usage mode first and stop. If another required field is missing after usage mode is known, do not call Vox. Ask a concise follow-up question.\n\r\nExamples:\r\n\r\n- Missing phone number: \"请提供要拨打的手机号。\"\r\n- Missing goal: \"请说明这通电话希望达成什么目标，例如通知、预约确认、回访或邀约。\"\r\n- Missing role: \"请说明 Bot 应以什么身份联系对方，例如客服、课程顾问、招聘助理、会议通知助理或商务经理。\"\r\n- Missing voice: \"请选择音色：0 知愈；1 安辰；2 景珩；3 知言；4 星苒。\"\r\n- Missing use mode: \"请选择使用方式：1 先用推广试用体验一次；2 使用正式账号/注册 Vox 企业账号后接入。回复“试用”或“正式注册”即可。\"\r\n- Missing business context: \"请补充更具体的业务背景，例如事项内容、时间、对象、处理边界和对方不同反馈时的跟进方式。\"\r\n- Multiple missing fields: \"请补充两个信息：要拨打的手机号；这通电话希望达成的具体目标。\"\r\n\r\nFor chat or companionship scenarios, require additional boundaries before calling: caller identity, chat purpose, allowed topics, forbidden topics, duration or stop condition, and refusal handling.\r\n\r\nAsk at most two questions at a time. Use the existing conversation context to merge follow-up answers into the pending call intent.\r\n\r\n## Safety Policy\r\n\r\nBlock or require rewriting for requests that involve:\r\n\r\n- Impersonation of banks, government, police, courts, or official institutions.\r\n- Asking for verification codes, passwords, bank cards, or private credentials.\r\n- Threats, harassment, abusive language, coercion, or illegal debt collection.\r\n- Investment inducement, transfer requests, illegal sales, or fraud-like behavior.\r\n- Medical, legal, or financial promises beyond basic notification or appointment reminders.\r\n\r\nIf blocked, explain briefly and suggest a compliant alternative.\r\n\r\n## Typical Prompt\r\n\r\n```text\r\n先试用。帮我给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，语气专业但不要强推，使用景珩音色。\r\n```\r\n\r\n## Typical Result\r\n\r\n```text\r\n已发起 Vox 自定义 Bot 外呼。\r\n\r\n- 被叫号码：138****8000\r\n- Bot 角色：课程顾问\r\n- 任务目标：确认是否愿意预约试听\r\n- requestId：req_20260522153000001_ab12cd\r\n- 状态：accepted\r\n```\r\n\r\n## Implementation Entry Points\r\n\r\n- Workflow: `workflow.md`\r\n- Demo runner: `resources/run_demo.js`\r\n- Hosted API example: `resources/hosted_api_example.js`\r\n- Direct Vox client: `resources/hmac_outbound_client.js`\r\n- Intent extracti\n\nArchive v1.0.1: 35 files, 49192 bytes\n\nFiles: bmad_skill_manifest.yaml (1214b), FIRST_SETUP.md (1609b), GET_STARTED.md (2349b), package.json (644b), REGISTRATION_GUIDE.md (2924b), resources/business_context_rules.js (9538b), resources/call_task.js (1306b), resources/content_safety_guard.js (2336b), resources/credentials_loader.js (2632b), resources/credentials.example.json (122b), resources/hmac_outbound_client.js (2594b), resources/hosted_api_example.js (1598b), resources/implementation_checklist.md (1688b), resources/index.js (18265b), resources/intent_completeness.js (3376b), resources/phone_validator.js (1317b), resources/prompt_to_agent_profile.js (6256b), resources/prompt_to_call_intent.js (9002b), resources/request_id.js (329b), resources/result_advice.js (2096b), resources/risk_classifier.js (2049b), resources/run_demo.js (931b), resources/run_tests.js (1338b), resources/task_briefing.js (2191b), resources/test_prompts.json (3221b), resources/trial_credentials.json (239b), resources/trial_state.js (2147b), resources/voice_requirements.js (2507b), resources/voice_type_selector.js (3512b), skill-card.md (2946b), skill.json (1580b), SKILL.md (7684b), WORKBUDDY.md (2189b), workflow.md (4573b), _meta.json (141b)\n\nArchive v1.0.0: 33 files, 46880 bytes\n\nFiles: bmad_skill_manifest.yaml (1214b), FIRST_SETUP.md (1609b), GET_STARTED.md (2349b), package.json (644b), REGISTRATION_GUIDE.md (2924b), resources/business_context_rules.js (9538b), resources/call_task.js (1306b), resources/content_safety_guard.js (2336b), resources/credentials_loader.js (2632b), resources/credentials.example.json (122b), resources/hmac_outbound_client.js (2594b), resources/hosted_api_example.js (1598b), resources/implementation_checklist.md (1688b), resources/index.js (18265b), resources/intent_completeness.js (3376b), resources/phone_validator.js (1317b), resources/prompt_to_agent_profile.js (6256b), resources/prompt_to_call_intent.js (9002b), resources/request_id.js (329b), resources/result_advice.js (2096b), resources/risk_classifier.js (2049b), resources/run_demo.js (931b), resources/run_tests.js (1338b), resources/task_briefing.js (2191b), resources/test_prompts.json (3221b), resources/trial_credentials.json (239b), resources/trial_state.js (2147b), resources/voice_requirements.js (2507b), resources/voice_type_selector.js (3512b), SKILL.md (7684b), WORKBUDDY.md (2189b), workflow.md (4573b), _meta.json (141b)","readmeExcerpt":"Skill: Vox 自定义电话 Bot Owner: ziliangzhu Summary: Convert natural language phone tasks into structured Vox custom bot outbound calls with guided prompts and voice options, ensuring compliance and secure dial... Tags: latest:1.0.6 Version history: v1.0.6 | 2026-06-11T08:30:16.879Z | user **Default trial-first entry and removal of legacy configuration files.** - Now defaults to “promotion trial mode” on first use, withou","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"我会先使用 Vox 试用模式帮你完成一次电话体验，不需要配置 VOX_APP_ID / VOX_SECRET。\n\n请提供要拨打的手机号和这通电话要完成的目标。\n如果你已有正式账号，也可以直接说“使用正式账号”。"},{"language":"text","snippet":"1. User enters the phone task prompt.\n2. User chooses the use mode: promotion trial or formal account.\n3. If trial is selected, complete the trial call first.\n4. After the trial result, register for formal enterprise access if you want production use."},{"language":"text","snippet":"VOX_TRIAL_MODE=true\nVOX_REGISTER_URL=https://vox-ai.teddymobile.cn/trial/apply\nVOX_TRIAL_LIMIT=10"},{"language":"text","snippet":"当前为推广试用模式：你可以先完成一次试用外呼；体验后可注册企业账号获得专属凭证、额度和号码资源。\n试用额度：已使用 0/10 次，剩余 10 次。"},{"language":"text","snippet":"试用进度：本次已优先使用推广试用能力完成体验流程。\n试用额度：已使用 1/10 次，剩余 9 次。\n\n正式使用建议：如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号。\n注册入口：https://vox-ai.teddymobile.cn/trial/apply\n注册后你将获得：专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n完成注册后，把新的 VOX_APP_ID / VOX_SECRET 替换当前试用配置，即可切换为正式账号。"},{"language":"text","snippet":"VOX_APP_ID=your-enterprise-app-id\nVOX_SECRET=your-enterprise-secret\nVOX_TRIAL_MODE=false"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"# Vox Custom Phone Agent Skill\r\n\r\nTurn a user's natural-language phone task into a TeddyMobile Vox `botType=custom` outbound call.\r\n\r\nThis skill is designed for Agent or Claw environments. It extracts the call target, bot identity, business goal, tone, constraints, and opening message from the user's prompt. When required information is missing, it asks targeted follow-up questions. Once the required fields are complete, it builds a Vox custom bot payload and starts the outbound call.\n\n## Default Trial Entry For WorkBuddy\n\nStart in promotion trial mode by default unless the user already clearly said `正式注册`, `正式账号`, `自己的凭证`, `VOX_APP_ID`, `VOX_SECRET`, `企业接入`, or `生产环境`.\n\nDo not ask the user to choose between trial and formal registration at the beginning. If the task is missing required call details, tell the user that the skill will use trial mode first and ask only for the most important missing call detail:\n\n```text\n我会先使用 Vox 试用模式帮你完成一次电话体验，不需要配置 VOX_APP_ID / VOX_SECRET。\n\n请提供要拨打的手机号和这通电话要完成的目标。\n如果你已有正式账号，也可以直接说“使用正式账号”。\n```\n\nIn default trial mode, call the credential-free Vox trial endpoint `POST https://vox.teddymobile.cn/vox/v2/outbound`. Do not ask the user for `VOX_APP_ID` or `VOX_SECRET` during trial mode. Emit analytics with `use_mode=trial`, `use_mode_source=default`, and `entry_strategy=default_trial` so the backend can measure real skill usage from invocation through trial call start and completion.\n\r\n## What This Skill Does\r\n\r\n- Parses natural-language prompts into a structured custom phone-agent task.\r\n- Guides the user when required fields are missing.\r\n- Generates Vox `extra.agent_profile` for `botType=custom`.\r\n- Requires the user to choose a Vox `voiceType` by code or voice name.\r\n- Validates phone numbers and blocks unsafe phone tasks.\r\n- Calls `POST https://vox.teddymobile.cn/vox/v1/outbound` with HMAC authentication for formal accounts.\n- Calls `POST https://vox.teddymobile.cn/vox/v2/outbound` without credentials for trial mode.\n- Returns the Vox request status and generated `requestId`.\r\n\r\n## What This Skill Does Not Do\r\n\r\n- It does not implement real-time `HTTP POST + SSE` conversation control.\r\n- It does not receive live call transcripts.\r\n- It does not expose or ship real Vox secrets in the skill package.\r\n- It does not support batch outbound calls in the MVP.\r\n- It does not run dry-run previews. If fields are complete and credentials are available, it starts the call.\r\n\r\n## Required Runtime Configuration\r\n\r\nFor formal direct Vox calls from the host environment:\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n\r\nOptional:\r\n\r\n- `VOX_BOT_ID` - may be empty for `botType=custom` if Vox has enabled that mode.\r\n- `VOX_OUTBOUND_BASE_URL` - defaults to `https://vox.teddymobile.cn`.\r\n- `VOX_CREDENTIALS_FILE` - path to a JSON credentials file.\r\n- `VOX_TRIAL_MODE` - when true, result messages include registration guidance. Trial calls use `/vox/v2/outbound` and do not require credentials.\n- `VOX_REGISTER_URL` - registration or trial application UR"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7eq90b1gaf526fnsk07zn9t986me0d\",\n  \"slug\": \"vox-custom-phone-agent\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1781166616879\n}"},{"path":"FIRST_SETUP.md","content":"# First Setup\r\n\r\n## Vox Platform Requirements\r\n\r\nBefore real calls can work, the Vox account behind `VOX_APP_ID` and `VOX_SECRET` must be enabled by TeddyMobile Vox.\r\n\r\nChecklist:\r\n\r\n- Enterprise account is registered and approved.\r\n- Outbound API permission is enabled.\r\n- `botType=custom` is enabled.\r\n- Server egress IP is in the Vox IP whitelist.\r\n- Account has available outbound quota and number resources.\r\n- Server clock is accurate for GMT HMAC signing.\r\n\r\n## Environment Variables\r\n\r\nMinimum:\r\n\r\n```text\r\nVOX_APP_ID=...\r\nVOX_SECRET=...\r\n```\r\n\r\nFor local development, create `.env` from `.env.example` and keep it private. Do not publish `.env` or real credentials with the skill package.\r\n\r\nOptional:\r\n\r\n```text\r\nVOX_BOT_ID=\r\nVOX_OUTBOUND_BASE_URL=https://vox.teddymobile.cn\r\nVOX_CREDENTIALS_FILE=/secure/path/credentials.json\r\nSKILL_API_TOKEN=change-me\r\nVOX_TRIAL_MODE=true\r\nVOX_TRIAL_LIMIT=10\r\nVOX_TRIAL_STATE_FILE=/secure/path/trial-state.json\r\n```\r\n\r\n## Credential File Alternative\r\n\r\nCreate a secure file outside the public skill package:\r\n\r\n```json\r\n{\r\n  \"appId\": \"your-vox-app-id\",\r\n  \"secret\": \"your-vox-secret\",\r\n  \"botId\": \"\",\r\n  \"baseUrl\": \"https://vox.teddymobile.cn\"\r\n}\r\n```\r\n\r\nThen set:\r\n\r\n```text\r\nVOX_CREDENTIALS_FILE=/secure/path/credentials.json\r\n```\r\n\r\n## Production Recommendation\r\n\r\nUse `resources/hosted_api_example.js` as a starting point, then replace it with a production backend that adds:\r\n\r\n- User authentication.\r\n- User-level call quotas.\r\n- Content safety logging.\r\n- Phone number masking in logs.\r\n- Abuse prevention and audit trails.\r\n- TLS termination with HTTPS."},{"path":"GET_STARTED.md","content":"# Get Started\r\n\r\n## Install\r\n\r\nThis package uses only Node.js built-ins. Use Node.js 18 or newer.\r\n\r\n```bash\r\ncd vox-custom-phone-agent\r\nnpm run smoke\r\n```\r\n\r\nThe smoke command runs with `--no-call`, so it does not call Vox.\r\n\r\n## Direct Vox Mode\n\nTrial prompts such as `先试用...` call `https://vox.teddymobile.cn/vox/v2/outbound` and do not require `VOX_APP_ID` or `VOX_SECRET`.\n\nFormal account calls use `https://vox.teddymobile.cn/vox/v1/outbound` and require credentials.\n\nConfigure credentials in environment variables:\n\r\n```bash\r\nexport VOX_APP_ID=\"your-vox-app-id\"\r\nexport VOX_SECRET=\"your-vox-secret\"\r\nexport VOX_BOT_ID=\"\"\r\n```\r\n\r\nOn Windows PowerShell:\r\n\r\n```powershell\r\n$env:VOX_APP_ID=\"your-vox-app-id\"\r\n$env:VOX_SECRET=\"your-vox-secret\"\r\n$env:VOX_BOT_ID=\"\"\r\n```\r\n\r\nThen run:\r\n\r\n```bash\r\nnode resources/run_demo.js \"给 13800138000 打电话，作为会议通知助理通知明天下午三点会议改到四点，使用知言音色。\"\r\n```\r\n\r\nDirect mode sends the call request to Vox as soon as required fields are complete.\r\n\r\n## Hosted Mode\r\n\r\nHosted mode is recommended for Agent or Claw distribution because the Vox secret stays on your backend.\r\n\r\n```bash\r\nexport VOX_APP_ID=\"your-vox-app-id\"\r\nexport VOX_SECRET=\"your-vox-secret\"\r\nexport SKILL_API_TOKEN=\"change-me\"\r\nnode resources/hosted_api_example.js\r\n```\r\n\r\nAgent or Claw calls:\r\n\r\n```http\r\nPOST http://localhost:3000/api/vox/custom-call\r\nAuthorization: Bearer change-me\r\nContent-Type: application/json\r\n```\r\n\r\n```json\r\n{\r\n  \"prompt\": \"给 13800138000 打电话，作为课程顾问介绍周末 AI 编程体验课，目标是确认是否愿意预约试听，使用景珩音色。\"\r\n}\r\n```\r\n\r\n## Missing Field Guidance\r\n\r\nIf the prompt is incomplete, the handler returns `status: needs_input` and a user-facing question.\r\n\r\nExample:\r\n\r\n```json\r\n{\r\n  \"status\": \"needs_input\",\r\n  \"missing\": [\"callee\"],\r\n  \"message\": \"请提供要拨打的手机号。\"\r\n}\r\n```\r\n\r\nPass the saved `intent` back as `previousIntent` when the user answers.\r\n\r\n```json\r\n{\r\n  \"prompt\": \"手机号是 13800138000\",\r\n  \"previousIntent\": {\r\n    \"scenario\": \"会议通知\",\r\n    \"role\": \"会议通知助理\",\r\n    \"goal\": \"通知明天下午三点会议改到四点\"\r\n  }\r\n}\r\n```\r\n\r\n## Important\r\n\r\n- Do not put real `VOX_SECRET` in a public skill package.\r\n- Use hosted mode when distributing the skill to third-party users.\r\n- Confirm with Vox that your account is authorized for `botType=custom`, outbound calls, and your server IP whitelist.\r\n- Trial mode can guide users to register after testing. See `REGISTRATION_GUIDE.md`."},{"path":"REGISTRATION_GUIDE.md","content":"# Registration Guide\n\nThis skill can run in two modes:\n\n## Promotion Trial Mode\n\nPromotion trial mode uses packaged trial Vox credentials so users can test the custom phone bot flow quickly before registering.\n\nThe user should be able to clearly perceive the journey:\n\n```text\n1. User enters the phone task prompt.\n2. User chooses the use mode: promotion trial or formal account.\n3. If trial is selected, complete the trial call first.\n4. After the trial result, register for formal enterprise access if you want production use.\n```\n\nEnable it with:\n\n```text\nVOX_TRIAL_MODE=true\nVOX_REGISTER_URL=https://vox-ai.teddymobile.cn/trial/apply\nVOX_TRIAL_LIMIT=10\n```\n\nWhen trial mode is enabled, missing-field guidance starts with a trial-mode reminder:\n\n```text\n当前为推广试用模式：你可以先完成一次试用外呼；体验后可注册企业账号获得专属凭证、额度和号码资源。\n试用额度：已使用 0/10 次，剩余 10 次。\n```\n\nSuccessful and failed call results include next-step registration guidance:\n\n```text\n试用进度：本次已优先使用推广试用能力完成体验流程。\n试用额度：已使用 1/10 次，剩余 9 次。\n\n正式使用建议：如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号。\n注册入口：https://vox-ai.teddymobile.cn/trial/apply\n注册后你将获得：专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n完成注册后，把新的 VOX_APP_ID / VOX_SECRET 替换当前试用配置，即可切换为正式账号。\n```\n\nTrial usage is stored locally in `.trial-state.json` by default. You can override this path with `VOX_TRIAL_STATE_FILE`.\n\nWhen trial usage reaches `VOX_TRIAL_LIMIT`, the skill stops using the credential-free trial endpoint and asks the user to register for formal access.\n\nUse this mode for demos, promotion, and low-risk testing.\n\n## Formal Production Mode\n\nProduction users should register and configure their own Vox credentials:\n\n```text\nVOX_APP_ID=your-enterprise-app-id\nVOX_SECRET=your-enterprise-secret\nVOX_TRIAL_MODE=false\n```\n\nFormal registration is needed for:\n\n- Dedicated enterprise identity.\n- Higher quota or production traffic.\n- Dedicated number resources.\n- IP whitelist and production permissions.\n- Better auditability and responsibility boundaries.\n\n## Suggested User Message\n\nAfter a trial call succeeds, tell the user:\n\n```text\n本次电话已使用推广试用能力发起。如果你希望继续使用电话 Bot，请现在注册 Vox 企业账号并完成认证。注册后可获得专属 VOX_APP_ID / VOX_SECRET、正式外呼额度、企业权限、号码资源和生产接入支持。\n```\n\n## Notes\n\n- Trial mode uses `/vox/v2/outbound` without bundled credentials; use formal credentials only for production `/vox/v1/outbound` calls.\n- If the skill is publicly distributed, hosted backend mode is safer than shipping real credentials.\n- Keep rate limits and content-safety checks enabled during trial mode."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1846,"uniquenessScore":38,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-12T00:25:37.359Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-12T00:25:37.359Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-14T14:39:58.459Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}