{"id":"4f7065ee-da9e-4004-af4a-e04843325580","entityType":"agent","slug":"clawhub-ziliangzhu-teddymobile-vox-phone-notification","name":"TeddyMobile Vox Phone Notification","canonicalUrl":"https://www.xpersona.co/agent/clawhub-ziliangzhu-teddymobile-vox-phone-notification","canonicalPath":"/agent/clawhub-ziliangzhu-teddymobile-vox-phone-notification","generatedAt":"2026-10-11T10:53:59.130Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:21:02.710Z","emptyReason":null},"description":"将自然语言通知请求转换为 TeddyMobile Vox 电话通知，先进行免凭据 dry-run 解析，再让用户选择最多 10 次免凭据 v2 真实试用外呼或正式注册配置。 Convert natural-language notification requests into TeddyMobile Vox ph...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s175sche5fq6wyqyvyvy6pqfrs86n4yr:teddymobile-vox-phone-notification","sourceUrl":"https://clawhub.ai/ziliangzhu/teddymobile-vox-phone-notification","homepage":"https://clawhub.ai/ziliangzhu/skills/teddymobile-vox-phone-notification","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/ziliangzhu/teddymobile-vox-phone-notification","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/ziliangzhu/skills/teddymobile-vox-phone-notification","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"TeddyMobile Vox Phone Notification 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-11T07:21:02.710Z","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-11T07:21:02.710Z","emptyReason":null},"stars":null,"forks":null,"downloads":1125,"packageName":null,"latestVersion":"1.0.6","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:21:02.697Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T07:21:02.710Z","lastCrawledAt":"2026-10-11T07:21:02.697Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T07:21:02.697Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.6","createdAt":"2026-06-05T07:32:48.122Z","changelog":"- Added analytics integration files: analytics-client.js, analytics_client.js, and analytics_manifest.json. - Removed skill-card.md documentation file. - No changes to core logic; update focuses on analytics resource additions.","fileCount":28,"zipByteSize":57426},{"version":"1.0.5","createdAt":"2026-05-26T11:00:11.241Z","changelog":"teddymobile-vox-phone-notification v1.0.5 - Adds an explicit requirement for the user to review the dry-run output and confirm authorization before running any trial call, using the new --confirm-real-call flag. - Tightens credential handling: do not request or accept live secrets in chat; only prompt for credentials if the user chooses formal registration and states local configuration is set. - Adjusts trial flow for enhanced consent and safety: trial mode runs only after user review and explicit confirmation. - Updates formal setup guide step names for clarity, e.g., “稍后配置本地参数” and “查看本地配置模板”. - No code file changes; documentation only.","fileCount":25,"zipByteSize":50571},{"version":"1.0.4","createdAt":"2026-05-26T09:44:56.338Z","changelog":"teddymobile-vox-phone-notification v1.0.4 changelog - Replaced trial call flow to use the TeddyMobile Vox v2 no-credential trial API; now users can make up to 10 trial calls directly without credential loading. - Removed bundled trial credentials code and the file `resources/trial-credentials.js`; all trial calls now invoke the public v2 trial endpoint instead of local trial secrets. - Updated all documentation and guidance to reflect the new no-credential v2 trial process, including instructions and user onboarding flows. - Made dry-run terminal output mask phone numbers and notification content for privacy. - Clarified setup and registration paths in onboarding documentation and SKILL.md.","fileCount":25,"zipByteSize":47041},{"version":"1.0.3","createdAt":"2026-05-21T11:11:41.768Z","changelog":"Version 1.0.3 - Updated the mandatory first-use flow: now requires explicit user input for both destination phone number and notification content before running the dry-run demo. No sample numbers or content may be used. - If either the phone number or notification text is missing, the user must be prompted to provide it. - No other major changes noted; general step order and credential handling remain as before.","fileCount":25,"zipByteSize":46884},{"version":"1.0.2","createdAt":"2026-05-21T03:50:34.531Z","changelog":"vox-phone-notification 1.0.2 - Added POST-TRIAL-GUIDE.md to document required behavior after a trial phone call. - Updated SKILL.md to clarify the mandatory user flow: added support for up to 10 trial calls, stricter guidance on when to request credentials, and clarified that live mode must be explicitly requested with --live. - Enhanced instructions for presenting registration guidance and post-trial user experience, including a required three-option formal setup guide after each trial. - Minor improvements in wording and mandatory links to the TeddyMobile registration site, with registration steps now always made explicit.","fileCount":25,"zipByteSize":46366},{"version":"1.0.1","createdAt":"2026-05-20T11:17:22.006Z","changelog":"- Major UX update: New staged first-use workflow with no-credential dry-run, built-in trial, and expanded guidance. - Added dry-run mode as default: users can demo natural-language request parsing without any credentials or registration. - Introduced single-use real trial call flow for quick evaluation, using bundled low-quota promo credentials after explicit user opt-in. - First-use now clearly separates trial/demo from formal registration; does not prompt for user credentials until explicitly needed. - New onboarding flow and detailed documentation reinforce that full registration is required for sustained production use. - Added `GET-STARTED.md` and new trial resource files to support streamlined onboarding and demo experiences.","fileCount":24,"zipByteSize":40426},{"version":"1.0.0","createdAt":"2026-05-13T06:38:26.213Z","changelog":"vox-phone-notification 1.0.0 - Initial release for Claw: integrates TeddyMobile outbound call notifications with simple credential setup. - Guides user through TeddyMobile platform registration and credential collection (`appId`, `secret`, `botid`, outbound number). - Supports single-turn, notification-only mode by default. - Credentials loaded from environment variables, local file, or override path for flexible deployment. - Documentation includes onboarding, installation, and credential loading instructions.","fileCount":20,"zipByteSize":28856}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s175sche5fq6wyqyvyvy6pqfrs86n4yr:teddymobile-vox-phone-notification","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s175sche5fq6wyqyvyvy6pqfrs86n4yr:teddymobile-vox-phone-notification` 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/teddymobile-vox-phone-notification 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-teddymobile-vox-phone-notification/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-teddymobile-vox-phone-notification/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-teddymobile-vox-phone-notification/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-teddymobile-vox-phone-notification/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-teddymobile-vox-phone-notification/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-teddymobile-vox-phone-notification/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-11T10:53:59.126Z"}},"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-teddymobile-vox-phone-notification/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-teddymobile-vox-phone-notification/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-teddymobile-vox-phone-notification/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ziliangzhu-teddymobile-vox-phone-notification/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-11T07:21:02.710Z","emptyReason":null},"readme":"Skill: TeddyMobile Vox Phone Notification\n\nOwner: ziliangzhu\n\nSummary: 将自然语言通知请求转换为 TeddyMobile Vox 电话通知，先进行免凭据 dry-run 解析，再让用户选择最多 10 次免凭据 v2 真实试用外呼或正式注册配置。 Convert natural-language notification requests into TeddyMobile Vox ph...\n\nTags: latest:1.0.6\n\nVersion history:\n\nv1.0.6 | 2026-06-05T07:32:48.122Z | user\n\n- Added analytics integration files: analytics-client.js, analytics_client.js, and analytics_manifest.json.\n- Removed skill-card.md documentation file.\n- No changes to core logic; update focuses on analytics resource additions.\n\nv1.0.5 | 2026-05-26T11:00:11.241Z | user\n\nteddymobile-vox-phone-notification v1.0.5\n\n- Adds an explicit requirement for the user to review the dry-run output and confirm authorization before running any trial call, using the new --confirm-real-call flag.\n- Tightens credential handling: do not request or accept live secrets in chat; only prompt for credentials if the user chooses formal registration and states local configuration is set.\n- Adjusts trial flow for enhanced consent and safety: trial mode runs only after user review and explicit confirmation.\n- Updates formal setup guide step names for clarity, e.g., “稍后配置本地参数” and “查看本地配置模板”.\n- No code file changes; documentation only.\n\nv1.0.4 | 2026-05-26T09:44:56.338Z | auto\n\nteddymobile-vox-phone-notification v1.0.4 changelog\n\n- Replaced trial call flow to use the TeddyMobile Vox v2 no-credential trial API; now users can make up to 10 trial calls directly without credential loading.\n- Removed bundled trial credentials code and the file `resources/trial-credentials.js`; all trial calls now invoke the public v2 trial endpoint instead of local trial secrets.\n- Updated all documentation and guidance to reflect the new no-credential v2 trial process, including instructions and user onboarding flows.\n- Made dry-run terminal output mask phone numbers and notification content for privacy.\n- Clarified setup and registration paths in onboarding documentation and SKILL.md.\n\nv1.0.3 | 2026-05-21T11:11:41.768Z | user\n\nVersion 1.0.3\n\n- Updated the mandatory first-use flow: now requires explicit user input for both destination phone number and notification content before running the dry-run demo. No sample numbers or content may be used.\n- If either the phone number or notification text is missing, the user must be prompted to provide it.\n- No other major changes noted; general step order and credential handling remain as before.\n\nv1.0.2 | 2026-05-21T03:50:34.531Z | user\n\nvox-phone-notification 1.0.2\n\n- Added POST-TRIAL-GUIDE.md to document required behavior after a trial phone call.\n- Updated SKILL.md to clarify the mandatory user flow: added support for up to 10 trial calls, stricter guidance on when to request credentials, and clarified that live mode must be explicitly requested with --live.\n- Enhanced instructions for presenting registration guidance and post-trial user experience, including a required three-option formal setup guide after each trial.\n- Minor improvements in wording and mandatory links to the TeddyMobile registration site, with registration steps now always made explicit.\n\nv1.0.1 | 2026-05-20T11:17:22.006Z | user\n\n- Major UX update: New staged first-use workflow with no-credential dry-run, built-in trial, and expanded guidance.\n- Added dry-run mode as default: users can demo natural-language request parsing without any credentials or registration.\n- Introduced single-use real trial call flow for quick evaluation, using bundled low-quota promo credentials after explicit user opt-in.\n- First-use now clearly separates trial/demo from formal registration; does not prompt for user credentials until explicitly needed.\n- New onboarding flow and detailed documentation reinforce that full registration is required for sustained production use.\n- Added `GET-STARTED.md` and new trial resource files to support streamlined onboarding and demo experiences.\n\nv1.0.0 | 2026-05-13T06:38:26.213Z | user\n\nvox-phone-notification 1.0.0\n\n- Initial release for Claw: integrates TeddyMobile outbound call notifications with simple credential setup.\n- Guides user through TeddyMobile platform registration and credential collection (`appId`, `secret`, `botid`, outbound number).\n- Supports single-turn, notification-only mode by default.\n- Credentials loaded from environment variables, local file, or override path for flexible deployment.\n- Documentation includes onboarding, installation, and credential loading instructions.\n\nArchive index:\n\nArchive v1.0.6: 28 files, 57426 bytes\n\nFiles: examples/send-phone-notification-input.json (239b), FIRST-SETUP.md (5566b), GET-STARTED.md (3842b), POST-TRIAL-GUIDE.md (2128b), PUBLISHING.md (9847b), README.md (15994b), resources/analytics_client.js (48b), resources/analytics_manifest.json (12175b), resources/analytics-client.js (5631b), resources/callback-server-example.js (1672b), resources/chat-to-notification.js (2842b), resources/credentials-loader.js (1988b), resources/credentials.example.json (211b), resources/hmac-outbound-client.js (3973b), resources/implementation-checklist.md (2168b), resources/openclaw-integration-template.md (5212b), resources/run-demo.js (19305b), resources/trial-content-guard.js (2637b), resources/trial-state.js (1578b), skill-card.md (2854b), skill.json (11481b), SKILL.md (15392b), SKILLHUB.md (6296b), workbuddy-install-link-template.txt (142b), WORKBUDDY-RELEASE.md (2528b), WORKBUDDY.md (1988b), workflow.md (19630b), _meta.json (153b)\n\nFile v1.0.6:SKILL.md\n\n---\r\nname: vox-phone-notification\r\ndescription: 将自然语言通知请求转换为 TeddyMobile Vox 电话通知，先进行免凭据 dry-run 解析，再让用户选择最多 10 次免凭据 v2 真实试用外呼或正式注册配置。 Convert natural-language notification requests into TeddyMobile Vox phone notifications, starting with no-credential dry-run parsing, then letting users choose up to 10 no-credential v2 real trial calls or formal registration and setup.\r\n---\r\n\r\n本 Skill 是可安装到 Claw 的技能包。`skill.json` 用于发现元数据；首次体验请先阅读 `GET-STARTED.md`；通用安装说明请阅读 `README.md`；WorkBuddy 相关打包假设请阅读 `WORKBUDDY.md`。\r\nThis skill is packaged as a Claw-installable folder. Use `skill.json` for discovery metadata, read `GET-STARTED.md` for the fastest first run, read `README.md` for general installation expectations, read `POST-TRIAL-GUIDE.md` for mandatory post-trial response behavior, and read `WORKBUDDY.md` for WorkBuddy-specific packaging assumptions.\r\n\r\n默认首次使用模式是 `dry-run`：只解析用户的电话通知请求，不加载凭据，也不发起真实外呼。即使命令没有提供任何模式参数，也必须视为 dry-run。用户明确选择真实试用电话后才运行 `--trial`；用户明确说明已完成 TeddyMobile 注册并要求正式外呼后，才可运行 `--live` 并读取用户自己的 `appId`、`secret`、`botid` 和外呼主叫号码。`VOX_CALLBACK_URL` 是可选项，仅用于 callback 驱动的高级流程。\r\nDefault first-use mode is `dry-run`: parse the user's phone notification request without loading credentials or placing a call. Even when no mode flag is provided, treat the run as dry-run. Run `--trial` only after the user explicitly chooses up to 10 real trial calls. Run `--live` and load user-owned `appId`, `secret`, `botid`, and outbound number only after the user explicitly says TeddyMobile registration is complete and requests formal outbound calling. `VOX_CALLBACK_URL` is optional and only used for callback-driven advanced flows.\r\n\r\n## 强制首次使用流程 / Mandatory First-Use Flow\r\n\r\n当用户要求使用、测试、试用、运行、执行本 Skill，或发送电话通知时，除非用户明确要求使用自己的凭据进入正式 live 模式，否则必须按以下顺序执行：\r\nWhen the user asks to use, test, try, run, execute, or send a phone notification with this skill, follow this exact order unless the user explicitly asks for live mode with their own credentials:\r\n\r\n1. 先运行或引导用户运行免凭据 dry-run：\r\n   Run or instruct no-credential dry-run first:\r\n   `node \"skills/vox-phone-notification/resources/run-demo.js\" \"<user instruction>\" --dry-run`\r\n2. 运行 dry-run 前必须先确认用户指令中同时包含接收手机号和通知内容。如果缺少接收手机号，先引导用户填写需要通知的电话；如果缺少通知内容，先引导用户填写电话接通后要播报的内容。不要用文档示例号码或示例内容代替用户输入。\r\n   Before running dry-run, confirm the user instruction includes both the destination phone number and notification content. If the destination phone number is missing, ask the user to provide the phone number to notify. If notification content is missing, ask the user to provide the spoken content for the call. Do not substitute documentation sample numbers or sample content for user input.\r\n3. 如果 dry-run 成功且解析结果有效，必须让用户在以下两个下一步中选择：\r\n   If dry-run succeeds and the parsed request is valid, ask the user to choose one of these next steps:\r\n   - `试用真实电话`: 使用免凭据 v2 试用接口运行 trial 外呼。 Run the promotion trial call through the no-credential v2 trial endpoint:\r\n   `node \"skills/vox-phone-notification/resources/run-demo.js\" \"<user instruction>\" --trial --confirm-real-call`\n   - `正式注册并配置`: 引导用户完成 TeddyMobile 注册和正式 live 凭据配置。 Guide the user to TeddyMobile registration and formal live credential setup.\r\n4. 用户选择试用、审阅 dry-run 预览、确认有权联系该号码，并显式使用 `--confirm-real-call` 前，不要运行 `--trial`。用户选择正式注册或说明已在本地配置凭据前，不要询问正式凭据；不要要求用户在聊天中粘贴真实密钥。\n   Do not run `--trial` until the user chooses trial, reviews the dry-run preview, confirms they are authorized to contact the number, and explicitly uses `--confirm-real-call`. Do not ask for formal credentials until the user chooses formal registration or says they configured credentials locally; do not ask the user to paste live secrets into chat.\n   正式外呼必须显式使用 `--live`。不要在 dry-run 成功后自动执行不带模式参数的 live 命令。\r\n   Formal outbound calling must use the explicit `--live` flag. Do not automatically run an unflagged live command after dry-run succeeds.\r\n5. 如果 trial 因本机已试用或内容安全检查失败而被拦截，说明拦截结果，并继续给出正式注册引导。\r\n   If trial mode is blocked because this machine already used the free trial or content safety rejects the text, report that result and still continue to registration guidance.\r\n   如果 trial 成功，最终回复不能只总结试用结果；必须立刻复述 `POST-TRIAL-GUIDE.md` 中的三选一正式注册配置引导。\r\n   If trial succeeds, the final response must not only summarize the trial result; it must immediately restate the three-option formal setup guide from `POST-TRIAL-GUIDE.md`.\r\n6. 告知用户：长期正式使用需要完成 TeddyMobile 注册。\r\n   Tell the user that formal ongoing use requires TeddyMobile registration:\r\n   `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`\r\n   展示该链接时必须让它足够明显，并附上简短注册流程：访问网站 -> 创建账号 -> 正式接入并获取 APPID / SecretID -> 创建通知类 bot 并获取呼出号码和 BotID。\r\n   When showing this link, make it highly visible and include the short registration flow: visit the site -> create an account -> complete formal access and get APPID / SecretID -> create a notification bot and get the outbound number plus BotID.\r\n   然后必须提供正式注册配置的三选一操作引导：`配置引导`、`稍后配置本地参数`、`查看本地配置模板`。\n   Then present a required three-option formal setup guide: `配置引导`, `稍后配置本地参数`, or `查看本地配置模板`.\n7. 只有当用户明确选择正式 live 模式，或说明已经有 TeddyMobile 凭据时，才询问 `VOX_APP_ID`、`VOX_SECRET`、`VOX_BOT_ID` 或 `VOX_OUTBOUND_NUMBER`。\r\n   Only ask for `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, or `VOX_OUTBOUND_NUMBER` when the user explicitly chooses formal live mode or says they already have TeddyMobile credentials.\r\n\r\n首次 dry-run 或推广 trial 流程中，不要加载 `resources/credentials-loader.js`，不要检查 `~/.teddymobile/credentials.json`，也不要询问用户自有凭据。\r\nDo not load `resources/credentials-loader.js`, do not inspect `~/.teddymobile/credentials.json`, and do not ask for user-owned credentials during first-use dry-run or promotion trial flow.\r\n\r\n如果工具或代理已经运行了一次 dry-run，不要假设用户有本地凭据；必须先展示二选一：`试用真实电话` 或 `正式注册并配置`。\r\nIf a tool or agent has already run dry-run, do not assume the user has local credentials; first present the two-option choice: `试用真实电话` or `正式注册并配置`.\r\n\r\ndry-run 成功后，不要停下来询问正式 TeddyMobile 凭据。必须给出明确的二选一：试用真实电话，或正式注册并配置。\r\nDo not stop after dry-run by asking for formal TeddyMobile credentials. Dry-run success must be followed by a clear two-option choice: trial phone call or formal registration.\r\n\r\n## 首次使用 / First Use\r\n\r\n如果用户尚未完成 TeddyMobile 平台注册，请从 dry-run 模式开始：\r\nStart with dry-run mode if TeddyMobile platform registration is not complete yet:\r\n\r\n1. 运行内置 dry-run demo，免凭据验证自然语言解析效果；终端输出必须脱敏展示手机号和通知内容。 Run the bundled dry-run demo to verify natural-language parsing without credentials; terminal output must mask the phone number and notification content.\r\n2. dry-run 成功后向用户提供最多 10 次 `--trial` 真实试用外呼。Trial 模式必须在用户审阅 dry-run 预览、确认有权联系该号码，并显式使用 `--confirm-real-call` 后才运行。Trial 模式使用免凭据 `POST https://vox.teddymobile.cn/vox/v2/outbound` 试用接口、添加试用声明、将用户内容限制在 100 字以内、执行本地内容安全检查、将 `notificationTimes` 固定为 `1`，并记录本地试用次数，最多 10 次。 Offer up to 10 `--trial` calls after dry-run succeeds. Trial mode may run only after the user reviews dry-run output, confirms they are authorized to contact the recipient, and explicitly uses `--confirm-real-call`. Trial mode uses the no-credential `POST https://vox.teddymobile.cn/vox/v2/outbound` trial endpoint, prepends a trial disclaimer, limits user-provided content to 100 characters, applies local content safety checks, fixes `notificationTimes` to `1`, and records a local trial usage counter.\n3. 如果 dry-run 或 trial 效果符合预期，引导用户访问 `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`。 If the dry-run or trial result matches the intended phone notification, go to `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`.\r\n4. 完成企业注册、账号激活或必要审核。 Complete enterprise registration, activation, or any required approval process.\r\n5. 创建或配置用于外呼通知的 TeddyMobile notification bot。 Create or configure the TeddyMobile notification bot you want to use for outbound calls.\r\n6. 记录平台返回的配置值。 Record the values returned by the platform:\r\n   - `VOX_APP_ID`\r\n   - `VOX_SECRET`\r\n   - `VOX_BOT_ID`\r\n   - `VOX_OUTBOUND_NUMBER`\r\n\r\n正式注册配置的简短说明：访问 TeddyMobile Vox 网站，创建并激活账号，完成正式接入后记录 `APPID` / `SecretID`，然后创建通知类 bot，记录呼出号码和 `BotID`。这些值会对应到本地配置中的 `VOX_APP_ID`、`VOX_SECRET`、`VOX_BOT_ID`、`VOX_OUTBOUND_NUMBER`。\r\nShort formal registration summary: visit the TeddyMobile Vox site, create and activate an account, complete formal access and record `APPID` / `SecretID`, then create a notification bot and record the outbound number and `BotID`. These values map to local config keys `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, and `VOX_OUTBOUND_NUMBER`.\r\n\r\n正式注册配置三选一：\r\n1. `配置引导`: 引导用户访问官网，完成创建账号、正式接入、创建通知类 bot，并提醒记录 `APPID`、`SecretID`、`BotID`、呼出号码。\r\n2. `稍后配置本地参数`: 告诉用户拿到参数后回来说明已配置到环境变量或本地凭据文件即可继续，不要在聊天中发送真实密钥。\n3. `查看本地配置模板`: 给出本地配置模板和环境变量名称，但不要要求用户把真实值粘贴到聊天中。\n\r\nFormal setup choices:\r\n1. `配置引导`: guide the user to the official site, account creation, formal access, notification bot creation, and remind them to record `APPID`, `SecretID`, `BotID`, and outbound number.\r\n2. `稍后配置本地参数`: tell the user to return after configuring the values in environment variables or a local credential file, and not to paste live secrets into chat.\n3. `查看本地配置模板`: show the local config template and environment variable names without asking the user to paste real values into chat.\n7. 通过环境变量、本地 secrets manager 或 `~/.teddymobile/credentials.json` 等本地文件配置这些凭据；不要在聊天、日志、工单或共享文档中粘贴真实凭据。 Configure those credentials with environment variables, a local secrets manager, or a local file such as `~/.teddymobile/credentials.json`; do not paste live credentials into chat, logs, tickets, or shared docs.\n8. 回到本 Skill，运行正式 live 本地 demo，或将外呼 helper 集成到 Claw runtime。 Return to this skill and run the live local demo or integrate the outbound helper into your Claw runtime.\r\n\r\n如果平台凭据尚未准备好，请先提供 dry-run，而不是卡在注册或凭据输入上。Trial 模式使用免凭据 v2 试用接口。正式真实外呼仍然需要完成 TeddyMobile 平台注册和 bot 配置。\r\nIf these platform credentials are not ready yet, offer dry-run first instead of blocking on registration. Trial mode uses the no-credential v2 trial endpoint. Formal real outbound calls still require TeddyMobile platform onboarding and bot configuration.\r\n\r\n30 秒首次体验请阅读 `GET-STARTED.md`。完整首次安装引导请阅读 `FIRST-SETUP.md`。\r\nFor a 30-second first run, read `GET-STARTED.md`. For a dedicated first-time onboarding walkthrough, read `FIRST-SETUP.md`.\r\n\r\n跨平台上架文案和 marketplace 发布说明请阅读 `PUBLISHING.md`。\r\nFor cross-platform listing copy and marketplace release notes, read `PUBLISHING.md`.\r\n\r\n正式 live 模式的凭据加载遵循标准本地模式：\r\nCredential loading now follows a standard local pattern:\r\n\r\n- 优先使用环境变量：`VOX_APP_ID`、`VOX_SECRET`、`VOX_BOT_ID`、`VOX_OUTBOUND_NUMBER`。 Use environment variables first: `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, `VOX_OUTBOUND_NUMBER`.\r\n- 如果环境变量缺失，则回退读取 `~/.teddymobile/credentials.json`。 Fall back to `~/.teddymobile/credentials.json`.\r\n- 可通过 `VOX_CREDENTIALS_FILE` 覆盖默认本地凭据文件路径。 Optionally override the file path with `VOX_CREDENTIALS_FILE`.\n- 内置参考实现为 `resources/credentials-loader.js` 和 `resources/credentials.example.json`。 Use `resources/credentials-loader.js` and `resources/credentials.example.json` as the bundled reference implementation.\n- 正式 `--live` 和试用 `--trial` 都会发起真实电话并向 TeddyMobile Vox 传输手机号和通知文本，必须在 dry-run 预览后显式添加 `--confirm-real-call`。 Both formal `--live` and trial `--trial` place real phone calls and transmit phone number plus notification text to TeddyMobile Vox; require `--confirm-real-call` after dry-run preview.\n- 如需保存 `requestId`、手机号、通知文本、任务变量或回调消息，只保存业务必需字段，手机号和正文默认脱敏或加密，限制访问权限，设置明确保留期限，并避免在日志中记录完整值。 If persisting `requestId`, phone numbers, notification text, task variables, or callback messages, store only business-required fields, mask or encrypt phone numbers and message bodies by default, restrict access, set an explicit retention period, and avoid logging full values.\n\r\n完整阅读并遵循 `./workflow.md`。\r\nRead `./workflow.md` completely and follow it.\n\nFile v1.0.6:README.md\n\n# vox-phone-notification\r\n\r\nInstallable Claw skill for TeddyMobile Vox single-turn outbound phone notifications.\r\n\r\nThis package supports TeddyMobile Vox outbound notification integration with validated HMAC signing, natural-language-to-notification parsing, local demo tools, and successful real-world phone playback after platform registration and bot configuration are completed.\r\n\r\n## Quick Start\r\n\r\nFor first-time users, start with dry-run mode before platform registration:\n\nSafety defaults:\n\n- `--dry-run` is the default and never places a phone call.\n- `--trial` and `--live` place real outbound phone calls, transmit the destination number and message text to TeddyMobile Vox, and must be used only for recipients you are authorized to contact.\n- real-call modes require the explicit `--confirm-real-call` safety flag after you review dry-run output.\n- configure secrets through environment variables or a local credentials file; do not paste live secrets into chat, tickets, logs, or screenshots.\n\r\n1. Run a no-credential dry-run:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\n2. Confirm the parsed output contains masked parsing results:\r\n   - masked destination phone number\r\n   - masked spoken notification text length\r\n   - notification repeat count\r\n3. Optionally run up to 10 promotion-period trial calls through the no-credential v2 trial endpoint:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode places one real phone notification through `POST https://vox.teddymobile.cn/vox/v2/outbound` with no local credentials, a required trial disclaimer, local content safety checks, at most 100 characters of user-provided content, and `notificationTimes` fixed to `1`. Review dry-run output first, use only authorized recipient numbers, and expect usage, consent, anti-spam, and compliance obligations. This local trial check is for promotion use only and is not a strong abuse-prevention boundary.\n\r\n4. To place formal phone calls, visit the TeddyMobile Vox registration page:\r\n\r\n```text\r\nhttps://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification\r\n```\r\n\r\n5. Create and activate your TeddyMobile Vox account.\r\n6. Complete formal access and record the returned `APPID` / `SecretID`.\r\n7. Create a notification bot and record its outbound number plus `BotID`.\r\n8. Choose one setup path after trial:\r\n   - `配置引导`: get guided through official registration and parameter collection.\r\n   - `稍后配置本地参数`: return later after configuring environment variables or a local credentials file.\n   - `查看本地配置模板`: view the local config keys without pasting real values into chat.\n9. Collect these platform values:\r\n   - `VOX_APP_ID`\r\n   - `VOX_SECRET`\r\n   - `VOX_BOT_ID`\r\n   - `VOX_OUTBOUND_NUMBER`\r\n10. Configure credentials by either:\r\n   - setting environment variables, or\r\n   - creating `~/.teddymobile/credentials.json`, or\r\n   - setting `VOX_CREDENTIALS_FILE` to a custom JSON file path\r\n11. Run the live local demo:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --live --confirm-real-call\n```\r\n\r\n12. After the live demo succeeds, connect the outbound helper to your Claw, OpenClaw, or WorkBuddy runtime.\r\n\r\nDry-run lets you verify the skill value before completing platform registration. Real outbound calls require TeddyMobile registration and Vox bot configuration.\r\n\r\nIf you want the shortest first-run guide, read `GET-STARTED.md`. If you want a dedicated step-by-step onboarding guide for first installation, read `FIRST-SETUP.md`.\r\n\r\nIf you plan to publish this skill to SkillHub-style marketplaces or internal catalogs, read `PUBLISHING.md`.\r\n\r\n## What it does\r\n\r\nThis skill guides a Claw agent or operator through:\r\n\r\n1. registering on `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`\r\n2. creating a TeddyMobile bot\r\n3. collecting `appId`, `secret`, `botid`, and outbound number\r\n4. integrating the Vox outbound API into OpenClaw or another Claw runtime\r\n5. optionally enabling callback-driven SSE only when the platform setup requires it\r\n\r\n## Current release status\r\n\r\nThe current verification status is:\r\n\r\n- natural-language parsing works\r\n- HMAC signing works\r\n- outbound request submission works\r\n- `extra.notification.text` is sent correctly when present\r\n- real outbound calls have been tested successfully with audible notification playback after TeddyMobile platform registration and bot configuration\r\n\r\nThis skill is suitable for formal release when used with a properly configured TeddyMobile platform account, bot, and outbound calling setup.\r\n\r\n## Files\r\n\r\n- `SKILL.md`: skill entrypoint\r\n- `workflow.md`: execution workflow and constraints\r\n- `GET-STARTED.md`: 30-second dry-run and registration handoff guide\r\n- `FIRST-SETUP.md`: first-time installation and TeddyMobile onboarding guide\r\n- `PUBLISHING.md`: cross-platform publishing copy and release checklist\r\n- `skill.json`: lightweight manifest for skill discovery\r\n- `WORKBUDDY.md`: WorkBuddy compatibility assumptions\r\n- `WORKBUDDY-RELEASE.md`: WorkBuddy packaging and release guide\r\n- `resources/hmac-outbound-client.js`: outbound signing and API example\r\n- `resources/chat-to-notification.js`: parse chat text into `callee` and `notificationText`\r\n- `resources/credentials-loader.js`: env-first credential loader with file fallback\r\n- `resources/credentials.example.json`: example local credentials file\r\n- `resources/run-demo.js`: runnable local demo for chat-to-call testing\r\n- `resources/trial-content-guard.js`: local trial content safety checks\r\n- `resources/trial-state.js`: local trial usage counter\r\n- `resources/callback-server-example.js`: callback SSE example\r\n- `resources/openclaw-integration-template.md`: OpenClaw integration blueprint\r\n\r\n## Install in Claw\r\n\r\nIf your Claw runtime supports folder-based skills, install by copying this folder into the runtime's skills directory:\r\n\r\n```text\r\nskills/vox-phone-notification/\r\n```\r\n\r\nIf your Claw runtime supports zip import, zip the entire `vox-phone-notification` folder and import it as one skill package.\r\n\r\nFor WorkBuddy Claw specifically, current public site behavior strongly suggests skill installation is driven by a deep link of this form:\r\n\r\n```text\r\nworkbuddy://codebuddy-ide/skill/install?skillname=<name>&downloadurl=<zip-url>&channelType=<source>&injectid=true\r\n```\r\n\r\nThat means the most compatible distribution shape is:\r\n\r\n- one downloadable zip per skill\r\n- zip root directory is `vox-phone-notification/`\r\n- `SKILL.md` exists at the skill root\r\n- workflow and resources stay inside the same root folder\r\n\r\nIf you plan to distribute this through WorkBuddy, host a zip file for this folder and provide that zip URL to the installer entry.\r\n\r\nUse `WORKBUDDY-RELEASE.md` for the release checklist and `workbuddy-install-link-template.txt` for a ready-to-fill installer link.\r\n\r\nThe minimum required files are:\r\n\r\n- `SKILL.md`\r\n- `workflow.md`\r\n- `skill.json`\r\n\r\n## Required configuration\r\n\r\nAfter platform registration is complete, provide these values to your app or runtime:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n- `VOX_BOT_ID`\r\n- `VOX_OUTBOUND_NUMBER`\r\n\r\nOptional only for callback-driven advanced mode:\r\n\r\n- `VOX_CALLBACK_URL`\r\n\r\nOptional for custom local credential file lookup:\r\n\r\n- `VOX_CREDENTIALS_FILE`\r\n\r\n## Credential storage\r\n\r\nThis skill now supports a standard local credential loading model instead of assuming environment variables only.\r\n\r\nLookup order:\r\n\r\n1. environment variables override everything else\r\n2. local file fallback at `~/.teddymobile/credentials.json`\r\n3. if `VOX_CREDENTIALS_FILE` is set, that file path is used as the fallback location instead of the default path\r\n\r\nThe bundled helper `resources/credentials-loader.js` implements this behavior and returns normalized fields for the demo or runtime adapter.\r\n\r\nExample local credential file:\r\n\r\n```json\r\n{\r\n  \"VOX_APP_ID\": \"your-app-id\",\r\n  \"VOX_SECRET\": \"your-secret\",\r\n  \"VOX_BOT_ID\": \"your-bot-id\",\r\n  \"VOX_OUTBOUND_NUMBER\": \"your-outbound-number\",\r\n  \"VOX_CALLBACK_URL\": \"https://your-domain.example/vox/callback\"\r\n}\r\n```\r\n\r\nRecommended local path:\r\n\r\n```text\r\n~/.teddymobile/credentials.json\r\n```\r\n\r\nSecurity notes:\r\n\r\n- do not commit live credentials into this repository\n- do not include a real `credentials.json` inside the distributable skill zip\n- keep only the example file `resources/credentials.example.json` in the package\n- prefer environment variables, a local secrets manager, or `~/.teddymobile/credentials.json` with restrictive file permissions\n- never paste `VOX_SECRET` or other live service credentials into chat transcripts, shared docs, issue trackers, logs, or screenshots\n\r\n## Runtime expectation\r\n\r\nThis skill assumes:\r\n\r\n- outbound phone notification only\r\n- single-turn playback only\r\n- no multi-turn phone dialogue\r\n- OpenClaw or another Claw runtime triggers a tool/action such as `send_phone_notification`\r\n- default mode is notification-only, without requiring a callback webhook\r\n\r\nWhen this skill is used from a Claw chat box with a natural-language instruction such as `给<接收手机号>发通知，明天10点开会`, the runtime should extract:\r\n\r\n- `callee`: `<接收手机号>`\r\n- final spoken notification text, for example: `您好，提醒您明天10点开会。`\r\n\r\nThen pass that final sentence as `notificationText`. The phone call can still be placed without `notificationText`, but notification playback depends on sending valid spoken content.\r\n\r\nThe bundled helper `resources/chat-to-notification.js` now provides a default parser for this. For example, it can turn `给<接收手机号>发通知，明天10点开会` into a payload containing:\r\n\r\n- `callee`: `<接收手机号>`\r\n- `notificationText`: `您好，提醒您明天10点开会。`\r\n- `notificationTimes`: `2`\r\n\r\n## Recommended trigger contract\r\n\r\n```json\r\n{\r\n  \"callee\": \"13800138000\",\r\n  \"task\": \"payment_overdue_reminder\",\r\n  \"variables\": {\r\n    \"name\": \"张三\",\r\n    \"amount\": \"299.00\",\r\n    \"dueDate\": \"2026-05-20\"\r\n  },\r\n  \"requestId\": \"notif-20260511-001\",\r\n  \"notificationText\": \"您好，您有一笔待处理账单，请及时登录系统处理。\",\r\n  \"notificationTimes\": 2\r\n}\r\n```\r\n\r\nFor chat-driven usage, the preferred normalized payload is:\r\n\r\n```json\r\n{\r\n  \"callee\": \"<接收手机号>\",\r\n  \"requestId\": \"notif-20260512-001\",\r\n  \"notificationText\": \"您好，提醒您明天10点开会。\",\r\n  \"notificationTimes\": 2\r\n}\r\n```\r\n\r\nExample usage:\r\n\r\n```js\r\nconst { parseChatToNotification } = require('./resources/chat-to-notification');\r\n\r\nconst payload = parseChatToNotification('给<接收手机号>发通知，明天10点开会');\r\n```\r\n\r\nUse the returned payload in the outbound helper:\r\n\r\n```js\r\nawait createOutboundNotification({\r\n  appId: process.env.VOX_APP_ID,\r\n  secret: process.env.VOX_SECRET,\r\n  botid: process.env.VOX_BOT_ID,\r\n  callee: payload.callee,\r\n  requestId: payload.requestId,\r\n  notificationText: payload.notificationText,\r\n  notificationTimes: payload.notificationTimes,\r\n});\r\n```\r\n\r\nThe helpers do not print request headers, request bodies, credentials, phone numbers, or notification text unless the caller logs those values separately.\r\n\r\n## Local demo\r\n\r\nYou can run a local end-to-end demo from this workspace and inspect logs directly in the terminal.\r\n\r\nTo try the skill without registration or credentials, run dry-run mode:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\nDry-run mode parses the destination phone number and notification text but prints only masked values and does not place a real phone call.\r\n\r\nPromotion packages can also run up to 10 local trial calls:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode uses the no-credential `POST https://vox.teddymobile.cn/vox/v2/outbound` endpoint, applies local content safety checks, prepends a trial disclaimer, limits user-provided content to 100 characters, fixes `notificationTimes` to `1`, and records local usage at `~/.teddymobile/vox-phone-notification-trial.json`. It places a real call and requires `--confirm-real-call` after recipient authorization and dry-run review.\n\r\nBefore running the local demo, provide credentials by either:\r\n\r\n- setting environment variables directly, or\r\n- creating `~/.teddymobile/credentials.json`, or\r\n- setting `VOX_CREDENTIALS_FILE` to a custom JSON credentials path\r\n\r\nRequired values:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n- `VOX_BOT_ID`\r\n- `VOX_OUTBOUND_NUMBER`\r\n\r\nExample command:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --live --confirm-real-call\n```\r\n\r\nExample with a custom credential file path:\r\n\r\n```bash\r\nVOX_CREDENTIALS_FILE=\"C:/secure/teddymobile/credentials.json\" node \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --live --confirm-real-call\n```\r\n\r\nWhen the live demo runs, the terminal prints only the final outbound response:\r\n\r\n- `VOX outbound response:`\r\n\r\nIf the request body sent by your own integration does not contain an `extra` field with `notification.text`, the call can connect but no spoken notification will be played.\r\n\r\nFor notification-only bots, TeddyMobile docs now confirm you can send the spoken content directly in the outbound request body via:\r\n\r\n- `extra.notification.text`\r\n- `extra.notification.times`\r\n\r\n## Execution flow\r\n\r\n1. Claw tool receives notification task.\r\n2. App calls TeddyMobile Vox outbound API.\r\n3. TeddyMobile places the call.\r\n4. In default mode, the notification flow ends there from your app's perspective.\r\n5. Only in callback-driven mode, TeddyMobile invokes your callback endpoint and your server returns SSE notification text ending with `[DONE]`.\r\n\r\n## Verification\r\n\r\n- Confirm the user can finish registration on `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`\r\n- Confirm `appId`, `secret`, `botid`, and outbound number are recorded\r\n- Confirm outbound signing matches the official doc format exactly, including the trailing newline after `HMAC-APPID:<appId>` in the canonical string\r\n- Confirm real outbound test calls complete with audible notification playback after platform registration and bot configuration\r\n- If callback mode is enabled, confirm callback returns `text/event-stream`\r\n- If callback mode is enabled, confirm the response ends with `data: [DONE]`\r\n\r\n## Notes\r\n\r\nThis package is structured to be easy to install into Claw-style skill loaders, but exact import UX can differ by runtime. If your runtime needs a different manifest name or extra metadata, adapt `skill.json` rather than changing the workflow content.\r\n\r\nFor WorkBuddy, the public website exposes strong evidence of:\r\n\r\n- a dedicated Claw guide route at `/docs/workbuddy/Claw`\r\n- a deep-link installer scheme using `workbuddy://codebuddy-ide/skill/install`\r\n- installation parameters including `skillname` and `downloadurl`\r\n\r\nThe public site did not expose a fully readable formal manifest spec during this analysis, so this package is optimized for the most likely compatible shape: root `SKILL.md` plus a self-contained zip-deliverable folder.\r\n\r\nThe bundled HMAC signing helper is aligned to the current local TeddyMobile doc copy. A key detail is that the canonical signing string ends with a final newline after `HMAC-APPID:<appId>`. If the platform still rejects the signature, compare the exact raw canonical string, `HMAC-DATE` value, and request path against the official sample.\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn7eq90b1gaf526fnsk07zn9t986me0d\",\n  \"slug\": \"teddymobile-vox-phone-notification\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1780644768122\n}\n\nFile v1.0.6:FIRST-SETUP.md\n\n# First-Time Setup Guide\r\n\r\nUse this guide when installing `vox-phone-notification` for the first time.\r\n\r\n## Goal\r\n\r\nComplete TeddyMobile platform onboarding, prepare the required credentials, and verify that the skill can place an outbound notification call successfully.\r\n\r\n## Step 1: Try dry-run without registration\r\n\r\nBefore registering or configuring credentials, run:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\nThis verifies that the skill can parse and print masked results for:\r\n\r\n- the destination phone number\r\n- the spoken notification content length\r\n- the notification repeat count\r\n\r\nNo real phone call is placed in dry-run mode, and the parsed phone number plus notification text are masked in terminal output.\n\nUse dry-run output as the required preview before any real call. Do not proceed unless the recipient number is authorized and the notification content is appropriate to transmit to TeddyMobile Vox.\n\r\n## Step 2: Try up to 10 promotion trial calls\r\n\r\nRun up to 10 real trial calls through the no-credential v2 trial endpoint:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode:\r\n\r\n- uses the no-credential v2 trial endpoint instead of local user credentials\r\n- places one real phone notification after local content safety checks\r\n- prepends a TeddyMobile Vox trial disclaimer\r\n- keeps at most 100 characters of user-provided content\r\n- blocks links, contact information, long number sequences, and high-risk terms\r\n- fixes `notificationTimes` to `1`\n- stores a local trial usage counter at `~/.teddymobile/vox-phone-notification-trial.json`\n- sends the destination phone number and message text to TeddyMobile Vox and may create usage, consent, anti-spam, or compliance obligations\n\r\nThis is a promotion-period convenience check and can be bypassed by users who modify local files. Use the server-side no-credential v2 trial endpoint for quota and abuse controls.\r\n\r\n## Step 3: Register on TeddyMobile\r\n\r\nGo to `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification` and complete the platform onboarding process.\r\n\r\nTypical first-time setup includes:\r\n\r\n1. creating or activating your TeddyMobile account\r\n2. completing enterprise registration or review if required\r\n3. enabling the Vox-related capabilities needed for outbound calling\r\n\r\n## Step 4: Create and configure the bot\r\n\r\nInside the TeddyMobile platform, create or configure the bot that will be used for outbound notification calls.\r\n\r\nConfirm that:\r\n\r\n- the selected `botid` is the one intended for notification calls\r\n- the bot has outbound notification capability enabled\r\n- the platform setup for your environment supports direct notification playback or the callback mode your deployment requires\r\n\r\n## Step 5: Collect the required platform values\r\n\r\nRecord these values from the TeddyMobile platform:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n- `VOX_BOT_ID`\r\n- `VOX_OUTBOUND_NUMBER`\r\n\r\nOptional only if your environment uses callback-driven advanced mode:\r\n\r\n- `VOX_CALLBACK_URL`\r\n\r\n## Step 6: Configure local credentials\r\n\r\nThis skill supports the following lookup order:\r\n\r\n1. environment variables first\r\n2. local file fallback at `~/.teddymobile/credentials.json`\r\n3. custom file path override via `VOX_CREDENTIALS_FILE`\r\n\r\nExample local credential file:\r\n\r\n```json\r\n{\r\n  \"VOX_APP_ID\": \"your-app-id\",\r\n  \"VOX_SECRET\": \"your-secret\",\r\n  \"VOX_BOT_ID\": \"your-bot-id\",\r\n  \"VOX_OUTBOUND_NUMBER\": \"your-outbound-number\",\r\n  \"VOX_CALLBACK_URL\": \"https://your-domain.example/vox/callback\"\r\n}\r\n```\r\n\r\nSecurity guidance:\n\n- do not commit real credentials into source control\n- do not publish real credentials inside the skill zip\n- keep only example credentials in distributable files\n- do not paste `APPID`, `SecretID`, `BotID`, outbound numbers, or `VOX_SECRET` into chat, shared docs, logs, tickets, or screenshots\n- prefer environment variables, a local secrets manager, or `~/.teddymobile/credentials.json` with restrictive file permissions\n\r\n## Step 7: Run the live local demo\r\n\r\nFrom the workspace root, run:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --live --confirm-real-call\n```\r\n\r\nThe demo should print:\r\n\r\n- outbound response\r\n\r\n## Step 8: Verify playback\r\n\r\nConfirm that:\r\n\r\n- the call is placed successfully\r\n- the destination number receives the call\r\n- the spoken notification is audible\r\n- the spoken content matches the expected `notificationText`\r\n\r\n## Step 9: Integrate into your runtime\r\n\r\nAfter the demo succeeds, integrate the skill into your Claw, OpenClaw, WorkBuddy, or compatible runtime.\r\n\r\nRecommended integration shape:\r\n\r\n- parse natural-language chat input into `callee` and `notificationText`\r\n- create a `requestId`\r\n- call the bundled outbound helper\r\n- return a simple success result to the runtime in notification-only mode\r\n\r\n## If first-time setup is blocked\r\n\r\nIf you cannot continue, check these first:\r\n\r\n- platform registration is approved\r\n- the bot is configured for outbound notification usage\r\n- the credentials match the active TeddyMobile environment\r\n- the outbound number is enabled for the account\r\n- the request body includes `extra.notification.text`\r\n\r\n## Related files\r\n\r\n- `SKILL.md`\r\n- `README.md`\r\n- `workflow.md`\r\n- `resources/credentials-loader.js`\r\n- `resources/run-demo.js`\n\nFile v1.0.6:GET-STARTED.md\n\n# Get Started in 30 Seconds\r\n\r\nUse this guide immediately after installing `vox-phone-notification`.\r\n\r\n## Try it without registration\r\n\r\nRun a no-credential dry-run first:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\nDry-run mode does not place a real phone call. It only verifies that the skill can parse and prints masked results for:\n\r\n- the destination phone number\r\n- the spoken notification text length\r\n- the notification repeat count\r\n- the generated request id\n\nDo not run real-call modes until you have reviewed dry-run output and confirmed the recipient is authorized to receive the call.\n\r\n## Try up to 10 real trial calls\r\n\r\nPromotion builds can include a 10-use local trial mode:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode:\r\n\r\n- uses the no-credential v2 trial endpoint instead of your local TeddyMobile credentials\r\n- places one real phone notification after local content safety checks\r\n- adds a required TeddyMobile Vox trial disclaimer before the user-provided content\r\n- keeps at most 100 characters of user-provided content\r\n- blocks links, contact information, long number sequences, and high-risk terms\r\n- fixes `notificationTimes` to `1`\n- records this machine trial usage count, up to 10 trials\n- sends the destination phone number and message text to TeddyMobile Vox and may create usage, consent, anti-spam, or compliance obligations\n\r\nThe local trial marker is stored at:\r\n\r\n```text\r\n~/.teddymobile/vox-phone-notification-trial.json\r\n```\r\n\r\nThis is a promotion-period convenience check, not a strong abuse-prevention boundary.\r\n\r\n## Send formal phone notifications\r\n\r\nTo place a real outbound phone call, register and configure TeddyMobile Vox:\r\n\r\n```text\r\nhttps://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification\r\n```\r\n\r\nFormal registration flow:\r\n\r\n1. Visit the TeddyMobile Vox website above.\r\n2. Create and activate your account.\r\n3. Complete formal access and record the returned `APPID` / `SecretID`.\r\n4. Create a notification bot.\r\n5. Record the bot's outbound number and `BotID`.\r\n\r\nAfter trial, choose one setup path:\r\n\r\n1. `配置引导`: get guided through the official site and parameter collection.\r\n2. `稍后配置本地参数`: return later after configuring environment variables or a local credentials file.\n3. `查看本地配置模板`: view the local config keys without pasting real values into chat.\n\r\nAfter registration, prepare these values:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n- `VOX_BOT_ID`\r\n- `VOX_OUTBOUND_NUMBER`\r\n\r\n## Configure credentials\r\n\r\nCreate a local credential file:\r\n\r\n```text\r\n~/.teddymobile/credentials.json\r\n```\r\n\r\nExample:\r\n\r\n```json\r\n{\r\n  \"VOX_APP_ID\": \"your-app-id\",\r\n  \"VOX_SECRET\": \"your-secret\",\r\n  \"VOX_BOT_ID\": \"your-bot-id\",\r\n  \"VOX_OUTBOUND_NUMBER\": \"your-outbound-number\"\r\n}\r\n```\r\n\r\nYou can also set the same values as environment variables.\n\nDo not paste live `APPID`, `SecretID`, `BotID`, outbound numbers, or `VOX_SECRET` into chat. Configure them directly in your shell, local secrets manager, or local credentials file.\n\r\n## Run the live demo\r\n\r\nAfter credentials are configured and you explicitly want formal outbound calling, run the live demo with `--live`:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --live --confirm-real-call\n```\r\n\r\n## What success looks like\r\n\r\n- dry-run succeeds without credentials\r\n- live mode loads TeddyMobile credentials\r\n- the outbound request is accepted by Vox\r\n- the destination phone receives the notification call\r\n- the spoken content matches the parsed notification text\n\nFile v1.0.6:POST-TRIAL-GUIDE.md\n\n# Post-Trial Guide\n\nUse this guide after any successful `--trial` run, even if the tool output is hidden, collapsed, summarized, or rewritten by the host UI.\n\nDo not end with only the trial result. After confirming the trial phone call was submitted, always show the formal setup next step choices.\n\n## Required response after trial success\n\n```text\n试用外呼已提交成功。若你希望长期使用 TeddyMobile Vox 电话通知，请选择正式注册配置的下一步：\n\n1. 配置引导\n   我会引导你去 TeddyMobile Vox 官网完成注册、正式接入、创建通知类 bot，并列出每一步需要记录的参数。\n\n2. 稍后配置本地参数\n   你可以稍后把 APPID / SecretID / BotID / 呼出号码配置到环境变量、本地 secrets manager 或本地凭据文件，然后回来告诉我已配置完成。不要在聊天中发送真实密钥。\n\n3. 查看本地配置模板\n   如果你已经有参数，请在本机按下面键名配置，不要把真实值粘贴到聊天中：\n   VOX_APP_ID =\n   VOX_SECRET =\n   VOX_BOT_ID =\n   VOX_OUTBOUND_NUMBER =\n\n正式注册配置入口：\nhttps://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification\n```\n\n## If the user chooses option 1\n\nGuide them through:\n\n1. Visit the official TeddyMobile Vox site.\n2. Create and activate the account.\n3. Complete formal access and record `APPID` / `SecretID`.\n4. Create a notification bot.\n5. Record the outbound number and `BotID`.\n6. Configure these values locally and return after local config is ready.\n\n## If the user chooses option 2\n\nReply briefly:\n\n```text\n好的。你稍后拿到参数后，请把 APPID、SecretID、BotID、呼出号码配置到环境变量、本地 secrets manager 或本地凭据文件。配置完成后回来告诉我“已配置完成”，我会继续帮你进行 live 测试。不要在聊天中发送真实密钥。\n```\n\n## If the user chooses option 3\n\nProvide the local config template:\n\n```text\n请在本机按下面键名配置，不要把真实值粘贴到聊天中：\n\nVOX_APP_ID =\nVOX_SECRET =\nVOX_BOT_ID =\nVOX_OUTBOUND_NUMBER =\n```\n\nFile v1.0.6:PUBLISHING.md\n\n# Publishing Guide\r\n\r\nUse this file when publishing `vox-phone-notification` to SkillHub-style marketplaces, plugin hubs, internal skill catalogs, or Claw-compatible distribution platforms.\r\n\r\n## Publishing position\r\n\r\nRecommended release position:\r\n\r\n- formal TeddyMobile Vox phone notification skill\r\n- suitable for Claw, OpenClaw, WorkBuddy, and compatible runtimes\r\n- intended for developers, integrators, enterprise automation teams, and solution delivery teams\r\n\r\n## Core value proposition\r\n\r\nThis skill provides:\r\n\r\n- no-credential dry-run parsing before platform registration\r\n- promotion-period trial calls through the no-credential v2 endpoint, with a trial disclaimer and content safety checks\r\n- TeddyMobile Vox outbound phone notification integration after registration\r\n- natural-language parsing for chat-style notification instructions\r\n- HMAC-signed outbound request generation\r\n- local credential loading with environment variables and file fallback\r\n- first-time onboarding documentation and runnable local demo\r\n- verified real-world outbound call playback after platform registration and bot configuration\r\n\r\n## Recommended Chinese listing title\r\n\r\n`TeddyMobile Vox 电话通知 Skill`\r\n\r\n## Recommended English listing title\r\n\r\n`TeddyMobile Vox Phone Notification Skill`\r\n\r\n## Recommended Chinese short description\r\n\r\n`把一句话变成电话提醒：未注册 TeddyMobile 也可先 dry-run 体验解析；推广包最多可通过免凭据 v2 接口试用 10 次真实电话，试用电话会添加声明、进行本地内容安全检查，正式外呼需完成 Vox 注册和 bot 配置。`\r\n\r\n## Recommended English short description\r\n\r\n`Turn a natural-language request into a phone notification. Try parsing with dry-run before registration, use a no-credential v2 promotion trial call when included, then connect TeddyMobile Vox credentials for formal outbound calls.`\r\n\r\n## Recommended combined short description\r\n\r\n`把一句话变成电话提醒：未注册 TeddyMobile 也可先 dry-run 体验解析；推广包最多可通过免凭据 v2 接口试用 10 次真实电话，试用电话会添加声明、进行本地内容安全检查，正式外呼需完成 Vox 注册和 bot 配置。 Turn a natural-language request into a phone notification: try dry-run parsing before registration, use up to 10 no-credential v2 promotion trial calls when included, then connect TeddyMobile Vox credentials for formal outbound calls.`\r\n\r\n## Recommended Chinese long description\r\n\r\n`本 Skill 用于 TeddyMobile Vox 电话通知外呼场景。用户可以先通过 dry-run 模式体验自然语言解析效果，例如输入“给<接收手机号>发通知，明天10点开会”，Skill 会解析出接收号码、播报内容和通知次数，不会发起真实电话。推广包还可提供最多 10 次本地 trial 真实电话试用，试用电话会添加 TeddyMobile Vox 试用声明、进行本地内容安全检查、最多保留 100 字用户内容，并固定播报 1 次。确认效果后，用户可注册 TeddyMobile 开发者账号、创建 Vox 通知 bot，并配置 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER，用于正式电话外呼。适用于会议提醒、账单提醒、服务通知等单轮电话通知场景。`\r\n\r\n## Recommended English long description\r\n\r\n`This skill is designed for TeddyMobile Vox outbound phone notification scenarios. Users can first try dry-run mode before registration, for example by entering a request like \"notify <destination phone number> about tomorrow's 10 AM meeting\" and reviewing the parsed phone number, spoken notification text, and repeat count without placing a real call. Promotion builds can also include up to 10 local trial calls through the no-credential v2 endpoint with a TeddyMobile Vox trial disclaimer, local content safety checks, up to 100 characters of user-provided content, and one playback. After confirming the value, users can register a TeddyMobile developer account, create a Vox notification bot, and configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, and VOX_OUTBOUND_NUMBER to place formal outbound phone calls. It is a good fit for meeting reminders, billing reminders, service notifications, and other single-turn phone notification workflows.`\r\n\r\n## Recommended combined long description\r\n\r\n`本 Skill 用于 TeddyMobile Vox 电话通知外呼场景。用户可以先通过 dry-run 模式体验自然语言解析效果，例如输入“给<接收手机号>发通知，明天10点开会”，Skill 会解析出接收号码、播报内容和通知次数，不会发起真实电话。推广包还可提供最多 10 次本地 trial 真实电话试用，试用电话会添加 TeddyMobile Vox 试用声明、进行本地内容安全检查、最多保留 100 字用户内容，并固定播报 1 次。确认效果后，用户可访问 https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification 注册 TeddyMobile 开发者账号、创建 Vox 通知 bot，并配置 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER，用于正式电话外呼。适用于会议提醒、账单提醒、服务通知等单轮电话通知场景。 This skill is designed for TeddyMobile Vox outbound phone notification scenarios. Users can first try dry-run mode before registration, reviewing the parsed phone number, spoken notification text, and repeat count without placing a real call. Promotion builds can include up to 10 local trial calls through the no-credential v2 endpoint with a TeddyMobile Vox trial disclaimer, local content safety checks, up to 100 characters of user-provided content, and one playback. After confirming the value, users can register at https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification, create a Vox notification bot, and configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, and VOX_OUTBOUND_NUMBER for formal outbound phone calls. It is a good fit for meeting reminders, billing reminders, service notifications, and other single-turn notification workflows.`\r\n\r\n## Recommended tags\r\n\r\n- TeddyMobile\r\n- Vox\r\n- 电话通知\r\n- 外呼\r\n- Claw\r\n- OpenClaw\r\n- WorkBuddy\r\n- 语音通知\r\n- 企业集成\r\n\r\n## Recommended version\r\n\r\n`1.0.0`\r\n\r\n## Recommended release notes\r\n\r\nChinese:\r\n\r\n`发布 TeddyMobile Vox 电话通知正式版 Skill，支持自然语言通知解析、dry-run 脱敏输出、HMAC 签名外呼、环境变量与本地凭据文件加载、首次安装引导、本地演示和真实外呼播报验证。`\r\n\r\nEnglish:\r\n\r\n`Release the production version of the TeddyMobile Vox phone notification skill with natural-language notification parsing, HMAC-signed outbound calls, environment-variable and local credential-file loading, first-time setup guidance, local demo tools, and verified real-world playback.`\r\n\r\n## Recommended platform note\r\n\r\nUse this note when a marketplace asks for prerequisites or reviewer remarks:\r\n\r\nChinese:\r\n\r\n`未完成 TeddyMobile 注册时可使用 dry-run 体验 Skill 解析能力；推广包可通过免凭据 v2 接口提供最多 10 次本地 trial 真实电话试用，试用会添加声明、进行本地内容安全检查。正式外呼需要完成 TeddyMobile 平台注册、企业开通或审核、bot 配置和外呼能力准备。正式配置时请通过环境变量或本地凭据文件注入 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER 等参数。`\r\n\r\nEnglish:\r\n\r\n`Users can try this skill in dry-run mode before TeddyMobile registration. Promotion builds can include up to 10 local trial calls through the no-credential v2 endpoint, with a disclaimer and local content safety checks. Formal outbound calls require TeddyMobile platform registration, any required enterprise enablement or review, bot configuration, and outbound calling setup. Configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, VOX_OUTBOUND_NUMBER, and related values through environment variables or a local credentials file.`\r\n\r\nCombined:\r\n\r\n`未完成 TeddyMobile 注册时可使用 dry-run 体验 Skill 解析能力；推广包可通过免凭据 v2 接口提供最多 10 次本地 trial 真实电话试用，试用会添加声明、进行本地内容安全检查。正式外呼需要完成 TeddyMobile 平台注册、企业开通或审核、bot 配置和外呼能力准备。正式配置时请通过环境变量或本地凭据文件注入 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER 等参数。 Users can try this skill in dry-run mode before TeddyMobile registration. Promotion builds can include up to 10 local trial calls through the no-credential v2 endpoint, with a disclaimer and local content safety checks. Formal outbound calls require TeddyMobile platform registration, any required enterprise enablement or review, bot configuration, and outbound calling setup. Configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, VOX_OUTBOUND_NUMBER, and related values through environment variables or a local credentials file.`\r\n\r\n## Packaging checklist\r\n\r\n- ensure the zip contains the top-level folder `vox-phone-notification/`\r\n- include `SKILL.md`, `README.md`, `GET-STARTED.md`, `FIRST-SETUP.md`, `workflow.md`, and `skill.json`\r\n- include only example credentials, never real secrets\r\n- keep helper scripts and demo files inside `resources/`\r\n- upload `skills/vox-phone-notification.zip` or a hosted HTTPS copy of it\r\n\r\n## Suggested screenshots or media\r\n\r\nIf the marketplace supports screenshots, consider showing:\r\n\r\n- the first-time setup guide in `FIRST-SETUP.md`\r\n- the 30-second dry-run guide in `GET-STARTED.md`\r\n- the local demo command and output\r\n- the natural-language input example\r\n- the generated normalized notification payload\r\n\r\n## Related files\r\n\r\n- `SKILL.md`\r\n- `README.md`\r\n- `FIRST-SETUP.md`\r\n- `SKILLHUB.md`\r\n- `WORKBUDDY-RELEASE.md`\r\n- `skill.json`\n\nFile v1.0.6:resources/implementation-checklist.md\n\n# Vox Phone Notification Checklist\r\n\r\n## Platform Setup\r\n\r\n- Guide user to `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`\r\n- Enterprise account approved on TeddyMobile\r\n- `appId` received\r\n- `secret` received\r\n- Bot created in the TeddyMobile platform\r\n- `botid` recorded\r\n- Outbound number recorded\r\n- Network whitelist requirements confirmed if applicable\r\n\r\nOnly for callback-driven advanced mode:\r\n\r\n- HTTPS callback URL configured on the bot\r\n\r\n## Claw Runtime Integration\r\n\r\n- `send_phone_notification` tool or equivalent action defined\r\n- Input validation for `callee` and business payload implemented\r\n- `requestId` generated or injected by caller\r\n- Notification context persisted for callback lookup when needed\r\n- Notification content designed for single-turn playback only\r\n\r\n## Optional Vox Callback Handling\r\n\r\n- Callback route accepts `POST` JSON\r\n- Request body fields mapped to runtime context\r\n- First-turn empty `message` handled\r\n- Response uses `text/event-stream`\r\n- Stream emits `data: {json}` frames only\r\n- Stream always ends with `data: [DONE]`\r\n- Closed or interrupted connections handled safely\r\n- No multi-turn follow-up logic added unless explicitly required\r\n\r\n## Outbound API\r\n\r\n- GMT date generation implemented\r\n- URI parameter sorting implemented for signing\r\n- Official canonical signing string verified\r\n- Final trailing newline included in canonical string\r\n- HMAC-SHA256 signature implemented\r\n- Required HMAC headers added\r\n- trial `POST /vox/v2/outbound` no-credential client implemented\r\n- formal `POST /vox/v1/outbound` signed client implemented\r\n- Notification-only payload supports `extra.notification.text`\r\n- Notification-only payload supports `extra.notification.times`\r\n\r\n## Verification\r\n\r\n- Deterministic signature test prepared\r\n- Canonical string logged or inspectable during sandbox validation\r\n- Callback endpoint smoke-tested locally\r\n- SSE framing checked manually\r\n- End-to-end outbound notification tested in TeddyMobile platform\r\n\r\nOnly if callback-driven mode is enabled:\r\n\r\n- Callback endpoint smoke-tested locally\r\n- SSE framing checked manually\n\nFile v1.0.6:resources/openclaw-integration-template.md\n\n# OpenClaw Integration Template\r\n\r\nUse this template when wiring TeddyMobile phone notification into an OpenClaw-style runtime.\r\n\r\nThis template assumes the user has already completed registration at `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification` and has `appId`, `secret`, `botid`, and an outbound number.\r\n\r\nDefault integration mode is notification-only. `VOX_CALLBACK_URL` is only needed if the TeddyMobile bot setup explicitly requires callback-driven runtime content.\r\n\r\n## 1. Define a tool contract\r\n\r\nExpose one agent tool or runtime action with a small business-oriented shape:\r\n\r\n```json\r\n{\r\n  \"name\": \"send_phone_notification\",\r\n  \"input\": {\r\n    \"callee\": \"13800138000\",\r\n    \"task\": \"payment_overdue_reminder\",\r\n    \"variables\": {\r\n      \"name\": \"张三\",\r\n      \"amount\": \"299.00\"\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nThe tool should not know SSE details. It only prepares business data and triggers the outbound call.\n\nThis integration is intentionally single-turn. The tool should prepare one complete notification message, not a branching conversation.\n\nAdd a safety interlock before the tool calls TeddyMobile:\n\n- Require an allowlist, ownership check, or explicit user confirmation for the destination number.\n- Show a preview with a masked phone number and message length before dispatch.\n- Treat the action as a real-world side effect that sends the phone number and message text to TeddyMobile Vox.\n- Reject calls requested by untrusted prompt content, hidden instructions, or tool output that bypasses normal user authorization.\n\r\nIf the user speaks naturally in the chat box, such as `给<接收手机号>发通知，明天10点开会`, normalize that utterance into a payload like:\r\n\r\n```json\r\n{\r\n  \"callee\": \"<接收手机号>\",\r\n  \"requestId\": \"notif-20260512-001\",\r\n  \"notificationText\": \"您好，提醒您明天10点开会。\",\r\n  \"notificationTimes\": 2\r\n}\r\n```\r\n\r\nThe bundled helper `./chat-to-notification.js` can be used as the default normalization step before `createOutboundNotification(...)` is called.\r\n\r\nThe most important rule is that the final spoken phone copy must be present in `notificationText` before calling TeddyMobile. Without that field, the call may connect but no notification content will be played.\r\n\r\n## 2. Persist business context only when needed\n\nBefore calling TeddyMobile, save a record keyed by `requestId` only if the runtime needs retry, callback, troubleshooting, or business correlation.\n\nSuggested minimized fields:\n\n- `requestId`\n- masked or encrypted `callee`, or a salted hash when full value is not required\n- minimized `task`\n- minimized or encrypted `variables`\n- `status`\n- `createdAt`\n- `expiresAt`\n\nPrivacy and retention requirements:\n\n- Store the minimum fields needed for the business flow.\n- Encrypt full phone numbers, notification text, task variables, and callback message content at rest when they must be retained.\n- Set a clear retention window, for example 7 to 30 days, then delete or anonymize records.\n- Restrict access to operators who need the records for support or compliance.\n- Do not log full phone numbers, full notification text, secrets, signed headers, or raw outbound request bodies.\n\nThis record lets the callback endpoint rebuild the notification context after TeddyMobile places the call only when callback mode is enabled.\n\r\n## 3. Trigger the outbound Vox call\r\n\r\nInside the tool implementation:\r\n\r\n1. validate inputs\r\n2. if the source is a chat utterance, extract the phone number and final notification sentence\r\n3. create `requestId`\r\n4. confirm recipient authorization or match the callee against an allowlist\n5. persist minimized notification context only when needed\n6. call `createOutboundNotification(...)`\n7. return a small result to the agent\n\r\nSuggested result:\r\n\r\n```json\r\n{\r\n  \"ok\": true,\r\n  \"requestId\": \"notif-20260511-001\",\r\n  \"callee\": \"138****8000\",\n  \"status\": \"queued\"\r\n}\r\n```\r\n\r\n## 4. Optional callback request handling\r\n\r\nIf callback-driven mode is enabled, the callback route should:\r\n\r\n1. read `requestid`, `callid`, `turn`, `message`\r\n2. load saved context by `requestid`\r\n3. build a structured prompt or state object for the Claw runtime\r\n4. generate one final outbound notification script\r\n5. stream that textual response back as SSE and end with `[DONE]`\r\n\r\n## 5. Suggested runtime prompt shape\r\n\r\nPass structured data instead of raw transport details whenever possible:\r\n\r\n```json\r\n{\r\n  \"channel\": \"phone\",\r\n  \"mode\": \"outbound_notification\",\r\n  \"requestId\": \"notif-20260511-001\",\r\n  \"callId\": \"call-123\",\r\n  \"turn\": 1,\r\n  \"recipient\": {\r\n    \"phone\": \"13800138000\"\r\n  },\r\n  \"notification\": {\r\n    \"task\": \"payment_overdue_reminder\",\r\n    \"variables\": {\r\n      \"name\": \"张三\",\r\n      \"amount\": \"299.00\"\r\n    }\r\n  },\r\n  \"latestUserUtterance\": \"\"\r\n}\r\n```\r\n\r\n## 6. Operational considerations\r\n\r\n- Use HTTPS callback URLs in production.\r\n- Avoid logging full secrets.\r\n- Consider idempotency for duplicate `requestId` submissions.\r\n- Record platform response payloads for troubleshooting.\r\n- Be defensive about empty first-turn `message` values.\r\n- Keep the phone copy concise because this scenario does not require multi-turn dialogue.\n\nFile v1.0.6:skill-card.md\n\n## Description:\n\nConverts natural-language notification requests into TeddyMobile Vox phone notifications, beginning with no-credential dry-run parsing and then guiding users to limited trial calls or registered live setup.\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\nDevelopers and operators use this skill to turn a natural-language notification request into a TeddyMobile Vox outbound phone notification workflow. It supports masked dry-run parsing before registration and moves to trial or registered live calling only after recipient authorization and setup.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security evidence reports that dry-run analytics may send prompts, phone numbers, notification text, and run metadata to TeddyMobile analytics without clear disclosure.\n\nMitigation: Review before installing and set SKILL_ANALYTICS_DISABLED=1 unless analytics transmission is explicitly accepted.\n\nRisk: Trial and live modes place real outbound phone calls and transmit recipient phone numbers and notification text to TeddyMobile Vox.\n\nMitigation: Use only recipient numbers the user is authorized to contact, require dry-run preview first, and require explicit confirmation before a real call.\n\nRisk: Live mode depends on TeddyMobile credentials and outbound-number configuration.\n\nMitigation: Keep real credentials in environment variables, a secure local store, or a restricted local credentials file; do not paste or commit secrets.\n\nRisk: The local trial-state file can retain trial history.\n\nMitigation: Treat the trial-state file as sensitive and remove it when trial history should not be retained.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/ziliangzhu/skills/teddymobile-vox-phone-notification)\n- [TeddyMobile Vox registration](https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification)\n- [TeddyMobile Vox outbound endpoint](https://vox.teddymobile.cn/vox/v2/outbound)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands, JSON examples, and configuration snippets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include masked dry-run parsing results, trial or live call setup steps, and local credential configuration guidance.]\n\n## Skill Version(s):\n\n1.0.6 (source: server release evidence)\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:SKILLHUB.md\n\n# SkillHub Publishing Notes\r\n\r\nUse this file when publishing `vox-phone-notification` to `https://skillhub.cn`.\r\n\r\n## Recommended listing position\r\n\r\nPublish this skill as a formal TeddyMobile Vox notification skill for developers, solution teams, and advanced operators who have completed TeddyMobile platform onboarding.\r\n\r\nRecommended positioning:\r\n\r\n- TeddyMobile Vox phone notification skill\r\n- no-credential dry-run experience before platform registration\r\n- promotion-period trial calls through the no-credential v2 endpoint, with a disclaimer and content safety checks\r\n- Claw / OpenClaw / WorkBuddy outbound call notification integration\r\n- validated outbound playback after TeddyMobile platform registration and bot configuration\r\n\r\n## What is verified\r\n\r\n- skill package structure is complete\r\n- no-credential dry-run parsing is available before registration\r\n- promotion trial mode supports local content safety checks and local usage counter\r\n- natural-language parsing helper works\r\n- TeddyMobile HMAC signing works\r\n- outbound request submission succeeds\r\n- request body includes `extra.notification.text` when `notificationText` is provided\r\n- live outbound calls have been tested successfully with audible playback\r\n\r\n## Release prerequisite\r\n\r\nDry-run use does not require TeddyMobile platform registration. Promotion packages can include up to 10 local trial calls through the no-credential v2 endpoint, with a trial disclaimer and local content safety checks. Successful formal outbound calling requires the operator to complete TeddyMobile platform registration, bot configuration, and outbound capability setup before using the skill in production.\r\n\r\nPossible platform-side requirements:\r\n\r\n- notification bot type must be enabled for the chosen `botid`\r\n- direct playback from `extra.notification.text` must be supported\r\n- callback/SSE mode may still be required for some bot configurations\r\n\r\n## Recommended listing title\r\n\r\n`TeddyMobile Vox 电话通知 Skill`\r\n\r\n## Recommended short description\r\n\r\n`把一句话变成电话提醒：未注册 TeddyMobile 也可先 dry-run 体验解析；推广包最多可通过免凭据 v2 接口试用 10 次真实电话，试用电话会添加声明、进行本地内容安全检查，正式外呼需完成 Vox 注册和 bot 配置。 Turn one sentence into a phone notification: try dry-run parsing before TeddyMobile registration, use up to 10 promotion trial calls when included, and complete Vox registration and bot setup for formal outbound calls.`\r\n\r\n## Recommended long description\r\n\r\n`本 Skill 用于 TeddyMobile Vox 电话通知外呼场景。用户可以先通过 dry-run 模式体验自然语言解析效果，例如输入“给<接收手机号>发通知，明天10点开会”，Skill 会解析出接收号码、播报内容和通知次数，不会发起真实电话。推广包还可提供最多 10 次本地 trial 真实电话试用，试用电话会添加 TeddyMobile Vox 试用声明、进行本地内容安全检查、最多保留 100 字用户内容，并固定播报 1 次。确认效果后，用户可访问 https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification 注册 TeddyMobile 开发者账号、创建 Vox 通知 bot，并配置 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER，用于正式电话外呼。适用于会议提醒、账单提醒、服务通知等单轮电话通知场景。 This skill is designed for TeddyMobile Vox outbound phone notification scenarios. Users can first try dry-run mode before registration, reviewing the parsed phone number, spoken notification text, and repeat count without placing a real call. Promotion builds can include up to 10 local trial calls through the no-credential v2 endpoint with a TeddyMobile Vox trial disclaimer, local content safety checks, up to 100 characters of user-provided content, and one playback. After confirming the value, users can register at https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification, create a Vox notification bot, and configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, and VOX_OUTBOUND_NUMBER for formal outbound phone calls. It is a good fit for meeting reminders, billing reminders, service notifications, and other single-turn notification workflows.`\r\n\r\n## Recommended tags\r\n\r\n- TeddyMobile\r\n- Vox\r\n- 电话通知\r\n- Claw\r\n- WorkBuddy\r\n- OpenClaw\r\n- 语音通知\r\n- 商用发布\r\n\r\n## Recommended usage note\r\n\r\nState clearly in the listing: `用户可先 dry-run 体验解析；推广包可通过免凭据 v2 接口提供最多 10 次真实电话试用，试用电话会添加声明、进行本地内容安全检查；正式外呼需要完成 TeddyMobile 平台注册和 Vox bot 配置。本 Skill 适合开发者、解决方案工程师或需要将 TeddyMobile Vox 集成到自有运行时的高级用户。 Users can try dry-run parsing first; promotion builds can provide up to 10 real trial calls through the no-credential v2 endpoint with a disclaimer and local content safety checks; formal outbound calls require TeddyMobile platform registration and Vox bot configuration. This skill is intended for developers, solution engineers, or advanced users integrating TeddyMobile Vox into their own runtime.`\r\n\r\n## Recommended credential note\r\n\r\nAdd a short note in the listing or reviewer remarks explaining the credential model:\r\n\r\n- this skill supports environment variables first: `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, `VOX_OUTBOUND_NUMBER`\r\n- it also supports local fallback from `~/.teddymobile/credentials.json`\r\n- `VOX_CREDENTIALS_FILE` can override the default local credential file path\r\n- real secrets are not bundled in the uploaded zip; only an example credential file is included\r\n\r\nSuggested Chinese wording:\r\n\r\n`本 Skill 采用环境变量优先、本地凭据文件兜底的配置方式。支持通过 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER 直接注入配置；也支持从 ~/.teddymobile/credentials.json 读取本地凭据，并可通过 VOX_CREDENTIALS_FILE 自定义凭据文件路径。上传包中仅包含示例凭据文件，不包含任何真实密钥。`\r\n\r\n## Suggested upload artifact\r\n\r\nUpload the packaged zip file:\r\n\r\n`skills/vox-phone-notification.zip`\n\nFile v1.0.6:WORKBUDDY-RELEASE.md\n\n# WorkBuddy Release Guide\n\nUse this guide when you want to publish `vox-phone-notification` as a downloadable WorkBuddy Claw skill package.\n\n## Release goal\n\nPrepare one hosted zip file and one installer link.\n\n## Package contents\n\nThe published zip should contain this root structure:\n\n```text\nvox-phone-notification/\n  SKILL.md\n  workflow.md\n  skill.json\n  README.md\n  SKILLHUB.md\n  WORKBUDDY.md\n  WORKBUDDY-RELEASE.md\n  examples/\n  resources/\n```\n\n## Build the zip\n\nFrom the repository root, package the skill folder as a zip file named:\n\n```text\nvox-phone-notification.zip\n```\n\nRecommended archive rule:\n\n- keep the top-level folder name `vox-phone-notification`\n- do not zip only the inner files\n- do not exclude `SKILL.md` or `workflow.md`\n\n## Host the zip\n\nUpload the zip to a stable HTTPS URL, for example:\n\n```text\nhttps://your-domain.example/skills/vox-phone-notification.zip\n```\n\nRequirements:\n\n- public HTTPS access\n- direct download without login\n- stable filename and URL\n\n## Build the WorkBuddy installer link\n\nUse this template:\n\n```text\nworkbuddy://codebuddy-ide/skill/install?skillname=vox-phone-notification&downloadurl=<URL_ENCODED_ZIP_URL>&channelType=custom&injectid=true\n```\n\nExample:\n\n```text\nworkbuddy://codebuddy-ide/skill/install?skillname=vox-phone-notification&downloadurl=https%3A%2F%2Fyour-domain.example%2Fskills%2Fvox-phone-notification.zip&channelType=custom&injectid=true\n```\n\n## Optional landing page link\n\nIf you want to distribute an HTTP link before jumping into WorkBuddy, keep a simple page that shows:\n\n- skill name\n- what it does\n- one \"Install in WorkBuddy\" button\n- one backup manual download link for the zip\n\n## Pre-release checklist\n\n- `SKILL.md` present at skill root\n- `workflow.md` present at skill root\n- `skill.json` present at skill root\n- zip contains top-level `vox-phone-notification/` folder\n- hosted URL can be downloaded in browser\n- installer link contains correct URL-encoded `downloadurl`\n- required env list reflects notification-only mode by default\n- TeddyMobile platform registration and bot configuration have been completed for the target production environment\n- at least one real outbound call has been verified with audible notification playback\n\n## Post-release verification\n\n1. open the hosted zip URL directly in browser\n2. confirm download succeeds\n3. open the WorkBuddy installer link on a machine with WorkBuddy installed\n4. confirm WorkBuddy recognizes the skill package\n5. confirm the skill content loads and references the expected workflow files\n\nArchive v1.0.5: 25 files, 50571 bytes\n\nFiles: examples/send-phone-notification-input.json (239b), FIRST-SETUP.md (5566b), GET-STARTED.md (3842b), POST-TRIAL-GUIDE.md (2128b), PUBLISHING.md (9847b), README.md (15994b), resources/callback-server-example.js (1672b), resources/chat-to-notification.js (2842b), resources/credentials-loader.js (1988b), resources/credentials.example.json (211b), resources/hmac-outbound-client.js (3973b), resources/implementation-checklist.md (2168b), resources/openclaw-integration-template.md (5212b), resources/run-demo.js (9453b), resources/trial-content-guard.js (2637b), resources/trial-state.js (1578b), skill-card.md (3158b), skill.json (1671b), SKILL.md (15392b), SKILLHUB.md (6296b), workbuddy-install-link-template.txt (142b), WORKBUDDY-RELEASE.md (2528b), WORKBUDDY.md (1988b), workflow.md (19630b), _meta.json (153b)\n\nFile v1.0.5:SKILL.md\n\n---\r\nname: vox-phone-notification\r\ndescription: 将自然语言通知请求转换为 TeddyMobile Vox 电话通知，先进行免凭据 dry-run 解析，再让用户选择最多 10 次免凭据 v2 真实试用外呼或正式注册配置。 Convert natural-language notification requests into TeddyMobile Vox phone notifications, starting with no-credential dry-run parsing, then letting users choose up to 10 no-credential v2 real trial calls or formal registration and setup.\r\n---\r\n\r\n本 Skill 是可安装到 Claw 的技能包。`skill.json` 用于发现元数据；首次体验请先阅读 `GET-STARTED.md`；通用安装说明请阅读 `README.md`；WorkBuddy 相关打包假设请阅读 `WORKBUDDY.md`。\r\nThis skill is packaged as a Claw-installable folder. Use `skill.json` for discovery metadata, read `GET-STARTED.md` for the fastest first run, read `README.md` for general installation expectations, read `POST-TRIAL-GUIDE.md` for mandatory post-trial response behavior, and read `WORKBUDDY.md` for WorkBuddy-specific packaging assumptions.\r\n\r\n默认首次使用模式是 `dry-run`：只解析用户的电话通知请求，不加载凭据，也不发起真实外呼。即使命令没有提供任何模式参数，也必须视为 dry-run。用户明确选择真实试用电话后才运行 `--trial`；用户明确说明已完成 TeddyMobile 注册并要求正式外呼后，才可运行 `--live` 并读取用户自己的 `appId`、`secret`、`botid` 和外呼主叫号码。`VOX_CALLBACK_URL` 是可选项，仅用于 callback 驱动的高级流程。\r\nDefault first-use mode is `dry-run`: parse the user's phone notification request without loading credentials or placing a call. Even when no mode flag is provided, treat the run as dry-run. Run `--trial` only after the user explicitly chooses up to 10 real trial calls. Run `--live` and load user-owned `appId`, `secret`, `botid`, and outbound number only after the user explicitly says TeddyMobile registration is complete and requests formal outbound calling. `VOX_CALLBACK_URL` is optional and only used for callback-driven advanced flows.\r\n\r\n## 强制首次使用流程 / Mandatory First-Use Flow\r\n\r\n当用户要求使用、测试、试用、运行、执行本 Skill，或发送电话通知时，除非用户明确要求使用自己的凭据进入正式 live 模式，否则必须按以下顺序执行：\r\nWhen the user asks to use, test, try, run, execute, or send a phone notification with this skill, follow this exact order unless the user explicitly asks for live mode with their own credentials:\r\n\r\n1. 先运行或引导用户运行免凭据 dry-run：\r\n   Run or instruct no-credential dry-run first:\r\n   `node \"skills/vox-phone-notification/resources/run-demo.js\" \"<user instruction>\" --dry-run`\r\n2. 运行 dry-run 前必须先确认用户指令中同时包含接收手机号和通知内容。如果缺少接收手机号，先引导用户填写需要通知的电话；如果缺少通知内容，先引导用户填写电话接通后要播报的内容。不要用文档示例号码或示例内容代替用户输入。\r\n   Before running dry-run, confirm the user instruction includes both the destination phone number and notification content. If the destination phone number is missing, ask the user to provide the phone number to notify. If notification content is missing, ask the user to provide the spoken content for the call. Do not substitute documentation sample numbers or sample content for user input.\r\n3. 如果 dry-run 成功且解析结果有效，必须让用户在以下两个下一步中选择：\r\n   If dry-run succeeds and the parsed request is valid, ask the user to choose one of these next steps:\r\n   - `试用真实电话`: 使用免凭据 v2 试用接口运行 trial 外呼。 Run the promotion trial call through the no-credential v2 trial endpoint:\r\n   `node \"skills/vox-phone-notification/resources/run-demo.js\" \"<user instruction>\" --trial --confirm-real-call`\n   - `正式注册并配置`: 引导用户完成 TeddyMobile 注册和正式 live 凭据配置。 Guide the user to TeddyMobile registration and formal live credential setup.\r\n4. 用户选择试用、审阅 dry-run 预览、确认有权联系该号码，并显式使用 `--confirm-real-call` 前，不要运行 `--trial`。用户选择正式注册或说明已在本地配置凭据前，不要询问正式凭据；不要要求用户在聊天中粘贴真实密钥。\n   Do not run `--trial` until the user chooses trial, reviews the dry-run preview, confirms they are authorized to contact the number, and explicitly uses `--confirm-real-call`. Do not ask for formal credentials until the user chooses formal registration or says they configured credentials locally; do not ask the user to paste live secrets into chat.\n   正式外呼必须显式使用 `--live`。不要在 dry-run 成功后自动执行不带模式参数的 live 命令。\r\n   Formal outbound calling must use the explicit `--live` flag. Do not automatically run an unflagged live command after dry-run succeeds.\r\n5. 如果 trial 因本机已试用或内容安全检查失败而被拦截，说明拦截结果，并继续给出正式注册引导。\r\n   If trial mode is blocked because this machine already used the free trial or content safety rejects the text, report that result and still continue to registration guidance.\r\n   如果 trial 成功，最终回复不能只总结试用结果；必须立刻复述 `POST-TRIAL-GUIDE.md` 中的三选一正式注册配置引导。\r\n   If trial succeeds, the final response must not only summarize the trial result; it must immediately restate the three-option formal setup guide from `POST-TRIAL-GUIDE.md`.\r\n6. 告知用户：长期正式使用需要完成 TeddyMobile 注册。\r\n   Tell the user that formal ongoing use requires TeddyMobile registration:\r\n   `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`\r\n   展示该链接时必须让它足够明显，并附上简短注册流程：访问网站 -> 创建账号 -> 正式接入并获取 APPID / SecretID -> 创建通知类 bot 并获取呼出号码和 BotID。\r\n   When showing this link, make it highly visible and include the short registration flow: visit the site -> create an account -> complete formal access and get APPID / SecretID -> create a notification bot and get the outbound number plus BotID.\r\n   然后必须提供正式注册配置的三选一操作引导：`配置引导`、`稍后配置本地参数`、`查看本地配置模板`。\n   Then present a required three-option formal setup guide: `配置引导`, `稍后配置本地参数`, or `查看本地配置模板`.\n7. 只有当用户明确选择正式 live 模式，或说明已经有 TeddyMobile 凭据时，才询问 `VOX_APP_ID`、`VOX_SECRET`、`VOX_BOT_ID` 或 `VOX_OUTBOUND_NUMBER`。\r\n   Only ask for `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, or `VOX_OUTBOUND_NUMBER` when the user explicitly chooses formal live mode or says they already have TeddyMobile credentials.\r\n\r\n首次 dry-run 或推广 trial 流程中，不要加载 `resources/credentials-loader.js`，不要检查 `~/.teddymobile/credentials.json`，也不要询问用户自有凭据。\r\nDo not load `resources/credentials-loader.js`, do not inspect `~/.teddymobile/credentials.json`, and do not ask for user-owned credentials during first-use dry-run or promotion trial flow.\r\n\r\n如果工具或代理已经运行了一次 dry-run，不要假设用户有本地凭据；必须先展示二选一：`试用真实电话` 或 `正式注册并配置`。\r\nIf a tool or agent has already run dry-run, do not assume the user has local credentials; first present the two-option choice: `试用真实电话` or `正式注册并配置`.\r\n\r\ndry-run 成功后，不要停下来询问正式 TeddyMobile 凭据。必须给出明确的二选一：试用真实电话，或正式注册并配置。\r\nDo not stop after dry-run by asking for formal TeddyMobile credentials. Dry-run success must be followed by a clear two-option choice: trial phone call or formal registration.\r\n\r\n## 首次使用 / First Use\r\n\r\n如果用户尚未完成 TeddyMobile 平台注册，请从 dry-run 模式开始：\r\nStart with dry-run mode if TeddyMobile platform registration is not complete yet:\r\n\r\n1. 运行内置 dry-run demo，免凭据验证自然语言解析效果；终端输出必须脱敏展示手机号和通知内容。 Run the bundled dry-run demo to verify natural-language parsing without credentials; terminal output must mask the phone number and notification content.\r\n2. dry-run 成功后向用户提供最多 10 次 `--trial` 真实试用外呼。Trial 模式必须在用户审阅 dry-run 预览、确认有权联系该号码，并显式使用 `--confirm-real-call` 后才运行。Trial 模式使用免凭据 `POST https://vox.teddymobile.cn/vox/v2/outbound` 试用接口、添加试用声明、将用户内容限制在 100 字以内、执行本地内容安全检查、将 `notificationTimes` 固定为 `1`，并记录本地试用次数，最多 10 次。 Offer up to 10 `--trial` calls after dry-run succeeds. Trial mode may run only after the user reviews dry-run output, confirms they are authorized to contact the recipient, and explicitly uses `--confirm-real-call`. Trial mode uses the no-credential `POST https://vox.teddymobile.cn/vox/v2/outbound` trial endpoint, prepends a trial disclaimer, limits user-provided content to 100 characters, applies local content safety checks, fixes `notificationTimes` to `1`, and records a local trial usage counter.\n3. 如果 dry-run 或 trial 效果符合预期，引导用户访问 `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`。 If the dry-run or trial result matches the intended phone notification, go to `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`.\r\n4. 完成企业注册、账号激活或必要审核。 Complete enterprise registration, activation, or any required approval process.\r\n5. 创建或配置用于外呼通知的 TeddyMobile notification bot。 Create or configure the TeddyMobile notification bot you want to use for outbound calls.\r\n6. 记录平台返回的配置值。 Record the values returned by the platform:\r\n   - `VOX_APP_ID`\r\n   - `VOX_SECRET`\r\n   - `VOX_BOT_ID`\r\n   - `VOX_OUTBOUND_NUMBER`\r\n\r\n正式注册配置的简短说明：访问 TeddyMobile Vox 网站，创建并激活账号，完成正式接入后记录 `APPID` / `SecretID`，然后创建通知类 bot，记录呼出号码和 `BotID`。这些值会对应到本地配置中的 `VOX_APP_ID`、`VOX_SECRET`、`VOX_BOT_ID`、`VOX_OUTBOUND_NUMBER`。\r\nShort formal registration summary: visit the TeddyMobile Vox site, create and activate an account, complete formal access and record `APPID` / `SecretID`, then create a notification bot and record the outbound number and `BotID`. These values map to local config keys `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, and `VOX_OUTBOUND_NUMBER`.\r\n\r\n正式注册配置三选一：\r\n1. `配置引导`: 引导用户访问官网，完成创建账号、正式接入、创建通知类 bot，并提醒记录 `APPID`、`SecretID`、`BotID`、呼出号码。\r\n2. `稍后配置本地参数`: 告诉用户拿到参数后回来说明已配置到环境变量或本地凭据文件即可继续，不要在聊天中发送真实密钥。\n3. `查看本地配置模板`: 给出本地配置模板和环境变量名称，但不要要求用户把真实值粘贴到聊天中。\n\r\nFormal setup choices:\r\n1. `配置引导`: guide the user to the official site, account creation, formal access, notification bot creation, and remind them to record `APPID`, `SecretID`, `BotID`, and outbound number.\r\n2. `稍后配置本地参数`: tell the user to return after configuring the values in environment variables or a local credential file, and not to paste live secrets into chat.\n3. `查看本地配置模板`: show the local config template and environment variable names without asking the user to paste real values into chat.\n7. 通过环境变量、本地 secrets manager 或 `~/.teddymobile/credentials.json` 等本地文件配置这些凭据；不要在聊天、日志、工单或共享文档中粘贴真实凭据。 Configure those credentials with environment variables, a local secrets manager, or a local file such as `~/.teddymobile/credentials.json`; do not paste live credentials into chat, logs, tickets, or shared docs.\n8. 回到本 Skill，运行正式 live 本地 demo，或将外呼 helper 集成到 Claw runtime。 Return to this skill and run the live local demo or integrate the outbound helper into your Claw runtime.\r\n\r\n如果平台凭据尚未准备好，请先提供 dry-run，而不是卡在注册或凭据输入上。Trial 模式使用免凭据 v2 试用接口。正式真实外呼仍然需要完成 TeddyMobile 平台注册和 bot 配置。\r\nIf these platform credentials are not ready yet, offer dry-run first instead of blocking on registration. Trial mode uses the no-credential v2 trial endpoint. Formal real outbound calls still require TeddyMobile platform onboarding and bot configuration.\r\n\r\n30 秒首次体验请阅读 `GET-STARTED.md`。完整首次安装引导请阅读 `FIRST-SETUP.md`。\r\nFor a 30-second first run, read `GET-STARTED.md`. For a dedicated first-time onboarding walkthrough, read `FIRST-SETUP.md`.\r\n\r\n跨平台上架文案和 marketplace 发布说明请阅读 `PUBLISHING.md`。\r\nFor cross-platform listing copy and marketplace release notes, read `PUBLISHING.md`.\r\n\r\n正式 live 模式的凭据加载遵循标准本地模式：\r\nCredential loading now follows a standard local pattern:\r\n\r\n- 优先使用环境变量：`VOX_APP_ID`、`VOX_SECRET`、`VOX_BOT_ID`、`VOX_OUTBOUND_NUMBER`。 Use environment variables first: `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, `VOX_OUTBOUND_NUMBER`.\r\n- 如果环境变量缺失，则回退读取 `~/.teddymobile/credentials.json`。 Fall back to `~/.teddymobile/credentials.json`.\r\n- 可通过 `VOX_CREDENTIALS_FILE` 覆盖默认本地凭据文件路径。 Optionally override the file path with `VOX_CREDENTIALS_FILE`.\n- 内置参考实现为 `resources/credentials-loader.js` 和 `resources/credentials.example.json`。 Use `resources/credentials-loader.js` and `resources/credentials.example.json` as the bundled reference implementation.\n- 正式 `--live` 和试用 `--trial` 都会发起真实电话并向 TeddyMobile Vox 传输手机号和通知文本，必须在 dry-run 预览后显式添加 `--confirm-real-call`。 Both formal `--live` and trial `--trial` place real phone calls and transmit phone number plus notification text to TeddyMobile Vox; require `--confirm-real-call` after dry-run preview.\n- 如需保存 `requestId`、手机号、通知文本、任务变量或回调消息，只保存业务必需字段，手机号和正文默认脱敏或加密，限制访问权限，设置明确保留期限，并避免在日志中记录完整值。 If persisting `requestId`, phone numbers, notification text, task variables, or callback messages, store only business-required fields, mask or encrypt phone numbers and message bodies by default, restrict access, set an explicit retention period, and avoid logging full values.\n\r\n完整阅读并遵循 `./workflow.md`。\r\nRead `./workflow.md` completely and follow it.\n\nFile v1.0.5:README.md\n\n# vox-phone-notification\r\n\r\nInstallable Claw skill for TeddyMobile Vox single-turn outbound phone notifications.\r\n\r\nThis package supports TeddyMobile Vox outbound notification integration with validated HMAC signing, natural-language-to-notification parsing, local demo tools, and successful real-world phone playback after platform registration and bot configuration are completed.\r\n\r\n## Quick Start\r\n\r\nFor first-time users, start with dry-run mode before platform registration:\n\nSafety defaults:\n\n- `--dry-run` is the default and never places a phone call.\n- `--trial` and `--live` place real outbound phone calls, transmit the destination number and message text to TeddyMobile Vox, and must be used only for recipients you are authorized to contact.\n- real-call modes require the explicit `--confirm-real-call` safety flag after you review dry-run output.\n- configure secrets through environment variables or a local credentials file; do not paste live secrets into chat, tickets, logs, or screenshots.\n\r\n1. Run a no-credential dry-run:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\n2. Confirm the parsed output contains masked parsing results:\r\n   - masked destination phone number\r\n   - masked spoken notification text length\r\n   - notification repeat count\r\n3. Optionally run up to 10 promotion-period trial calls through the no-credential v2 trial endpoint:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode places one real phone notification through `POST https://vox.teddymobile.cn/vox/v2/outbound` with no local credentials, a required trial disclaimer, local content safety checks, at most 100 characters of user-provided content, and `notificationTimes` fixed to `1`. Review dry-run output first, use only authorized recipient numbers, and expect usage, consent, anti-spam, and compliance obligations. This local trial check is for promotion use only and is not a strong abuse-prevention boundary.\n\r\n4. To place formal phone calls, visit the TeddyMobile Vox registration page:\r\n\r\n```text\r\nhttps://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification\r\n```\r\n\r\n5. Create and activate your TeddyMobile Vox account.\r\n6. Complete formal access and record the returned `APPID` / `SecretID`.\r\n7. Create a notification bot and record its outbound number plus `BotID`.\r\n8. Choose one setup path after trial:\r\n   - `配置引导`: get guided through official registration and parameter collection.\r\n   - `稍后配置本地参数`: return later after configuring environment variables or a local credentials file.\n   - `查看本地配置模板`: view the local config keys without pasting real values into chat.\n9. Collect these platform values:\r\n   - `VOX_APP_ID`\r\n   - `VOX_SECRET`\r\n   - `VOX_BOT_ID`\r\n   - `VOX_OUTBOUND_NUMBER`\r\n10. Configure credentials by either:\r\n   - setting environment variables, or\r\n   - creating `~/.teddymobile/credentials.json`, or\r\n   - setting `VOX_CREDENTIALS_FILE` to a custom JSON file path\r\n11. Run the live local demo:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --live --confirm-real-call\n```\r\n\r\n12. After the live demo succeeds, connect the outbound helper to your Claw, OpenClaw, or WorkBuddy runtime.\r\n\r\nDry-run lets you verify the skill value before completing platform registration. Real outbound calls require TeddyMobile registration and Vox bot configuration.\r\n\r\nIf you want the shortest first-run guide, read `GET-STARTED.md`. If you want a dedicated step-by-step onboarding guide for first installation, read `FIRST-SETUP.md`.\r\n\r\nIf you plan to publish this skill to SkillHub-style marketplaces or internal catalogs, read `PUBLISHING.md`.\r\n\r\n## What it does\r\n\r\nThis skill guides a Claw agent or operator through:\r\n\r\n1. registering on `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`\r\n2. creating a TeddyMobile bot\r\n3. collecting `appId`, `secret`, `botid`, and outbound number\r\n4. integrating the Vox outbound API into OpenClaw or another Claw runtime\r\n5. optionally enabling callback-driven SSE only when the platform setup requires it\r\n\r\n## Current release status\r\n\r\nThe current verification status is:\r\n\r\n- natural-language parsing works\r\n- HMAC signing works\r\n- outbound request submission works\r\n- `extra.notification.text` is sent correctly when present\r\n- real outbound calls have been tested successfully with audible notification playback after TeddyMobile platform registration and bot configuration\r\n\r\nThis skill is suitable for formal release when used with a properly configured TeddyMobile platform account, bot, and outbound calling setup.\r\n\r\n## Files\r\n\r\n- `SKILL.md`: skill entrypoint\r\n- `workflow.md`: execution workflow and constraints\r\n- `GET-STARTED.md`: 30-second dry-run and registration handoff guide\r\n- `FIRST-SETUP.md`: first-time installation and TeddyMobile onboarding guide\r\n- `PUBLISHING.md`: cross-platform publishing copy and release checklist\r\n- `skill.json`: lightweight manifest for skill discovery\r\n- `WORKBUDDY.md`: WorkBuddy compatibility assumptions\r\n- `WORKBUDDY-RELEASE.md`: WorkBuddy packaging and release guide\r\n- `resources/hmac-outbound-client.js`: outbound signing and API example\r\n- `resources/chat-to-notification.js`: parse chat text into `callee` and `notificationText`\r\n- `resources/credentials-loader.js`: env-first credential loader with file fallback\r\n- `resources/credentials.example.json`: example local credentials file\r\n- `resources/run-demo.js`: runnable local demo for chat-to-call testing\r\n- `resources/trial-content-guard.js`: local trial content safety checks\r\n- `resources/trial-state.js`: local trial usage counter\r\n- `resources/callback-server-example.js`: callback SSE example\r\n- `resources/openclaw-integration-template.md`: OpenClaw integration blueprint\r\n\r\n## Install in Claw\r\n\r\nIf your Claw runtime supports folder-based skills, install by copying this folder into the runtime's skills directory:\r\n\r\n```text\r\nskills/vox-phone-notification/\r\n```\r\n\r\nIf your Claw runtime supports zip import, zip the entire `vox-phone-notification` folder and import it as one skill package.\r\n\r\nFor WorkBuddy Claw specifically, current public site behavior strongly suggests skill installation is driven by a deep link of this form:\r\n\r\n```text\r\nworkbuddy://codebuddy-ide/skill/install?skillname=<name>&downloadurl=<zip-url>&channelType=<source>&injectid=true\r\n```\r\n\r\nThat means the most compatible distribution shape is:\r\n\r\n- one downloadable zip per skill\r\n- zip root directory is `vox-phone-notification/`\r\n- `SKILL.md` exists at the skill root\r\n- workflow and resources stay inside the same root folder\r\n\r\nIf you plan to distribute this through WorkBuddy, host a zip file for this folder and provide that zip URL to the installer entry.\r\n\r\nUse `WORKBUDDY-RELEASE.md` for the release checklist and `workbuddy-install-link-template.txt` for a ready-to-fill installer link.\r\n\r\nThe minimum required files are:\r\n\r\n- `SKILL.md`\r\n- `workflow.md`\r\n- `skill.json`\r\n\r\n## Required configuration\r\n\r\nAfter platform registration is complete, provide these values to your app or runtime:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n- `VOX_BOT_ID`\r\n- `VOX_OUTBOUND_NUMBER`\r\n\r\nOptional only for callback-driven advanced mode:\r\n\r\n- `VOX_CALLBACK_URL`\r\n\r\nOptional for custom local credential file lookup:\r\n\r\n- `VOX_CREDENTIALS_FILE`\r\n\r\n## Credential storage\r\n\r\nThis skill now supports a standard local credential loading model instead of assuming environment variables only.\r\n\r\nLookup order:\r\n\r\n1. environment variables override everything else\r\n2. local file fallback at `~/.teddymobile/credentials.json`\r\n3. if `VOX_CREDENTIALS_FILE` is set, that file path is used as the fallback location instead of the default path\r\n\r\nThe bundled helper `resources/credentials-loader.js` implements this behavior and returns normalized fields for the demo or runtime adapter.\r\n\r\nExample local credential file:\r\n\r\n```json\r\n{\r\n  \"VOX_APP_ID\": \"your-app-id\",\r\n  \"VOX_SECRET\": \"your-secret\",\r\n  \"VOX_BOT_ID\": \"your-bot-id\",\r\n  \"VOX_OUTBOUND_NUMBER\": \"your-outbound-number\",\r\n  \"VOX_CALLBACK_URL\": \"https://your-domain.example/vox/callback\"\r\n}\r\n```\r\n\r\nRecommended local path:\r\n\r\n```text\r\n~/.teddymobile/credentials.json\r\n```\r\n\r\nSecurity notes:\r\n\r\n- do not commit live credentials into this repository\n- do not include a real `credentials.json` inside the distributable skill zip\n- keep only the example file `resources/credentials.example.json` in the package\n- prefer environment variables, a local secrets manager, or `~/.teddymobile/credentials.json` with restrictive file permissions\n- never paste `VOX_SECRET` or other live service credentials into chat transcripts, shared docs, issue trackers, logs, or screenshots\n\r\n## Runtime expectation\r\n\r\nThis skill assumes:\r\n\r\n- outbound phone notification only\r\n- single-turn playback only\r\n- no multi-turn phone dialogue\r\n- OpenClaw or another Claw runtime triggers a tool/action such as `send_phone_notification`\r\n- default mode is notification-only, without requiring a callback webhook\r\n\r\nWhen this skill is used from a Claw chat box with a natural-language instruction such as `给<接收手机号>发通知，明天10点开会`, the runtime should extract:\r\n\r\n- `callee`: `<接收手机号>`\r\n- final spoken notification text, for example: `您好，提醒您明天10点开会。`\r\n\r\nThen pass that final sentence as `notificationText`. The phone call can still be placed without `notificationText`, but notification playback depends on sending valid spoken content.\r\n\r\nThe bundled helper `resources/chat-to-notification.js` now provides a default parser for this. For example, it can turn `给<接收手机号>发通知，明天10点开会` into a payload containing:\r\n\r\n- `callee`: `<接收手机号>`\r\n- `notificationText`: `您好，提醒您明天10点开会。`\r\n- `notificationTimes`: `2`\r\n\r\n## Recommended trigger contract\r\n\r\n```json\r\n{\r\n  \"callee\": \"13800138000\",\r\n  \"task\": \"payment_overdue_reminder\",\r\n  \"variables\": {\r\n    \"name\": \"张三\",\r\n    \"amount\": \"299.00\",\r\n    \"dueDate\": \"2026-05-20\"\r\n  },\r\n  \"requestId\": \"notif-20260511-001\",\r\n  \"notificationText\": \"您好，您有一笔待处理账单，请及时登录系统处理。\",\r\n  \"notificationTimes\": 2\r\n}\r\n```\r\n\r\nFor chat-driven usage, the preferred normalized payload is:\r\n\r\n```json\r\n{\r\n  \"callee\": \"<接收手机号>\",\r\n  \"requestId\": \"notif-20260512-001\",\r\n  \"notificationText\": \"您好，提醒您明天10点开会。\",\r\n  \"notificationTimes\": 2\r\n}\r\n```\r\n\r\nExample usage:\r\n\r\n```js\r\nconst { parseChatToNotification } = require('./resources/chat-to-notification');\r\n\r\nconst payload = parseChatToNotification('给<接收手机号>发通知，明天10点开会');\r\n```\r\n\r\nUse the returned payload in the outbound helper:\r\n\r\n```js\r\nawait createOutboundNotification({\r\n  appId: process.env.VOX_APP_ID,\r\n  secret: process.env.VOX_SECRET,\r\n  botid: process.env.VOX_BOT_ID,\r\n  callee: payload.callee,\r\n  requestId: payload.requestId,\r\n  notificationText: payload.notificationText,\r\n  notificationTimes: payload.notificationTimes,\r\n});\r\n```\r\n\r\nThe helpers do not print request headers, request bodies, credentials, phone numbers, or notification text unless the caller logs those values separately.\r\n\r\n## Local demo\r\n\r\nYou can run a local end-to-end demo from this workspace and inspect logs directly in the terminal.\r\n\r\nTo try the skill without registration or credentials, run dry-run mode:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\nDry-run mode parses the destination phone number and notification text but prints only masked values and does not place a real phone call.\r\n\r\nPromotion packages can also run up to 10 local trial calls:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode uses the no-credential `POST https://vox.teddymobile.cn/vox/v2/outbound` endpoint, applies local content safety checks, prepends a trial disclaimer, limits user-provided content to 100 characters, fixes `notificationTimes` to `1`, and records local usage at `~/.teddymobile/vox-phone-notification-trial.json`. It places a real call and requires `--confirm-real-call` after recipient authorization and dry-run review.\n\r\nBefore running the local demo, provide credentials by either:\r\n\r\n- setting environment variables directly, or\r\n- creating `~/.teddymobile/credentials.json`, or\r\n- setting `VOX_CREDENTIALS_FILE` to a custom JSON credentials path\r\n\r\nRequired values:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n- `VOX_BOT_ID`\r\n- `VOX_OUTBOUND_NUMBER`\r\n\r\nExample command:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --live --confirm-real-call\n```\r\n\r\nExample with a custom credential file path:\r\n\r\n```bash\r\nVOX_CREDENTIALS_FILE=\"C:/secure/teddymobile/credentials.json\" node \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --live --confirm-real-call\n```\r\n\r\nWhen the live demo runs, the terminal prints only the final outbound response:\r\n\r\n- `VOX outbound response:`\r\n\r\nIf the request body sent by your own integration does not contain an `extra` field with `notification.text`, the call can connect but no spoken notification will be played.\r\n\r\nFor notification-only bots, TeddyMobile docs now confirm you can send the spoken content directly in the outbound request body via:\r\n\r\n- `extra.notification.text`\r\n- `extra.notification.times`\r\n\r\n## Execution flow\r\n\r\n1. Claw tool receives notification task.\r\n2. App calls TeddyMobile Vox outbound API.\r\n3. TeddyMobile places the call.\r\n4. In default mode, the notification flow ends there from your app's perspective.\r\n5. Only in callback-driven mode, TeddyMobile invokes your callback endpoint and your server returns SSE notification text ending with `[DONE]`.\r\n\r\n## Verification\r\n\r\n- Confirm the user can finish registration on `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`\r\n- Confirm `appId`, `secret`, `botid`, and outbound number are recorded\r\n- Confirm outbound signing matches the official doc format exactly, including the trailing newline after `HMAC-APPID:<appId>` in the canonical string\r\n- Confirm real outbound test calls complete with audible notification playback after platform registration and bot configuration\r\n- If callback mode is enabled, confirm callback returns `text/event-stream`\r\n- If callback mode is enabled, confirm the response ends with `data: [DONE]`\r\n\r\n## Notes\r\n\r\nThis package is structured to be easy to install into Claw-style skill loaders, but exact import UX can differ by runtime. If your runtime needs a different manifest name or extra metadata, adapt `skill.json` rather than changing the workflow content.\r\n\r\nFor WorkBuddy, the public website exposes strong evidence of:\r\n\r\n- a dedicated Claw guide route at `/docs/workbuddy/Claw`\r\n- a deep-link installer scheme using `workbuddy://codebuddy-ide/skill/install`\r\n- installation parameters including `skillname` and `downloadurl`\r\n\r\nThe public site did not expose a fully readable formal manifest spec during this analysis, so this package is optimized for the most likely compatible shape: root `SKILL.md` plus a self-contained zip-deliverable folder.\r\n\r\nThe bundled HMAC signing helper is aligned to the current local TeddyMobile doc copy. A key detail is that the canonical signing string ends with a final newline after `HMAC-APPID:<appId>`. If the platform still rejects the signature, compare the exact raw canonical string, `HMAC-DATE` value, and request path against the official sample.\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn7eq90b1gaf526fnsk07zn9t986me0d\",\n  \"slug\": \"teddymobile-vox-phone-notification\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1779793211241\n}\n\nFile v1.0.5:FIRST-SETUP.md\n\n# First-Time Setup Guide\r\n\r\nUse this guide when installing `vox-phone-notification` for the first time.\r\n\r\n## Goal\r\n\r\nComplete TeddyMobile platform onboarding, prepare the required credentials, and verify that the skill can place an outbound notification call successfully.\r\n\r\n## Step 1: Try dry-run without registration\r\n\r\nBefore registering or configuring credentials, run:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\nThis verifies that the skill can parse and print masked results for:\r\n\r\n- the destination phone number\r\n- the spoken notification content length\r\n- the notification repeat count\r\n\r\nNo real phone call is placed in dry-run mode, and the parsed phone number plus notification text are masked in terminal output.\n\nUse dry-run output as the required preview before any real call. Do not proceed unless the recipient number is authorized and the notification content is appropriate to transmit to TeddyMobile Vox.\n\r\n## Step 2: Try up to 10 promotion trial calls\r\n\r\nRun up to 10 real trial calls through the no-credential v2 trial endpoint:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode:\r\n\r\n- uses the no-credential v2 trial endpoint instead of local user credentials\r\n- places one real phone notification after local content safety checks\r\n- prepends a TeddyMobile Vox trial disclaimer\r\n- keeps at most 100 characters of user-provided content\r\n- blocks links, contact information, long number sequences, and high-risk terms\r\n- fixes `notificationTimes` to `1`\n- stores a local trial usage counter at `~/.teddymobile/vox-phone-notification-trial.json`\n- sends the destination phone number and message text to TeddyMobile Vox and may create usage, consent, anti-spam, or compliance obligations\n\r\nThis is a promotion-period convenience check and can be bypassed by users who modify local files. Use the server-side no-credential v2 trial endpoint for quota and abuse controls.\r\n\r\n## Step 3: Register on TeddyMobile\r\n\r\nGo to `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification` and complete the platform onboarding process.\r\n\r\nTypical first-time setup includes:\r\n\r\n1. creating or activating your TeddyMobile account\r\n2. completing enterprise registration or review if required\r\n3. enabling the Vox-related capabilities needed for outbound calling\r\n\r\n## Step 4: Create and configure the bot\r\n\r\nInside the TeddyMobile platform, create or configure the bot that will be used for outbound notification calls.\r\n\r\nConfirm that:\r\n\r\n- the selected `botid` is the one intended for notification calls\r\n- the bot has outbound notification capability enabled\r\n- the platform setup for your environment supports direct notification playback or the callback mode your deployment requires\r\n\r\n## Step 5: Collect the required platform values\r\n\r\nRecord these values from the TeddyMobile platform:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n- `VOX_BOT_ID`\r\n- `VOX_OUTBOUND_NUMBER`\r\n\r\nOptional only if your environment uses callback-driven advanced mode:\r\n\r\n- `VOX_CALLBACK_URL`\r\n\r\n## Step 6: Configure local credentials\r\n\r\nThis skill supports the following lookup order:\r\n\r\n1. environment variables first\r\n2. local file fallback at `~/.teddymobile/credentials.json`\r\n3. custom file path override via `VOX_CREDENTIALS_FILE`\r\n\r\nExample local credential file:\r\n\r\n```json\r\n{\r\n  \"VOX_APP_ID\": \"your-app-id\",\r\n  \"VOX_SECRET\": \"your-secret\",\r\n  \"VOX_BOT_ID\": \"your-bot-id\",\r\n  \"VOX_OUTBOUND_NUMBER\": \"your-outbound-number\",\r\n  \"VOX_CALLBACK_URL\": \"https://your-domain.example/vox/callback\"\r\n}\r\n```\r\n\r\nSecurity guidance:\n\n- do not commit real credentials into source control\n- do not publish real credentials inside the skill zip\n- keep only example credentials in distributable files\n- do not paste `APPID`, `SecretID`, `BotID`, outbound numbers, or `VOX_SECRET` into chat, shared docs, logs, tickets, or screenshots\n- prefer environment variables, a local secrets manager, or `~/.teddymobile/credentials.json` with restrictive file permissions\n\r\n## Step 7: Run the live local demo\r\n\r\nFrom the workspace root, run:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --live --confirm-real-call\n```\r\n\r\nThe demo should print:\r\n\r\n- outbound response\r\n\r\n## Step 8: Verify playback\r\n\r\nConfirm that:\r\n\r\n- the call is placed successfully\r\n- the destination number receives the call\r\n- the spoken notification is audible\r\n- the spoken content matches the expected `notificationText`\r\n\r\n## Step 9: Integrate into your runtime\r\n\r\nAfter the demo succeeds, integrate the skill into your Claw, OpenClaw, WorkBuddy, or compatible runtime.\r\n\r\nRecommended integration shape:\r\n\r\n- parse natural-language chat input into `callee` and `notificationText`\r\n- create a `requestId`\r\n- call the bundled outbound helper\r\n- return a simple success result to the runtime in notification-only mode\r\n\r\n## If first-time setup is blocked\r\n\r\nIf you cannot continue, check these first:\r\n\r\n- platform registration is approved\r\n- the bot is configured for outbound notification usage\r\n- the credentials match the active TeddyMobile environment\r\n- the outbound number is enabled for the account\r\n- the request body includes `extra.notification.text`\r\n\r\n## Related files\r\n\r\n- `SKILL.md`\r\n- `README.md`\r\n- `workflow.md`\r\n- `resources/credentials-loader.js`\r\n- `resources/run-demo.js`\n\nFile v1.0.5:GET-STARTED.md\n\n# Get Started in 30 Seconds\r\n\r\nUse this guide immediately after installing `vox-phone-notification`.\r\n\r\n## Try it without registration\r\n\r\nRun a no-credential dry-run first:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\nDry-run mode does not place a real phone call. It only verifies that the skill can parse and prints masked results for:\n\r\n- the destination phone number\r\n- the spoken notification text length\r\n- the notification repeat count\r\n- the generated request id\n\nDo not run real-call modes until you have reviewed dry-run output and confirmed the recipient is authorized to receive the call.\n\r\n## Try up to 10 real trial calls\r\n\r\nPromotion builds can include a 10-use local trial mode:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode:\r\n\r\n- uses the no-credential v2 trial endpoint instead of your local TeddyMobile credentials\r\n- places one real phone notification after local content safety checks\r\n- adds a required TeddyMobile Vox trial disclaimer before the user-provided content\r\n- keeps at most 100 characters of user-provided content\r\n- blocks links, contact information, long number sequences, and high-risk terms\r\n- fixes `notificationTimes` to `1`\n- records this machine trial usage count, up to 10 trials\n- sends the destination phone number and message text to TeddyMobile Vox and may create usage, consent, anti-spam, or compliance obligations\n\r\nThe local trial marker is stored at:\r\n\r\n```text\r\n~/.teddymobile/vox-phone-notification-trial.json\r\n```\r\n\r\nThis is a promotion-period convenience check, not a strong abuse-prevention boundary.\r\n\r\n## Send formal phone notifications\r\n\r\nTo place a real outbound phone call, register and configure TeddyMobile Vox:\r\n\r\n```text\r\nhttps://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification\r\n```\r\n\r\nFormal registration flow:\r\n\r\n1. Visit the TeddyMobile Vox website above.\r\n2. Create and activate your account.\r\n3. Complete formal access and record the returned `APPID` / `SecretID`.\r\n4. Create a notification bot.\r\n5. Record the bot's outbound number and `BotID`.\r\n\r\nAfter trial, choose one setup path:\r\n\r\n1. `配置引导`: get guided through the official site and parameter collection.\r\n2. `稍后配置本地参数`: return later after configuring environment variables or a local credentials file.\n3. `查看本地配置模板`: view the local config keys without pasting real values into chat.\n\r\nAfter registration, prepare these values:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n- `VOX_BOT_ID`\r\n- `VOX_OUTBOUND_NUMBER`\r\n\r\n## Configure credentials\r\n\r\nCreate a local credential file:\r\n\r\n```text\r\n~/.teddymobile/credentials.json\r\n```\r\n\r\nExample:\r\n\r\n```json\r\n{\r\n  \"VOX_APP_ID\": \"your-app-id\",\r\n  \"VOX_SECRET\": \"your-secret\",\r\n  \"VOX_BOT_ID\": \"your-bot-id\",\r\n  \"VOX_OUTBOUND_NUMBER\": \"your-outbound-number\"\r\n}\r\n```\r\n\r\nYou can also set the same values as environment variables.\n\nDo not paste live `APPID`, `SecretID`, `BotID`, outbound numbers, or `VOX_SECRET` into chat. Configure them directly in your shell, local secrets manager, or local credentials file.\n\r\n## Run the live demo\r\n\r\nAfter credentials are configured and you explicitly want formal outbound calling, run the live demo with `--live`:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --live --confirm-real-call\n```\r\n\r\n## What success looks like\r\n\r\n- dry-run succeeds without credentials\r\n- live mode loads TeddyMobile credentials\r\n- the outbound request is accepted by Vox\r\n- the destination phone receives the notification call\r\n- the spoken content matches the parsed notification text\n\nFile v1.0.5:POST-TRIAL-GUIDE.md\n\n# Post-Trial Guide\n\nUse this guide after any successful `--trial` run, even if the tool output is hidden, collapsed, summarized, or rewritten by the host UI.\n\nDo not end with only the trial result. After confirming the trial phone call was submitted, always show the formal setup next step choices.\n\n## Required response after trial success\n\n```text\n试用外呼已提交成功。若你希望长期使用 TeddyMobile Vox 电话通知，请选择正式注册配置的下一步：\n\n1. 配置引导\n   我会引导你去 TeddyMobile Vox 官网完成注册、正式接入、创建通知类 bot，并列出每一步需要记录的参数。\n\n2. 稍后配置本地参数\n   你可以稍后把 APPID / SecretID / BotID / 呼出号码配置到环境变量、本地 secrets manager 或本地凭据文件，然后回来告诉我已配置完成。不要在聊天中发送真实密钥。\n\n3. 查看本地配置模板\n   如果你已经有参数，请在本机按下面键名配置，不要把真实值粘贴到聊天中：\n   VOX_APP_ID =\n   VOX_SECRET =\n   VOX_BOT_ID =\n   VOX_OUTBOUND_NUMBER =\n\n正式注册配置入口：\nhttps://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification\n```\n\n## If the user chooses option 1\n\nGuide them through:\n\n1. Visit the official TeddyMobile Vox site.\n2. Create and activate the account.\n3. Complete formal access and record `APPID` / `SecretID`.\n4. Create a notification bot.\n5. Record the outbound number and `BotID`.\n6. Configure these values locally and return after local config is ready.\n\n## If the user chooses option 2\n\nReply briefly:\n\n```text\n好的。你稍后拿到参数后，请把 APPID、SecretID、BotID、呼出号码配置到环境变量、本地 secrets manager 或本地凭据文件。配置完成后回来告诉我“已配置完成”，我会继续帮你进行 live 测试。不要在聊天中发送真实密钥。\n```\n\n## If the user chooses option 3\n\nProvide the local config template:\n\n```text\n请在本机按下面键名配置，不要把真实值粘贴到聊天中：\n\nVOX_APP_ID =\nVOX_SECRET =\nVOX_BOT_ID =\nVOX_OUTBOUND_NUMBER =\n```\n\nFile v1.0.5:PUBLISHING.md\n\n# Publishing Guide\r\n\r\nUse this file when publishing `vox-phone-notification` to SkillHub-style marketplaces, plugin hubs, internal skill catalogs, or Claw-compatible distribution platforms.\r\n\r\n## Publishing position\r\n\r\nRecommended release position:\r\n\r\n- formal TeddyMobile Vox phone notification skill\r\n- suitable for Claw, OpenClaw, WorkBuddy, and compatible runtimes\r\n- intended for developers, integrators, enterprise automation teams, and solution delivery teams\r\n\r\n## Core value proposition\r\n\r\nThis skill provides:\r\n\r\n- no-credential dry-run parsing before platform registration\r\n- promotion-period trial calls through the no-credential v2 endpoint, with a trial disclaimer and content safety checks\r\n- TeddyMobile Vox outbound phone notification integration after registration\r\n- natural-language parsing for chat-style notification instructions\r\n- HMAC-signed outbound request generation\r\n- local credential loading with environment variables and file fallback\r\n- first-time onboarding documentation and runnable local demo\r\n- verified real-world outbound call playback after platform registration and bot configuration\r\n\r\n## Recommended Chinese listing title\r\n\r\n`TeddyMobile Vox 电话通知 Skill`\r\n\r\n## Recommended English listing title\r\n\r\n`TeddyMobile Vox Phone Notification Skill`\r\n\r\n## Recommended Chinese short description\r\n\r\n`把一句话变成电话提醒：未注册 TeddyMobile 也可先 dry-run 体验解析；推广包最多可通过免凭据 v2 接口试用 10 次真实电话，试用电话会添加声明、进行本地内容安全检查，正式外呼需完成 Vox 注册和 bot 配置。`\r\n\r\n## Recommended English short description\r\n\r\n`Turn a natural-language request into a phone notification. Try parsing with dry-run before registration, use a no-credential v2 promotion trial call when included, then connect TeddyMobile Vox credentials for formal outbound calls.`\r\n\r\n## Recommended combined short description\r\n\r\n`把一句话变成电话提醒：未注册 TeddyMobile 也可先 dry-run 体验解析；推广包最多可通过免凭据 v2 接口试用 10 次真实电话，试用电话会添加声明、进行本地内容安全检查，正式外呼需完成 Vox 注册和 bot 配置。 Turn a natural-language request into a phone notification: try dry-run parsing before registration, use up to 10 no-credential v2 promotion trial calls when included, then connect TeddyMobile Vox credentials for formal outbound calls.`\r\n\r\n## Recommended Chinese long description\r\n\r\n`本 Skill 用于 TeddyMobile Vox 电话通知外呼场景。用户可以先通过 dry-run 模式体验自然语言解析效果，例如输入“给<接收手机号>发通知，明天10点开会”，Skill 会解析出接收号码、播报内容和通知次数，不会发起真实电话。推广包还可提供最多 10 次本地 trial 真实电话试用，试用电话会添加 TeddyMobile Vox 试用声明、进行本地内容安全检查、最多保留 100 字用户内容，并固定播报 1 次。确认效果后，用户可注册 TeddyMobile 开发者账号、创建 Vox 通知 bot，并配置 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER，用于正式电话外呼。适用于会议提醒、账单提醒、服务通知等单轮电话通知场景。`\r\n\r\n## Recommended English long description\r\n\r\n`This skill is designed for TeddyMobile Vox outbound phone notification scenarios. Users can first try dry-run mode before registration, for example by entering a request like \"notify <destination phone number> about tomorrow's 10 AM meeting\" and reviewing the parsed phone number, spoken notification text, and repeat count without placing a real call. Promotion builds can also include up to 10 local trial calls through the no-credential v2 endpoint with a TeddyMobile Vox trial disclaimer, local content safety checks, up to 100 characters of user-provided content, and one playback. After confirming the value, users can register a TeddyMobile developer account, create a Vox notification bot, and configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, and VOX_OUTBOUND_NUMBER to place formal outbound phone calls. It is a good fit for meeting reminders, billing reminders, service notifications, and other single-turn phone notification workflows.`\r\n\r\n## Recommended combined long description\r\n\r\n`本 Skill 用于 TeddyMobile Vox 电话通知外呼场景。用户可以先通过 dry-run 模式体验自然语言解析效果，例如输入“给<接收手机号>发通知，明天10点开会”，Skill 会解析出接收号码、播报内容和通知次数，不会发起真实电话。推广包还可提供最多 10 次本地 trial 真实电话试用，试用电话会添加 TeddyMobile Vox 试用声明、进行本地内容安全检查、最多保留 100 字用户内容，并固定播报 1 次。确认效果后，用户可访问 https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification 注册 TeddyMobile 开发者账号、创建 Vox 通知 bot，并配置 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER，用于正式电话外呼。适用于会议提醒、账单提醒、服务通知等单轮电话通知场景。 This skill is designed for TeddyMobile Vox outbound phone notification scenarios. Users can first try dry-run mode before registration, reviewing the parsed phone number, spoken notification text, and repeat count without placing a real call. Promotion builds can include up to 10 local trial calls through the no-credential v2 endpoint with a TeddyMobile Vox trial disclaimer, local content safety checks, up to 100 characters of user-provided content, and one playback. After confirming the value, users can register at https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification, create a Vox notification bot, and configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, and VOX_OUTBOUND_NUMBER for formal outbound phone calls. It is a good fit for meeting reminders, billing reminders, service notifications, and other single-turn notification workflows.`\r\n\r\n## Recommended tags\r\n\r\n- TeddyMobile\r\n- Vox\r\n- 电话通知\r\n- 外呼\r\n- Claw\r\n- OpenClaw\r\n- WorkBuddy\r\n- 语音通知\r\n- 企业集成\r\n\r\n## Recommended version\r\n\r\n`1.0.0`\r\n\r\n## Recommended release notes\r\n\r\nChinese:\r\n\r\n`发布 TeddyMobile Vox 电话通知正式版 Skill，支持自然语言通知解析、dry-run 脱敏输出、HMAC 签名外呼、环境变量与本地凭据文件加载、首次安装引导、本地演示和真实外呼播报验证。`\r\n\r\nEnglish:\r\n\r\n`Release the production version of the TeddyMobile Vox phone notification skill with natural-language notification parsing, HMAC-signed outbound calls, environment-variable and local credential-file loading, first-time setup guidance, local demo tools, and verified real-world playback.`\r\n\r\n## Recommended platform note\r\n\r\nUse this note when a marketplace asks for prerequisites or reviewer remarks:\r\n\r\nChinese:\r\n\r\n`未完成 TeddyMobile 注册时可使用 dry-run 体验 Skill 解析能力；推广包可通过免凭据 v2 接口提供最多 10 次本地 trial 真实电话试用，试用会添加声明、进行本地内容安全检查。正式外呼需要完成 TeddyMobile 平台注册、企业开通或审核、bot 配置和外呼能力准备。正式配置时请通过环境变量或本地凭据文件注入 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER 等参数。`\r\n\r\nEnglish:\r\n\r\n`Users can try this skill in dry-run mode before TeddyMobile registration. Promotion builds can include up to 10 local trial calls through the no-credential v2 endpoint, with a disclaimer and local content safety checks. Formal outbound calls require TeddyMobile platform registration, any required enterprise enablement or review, bot configuration, and outbound calling setup. Configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, VOX_OUTBOUND_NUMBER, and related values through environment variables or a local credentials file.`\r\n\r\nCombined:\r\n\r\n`未完成 TeddyMobile 注册时可使用 dry-run 体验 Skill 解析能力；推广包可通过免凭据 v2 接口提供最多 10 次本地 trial 真实电话试用，试用会添加声明、进行本地内容安全检查。正式外呼需要完成 TeddyMobile 平台注册、企业开通或审核、bot 配置和外呼能力准备。正式配置时请通过环境变量或本地凭据文件注入 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER 等参数。 Users can try this skill in dry-run mode before TeddyMobile registration. Promotion builds can include up to 10 local trial calls through the no-credential v2 endpoint, with a disclaimer and local content safety checks. Formal outbound calls require TeddyMobile platform registration, any required enterprise enablement or review, bot configuration, and outbound calling setup. Configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, VOX_OUTBOUND_NUMBER, and related values through environment variables or a local credentials file.`\r\n\r\n## Packaging checklist\r\n\r\n- ensure the zip contains the top-level folder `vox-phone-notification/`\r\n- include `SKILL.md`, `README.md`, `GET-STARTED.md`, `FIRST-SETUP.md`, `workflow.md`, and `skill.json`\r\n- include only example credentials, never real secrets\r\n- keep helper scripts and demo files inside `resources/`\r\n- upload `skills/vox-phone-notification.zip` or a hosted HTTPS copy of it\r\n\r\n## Suggested screenshots or media\r\n\r\nIf the marketplace supports screenshots, consider showing:\r\n\r\n- the first-time setup guide in `FIRST-SETUP.md`\r\n- the 30-second dry-run guide in `GET-STARTED.md`\r\n- the local demo command and output\r\n- the natural-language input example\r\n- the generated normalized notification payload\r\n\r\n## Related files\r\n\r\n- `SKILL.md`\r\n- `README.md`\r\n- `FIRST-SETUP.md`\r\n- `SKILLHUB.md`\r\n- `WORKBUDDY-RELEASE.md`\r\n- `skill.json`\n\nFile v1.0.5:resources/implementation-checklist.md\n\n# Vox Phone Notification Checklist\r\n\r\n## Platform Setup\r\n\r\n- Guide user to `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`\r\n- Enterprise account approved on TeddyMobile\r\n- `appId` received\r\n- `secret` received\r\n- Bot created in the TeddyMobile platform\r\n- `botid` recorded\r\n- Outbound number recorded\r\n- Network whitelist requirements confirmed if applicable\r\n\r\nOnly for callback-driven advanced mode:\r\n\r\n- HTTPS callback URL configured on the bot\r\n\r\n## Claw Runtime Integration\r\n\r\n- `send_phone_notification` tool or equivalent action defined\r\n- Input validation for `callee` and business payload implemented\r\n- `requestId` generated or injected by caller\r\n- Notification context persisted for callback lookup when needed\r\n- Notification content designed for single-turn playback only\r\n\r\n## Optional Vox Callback Handling\r\n\r\n- Callback route accepts `POST` JSON\r\n- Request body fields mapped to runtime context\r\n- First-turn empty `message` handled\r\n- Response uses `text/event-stream`\r\n- Stream emits `data: {json}` frames only\r\n- Stream always ends with `data: [DONE]`\r\n- Closed or interrupted connections handled safely\r\n- No multi-turn follow-up logic added unless explicitly required\r\n\r\n## Outbound API\r\n\r\n- GMT date generation implemented\r\n- URI parameter sorting implemented for signing\r\n- Official canonical signing string verified\r\n- Final trailing newline included in canonical string\r\n- HMAC-SHA256 signature implemented\r\n- Required HMAC headers added\r\n- trial `POST /vox/v2/outbound` no-credential client implemented\r\n- formal `POST /vox/v1/outbound` signed client implemented\r\n- Notification-only payload supports `extra.notification.text`\r\n- Notification-only payload supports `extra.notification.times`\r\n\r\n## Verification\r\n\r\n- Deterministic signature test prepared\r\n- Canonical string logged or inspectable during sandbox validation\r\n- Callback endpoint smoke-tested locally\r\n- SSE framing checked manually\r\n- End-to-end outbound notification tested in TeddyMobile platform\r\n\r\nOnly if callback-driven mode is enabled:\r\n\r\n- Callback endpoint smoke-tested locally\r\n- SSE framing checked manually\n\nFile v1.0.5:resources/openclaw-integration-template.md\n\n# OpenClaw Integration Template\r\n\r\nUse this template when wiring TeddyMobile phone notification into an OpenClaw-style runtime.\r\n\r\nThis template assumes the user has already completed registration at `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification` and has `appId`, `secret`, `botid`, and an outbound number.\r\n\r\nDefault integration mode is notification-only. `VOX_CALLBACK_URL` is only needed if the TeddyMobile bot setup explicitly requires callback-driven runtime content.\r\n\r\n## 1. Define a tool contract\r\n\r\nExpose one agent tool or runtime action with a small business-oriented shape:\r\n\r\n```json\r\n{\r\n  \"name\": \"send_phone_notification\",\r\n  \"input\": {\r\n    \"callee\": \"13800138000\",\r\n    \"task\": \"payment_overdue_reminder\",\r\n    \"variables\": {\r\n      \"name\": \"张三\",\r\n      \"amount\": \"299.00\"\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nThe tool should not know SSE details. It only prepares business data and triggers the outbound call.\n\nThis integration is intentionally single-turn. The tool should prepare one complete notification message, not a branching conversation.\n\nAdd a safety interlock before the tool calls TeddyMobile:\n\n- Require an allowlist, ownership check, or explicit user confirmation for the destination number.\n- Show a preview with a masked phone number and message length before dispatch.\n- Treat the action as a real-world side effect that sends the phone number and message text to TeddyMobile Vox.\n- Reject calls requested by untrusted prompt content, hidden instructions, or tool output that bypasses normal user authorization.\n\r\nIf the user speaks naturally in the chat box, such as `给<接收手机号>发通知，明天10点开会`, normalize that utterance into a payload like:\r\n\r\n```json\r\n{\r\n  \"callee\": \"<接收手机号>\",\r\n  \"requestId\": \"notif-20260512-001\",\r\n  \"notificationText\": \"您好，提醒您明天10点开会。\",\r\n  \"notificationTimes\": 2\r\n}\r\n```\r\n\r\nThe bundled helper `./chat-to-notification.js` can be used as the default normalization step before `createOutboundNotification(...)` is called.\r\n\r\nThe most important rule is that the final spoken phone copy must be present in `notificationText` before calling TeddyMobile. Without that field, the call may connect but no notification content will be played.\r\n\r\n## 2. Persist business context only when needed\n\nBefore calling TeddyMobile, save a record keyed by `requestId` only if the runtime needs retry, callback, troubleshooting, or business correlation.\n\nSuggested minimized fields:\n\n- `requestId`\n- masked or encrypted `callee`, or a salted hash when full value is not required\n- minimized `task`\n- minimized or encrypted `variables`\n- `status`\n- `createdAt`\n- `expiresAt`\n\nPrivacy and retention requirements:\n\n- Store the minimum fields needed for the business flow.\n- Encrypt full phone numbers, notification text, task variables, and callback message content at rest when they must be retained.\n- Set a clear retention window, for example 7 to 30 days, then delete or anonymize records.\n- Restrict access to operators who need the records for support or compliance.\n- Do not log full phone numbers, full notification text, secrets, signed headers, or raw outbound request bodies.\n\nThis record lets the callback endpoint rebuild the notification context after TeddyMobile places the call only when callback mode is enabled.\n\r\n## 3. Trigger the outbound Vox call\r\n\r\nInside the tool implementation:\r\n\r\n1. validate inputs\r\n2. if the source is a chat utterance, extract the phone number and final notification sentence\r\n3. create `requestId`\r\n4. confirm recipient authorization or match the callee against an allowlist\n5. persist minimized notification context only when needed\n6. call `createOutboundNotification(...)`\n7. return a small result to the agent\n\r\nSuggested result:\r\n\r\n```json\r\n{\r\n  \"ok\": true,\r\n  \"requestId\": \"notif-20260511-001\",\r\n  \"callee\": \"138****8000\",\n  \"status\": \"queued\"\r\n}\r\n```\r\n\r\n## 4. Optional callback request handling\r\n\r\nIf callback-driven mode is enabled, the callback route should:\r\n\r\n1. read `requestid`, `callid`, `turn`, `message`\r\n2. load saved context by `requestid`\r\n3. build a structured prompt or state object for the Claw runtime\r\n4. generate one final outbound notification script\r\n5. stream that textual response back as SSE and end with `[DONE]`\r\n\r\n## 5. Suggested runtime prompt shape\r\n\r\nPass structured data instead of raw transport details whenever possible:\r\n\r\n```json\r\n{\r\n  \"channel\": \"phone\",\r\n  \"mode\": \"outbound_notification\",\r\n  \"requestId\": \"notif-20260511-001\",\r\n  \"callId\": \"call-123\",\r\n  \"turn\": 1,\r\n  \"recipient\": {\r\n    \"phone\": \"13800138000\"\r\n  },\r\n  \"notification\": {\r\n    \"task\": \"payment_overdue_reminder\",\r\n    \"variables\": {\r\n      \"name\": \"张三\",\r\n      \"amount\": \"299.00\"\r\n    }\r\n  },\r\n  \"latestUserUtterance\": \"\"\r\n}\r\n```\r\n\r\n## 6. Operational considerations\r\n\r\n- Use HTTPS callback URLs in production.\r\n- Avoid logging full secrets.\r\n- Consider idempotency for duplicate `requestId` submissions.\r\n- Record platform response payloads for troubleshooting.\r\n- Be defensive about empty first-turn `message` values.\r\n- Keep the phone copy concise because this scenario does not require multi-turn dialogue.\n\nFile v1.0.5:skill-card.md\n\n## Description: <br>\nConverts natural-language notification requests into TeddyMobile Vox phone notifications with no-credential dry-run parsing, optional confirmed trial calls, and registered live calling. <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, solution teams, and Claw operators use this skill to parse a phone notification request, preview it safely, and then place TeddyMobile Vox outbound notification calls after trial confirmation or formal platform registration. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Trial and live modes place real outbound phone calls and transmit the destination phone number plus message text to TeddyMobile Vox. <br>\nMitigation: Start with dry-run, review the masked preview, use only numbers the user is authorized to contact, and require the explicit --confirm-real-call flag before any trial or live call. <br>\nRisk: Live TeddyMobile credentials can be exposed if pasted into chat, logs, tickets, screenshots, or shared documents. <br>\nMitigation: Configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, and VOX_OUTBOUND_NUMBER through environment variables, a local secrets manager, or a local credentials file, and keep VOX_SECRET out of chat and logs. <br>\nRisk: No-credential trial calls can still create consent, anti-spam, carrier, platform, or compliance obligations. <br>\nMitigation: Limit trial use to the documented confirmed flow, apply the local content guard and trial disclaimer, and move ongoing use to formal TeddyMobile registration and bot configuration. <br>\n\n\n## Reference(s): <br>\n- [ClawHub release page](https://clawhub.ai/ziliangzhu/teddymobile-vox-phone-notification) <br>\n- [README](artifact/README.md) <br>\n- [Get Started](artifact/GET-STARTED.md) <br>\n- [First-Time Setup Guide](artifact/FIRST-SETUP.md) <br>\n- [Execution workflow](artifact/workflow.md) <br>\n- [OpenClaw integration template](artifact/resources/openclaw-integration-template.md) <br>\n- [TeddyMobile Vox registration](https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification) <br>\n- [TeddyMobile Vox outbound endpoint](https://vox.teddymobile.cn/vox/v2/outbound) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration, JSON, API Calls] <br>\n**Output Format:** [Markdown instructions with inline shell commands and JSON examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Dry-run output masks phone numbers and notification text; trial and live modes can submit real phone notifications only after explicit confirmation.] <br>\n\n## Skill Version(s): <br>\n1.0.5 (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.5:SKILLHUB.md\n\n# SkillHub Publishing Notes\r\n\r\nUse this file when publishing `vox-phone-notification` to `https://skillhub.cn`.\r\n\r\n## Recommended listing position\r\n\r\nPublish this skill as a formal TeddyMobile Vox notification skill for developers, solution teams, and advanced operators who have completed TeddyMobile platform onboarding.\r\n\r\nRecommended positioning:\r\n\r\n- TeddyMobile Vox phone notification skill\r\n- no-credential dry-run experience before platform registration\r\n- promotion-period trial calls through the no-credential v2 endpoint, with a disclaimer and content safety checks\r\n- Claw / OpenClaw / WorkBuddy outbound call notification integration\r\n- validated outbound playback after TeddyMobile platform registration and bot configuration\r\n\r\n## What is verified\r\n\r\n- skill package structure is complete\r\n- no-credential dry-run parsing is available before registration\r\n- promotion trial mode supports local content safety checks and local usage counter\r\n- natural-language parsing helper works\r\n- TeddyMobile HMAC signing works\r\n- outbound request submission succeeds\r\n- request body includes `extra.notification.text` when `notificationText` is provided\r\n- live outbound calls have been tested successfully with audible playback\r\n\r\n## Release prerequisite\r\n\r\nDry-run use does not require TeddyMobile platform registration. Promotion packages can include up to 10 local trial calls through the no-credential v2 endpoint, with a trial disclaimer and local content safety checks. Successful formal outbound calling requires the operator to complete TeddyMobile platform registration, bot configuration, and outbound capability setup before using the skill in production.\r\n\r\nPossible platform-side requirements:\r\n\r\n- notification bot type must be enabled for the chosen `botid`\r\n- direct playback from `extra.notification.text` must be supported\r\n- callback/SSE mode may still be required for some bot configurations\r\n\r\n## Recommended listing title\r\n\r\n`TeddyMobile Vox 电话通知 Skill`\r\n\r\n## Recommended short description\r\n\r\n`把一句话变成电话提醒：未注册 TeddyMobile 也可先 dry-run 体验解析；推广包最多可通过免凭据 v2 接口试用 10 次真实电话，试用电话会添加声明、进行本地内容安全检查，正式外呼需完成 Vox 注册和 bot 配置。 Turn one sentence into a phone notification: try dry-run parsing before TeddyMobile registration, use up to 10 promotion trial calls when included, and complete Vox registration and bot setup for formal outbound calls.`\r\n\r\n## Recommended long description\r\n\r\n`本 Skill 用于 TeddyMobile Vox 电话通知外呼场景。用户可以先通过 dry-run 模式体验自然语言解析效果，例如输入“给<接收手机号>发通知，明天10点开会”，Skill 会解析出接收号码、播报内容和通知次数，不会发起真实电话。推广包还可提供最多 10 次本地 trial 真实电话试用，试用电话会添加 TeddyMobile Vox 试用声明、进行本地内容安全检查、最多保留 100 字用户内容，并固定播报 1 次。确认效果后，用户可访问 https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification 注册 TeddyMobile 开发者账号、创建 Vox 通知 bot，并配置 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER，用于正式电话外呼。适用于会议提醒、账单提醒、服务通知等单轮电话通知场景。 This skill is designed for TeddyMobile Vox outbound phone notification scenarios. Users can first try dry-run mode before registration, reviewing the parsed phone number, spoken notification text, and repeat count without placing a real call. Promotion builds can include up to 10 local trial calls through the no-credential v2 endpoint with a TeddyMobile Vox trial disclaimer, local content safety checks, up to 100 characters of user-provided content, and one playback. After confirming the value, users can register at https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification, create a Vox notification bot, and configure VOX_APP_ID, VOX_SECRET, VOX_BOT_ID, and VOX_OUTBOUND_NUMBER for formal outbound phone calls. It is a good fit for meeting reminders, billing reminders, service notifications, and other single-turn notification workflows.`\r\n\r\n## Recommended tags\r\n\r\n- TeddyMobile\r\n- Vox\r\n- 电话通知\r\n- Claw\r\n- WorkBuddy\r\n- OpenClaw\r\n- 语音通知\r\n- 商用发布\r\n\r\n## Recommended usage note\r\n\r\nState clearly in the listing: `用户可先 dry-run 体验解析；推广包可通过免凭据 v2 接口提供最多 10 次真实电话试用，试用电话会添加声明、进行本地内容安全检查；正式外呼需要完成 TeddyMobile 平台注册和 Vox bot 配置。本 Skill 适合开发者、解决方案工程师或需要将 TeddyMobile Vox 集成到自有运行时的高级用户。 Users can try dry-run parsing first; promotion builds can provide up to 10 real trial calls through the no-credential v2 endpoint with a disclaimer and local content safety checks; formal outbound calls require TeddyMobile platform registration and Vox bot configuration. This skill is intended for developers, solution engineers, or advanced users integrating TeddyMobile Vox into their own runtime.`\r\n\r\n## Recommended credential note\r\n\r\nAdd a short note in the listing or reviewer remarks explaining the credential model:\r\n\r\n- this skill supports environment variables first: `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, `VOX_OUTBOUND_NUMBER`\r\n- it also supports local fallback from `~/.teddymobile/credentials.json`\r\n- `VOX_CREDENTIALS_FILE` can override the default local credential file path\r\n- real secrets are not bundled in the uploaded zip; only an example credential file is included\r\n\r\nSuggested Chinese wording:\r\n\r\n`本 Skill 采用环境变量优先、本地凭据文件兜底的配置方式。支持通过 VOX_APP_ID、VOX_SECRET、VOX_BOT_ID、VOX_OUTBOUND_NUMBER 直接注入配置；也支持从 ~/.teddymobile/credentials.json 读取本地凭据，并可通过 VOX_CREDENTIALS_FILE 自定义凭据文件路径。上传包中仅包含示例凭据文件，不包含任何真实密钥。`\r\n\r\n## Suggested upload artifact\r\n\r\nUpload the packaged zip file:\r\n\r\n`skills/vox-phone-notification.zip`\n\nFile v1.0.5:WORKBUDDY-RELEASE.md\n\n# WorkBuddy Release Guide\n\nUse this guide when you want to publish `vox-phone-notification` as a downloadable WorkBuddy Claw skill package.\n\n## Release goal\n\nPrepare one hosted zip file and one installer link.\n\n## Package contents\n\nThe published zip should contain this root structure:\n\n```text\nvox-phone-notification/\n  SKILL.md\n  workflow.md\n  skill.json\n  README.md\n  SKILLHUB.md\n  WORKBUDDY.md\n  WORKBUDDY-RELEASE.md\n  examples/\n  resources/\n```\n\n## Build the zip\n\nFrom the repository root, package the skill folder as a zip file named:\n\n```text\nvox-phone-notification.zip\n```\n\nRecommended archive rule:\n\n- keep the top-level folder name `vox-phone-notification`\n- do not zip only the inner files\n- do not exclude `SKILL.md` or `workflow.md`\n\n## Host the zip\n\nUpload the zip to a stable HTTPS URL, for example:\n\n```text\nhttps://your-domain.example/skills/vox-phone-notification.zip\n```\n\nRequirements:\n\n- public HTTPS access\n- direct download without login\n- stable filename and URL\n\n## Build the WorkBuddy installer link\n\nUse this template:\n\n```text\nworkbuddy://codebuddy-ide/skill/install?skillname=vox-phone-notification&downloadurl=<URL_ENCODED_ZIP_URL>&channelType=custom&injectid=true\n```\n\nExample:\n\n```text\nworkbuddy://codebuddy-ide/skill/install?skillname=vox-phone-notification&downloadurl=https%3A%2F%2Fyour-domain.example%2Fskills%2Fvox-phone-notification.zip&channelType=custom&injectid=true\n```\n\n## Optional landing page link\n\nIf you want to distribute an HTTP link before jumping into WorkBuddy, keep a simple page that shows:\n\n- skill name\n- what it does\n- one \"Install in WorkBuddy\" button\n- one backup manual download link for the zip\n\n## Pre-release checklist\n\n- `SKILL.md` present at skill root\n- `workflow.md` present at skill root\n- `skill.json` present at skill root\n- zip contains top-level `vox-phone-notification/` folder\n- hosted URL can be downloaded in browser\n- installer link contains correct URL-encoded `downloadurl`\n- required env list reflects notification-only mode by default\n- TeddyMobile platform registration and bot configuration have been completed for the target production environment\n- at least one real outbound call has been verified with audible notification playback\n\n## Post-release verification\n\n1. open the hosted zip URL directly in browser\n2. confirm download succeeds\n3. open the WorkBuddy installer link on a machine with WorkBuddy installed\n4. confirm WorkBuddy recognizes the skill package\n5. confirm the skill content loads and references the expected workflow files\n\nArchive v1.0.4: 25 files, 47041 bytes\n\nFiles: examples/send-phone-notification-input.json (239b), FIRST-SETUP.md (4935b), GET-STARTED.md (3349b), POST-TRIAL-GUIDE.md (1746b), PUBLISHING.md (9847b), README.md (14869b), resources/callback-server-example.js (1672b), resources/chat-to-notification.js (2842b), resources/credentials-loader.js (1988b), resources/credentials.example.json (211b), resources/hmac-outbound-client.js (3973b), resources/implementation-checklist.md (2168b), resources/openclaw-integration-template.md (3875b), resources/run-demo.js (7647b), resources/trial-content-guard.js (2637b), resources/trial-state.js (1578b), skill-card.md (2764b), skill.json (1671b), SKILL.md (13536b), SKILLHUB.md (6296b), workbuddy-install-link-template.txt (142b), WORKBUDDY-RELEASE.md (2528b), WORKBUDDY.md (1988b), workflow.md (17878b), _meta.json (153b)\n\nFile v1.0.4:SKILL.md\n\n---\r\nname: vox-phone-notification\r\ndescription: 将自然语言通知请求转换为 TeddyMobile Vox 电话通知，先进行免凭据 dry-run 解析，再让用户选择最多 10 次免凭据 v2 真实试用外呼或正式注册配置。 Convert natural-language notification requests into TeddyMobile Vox phone notifications, starting with no-credential dry-run parsing, then letting users choose up to 10 no-credential v2 real trial calls or formal registration and setup.\r\n---\r\n\r\n本 Skill 是可安装到 Claw 的技能包。`skill.json` 用于发现元数据；首次体验请先阅读 `GET-STARTED.md`；通用安装说明请阅读 `README.md`；WorkBuddy 相关打包假设请阅读 `WORKBUDDY.md`。\r\nThis skill is packaged as a Claw-installable folder. Use `skill.json` for discovery metadata, read `GET-STARTED.md` for the fastest first run, read `README.md` for general installation expectations, read `POST-TRIAL-GUIDE.md` for mandatory post-trial response behavior, and read `WORKBUDDY.md` for WorkBuddy-specific packaging assumptions.\r\n\r\n默认首次使用模式是 `dry-run`：只解析用户的电话通知请求，不加载凭据，也不发起真实外呼。即使命令没有提供任何模式参数，也必须视为 dry-run。用户明确选择真实试用电话后才运行 `--trial`；用户明确说明已完成 TeddyMobile 注册并要求正式外呼后，才可运行 `--live` 并读取用户自己的 `appId`、`secret`、`botid` 和外呼主叫号码。`VOX_CALLBACK_URL` 是可选项，仅用于 callback 驱动的高级流程。\r\nDefault first-use mode is `dry-run`: parse the user's phone notification request without loading credentials or placing a call. Even when no mode flag is provided, treat the run as dry-run. Run `--trial` only after the user explicitly chooses up to 10 real trial calls. Run `--live` and load user-owned `appId`, `secret`, `botid`, and outbound number only after the user explicitly says TeddyMobile registration is complete and requests formal outbound calling. `VOX_CALLBACK_URL` is optional and only used for callback-driven advanced flows.\r\n\r\n## 强制首次使用流程 / Mandatory First-Use Flow\r\n\r\n当用户要求使用、测试、试用、运行、执行本 Skill，或发送电话通知时，除非用户明确要求使用自己的凭据进入正式 live 模式，否则必须按以下顺序执行：\r\nWhen the user asks to use, test, try, run, execute, or send a phone notification with this skill, follow this exact order unless the user explicitly asks for live mode with their own credentials:\r\n\r\n1. 先运行或引导用户运行免凭据 dry-run：\r\n   Run or instruct no-credential dry-run first:\r\n   `node \"skills/vox-phone-notification/resources/run-demo.js\" \"<user instruction>\" --dry-run`\r\n2. 运行 dry-run 前必须先确认用户指令中同时包含接收手机号和通知内容。如果缺少接收手机号，先引导用户填写需要通知的电话；如果缺少通知内容，先引导用户填写电话接通后要播报的内容。不要用文档示例号码或示例内容代替用户输入。\r\n   Before running dry-run, confirm the user instruction includes both the destination phone number and notification content. If the destination phone number is missing, ask the user to provide the phone number to notify. If notification content is missing, ask the user to provide the spoken content for the call. Do not substitute documentation sample numbers or sample content for user input.\r\n3. 如果 dry-run 成功且解析结果有效，必须让用户在以下两个下一步中选择：\r\n   If dry-run succeeds and the parsed request is valid, ask the user to choose one of these next steps:\r\n   - `试用真实电话`: 使用免凭据 v2 试用接口运行 trial 外呼。 Run the promotion trial call through the no-credential v2 trial endpoint:\r\n   `node \"skills/vox-phone-notification/resources/run-demo.js\" \"<user instruction>\" --trial`\r\n   - `正式注册并配置`: 引导用户完成 TeddyMobile 注册和正式 live 凭据配置。 Guide the user to TeddyMobile registration and formal live credential setup.\r\n4. 用户选择试用前，不要运行 `--trial`。用户选择正式注册或说明已有凭据前，不要询问正式凭据。\r\n   Do not run `--trial` until the user chooses trial. Do not ask for formal credentials until the user chooses formal registration or says they already have credentials.\r\n   正式外呼必须显式使用 `--live`。不要在 dry-run 成功后自动执行不带模式参数的 live 命令。\r\n   Formal outbound calling must use the explicit `--live` flag. Do not automatically run an unflagged live command after dry-run succeeds.\r\n5. 如果 trial 因本机已试用或内容安全检查失败而被拦截，说明拦截结果，并继续给出正式注册引导。\r\n   If trial mode is blocked because this machine already used the free trial or content safety rejects the text, report that result and still continue to registration guidance.\r\n   如果 trial 成功，最终回复不能只总结试用结果；必须立刻复述 `POST-TRIAL-GUIDE.md` 中的三选一正式注册配置引导。\r\n   If trial succeeds, the final response must not only summarize the trial result; it must immediately restate the three-option formal setup guide from `POST-TRIAL-GUIDE.md`.\r\n6. 告知用户：长期正式使用需要完成 TeddyMobile 注册。\r\n   Tell the user that formal ongoing use requires TeddyMobile registration:\r\n   `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`\r\n   展示该链接时必须让它足够明显，并附上简短注册流程：访问网站 -> 创建账号 -> 正式接入并获取 APPID / SecretID -> 创建通知类 bot 并获取呼出号码和 BotID。\r\n   When showing this link, make it highly visible and include the short registration flow: visit the site -> create an account -> complete formal access and get APPID / SecretID -> create a notification bot and get the outbound number plus BotID.\r\n   然后必须提供正式注册配置的三选一操作引导：`配置引导`、`稍后发送配置参数`、`直接列表填写需要的参数`。\r\n   Then present a required three-option formal setup guide: `配置引导`, `稍后发送配置参数`, or `直接列表填写需要的参数`.\r\n7. 只有当用户明确选择正式 live 模式，或说明已经有 TeddyMobile 凭据时，才询问 `VOX_APP_ID`、`VOX_SECRET`、`VOX_BOT_ID` 或 `VOX_OUTBOUND_NUMBER`。\r\n   Only ask for `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, or `VOX_OUTBOUND_NUMBER` when the user explicitly chooses formal live mode or says they already have TeddyMobile credentials.\r\n\r\n首次 dry-run 或推广 trial 流程中，不要加载 `resources/credentials-loader.js`，不要检查 `~/.teddymobile/credentials.json`，也不要询问用户自有凭据。\r\nDo not load `resources/credentials-loader.js`, do not inspect `~/.teddymobile/credentials.json`, and do not ask for user-owned credentials during first-use dry-run or promotion trial flow.\r\n\r\n如果工具或代理已经运行了一次 dry-run，不要假设用户有本地凭据；必须先展示二选一：`试用真实电话` 或 `正式注册并配置`。\r\nIf a tool or agent has already run dry-run, do not assume the user has local credentials; first present the two-option choice: `试用真实电话` or `正式注册并配置`.\r\n\r\ndry-run 成功后，不要停下来询问正式 TeddyMobile 凭据。必须给出明确的二选一：试用真实电话，或正式注册并配置。\r\nDo not stop after dry-run by asking for formal TeddyMobile credentials. Dry-run success must be followed by a clear two-option choice: trial phone call or formal registration.\r\n\r\n## 首次使用 / First Use\r\n\r\n如果用户尚未完成 TeddyMobile 平台注册，请从 dry-run 模式开始：\r\nStart with dry-run mode if TeddyMobile platform registration is not complete yet:\r\n\r\n1. 运行内置 dry-run demo，免凭据验证自然语言解析效果；终端输出必须脱敏展示手机号和通知内容。 Run the bundled dry-run demo to verify natural-language parsing without credentials; terminal output must mask the phone number and notification content.\r\n2. dry-run 成功后向用户提供最多 10 次 `--trial` 真实试用外呼。Trial 模式使用免凭据 `POST https://vox.teddymobile.cn/vox/v2/outbound` 试用接口、添加试用声明、将用户内容限制在 100 字以内、执行本地内容安全检查、将 `notificationTimes` 固定为 `1`，并记录本地试用次数，最多 10 次。 Offer up to 10 `--trial` calls after dry-run succeeds. Trial mode uses the no-credential `POST https://vox.teddymobile.cn/vox/v2/outbound` trial endpoint, prepends a trial disclaimer, limits user-provided content to 100 characters, applies local content safety checks, fixes `notificationTimes` to `1`, and records a local trial usage counter.\r\n3. 如果 dry-run 或 trial 效果符合预期，引导用户访问 `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`。 If the dry-run or trial result matches the intended phone notification, go to `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification`.\r\n4. 完成企业注册、账号激活或必要审核。 Complete enterprise registration, activation, or any required approval process.\r\n5. 创建或配置用于外呼通知的 TeddyMobile notification bot。 Create or configure the TeddyMobile notification bot you want to use for outbound calls.\r\n6. 记录平台返回的配置值。 Record the values returned by the platform:\r\n   - `VOX_APP_ID`\r\n   - `VOX_SECRET`\r\n   - `VOX_BOT_ID`\r\n   - `VOX_OUTBOUND_NUMBER`\r\n\r\n正式注册配置的简短说明：访问 TeddyMobile Vox 网站，创建并激活账号，完成正式接入后记录 `APPID` / `SecretID`，然后创建通知类 bot，记录呼出号码和 `BotID`。这些值会对应到本地配置中的 `VOX_APP_ID`、`VOX_SECRET`、`VOX_BOT_ID`、`VOX_OUTBOUND_NUMBER`。\r\nShort formal registration summary: visit the TeddyMobile Vox site, create and activate an account, complete formal access and record `APPID` / `SecretID`, then create a notification bot and record the outbound number and `BotID`. These values map to local config keys `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, and `VOX_OUTBOUND_NUMBER`.\r\n\r\n正式注册配置三选一：\r\n1. `配置引导`: 引导用户访问官网，完成创建账号、正式接入、创建通知类 bot，并提醒记录 `APPID`、`SecretID`、`BotID`、呼出号码。\r\n2. `稍后发送配置参数`: 告诉用户拿到参数后回来发送 `APPID`、`SecretID`、`BotID`、呼出号码即可继续。\r\n3. `直接列表填写需要的参数`: 给出填写列表：`APPID =`、`SecretID =`、`BotID =`、`呼出号码 =`。\r\n\r\nFormal setup choices:\r\n1. `配置引导`: guide the user to the official site, account creation, formal access, notification bot creation, and remind them to record `APPID`, `SecretID`, `BotID`, and outbound number.\r\n2. `稍后发送配置参数`: tell the user to return later with `APPID`, `SecretID`, `BotID`, and outbound number.\r\n3. `直接列表填写需要的参数`: provide this fill-in list: `APPID =`, `SecretID =`, `BotID =`, `呼出号码 =`.\r\n7. 通过环境变量或 `~/.teddymobile/credentials.json` 等本地文件配置这些凭据。 Configure those credentials with environment variables or a local file such as `~/.teddymobile/credentials.json`.\r\n8. 回到本 Skill，运行正式 live 本地 demo，或将外呼 helper 集成到 Claw runtime。 Return to this skill and run the live local demo or integrate the outbound helper into your Claw runtime.\r\n\r\n如果平台凭据尚未准备好，请先提供 dry-run，而不是卡在注册或凭据输入上。Trial 模式使用免凭据 v2 试用接口。正式真实外呼仍然需要完成 TeddyMobile 平台注册和 bot 配置。\r\nIf these platform credentials are not ready yet, offer dry-run first instead of blocking on registration. Trial mode uses the no-credential v2 trial endpoint. Formal real outbound calls still require TeddyMobile platform onboarding and bot configuration.\r\n\r\n30 秒首次体验请阅读 `GET-STARTED.md`。完整首次安装引导请阅读 `FIRST-SETUP.md`。\r\nFor a 30-second first run, read `GET-STARTED.md`. For a dedicated first-time onboarding walkthrough, read `FIRST-SETUP.md`.\r\n\r\n跨平台上架文案和 marketplace 发布说明请阅读 `PUBLISHING.md`。\r\nFor cross-platform listing copy and marketplace release notes, read `PUBLISHING.md`.\r\n\r\n正式 live 模式的凭据加载遵循标准本地模式：\r\nCredential loading now follows a standard local pattern:\r\n\r\n- 优先使用环境变量：`VOX_APP_ID`、`VOX_SECRET`、`VOX_BOT_ID`、`VOX_OUTBOUND_NUMBER`。 Use environment variables first: `VOX_APP_ID`, `VOX_SECRET`, `VOX_BOT_ID`, `VOX_OUTBOUND_NUMBER`.\r\n- 如果环境变量缺失，则回退读取 `~/.teddymobile/credentials.json`。 Fall back to `~/.teddymobile/credentials.json`.\r\n- 可通过 `VOX_CREDENTIALS_FILE` 覆盖默认本地凭据文件路径。 Optionally override the file path with `VOX_CREDENTIALS_FILE`.\r\n- 内置参考实现为 `resources/credentials-loader.js` 和 `resources/credentials.example.json`。 Use `resources/credentials-loader.js` and `resources/credentials.example.json` as the bundled reference implementation.\r\n\r\n完整阅读并遵循 `./workflow.md`。\r\nRead `./workflow.md` completely and follow it.\n\nFile v1.0.4:README.md\n\n# vox-phone-notification\r\n\r\nInstallable Claw skill for TeddyMobile Vox single-turn outbound phone notifications.\r\n\r\nThis package supports TeddyMobile Vox outbound notification integration with validated HMAC signing, natural-language-to-notification parsing, local demo tools, and successful real-world phone playback after platform registration and bot configuration are completed.\r\n\r\n## Quick Start\r\n\r\nFor first-time users, start with dry-run mode before platform registration:\r\n\r\n1. Run a no-credential dry-run:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\n2. Confirm the parsed output contains masked parsing results:\r\n   - masked destination phone number\r\n   - masked spoken notification text length\r\n   - notification repeat count\r\n3. Optionally run up to 10 promotion-period trial calls through the no-credential v2 trial endpoint:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notifi\n\nArchive v1.0.3: 25 files, 46884 bytes\n\nFiles: examples/send-phone-notification-input.json (239b), FIRST-SETUP.md (4977b), GET-STARTED.md (3452b), POST-TRIAL-GUIDE.md (1746b), PUBLISHING.md (9865b), README.md (15264b), resources/callback-server-example.js (1672b), resources/chat-to-notification.js (2956b), resources/credentials-loader.js (2299b), resources/credentials.example.json (211b), resources/hmac-outbound-client.js (3116b), resources/implementation-checklist.md (2088b), resources/openclaw-integration-template.md (3875b), resources/run-demo.js (9059b), resources/trial-content-guard.js (2728b), resources/trial-credentials.js (762b), resources/trial-state.js (1578b), skill.json (1704b), SKILL.md (13723b), SKILLHUB.md (6290b), workbuddy-install-link-template.txt (142b), WORKBUDDY-RELEASE.md (2528b), WORKBUDDY.md (1988b), workflow.md (17743b), _meta.json (153b)\n\nArchive v1.0.2: 25 files, 46366 bytes\n\nFiles: examples/send-phone-notification-input.json (220b), FIRST-SETUP.md (4959b), GET-STARTED.md (3414b), POST-TRIAL-GUIDE.md (1746b), PUBLISHING.md (9838b), README.md (15170b), resources/callback-server-example.js (1672b), resources/chat-to-notification.js (2742b), resources/credentials-loader.js (2299b), resources/credentials.example.json (211b), resources/hmac-outbound-client.js (3116b), resources/implementation-checklist.md (2088b), resources/openclaw-integration-template.md (3863b), resources/run-demo.js (9005b), resources/trial-content-guard.js (2728b), resources/trial-credentials.js (762b), resources/trial-state.js (1578b), skill.json (1704b), SKILL.md (13022b), SKILLHUB.md (6284b), workbuddy-install-link-template.txt (142b), WORKBUDDY-RELEASE.md (2528b), WORKBUDDY.md (1988b), workflow.md (17106b), _meta.json (153b)\n\nArchive v1.0.1: 24 files, 40426 bytes\n\nFiles: examples/send-phone-notification-input.json (220b), FIRST-SETUP.md (4834b), GET-STARTED.md (2560b), PUBLISHING.md (9148b), README.md (14193b), resources/callback-server-example.js (1672b), resources/chat-to-notification.js (2742b), resources/credentials-loader.js (2299b), resources/credentials.example.json (211b), resources/hmac-outbound-client.js (3116b), resources/implementation-checklist.md (2016b), resources/openclaw-integration-template.md (3791b), resources/run-demo.js (5245b), resources/trial-content-guard.js (2728b), resources/trial-credentials.js (762b), resources/trial-state.js (1102b), skill.json (1594b), SKILL.md (8955b), SKILLHUB.md (5832b), workbuddy-install-link-template.txt (142b), WORKBUDDY-RELEASE.md (2528b), WORKBUDDY.md (1988b), workflow.md (15491b), _meta.json (153b)\n\nArchive v1.0.0: 20 files, 28856 bytes\n\nFiles: examples/send-phone-notification-input.json (220b), FIRST-SETUP.md (3367b), PUBLISHING.md (5247b), README.md (11853b), resources/callback-server-example.js (1672b), resources/chat-to-notification.js (2742b), resources/credentials-loader.js (2299b), resources/credentials.example.json (211b), resources/hmac-outbound-client.js (3116b), resources/implementation-checklist.md (1959b), resources/openclaw-integration-template.md (3669b), resources/run-demo.js (1066b), skill.json (1062b), SKILL.md (2120b), SKILLHUB.md (2909b), workbuddy-install-link-template.txt (142b), WORKBUDDY-RELEASE.md (2528b), WORKBUDDY.md (1988b), workflow.md (12508b), _meta.json (153b)","readmeExcerpt":"Skill: TeddyMobile Vox Phone Notification Owner: ziliangzhu Summary: 将自然语言通知请求转换为 TeddyMobile Vox 电话通知，先进行免凭据 dry-run 解析，再让用户选择最多 10 次免凭据 v2 真实试用外呼或正式注册配置。 Convert natural-language notification requests into TeddyMobile Vox ph... Tags: latest:1.0.6 Version history: v1.0.6 | 2026-06-05T07:32:48.122Z | user - Added analytics integration files: analytics-client.js, analytics_client.js, and analytics_manifest.json. - Rem","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"试用外呼已提交成功。若你希望长期使用 TeddyMobile Vox 电话通知，请选择正式注册配置的下一步：\n\n1. 配置引导\n   我会引导你去 TeddyMobile Vox 官网完成注册、正式接入、创建通知类 bot，并列出每一步需要记录的参数。\n\n2. 稍后配置本地参数\n   你可以稍后把 APPID / SecretID / BotID / 呼出号码配置到环境变量、本地 secrets manager 或本地凭据文件，然后回来告诉我已配置完成。不要在聊天中发送真实密钥。\n\n3. 查看本地配置模板\n   如果你已经有参数，请在本机按下面键名配置，不要把真实值粘贴到聊天中：\n   VOX_APP_ID =\n   VOX_SECRET =\n   VOX_BOT_ID =\n   VOX_OUTBOUND_NUMBER =\n\n正式注册配置入口：\nhttps://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification"},{"language":"text","snippet":"好的。你稍后拿到参数后，请把 APPID、SecretID、BotID、呼出号码配置到环境变量、本地 secrets manager 或本地凭据文件。配置完成后回来告诉我“已配置完成”，我会继续帮你进行 live 测试。不要在聊天中发送真实密钥。"},{"language":"text","snippet":"请在本机按下面键名配置，不要把真实值粘贴到聊天中：\n\nVOX_APP_ID =\nVOX_SECRET =\nVOX_BOT_ID =\nVOX_OUTBOUND_NUMBER ="},{"language":"text","snippet":"vox-phone-notification/\n  SKILL.md\n  workflow.md\n  skill.json\n  README.md\n  SKILLHUB.md\n  WORKBUDDY.md\n  WORKBUDDY-RELEASE.md\n  examples/\n  resources/"},{"language":"text","snippet":"vox-phone-notification.zip"},{"language":"text","snippet":"https://your-domain.example/skills/vox-phone-notification.zip"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\r\nname: vox-phone-notification\r\ndescription: 将自然语言通知请求转换为 TeddyMobile Vox 电话通知，先进行免凭据 dry-run 解析，再让用户选择最多 10 次免凭据 v2 真实试用外呼或正式注册配置。 Convert natural-language notification requests into TeddyMobile Vox phone notifications, starting with no-credential dry-run parsing, then letting users choose up to 10 no-credential v2 real trial calls or formal registration and setup.\r\n---\r\n\r\n本 Skill 是可安装到 Claw 的技能包。`skill.json` 用于发现元数据；首次体验请先阅读 `GET-STARTED.md`；通用安装说明请阅读 `README.md`；WorkBuddy 相关打包假设请阅读 `WORKBUDDY.md`。\r\nThis skill is packaged as a Claw-installable folder. Use `skill.json` for discovery metadata, read `GET-STARTED.md` for the fastest first run, read `README.md` for general installation expectations, read `POST-TRIAL-GUIDE.md` for mandatory post-trial response behavior, and read `WORKBUDDY.md` for WorkBuddy-specific packaging assumptions.\r\n\r\n默认首次使用模式是 `dry-run`：只解析用户的电话通知请求，不加载凭据，也不发起真实外呼。即使命令没有提供任何模式参数，也必须视为 dry-run。用户明确选择真实试用电话后才运行 `--trial`；用户明确说明已完成 TeddyMobile 注册并要求正式外呼后，才可运行 `--live` 并读取用户自己的 `appId`、`secret`、`botid` 和外呼主叫号码。`VOX_CALLBACK_URL` 是可选项，仅用于 callback 驱动的高级流程。\r\nDefault first-use mode is `dry-run`: parse the user's phone notification request without loading credentials or placing a call. Even when no mode flag is provided, treat the run as dry-run. Run `--trial` only after the user explicitly chooses up to 10 real trial calls. Run `--live` and load user-owned `appId`, `secret`, `botid`, and outbound number only after the user explicitly says TeddyMobile registration is complete and requests formal outbound calling. `VOX_CALLBACK_URL` is optional and only used for callback-driven advanced flows.\r\n\r\n## 强制首次使用流程 / Mandatory First-Use Flow\r\n\r\n当用户要求使用、测试、试用、运行、执行本 Skill，或发送电话通知时，除非用户明确要求使用自己的凭据进入正式 live 模式，否则必须按以下顺序执行：\r\nWhen the user asks to use, test, try, run, execute, or send a phone notification with this skill, follow this exact order unless the user explicitly asks for live mode with their own credentials:\r\n\r\n1. 先运行或引导用户运行免凭据 dry-run：\r\n   Run or instruct no-credential dry-run first:\r\n   `node \"skills/vox-phone-notification/resources/run-demo.js\" \"<user instruction>\" --dry-run`\r\n2. 运行 dry-run 前必须先确认用户指令中同时包含接收手机号和通知内容。如果缺少接收手机号，先引导用户填写需要通知的电话；如果缺少通知内容，先引导用户填写电话接通后要播报的内容。不要用文档示例号码或示例内容代替用户输入。\r\n   Before running dry-run, confirm the user instruction includes both the destination phone number and notification content. If the destination phone number is missing, ask the user to provide the phone number to notify. If notification content is missing, ask the user to provide the spoken content for the call. Do not substitute documentation sample numbers or sample content for user input.\r\n3. 如果 dry-run 成功且解析结果有效，必须让用户在以下两个下一步中选择：\r\n   If dry-run succeeds and the parsed request is valid, ask the user to choose one of these next steps:\r\n   - `试用真实电话`: 使用免凭据 v2 试用接口运行 trial 外呼。 Run the promotion trial call through the no-credential v2 trial endpoint:\r\n   `node \"skills/vox-phone-notification/resources/run-demo.js\" \"<user instruction>\" --trial --"},{"path":"README.md","content":"# vox-phone-notification\r\n\r\nInstallable Claw skill for TeddyMobile Vox single-turn outbound phone notifications.\r\n\r\nThis package supports TeddyMobile Vox outbound notification integration with validated HMAC signing, natural-language-to-notification parsing, local demo tools, and successful real-world phone playback after platform registration and bot configuration are completed.\r\n\r\n## Quick Start\r\n\r\nFor first-time users, start with dry-run mode before platform registration:\n\nSafety defaults:\n\n- `--dry-run` is the default and never places a phone call.\n- `--trial` and `--live` place real outbound phone calls, transmit the destination number and message text to TeddyMobile Vox, and must be used only for recipients you are authorized to contact.\n- real-call modes require the explicit `--confirm-real-call` safety flag after you review dry-run output.\n- configure secrets through environment variables or a local credentials file; do not paste live secrets into chat, tickets, logs, or screenshots.\n\r\n1. Run a no-credential dry-run:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\n2. Confirm the parsed output contains masked parsing results:\r\n   - masked destination phone number\r\n   - masked spoken notification text length\r\n   - notification repeat count\r\n3. Optionally run up to 10 promotion-period trial calls through the no-credential v2 trial endpoint:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode places one real phone notification through `POST https://vox.teddymobile.cn/vox/v2/outbound` with no local credentials, a required trial disclaimer, local content safety checks, at most 100 characters of user-provided content, and `notificationTimes` fixed to `1`. Review dry-run output first, use only authorized recipient numbers, and expect usage, consent, anti-spam, and compliance obligations. This local trial check is for promotion use only and is not a strong abuse-prevention boundary.\n\r\n4. To place formal phone calls, visit the TeddyMobile Vox registration page:\r\n\r\n```text\r\nhttps://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification\r\n```\r\n\r\n5. Create and activate your TeddyMobile Vox account.\r\n6. Complete formal access and record the returned `APPID` / `SecretID`.\r\n7. Create a notification bot and record its outbound number plus `BotID`.\r\n8. Choose one setup path after trial:\r\n   - `配置引导`: get guided through official registration and parameter collection.\r\n   - `稍后配置本地参数`: return later after configuring environment variables or a local credentials file.\n   - `查看本地配置模板`: view the local config keys without pasting real values into chat.\n9. Collect these platform values:\r\n   - `VOX_APP_ID`\r\n   - `VOX_SECRET`\r\n   - `VOX_BOT_ID`\r\n   - `VOX_OUTBOUND_NUMBER`\r\n10. Configure credentials by either:\r\n   - setting environment variables, or\r\n   - creating `~/.teddymobile/c"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7eq90b1gaf526fnsk07zn9t986me0d\",\n  \"slug\": \"teddymobile-vox-phone-notification\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1780644768122\n}"},{"path":"FIRST-SETUP.md","content":"# First-Time Setup Guide\r\n\r\nUse this guide when installing `vox-phone-notification` for the first time.\r\n\r\n## Goal\r\n\r\nComplete TeddyMobile platform onboarding, prepare the required credentials, and verify that the skill can place an outbound notification call successfully.\r\n\r\n## Step 1: Try dry-run without registration\r\n\r\nBefore registering or configuring credentials, run:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\nThis verifies that the skill can parse and print masked results for:\r\n\r\n- the destination phone number\r\n- the spoken notification content length\r\n- the notification repeat count\r\n\r\nNo real phone call is placed in dry-run mode, and the parsed phone number plus notification text are masked in terminal output.\n\nUse dry-run output as the required preview before any real call. Do not proceed unless the recipient number is authorized and the notification content is appropriate to transmit to TeddyMobile Vox.\n\r\n## Step 2: Try up to 10 promotion trial calls\r\n\r\nRun up to 10 real trial calls through the no-credential v2 trial endpoint:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode:\r\n\r\n- uses the no-credential v2 trial endpoint instead of local user credentials\r\n- places one real phone notification after local content safety checks\r\n- prepends a TeddyMobile Vox trial disclaimer\r\n- keeps at most 100 characters of user-provided content\r\n- blocks links, contact information, long number sequences, and high-risk terms\r\n- fixes `notificationTimes` to `1`\n- stores a local trial usage counter at `~/.teddymobile/vox-phone-notification-trial.json`\n- sends the destination phone number and message text to TeddyMobile Vox and may create usage, consent, anti-spam, or compliance obligations\n\r\nThis is a promotion-period convenience check and can be bypassed by users who modify local files. Use the server-side no-credential v2 trial endpoint for quota and abuse controls.\r\n\r\n## Step 3: Register on TeddyMobile\r\n\r\nGo to `https://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification` and complete the platform onboarding process.\r\n\r\nTypical first-time setup includes:\r\n\r\n1. creating or activating your TeddyMobile account\r\n2. completing enterprise registration or review if required\r\n3. enabling the Vox-related capabilities needed for outbound calling\r\n\r\n## Step 4: Create and configure the bot\r\n\r\nInside the TeddyMobile platform, create or configure the bot that will be used for outbound notification calls.\r\n\r\nConfirm that:\r\n\r\n- the selected `botid` is the one intended for notification calls\r\n- the bot has outbound notification capability enabled\r\n- the platform setup for your environment supports direct notification playback or the callback mode your deployment requires\r\n\r\n## Step 5: Collect the required platform values\r\n\r\nRecord these values from the TeddyMobile platform:"},{"path":"GET-STARTED.md","content":"# Get Started in 30 Seconds\r\n\r\nUse this guide immediately after installing `vox-phone-notification`.\r\n\r\n## Try it without registration\r\n\r\nRun a no-credential dry-run first:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --dry-run\r\n```\r\n\r\nDry-run mode does not place a real phone call. It only verifies that the skill can parse and prints masked results for:\n\r\n- the destination phone number\r\n- the spoken notification text length\r\n- the notification repeat count\r\n- the generated request id\n\nDo not run real-call modes until you have reviewed dry-run output and confirmed the recipient is authorized to receive the call.\n\r\n## Try up to 10 real trial calls\r\n\r\nPromotion builds can include a 10-use local trial mode:\r\n\r\n```bash\r\nnode \"skills/vox-phone-notification/resources/run-demo.js\" \"给<接收手机号>发通知，明天10点开会\" --trial --confirm-real-call\n```\r\n\r\nTrial mode:\r\n\r\n- uses the no-credential v2 trial endpoint instead of your local TeddyMobile credentials\r\n- places one real phone notification after local content safety checks\r\n- adds a required TeddyMobile Vox trial disclaimer before the user-provided content\r\n- keeps at most 100 characters of user-provided content\r\n- blocks links, contact information, long number sequences, and high-risk terms\r\n- fixes `notificationTimes` to `1`\n- records this machine trial usage count, up to 10 trials\n- sends the destination phone number and message text to TeddyMobile Vox and may create usage, consent, anti-spam, or compliance obligations\n\r\nThe local trial marker is stored at:\r\n\r\n```text\r\n~/.teddymobile/vox-phone-notification-trial.json\r\n```\r\n\r\nThis is a promotion-period convenience check, not a strong abuse-prevention boundary.\r\n\r\n## Send formal phone notifications\r\n\r\nTo place a real outbound phone call, register and configure TeddyMobile Vox:\r\n\r\n```text\r\nhttps://vox-ai.teddymobile.cn/?utm_source=clawhub&utm_medium=skill&utm_campaign=vox-phone-notification\r\n```\r\n\r\nFormal registration flow:\r\n\r\n1. Visit the TeddyMobile Vox website above.\r\n2. Create and activate your account.\r\n3. Complete formal access and record the returned `APPID` / `SecretID`.\r\n4. Create a notification bot.\r\n5. Record the bot's outbound number and `BotID`.\r\n\r\nAfter trial, choose one setup path:\r\n\r\n1. `配置引导`: get guided through the official site and parameter collection.\r\n2. `稍后配置本地参数`: return later after configuring environment variables or a local credentials file.\n3. `查看本地配置模板`: view the local config keys without pasting real values into chat.\n\r\nAfter registration, prepare these values:\r\n\r\n- `VOX_APP_ID`\r\n- `VOX_SECRET`\r\n- `VOX_BOT_ID`\r\n- `VOX_OUTBOUND_NUMBER`\r\n\r\n## Configure credentials\r\n\r\nCreate a local credential file:\r\n\r\n```text\r\n~/.teddymobile/credentials.json\r\n```\r\n\r\nExample:\r\n\r\n```json\r\n{\r\n  \"VOX_APP_ID\": \"your-app-id\",\r\n  \"VOX_SECRET\": \"your-secret\",\r\n  \"VOX_BOT_ID\": \"your-bot-id\",\r\n  \"VOX_OUTBOUND_NUMBER\": \"your-outbound-number\"\r\n}\r\n```\r\n\r\nYou can also set the same values as environment variables.\n\nDo not pa"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":2422,"uniquenessScore":30,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T07:21:02.710Z","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-11T07:21:02.710Z","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-11T10:53:59.130Z","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"}]}}}