{"id":"bd47915e-acdf-452c-988e-215799e33ece","entityType":"agent","slug":"clawhub-phentse-web-tts-speaker","name":"Web TTS Speaker","canonicalUrl":"https://www.xpersona.co/agent/clawhub-phentse-web-tts-speaker","canonicalPath":"/agent/clawhub-phentse-web-tts-speaker","generatedAt":"2026-10-11T17:44:47.130Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T15:25:02.519Z","emptyReason":null},"description":"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3） Skill: Web TTS Speaker Owner: phentse Summary: 网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3） Tags: latest:3.2.1 Version history: v3.2.1 | 2026-05-20T12:46:13.208Z | user 🔧 v3.2.1 — 修复SKILL.md：添加version字段到frontmatter、修正workspace完整路径(agents\\tech)，重新发布完整文档包。 v3.2.0 | 2026-05-20T12:38:39.167Z | user 📦 v3.2.0 — PKG精简：删除测试语音&__pycache__，精编文档(README/skill.json)，新增对比表引导废弃项目，零冗余发布。 v3.1.0 | 2026-05-20T11:52:51.","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17a84ww07c0y3ptjdqc7rb9j9840tfp:web-tts-speaker","sourceUrl":"https://clawhub.ai/phentse/web-tts-speaker","homepage":"https://clawhub.ai/phentse/skills/web-tts-speaker","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/phentse/web-tts-speaker","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/phentse/skills/web-tts-speaker","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3） Skill: Web TTS Speaker Owner: phentse Summary: 网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:25:02.519Z","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-11T15:25:02.519Z","emptyReason":null},"stars":null,"forks":null,"downloads":1040,"packageName":null,"latestVersion":"3.2.1","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:25:02.505Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T15:25:02.519Z","lastCrawledAt":"2026-10-11T15:25:02.505Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T15:25:02.505Z","lastVerifiedAt":null,"highlights":[{"version":"3.2.1","createdAt":"2026-05-20T12:46:13.208Z","changelog":"🔧 v3.2.1 — 修复SKILL.md：添加version字段到frontmatter、修正workspace完整路径(agents\\tech)，重新发布完整文档包。","fileCount":7,"zipByteSize":11139},{"version":"3.2.0","createdAt":"2026-05-20T12:38:39.167Z","changelog":"📦 v3.2.0 — PKG精简：删除测试语音&__pycache__，精编文档(README/skill.json)，新增对比表引导废弃项目，零冗余发布。","fileCount":6,"zipByteSize":9789},{"version":"3.1.0","createdAt":"2026-05-20T11:52:51.865Z","changelog":"v3.1: 新增缓存/智能分块/静音裁剪/语言识别/标题朗读/SSML/标题命名/背景音混音; 精简发布包","fileCount":5,"zipByteSize":12075},{"version":"3.0.2","createdAt":"2026-05-13T12:56:43.652Z","changelog":"P0: 修复命令注入风险，改用argv数组传参; P2: 依赖锁定精确版本; P3: 添加安全与隐私说明","fileCount":5,"zipByteSize":9651},{"version":"3.0.1","createdAt":"2026-05-13T12:42:13.713Z","changelog":"新增微信/TG/Discord多渠道自动匹配；自动分块拼接支持长文本；微信文章走浏览器兜底","fileCount":5,"zipByteSize":9191},{"version":"3.0.0","createdAt":"2026-05-12T09:34:29.021Z","changelog":"v3.0 简化重构","fileCount":5,"zipByteSize":4096}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17a84ww07c0y3ptjdqc7rb9j9840tfp:web-tts-speaker","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"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-phentse-web-tts-speaker/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-phentse-web-tts-speaker/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-phentse-web-tts-speaker/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-phentse-web-tts-speaker/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-phentse-web-tts-speaker/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-phentse-web-tts-speaker/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-11T17:44:47.129Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-phentse-web-tts-speaker/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-phentse-web-tts-speaker/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-phentse-web-tts-speaker/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-phentse-web-tts-speaker/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":"high","updatedAt":"2026-10-11T15:25:02.519Z","emptyReason":null},"readme":"Skill: Web TTS Speaker\n\nOwner: phentse\n\nSummary: 网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3）\n\nTags: latest:3.2.1\n\nVersion history:\n\nv3.2.1 | 2026-05-20T12:46:13.208Z | user\n\n🔧 v3.2.1 — 修复SKILL.md：添加version字段到frontmatter、修正workspace完整路径(agents\\tech)，重新发布完整文档包。\n\nv3.2.0 | 2026-05-20T12:38:39.167Z | user\n\n📦 v3.2.0 — PKG精简：删除测试语音&__pycache__，精编文档(README/skill.json)，新增对比表引导废弃项目，零冗余发布。\n\nv3.1.0 | 2026-05-20T11:52:51.865Z | user\n\nv3.1: 新增缓存/智能分块/静音裁剪/语言识别/标题朗读/SSML/标题命名/背景音混音; 精简发布包\n\nv3.0.2 | 2026-05-13T12:56:43.652Z | user\n\nP0: 修复命令注入风险，改用argv数组传参; P2: 依赖锁定精确版本; P3: 添加安全与隐私说明\n\nv3.0.1 | 2026-05-13T12:42:13.713Z | user\n\n新增微信/TG/Discord多渠道自动匹配；自动分块拼接支持长文本；微信文章走浏览器兜底\n\nv3.0.0 | 2026-05-12T09:34:29.021Z | user\n\nv3.0 简化重构\n\nArchive index:\n\nArchive v3.2.1: 7 files, 11139 bytes\n\nFiles: _meta.json (134b), cli.py (10988b), README.md (4793b), requirements.txt (60b), skill-card.md (2341b), skill.json (1226b), SKILL.md (5239b)\n\nFile v3.2.1:SKILL.md\n\n---\nname: web-tts-speaker\nversion: 3.2.1\ndescription: \"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3）\"\nmetadata:\n  openclaw:\n    requires: { bins: [\"python3\"] }\n    install:\n      - id: python\n        kind: pip\n        package: \"-r requirements.txt\"\n---\n\n# web-tts-speaker v3.2.1\n\n**网页/文字 → TTS语音 → 多渠道自动匹配推送**\n\n> 📢 替代 [web-reader-tts](https://clawhub.ai/packages/web-reader-tts) — 所有功能由本项目统一覆盖。\n\n## 一句话用法\n\n```bash\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n```\n\n默认 `--channel auto`，生成所有格式，Agent 按来源渠道自动取用。\n\n---\n\n## 🧠 Agent 工具定义\n\n当用户希望**朗读网页**或**将文字转为语音**时，按以下流程操作。\n\n### 触发条件\n\n用户消息中出现以下意图之一：\n- \"朗读 / 读一下 / 帮我读 / 听一下\" + **URL**\n- \"朗读 / 读一下 / 帮我读 / 听一下\" + **文本内容**\n- 直接发了一个 **URL**（自动朗读）\n- \"转语音 / 生成语音 / TTS\"\n\n### 执行流程\n\n#### Step 1：提取目标文本\n\n```\n用户说 \"朗读 https://abc.com/article\"  → 取 URL\n用户说 \"帮我读一下这段：你好世界\"      → 取文本\n用户直接发一个 URL                     → 取 URL\n```\n\n#### Step 2：获取来源渠道\n\n从当前消息的 `inbound context` 中读取 `channel` 字段：\n\n```json\n// inbound metadata 示例\n{ \"channel\": \"openclaw-weixin\" }   // 微信\n{ \"channel\": \"feishu\" }           // 飞书\n{ \"channel\": \"telegram\" }         // Telegram\n{ \"channel\": \"discord\" }          // Discord\n```\n\n#### Step 3：调用 CLI\n\n```bash\ncd C:\\Users\\www\\.openclaw\\agents\\tech\\workspace\\skills\\web-tts-speaker\n\n# 朗读网页（自动模式）\npython cli.py --url \"https://example.com/article\"\n\n# 文字转语音（自动模式）\npython cli.py --text \"你好世界\"\n```\n\n使用 **exec 工具** 执行，并捕获 stdout。\n\n#### Step 4：解析输出标记\n\nCLI 输出多个渠道标记。根据来源渠道选取对应的那个：\n\n| 来源 channel | 取用标记 | 发送文件 |\n|-------------|---------|---------|\n| `openclaw-weixin` | `[WECHAT_VOICE]` | `file=xxx.mp3` |\n| `feishu` | `[FEISHU_VOICE]` | `file=xxx.opus` |\n| `telegram` | `[TELEGRAM_VOICE]` | `file=xxx.mp3` |\n| `discord` | `[DISCORD_VOICE]` | `file=xxx.mp3` |\n\n#### Step 5：发送语音\n\n用 `message` 工具发送，channel 和 file 从所选标记中提取：\n\n**微信：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"openclaw-weixin\",\n    media: \"/path/to/voice.mp3\"\n)\n```\n\n**飞书：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"feishu\",\n    asVoice: true,\n    filePath: \"/path/to/voice.opus\"\n)\n```\n\n**Telegram / Discord：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"telegram\",   # 或 \"discord\"\n    media: \"/path/to/voice.mp3\"\n)\n```\n\n---\n\n## 完整调用示例（给 Agent 参考）\n\n```\n用户: 朗读 https://zshttp.com/2981.html\n\n→ 检测来源: inbound metadata.channel = \"openclaw-weixin\"\n→ 执行: exec(command=\"cd C:\\\\Users\\\\www\\\\.openclaw\\\\workspace\\\\skills\\\\web-tts-speaker && python cli.py --url https://zshttp.com/2981.html\", timeout=300)\n→ 解析输出:\n   找到 [WECHAT_VOICE] 标记\n   file=C:\\xxx\\voice_195836.mp3\n→ 发送:\n   message(action=\"send\", channel=\"openclaw-weixin\", media=\"C:\\xxx\\voice_195836.mp3\")\n→ 回复用户: \"语音已发到微信\"\n```\n\n```\n用户: 帮我读一下这篇文章的摘要：今天天气真好...\n\n→ 检测来源: inbound metadata.channel = \"feishu\"\n→ 执行: exec(command=\"cd C:\\\\Users\\\\www\\\\.openclaw\\\\workspace\\\\skills\\\\web-tts-speaker && python cli.py --text '今天天气真好...'\")\n→ 解析输出:\n   找到 [FEISHU_VOICE] 标记\n   file=C:\\xxx\\voice_xxxxxx.opus\n→ 发送:\n   message(action=\"send\", channel=\"feishu\", asVoice=true, filePath=\"C:\\xxx\\voice_xxxxxx.opus\")\n→ 回复用户: \"语音条已发到飞书\"\n```\n\n---\n\n## 快速命令\n\n```bash\n# 自动模式（推荐）：一次性生成所有格式\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n\n# 指定单渠道\npython cli.py --channel feishu --text \"你好\"\npython cli.py -c wechat --text \"你好\"\n```\n\n## 支持渠道\n\n| 渠道 | 格式 | 发送方式 |\n|------|------|---------|\n| **feishu** | `.opus` (16kHz) | `asVoice=true` |\n| **wechat** | `.mp3` (24kHz) | `media=xxx` |\n| **telegram** | `.mp3` (24kHz) | `media=xxx` |\n| **discord** | `.mp3` (24kHz) | `media=xxx` |\n\n> ⚠️ **微信说明**：`openclaw-weixin` 插件暂未实现原生语音气泡发送（[GH#61031](https://github.com/openclaw/openclaw/issues/61031)），当前以 MP3 文件形式发送。\n\n## 长文本支持\n\n自动分块 + 拼接，不限长度。\n\n## 语音角色\n\n```bash\npython cli.py --text \"你好\" --voice zh-CN-YunxiNeural\n```\n\n常用中文语音：\n- `zh-CN-XiaoxiaoNeural` — 晓晓（女声，默认）\n- `zh-CN-YunxiNeural` — 云希（男声，活泼）\n- `zh-CN-YunyangNeural` — 云扬（男声，新闻）\n- `zh-CN-XiaoyiNeural` — 晓伊（女声，柔和）\n\n## 依赖\n\n```bash\npip install edge-tts beautifulsoup4 requests\n```\n\n也依赖系统安装的 **FFmpeg**。\n\nFile v3.2.1:README.md\n\n# Web TTS Speaker v3.2.0\n\n**网页/文字 → TTS语音 → 多渠道自动匹配推送**\n\n一键朗读网页或文字，自动生成适配不同平台的语音格式。不调飞书/微信 API，Agent 负责发送，脚本只做三件事：**提取文字 → 生成语音 → 输出标准化标记**。\n\n> 📢 **替代 [web-reader-tts](https://clawhub.ai/packages/web-reader-tts)**\n> Web Reader TTS 已废弃，所有功能由本项目统一覆盖。新增多渠道支持（飞书语音条/微信 MP3/TG/Discord）、自动格式匹配、零飞书 API 依赖。\n\n---\n\n## 快速开始\n\n```bash\n# 安装依赖\npip install edge-tts beautifulsoup4 requests\n\n# 自动模式：生成全部渠道格式\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n\n# 指定单渠道\npython cli.py -c feishu --text \"你好世界\"\npython cli.py -c wechat --text \"你好世界\"\n```\n\n---\n\n## 渠道支持\n\n| 渠道 | 输出格式 | 声道/码率 | Agent 发送方式 |\n|------|---------|-----------|---------------|\n| `-c feishu` | `.opus` | 单声道 16kHz / 12kbps | `asVoice=true` → 飞书语音气泡 |\n| `-c wechat` | `.mp3` | 单声道 24kHz / 48kbps | `media=xxx` → 微信文件消息 |\n| `-c telegram` | `.mp3` | 单声道 24kHz / 48kbps | `media=xxx` → TG 文件消息 |\n| `-c discord` | `.mp3` | 单声道 24kHz / 48kbps | `media=xxx` → Discord 文件消息 |\n| `-c auto`（默认） | 全部 | — | Agent 按来源渠道自动取用 |\n\n---\n\n## 使用场景\n\n### 朗读网页\n\n```bash\npython cli.py -c feishu --url https://example.com/article\n```\n\n自动提取正文（过滤导航/广告/页脚），支持中英文。\n\n### 文字转语音\n\n```bash\npython cli.py -c wechat --text \"会议提醒：下午3点有项目评审\"\n```\n\n适合快速生成通知/提醒语音。\n\n### 指定语音角色\n\n```bash\npython cli.py -c feishu --text \"你好\" --voice zh-CN-YunxiNeural\n```\n\n常用中文语音：\n\n| 语音参数 | 角色 |\n|---------|------|\n| `zh-CN-XiaoxiaoNeural` | 晓晓（女声，默认） |\n| `zh-CN-YunxiNeural` | 云希（男声，活泼） |\n| `zh-CN-YunyangNeural` | 云扬（男声，新闻） |\n| `zh-CN-XiaoyiNeural` | 晓伊（女声，柔和） |\n\n### 自定义输出\n\n```bash\npython cli.py -c wechat --text \"通知\" -o notice.mp3\n```\n\n---\n\n## 输出标记（Agent 读取）\n\n自动模式输出标准化标记块，Agent 根据请求来源渠道自动选取对应文件：\n\n```text\n[FEISHU_VOICE]\nchannel=feishu\nfile=/path/to/voice.opus\ntext=会议提醒：下午3点有项目评审...\ndur=15\nsize=22124\nfull=飞书语音气泡\n[/FEISHU_VOICE]\n\n[WECHAT_VOICE]\nchannel=wechat\nfile=/path/to/voice.mp3\ntext=会议提醒：下午3点有项目评审...\ndur=15\nsize=88560\nfull=微信文件消息\n[/WECHAT_VOICE]\n```\n\n---\n\n## 架构\n\n```\nURL/文本\n    │\n    ▼\n网页提取正文 ──→ Edge TTS 分块合成 ──→ 合并 WAV ──→ 多渠道转码\n    │                                                    │\n    │                                         ┌──────────┼──────────┐\n    │                                         ▼          ▼          ▼\n    │                                     feishu     wechat     telegram/discord\n    │                                    (.opus)    (.mp3)       (.mp3)\n    │                                         │          │            │\n    └───输出标准化标记供 Agent 解析 ──────────┘──────────┘────────────┘\n                                                    │\n                                                    ▼\n                                           message() → 渠道语音发送\n```\n\n---\n\n## 依赖\n\n| 依赖 | 用途 | 安装 |\n|------|------|------|\n| Python 3.8+ | 运行环境 | — |\n| edge-tts | 微软 Edge 神经网络 TTS（免费，无需 API Key） | `pip install edge-tts` |\n| beautifulsoup4 | 网页正文提取 | `pip install beautifulsoup4` |\n| requests | 网页抓取 | `pip install requests` |\n| FFmpeg | 音频转码 | [gyan.dev](https://www.gyan.dev/ffmpeg/builds/) / `brew install ffmpeg` / `apt install ffmpeg` |\n\n---\n\n## 与 web-reader-tts 对比\n\n| 特性 | web-reader-tts（已废弃） | web-tts-speaker ✅ |\n|------|------------------------|-------------------|\n| 飞书语音条 | ❌ 需直调 API | ✅ 生成 Opus，asVoice 发送 |\n| 微信支持 | ❌ | ✅ MP3 文件消息 |\n| TG/Discord 支持 | ❌ | ✅ |\n| 自动渠道匹配 | ❌ | ✅ `--channel auto` |\n| 飞书 API 依赖 | ✅ 需 OAuth | ❌ 零依赖 |\n| 本地 TTS | ✅ (pyttsx3) | ❌（Edge TTS 质量更高） |\n\n---\n\n## 版本\n\n**v3.2.0** — 简化重构版，砍掉所有飞书 API 直调代码，新增多渠道支持\n\nFile v3.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn72nytm5dxvsna04vkn7q2k3d827y6x\",\n  \"slug\": \"web-tts-speaker\",\n  \"version\": \"3.2.1\",\n  \"publishedAt\": 1779281173208\n}\n\nFile v3.2.1:skill-card.md\n\n## Description:\n\nWeb TTS Speaker turns webpage content or supplied text into text-to-speech audio files for Feishu, WeChat, Telegram, and Discord workflows.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[phentse](https://clawhub.ai/user/phentse)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to fetch article text or accept supplied text, synthesize speech, and prepare platform-specific audio attachments for supported messaging channels.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can fetch arbitrary URLs.\n\nMitigation: Use it only where public-web URL fetching is acceptable, avoid private or internal URLs, and add confirmation plus URL validation before deployment.\n\nRisk: Extracted webpage content or supplied text may be sent to an external TTS service.\n\nMitigation: Do not process secrets or sensitive text without consent, and remove text snippets from shared logs or machine-readable output when needed.\n\nRisk: The security verdict recommends review before installation.\n\nMitigation: Review the skill before installing, pin dependencies, and deploy only in an environment where its URL fetching and TTS behavior are permitted.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/phentse/skills/web-tts-speaker)\n- [Publisher profile](https://clawhub.ai/user/phentse)\n- [OpenClaw WeChat voice message issue](https://github.com/openclaw/openclaw/issues/61031)\n- [FFmpeg Windows builds](https://www.gyan.dev/ffmpeg/builds/)\n\n## Skill Output:\n\n**Output Type(s):** [text, shell commands, configuration, files, guidance]\n\n**Output Format:** [Markdown guidance with bash examples and CLI stdout markers that point to generated MP3 or Opus audio files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires Python 3.8+, Python packages edge-tts, beautifulsoup4, and requests, plus FFmpeg for audio transcoding.]\n\n## Skill Version(s):\n\n3.2.1 (source: server release metadata, artifact skill.json, and SKILL.md frontmatter)\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 v3.2.1:skill.json\n\n{\n  \"name\": \"web-tts-speaker\",\n  \"version\": \"3.2.1\",\n  \"description\": \"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3）\",\n  \"author\": \"tech\",\n  \"tags\": [\"tts\", \"voice\", \"speaker\", \"朗读\", \"飞书语音条\", \"Edge TTS\"],\n  \"dependencies\": {\n    \"python\": \">=3.8\",\n    \"packages\": [\n      \"edge-tts\",\n      \"beautifulsoup4\",\n      \"requests\"\n    ]\n  },\n  \"commands\": {\n    \"auto\": \"python cli.py --url <url>\",\n    \"feishu\": \"python cli.py -c feishu --url <url>\",\n    \"wechat\": \"python cli.py -c wechat --text <text>\",\n    \"voice\": \"python cli.py -c feishu --text <text> --voice zh-CN-YunxiNeural\"\n  },\n  \"examples\": [\n    {\n      \"description\": \"朗读网页（自动匹配渠道）\",\n      \"command\": \"python cli.py --url \\\"https://example.com/article\\\"\"\n    },\n    {\n      \"description\": \"飞书语音条\",\n      \"command\": \"python cli.py -c feishu --text \\\"会议提醒：3点评审\\\"\"\n    },\n    {\n      \"description\": \"微信语音\",\n      \"command\": \"python cli.py -c wechat --url \\\"https://example.com/article\\\"\"\n    },\n    {\n      \"description\": \"指定男声\",\n      \"command\": \"python cli.py --text \\\"你好\\\" --voice zh-CN-YunxiNeural\"\n    }\n  ]\n}\n\nFile v3.2.1:requirements.txt\n\nedge-tts>=6.0.0\nbeautifulsoup4>=4.12.0\nrequests>=2.31.0\n\nArchive v3.2.0: 6 files, 9789 bytes\n\nFiles: _meta.json (134b), cli.py (10988b), README.md (4793b), requirements.txt (60b), skill.json (1226b), SKILL.md (5209b)\n\nFile v3.2.0:SKILL.md\n\n---\nname: web-tts-speaker\ndescription: \"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3）\"\nmetadata:\n  openclaw:\n    requires: { bins: [\"python3\"] }\n    install:\n      - id: python\n        kind: pip\n        package: \"-r requirements.txt\"\n---\n\n# web-tts-speaker v3.2.0\n\n**网页/文字 → TTS语音 → 多渠道自动匹配推送**\n\n> 📢 替代 [web-reader-tts](https://clawhub.ai/packages/web-reader-tts) — 所有功能由本项目统一覆盖。\n\n## 一句话用法\n\n```bash\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n```\n\n默认 `--channel auto`，生成所有格式，Agent 按来源渠道自动取用。\n\n---\n\n## 🧠 Agent 工具定义\n\n当用户希望**朗读网页**或**将文字转为语音**时，按以下流程操作。\n\n### 触发条件\n\n用户消息中出现以下意图之一：\n- \"朗读 / 读一下 / 帮我读 / 听一下\" + **URL**\n- \"朗读 / 读一下 / 帮我读 / 听一下\" + **文本内容**\n- 直接发了一个 **URL**（自动朗读）\n- \"转语音 / 生成语音 / TTS\"\n\n### 执行流程\n\n#### Step 1：提取目标文本\n\n```\n用户说 \"朗读 https://abc.com/article\"  → 取 URL\n用户说 \"帮我读一下这段：你好世界\"      → 取文本\n用户直接发一个 URL                     → 取 URL\n```\n\n#### Step 2：获取来源渠道\n\n从当前消息的 `inbound context` 中读取 `channel` 字段：\n\n```json\n// inbound metadata 示例\n{ \"channel\": \"openclaw-weixin\" }   // 微信\n{ \"channel\": \"feishu\" }           // 飞书\n{ \"channel\": \"telegram\" }         // Telegram\n{ \"channel\": \"discord\" }          // Discord\n```\n\n#### Step 3：调用 CLI\n\n```bash\ncd C:\\Users\\www\\.openclaw\\workspace\\skills\\web-tts-speaker\n\n# 朗读网页（自动模式）\npython cli.py --url \"https://example.com/article\"\n\n# 文字转语音（自动模式）\npython cli.py --text \"你好世界\"\n```\n\n使用 **exec 工具** 执行，并捕获 stdout。\n\n#### Step 4：解析输出标记\n\nCLI 输出多个渠道标记。根据来源渠道选取对应的那个：\n\n| 来源 channel | 取用标记 | 发送文件 |\n|-------------|---------|---------|\n| `openclaw-weixin` | `[WECHAT_VOICE]` | `file=xxx.mp3` |\n| `feishu` | `[FEISHU_VOICE]` | `file=xxx.opus` |\n| `telegram` | `[TELEGRAM_VOICE]` | `file=xxx.mp3` |\n| `discord` | `[DISCORD_VOICE]` | `file=xxx.mp3` |\n\n#### Step 5：发送语音\n\n用 `message` 工具发送，channel 和 file 从所选标记中提取：\n\n**微信：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"openclaw-weixin\",\n    media: \"/path/to/voice.mp3\"\n)\n```\n\n**飞书：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"feishu\",\n    asVoice: true,\n    filePath: \"/path/to/voice.opus\"\n)\n```\n\n**Telegram / Discord：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"telegram\",   # 或 \"discord\"\n    media: \"/path/to/voice.mp3\"\n)\n```\n\n---\n\n## 完整调用示例（给 Agent 参考）\n\n```\n用户: 朗读 https://zshttp.com/2981.html\n\n→ 检测来源: inbound metadata.channel = \"openclaw-weixin\"\n→ 执行: exec(command=\"cd C:\\\\Users\\\\www\\\\.openclaw\\\\workspace\\\\skills\\\\web-tts-speaker && python cli.py --url https://zshttp.com/2981.html\", timeout=300)\n→ 解析输出:\n   找到 [WECHAT_VOICE] 标记\n   file=C:\\xxx\\voice_195836.mp3\n→ 发送:\n   message(action=\"send\", channel=\"openclaw-weixin\", media=\"C:\\xxx\\voice_195836.mp3\")\n→ 回复用户: \"语音已发到微信\"\n```\n\n```\n用户: 帮我读一下这篇文章的摘要：今天天气真好...\n\n→ 检测来源: inbound metadata.channel = \"feishu\"\n→ 执行: exec(command=\"cd C:\\\\Users\\\\www\\\\.openclaw\\\\workspace\\\\skills\\\\web-tts-speaker && python cli.py --text '今天天气真好...'\")\n→ 解析输出:\n   找到 [FEISHU_VOICE] 标记\n   file=C:\\xxx\\voice_xxxxxx.opus\n→ 发送:\n   message(action=\"send\", channel=\"feishu\", asVoice=true, filePath=\"C:\\xxx\\voice_xxxxxx.opus\")\n→ 回复用户: \"语音条已发到飞书\"\n```\n\n---\n\n## 快速命令\n\n```bash\n# 自动模式（推荐）：一次性生成所有格式\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n\n# 指定单渠道\npython cli.py --channel feishu --text \"你好\"\npython cli.py -c wechat --text \"你好\"\n```\n\n## 支持渠道\n\n| 渠道 | 格式 | 发送方式 |\n|------|------|---------|\n| **feishu** | `.opus` (16kHz) | `asVoice=true` |\n| **wechat** | `.mp3` (24kHz) | `media=xxx` |\n| **telegram** | `.mp3` (24kHz) | `media=xxx` |\n| **discord** | `.mp3` (24kHz) | `media=xxx` |\n\n> ⚠️ **微信说明**：`openclaw-weixin` 插件暂未实现原生语音气泡发送（[GH#61031](https://github.com/openclaw/openclaw/issues/61031)），当前以 MP3 文件形式发送。\n\n## 长文本支持\n\n自动分块 + 拼接，不限长度。\n\n## 语音角色\n\n```bash\npython cli.py --text \"你好\" --voice zh-CN-YunxiNeural\n```\n\n常用中文语音：\n- `zh-CN-XiaoxiaoNeural` — 晓晓（女声，默认）\n- `zh-CN-YunxiNeural` — 云希（男声，活泼）\n- `zh-CN-YunyangNeural` — 云扬（男声，新闻）\n- `zh-CN-XiaoyiNeural` — 晓伊（女声，柔和）\n\n## 依赖\n\n```bash\npip install edge-tts beautifulsoup4 requests\n```\n\n也依赖系统安装的 **FFmpeg**。\n\nFile v3.2.0:README.md\n\n# Web TTS Speaker v3.2.0\n\n**网页/文字 → TTS语音 → 多渠道自动匹配推送**\n\n一键朗读网页或文字，自动生成适配不同平台的语音格式。不调飞书/微信 API，Agent 负责发送，脚本只做三件事：**提取文字 → 生成语音 → 输出标准化标记**。\n\n> 📢 **替代 [web-reader-tts](https://clawhub.ai/packages/web-reader-tts)**\n> Web Reader TTS 已废弃，所有功能由本项目统一覆盖。新增多渠道支持（飞书语音条/微信 MP3/TG/Discord）、自动格式匹配、零飞书 API 依赖。\n\n---\n\n## 快速开始\n\n```bash\n# 安装依赖\npip install edge-tts beautifulsoup4 requests\n\n# 自动模式：生成全部渠道格式\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n\n# 指定单渠道\npython cli.py -c feishu --text \"你好世界\"\npython cli.py -c wechat --text \"你好世界\"\n```\n\n---\n\n## 渠道支持\n\n| 渠道 | 输出格式 | 声道/码率 | Agent 发送方式 |\n|------|---------|-----------|---------------|\n| `-c feishu` | `.opus` | 单声道 16kHz / 12kbps | `asVoice=true` → 飞书语音气泡 |\n| `-c wechat` | `.mp3` | 单声道 24kHz / 48kbps | `media=xxx` → 微信文件消息 |\n| `-c telegram` | `.mp3` | 单声道 24kHz / 48kbps | `media=xxx` → TG 文件消息 |\n| `-c discord` | `.mp3` | 单声道 24kHz / 48kbps | `media=xxx` → Discord 文件消息 |\n| `-c auto`（默认） | 全部 | — | Agent 按来源渠道自动取用 |\n\n---\n\n## 使用场景\n\n### 朗读网页\n\n```bash\npython cli.py -c feishu --url https://example.com/article\n```\n\n自动提取正文（过滤导航/广告/页脚），支持中英文。\n\n### 文字转语音\n\n```bash\npython cli.py -c wechat --text \"会议提醒：下午3点有项目评审\"\n```\n\n适合快速生成通知/提醒语音。\n\n### 指定语音角色\n\n```bash\npython cli.py -c feishu --text \"你好\" --voice zh-CN-YunxiNeural\n```\n\n常用中文语音：\n\n| 语音参数 | 角色 |\n|---------|------|\n| `zh-CN-XiaoxiaoNeural` | 晓晓（女声，默认） |\n| `zh-CN-YunxiNeural` | 云希（男声，活泼） |\n| `zh-CN-YunyangNeural` | 云扬（男声，新闻） |\n| `zh-CN-XiaoyiNeural` | 晓伊（女声，柔和） |\n\n### 自定义输出\n\n```bash\npython cli.py -c wechat --text \"通知\" -o notice.mp3\n```\n\n---\n\n## 输出标记（Agent 读取）\n\n自动模式输出标准化标记块，Agent 根据请求来源渠道自动选取对应文件：\n\n```text\n[FEISHU_VOICE]\nchannel=feishu\nfile=/path/to/voice.opus\ntext=会议提醒：下午3点有项目评审...\ndur=15\nsize=22124\nfull=飞书语音气泡\n[/FEISHU_VOICE]\n\n[WECHAT_VOICE]\nchannel=wechat\nfile=/path/to/voice.mp3\ntext=会议提醒：下午3点有项目评审...\ndur=15\nsize=88560\nfull=微信文件消息\n[/WECHAT_VOICE]\n```\n\n---\n\n## 架构\n\n```\nURL/文本\n    │\n    ▼\n网页提取正文 ──→ Edge TTS 分块合成 ──→ 合并 WAV ──→ 多渠道转码\n    │                                                    │\n    │                                         ┌──────────┼──────────┐\n    │                                         ▼          ▼          ▼\n    │                                     feishu     wechat     telegram/discord\n    │                                    (.opus)    (.mp3)       (.mp3)\n    │                                         │          │            │\n    └───输出标准化标记供 Agent 解析 ──────────┘──────────┘────────────┘\n                                                    │\n                                                    ▼\n                                           message() → 渠道语音发送\n```\n\n---\n\n## 依赖\n\n| 依赖 | 用途 | 安装 |\n|------|------|------|\n| Python 3.8+ | 运行环境 | — |\n| edge-tts | 微软 Edge 神经网络 TTS（免费，无需 API Key） | `pip install edge-tts` |\n| beautifulsoup4 | 网页正文提取 | `pip install beautifulsoup4` |\n| requests | 网页抓取 | `pip install requests` |\n| FFmpeg | 音频转码 | [gyan.dev](https://www.gyan.dev/ffmpeg/builds/) / `brew install ffmpeg` / `apt install ffmpeg` |\n\n---\n\n## 与 web-reader-tts 对比\n\n| 特性 | web-reader-tts（已废弃） | web-tts-speaker ✅ |\n|------|------------------------|-------------------|\n| 飞书语音条 | ❌ 需直调 API | ✅ 生成 Opus，asVoice 发送 |\n| 微信支持 | ❌ | ✅ MP3 文件消息 |\n| TG/Discord 支持 | ❌ | ✅ |\n| 自动渠道匹配 | ❌ | ✅ `--channel auto` |\n| 飞书 API 依赖 | ✅ 需 OAuth | ❌ 零依赖 |\n| 本地 TTS | ✅ (pyttsx3) | ❌（Edge TTS 质量更高） |\n\n---\n\n## 版本\n\n**v3.2.0** — 简化重构版，砍掉所有飞书 API 直调代码，新增多渠道支持\n\nFile v3.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn72nytm5dxvsna04vkn7q2k3d827y6x\",\n  \"slug\": \"web-tts-speaker\",\n  \"version\": \"3.2.0\",\n  \"publishedAt\": 1779280719167\n}\n\nFile v3.2.0:skill.json\n\n{\n  \"name\": \"web-tts-speaker\",\n  \"version\": \"3.2.0\",\n  \"description\": \"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3）\",\n  \"author\": \"tech\",\n  \"tags\": [\"tts\", \"voice\", \"speaker\", \"朗读\", \"飞书语音条\", \"Edge TTS\"],\n  \"dependencies\": {\n    \"python\": \">=3.8\",\n    \"packages\": [\n      \"edge-tts\",\n      \"beautifulsoup4\",\n      \"requests\"\n    ]\n  },\n  \"commands\": {\n    \"auto\": \"python cli.py --url <url>\",\n    \"feishu\": \"python cli.py -c feishu --url <url>\",\n    \"wechat\": \"python cli.py -c wechat --text <text>\",\n    \"voice\": \"python cli.py -c feishu --text <text> --voice zh-CN-YunxiNeural\"\n  },\n  \"examples\": [\n    {\n      \"description\": \"朗读网页（自动匹配渠道）\",\n      \"command\": \"python cli.py --url \\\"https://example.com/article\\\"\"\n    },\n    {\n      \"description\": \"飞书语音条\",\n      \"command\": \"python cli.py -c feishu --text \\\"会议提醒：3点评审\\\"\"\n    },\n    {\n      \"description\": \"微信语音\",\n      \"command\": \"python cli.py -c wechat --url \\\"https://example.com/article\\\"\"\n    },\n    {\n      \"description\": \"指定男声\",\n      \"command\": \"python cli.py --text \\\"你好\\\" --voice zh-CN-YunxiNeural\"\n    }\n  ]\n}\n\nFile v3.2.0:requirements.txt\n\nedge-tts>=6.0.0\nbeautifulsoup4>=4.12.0\nrequests>=2.31.0\n\nArchive v3.1.0: 5 files, 12075 bytes\n\nFiles: _meta.json (134b), cli.py (31195b), README.md (2877b), requirements.txt (60b), SKILL.md (2301b)\n\nFile v3.1.0:SKILL.md\n\n---\nname: web-tts-speaker\ndescription: \"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3）\"\nmetadata:\n  openclaw:\n    requires: { bins: [\"python3\"] }\n    install:\n      - id: python\n        kind: pip\n        package: \"-r requirements.txt\"\n---\n\n# web-tts-speaker v3.1\n\n**网页/文字 → TTS语音 → 多渠道自动匹配推送**\n\n```bash\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n```\n\n---\n\n## Agent 调用指南\n\n### 触发条件\n\n用户消息含以下意图之一：\n- \"朗读 / 读一下 / 帮我读 / 听一下\" + URL 或文本\n- 直接发了一个 URL（自动朗读）\n- \"转语音 / 生成语音 / TTS\"\n\n### 执行流程\n\n#### 1. 提取目标\n\n```\n用户说 \"朗读 https://abc.com/article\"   → 取 URL\n用户说 \"帮我读一下这段：你好世界\"       → 取文本\n用户直接发一个 URL                       → 取 URL\n```\n\n#### 2. 调用 CLI\n\n```python\nexec(command=f\"cd {PROJECT_DIR} && python cli.py --url {URL}\", timeout=300)\n```\n\n常用参数组合：\n\n```bash\n# 基础（自动渠道）\npython cli.py --url \"https://example.com/article\"\npython cli.py --text \"你好世界\"\n\n# 增强\npython cli.py --url \"https://example.com\" --trim --read-title\npython cli.py --text \"Hello\" --bgm bgm.mp3 --bgm-volume 0.1\n```\n\n#### 3. 解析输出 → 发送\n\n根据来源 channel 选取对应标记：\n\n| 来源渠道 | 取用标记 | 发送方式 |\n|---------|---------|---------|\n| `feishu` | `[FEISHU_VOICE]` | `message(channel=\"feishu\", asVoice=true, filePath=\"xxx.opus\")` |\n| `openclaw-weixin` | `[WECHAT_VOICE]` | `message(channel=\"openclaw-weixin\", media=\"xxx.mp3\")` |\n| `telegram` | `[TELEGRAM_VOICE]` | `message(channel=\"telegram\", media=\"xxx.mp3\")` |\n| `discord` | `[DISCORD_VOICE]` | `message(channel=\"discord\", media=\"xxx.mp3\")` |\n\n---\n\n## 语音角色\n\n| 语言 | 默认语音 |\n|------|---------|\n| 中文(默认) | `zh-CN-XiaoxiaoNeural` 晓晓(女) |\n| 中文(活泼) | `zh-CN-YunxiNeural` 云希(男) |\n| 中文(新闻) | `zh-CN-YunyangNeural` 云扬(男) |\n| 英文 | `en-US-AriaNeural` Aria(女) |\n| 日文 | `ja-JP-NanamiNeural` (女) |\n| 韩文 | `ko-KR-SunHiNeural` (女) |\n\n---\n\n## 项目路径\n\n```\nC:\\Users\\www\\.openclaw\\team\\outputs\\web-tts-speaker\\\n```\n\nFile v3.1.0:README.md\n\n# Web TTS Speaker v3.1\n\n**URL/文本 → TTS 语音 → 多渠道自动匹配推送**\n\n一次输入，自动生成飞书语音气泡 / 微信/TG/Discord MP3。\n\n```bash\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n```\n\n---\n\n## 特性\n\n| 特性 | 说明 |\n|------|------|\n| 网页正文提取 | 自动过滤导航/广告/页脚 |\n| 长文本分块 | 尊重段落/句边界，不限长度 |\n| 多渠道输出 | feishu(opus) / wechat(tg/discord:mp3) |\n| 自动匹配渠道 | Agent 按来源自动取对应文件 |\n| 内容缓存 | 同文本+语音秒级返回 |\n| 静音裁剪 | `--trim` 去掉首尾空白 |\n| 语言自动识别 | 自动选匹配语音(zh/en/ja/ko/fr/de/es) |\n| 标题朗读 | 先读标题再读正文 |\n| SSML 模式 | 精确控制语速/停顿/重音 |\n| 标题命名 | 文件名用文章标题 |\n| 背景音混音 | `--bgm music.mp3 --bgm-volume 0.1` |\n\n---\n\n## CLI 参数\n\n| 参数 | 说明 |\n|------|------|\n| `--url` | 网页 URL（与 `--text` / `--ssml` 互斥） |\n| `--text` | 直接文本 |\n| `--ssml` | SSML 标记文本 |\n| `--channel, -c` | 渠道：`auto` / `feishu` / `wechat` / `telegram` / `discord` |\n| `--voice` | 语音名（默认 `auto`=自动检测语言） |\n| `--lang` | 语言：`auto` / `zh` / `en` / `ja` / `ko` / `fr` / `de` / `es` |\n| `--trim` | 裁剪首尾静音 |\n| `--read-title` / `--no-read-title` | 是否朗读网页标题（默认开启） |\n| `--title-name` | 用文章标题命名输出文件 |\n| `--bgm` | 背景音乐文件路径 |\n| `--bgm-volume` | 背景音量 0.0~1.0（默认 0.1） |\n| `--cache` / `--no-cache` | 启用/禁用缓存（默认开启） |\n| `--cache-clear` | 清理过期缓存 |\n| `--cache-max-age` | 缓存保留天数（默认 30） |\n| `--outdir, -d` | 输出目录 |\n| `--output, -o` | 输出文件（单渠道模式） |\n\n### 示例\n\n```bash\n# 朗读网页 + 标题 + 静音裁剪\npython cli.py --url https://example.com/article --trim\n\n# 文字 + 背景音乐\npython cli.py --text \"晚安\" --bgm lullaby.mp3 --bgm-volume 0.05\n\n# SSML 精确控制\npython cli.py --ssml \"<speak>强调<emphasis level='strong'>很重要</emphasis></speak>\"\n\n# 指定飞书渠道（输出 .opus）\npython cli.py -c feishu --text \"你好\"\n```\n\n---\n\n## 输出标记\n\n脚本输出标准化标记供 Agent 解析：\n\n```\n[FEISHU_VOICE]\nchannel=feishu\nfile=/path/to/voice.opus\ntext=摘要：xxx\ndur=85\nsize=12800\nfull=飞书语音气泡\n[/FEISHU_VOICE]\n\n[WECHAT_VOICE]\nchannel=wechat\nfile=/path/to/voice.mp3\ntext=摘要：xxx\ndur=85\nsize=256000\nfull=微信文件消息\n[/WECHAT_VOICE]\n```\n\nAgent 根据请求来源渠道选取对应标记发送。\n\n---\n\n## 依赖\n\n```bash\npip install edge-tts beautifulsoup4 requests\n```\n\n系统依赖：FFmpeg\n\n## 版本\n\n- **v3.1** — 缓存 / 智能分块 / 静音裁剪 / 语言识别 / 标题朗读 / SSML / 标题命名 / 背景音混音\n\nFile v3.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn72nytm5dxvsna04vkn7q2k3d827y6x\",\n  \"slug\": \"web-tts-speaker\",\n  \"version\": \"3.1.0\",\n  \"publishedAt\": 1779277971865\n}\n\nFile v3.1.0:requirements.txt\n\nedge-tts>=6.0.0\nbeautifulsoup4>=4.12.0\nrequests>=2.31.0\n\nArchive v3.0.2: 5 files, 9651 bytes\n\nFiles: _meta.json (134b), cli.py (11010b), README.md (5370b), requirements.txt (55b), SKILL.md (4860b)\n\nFile v3.0.2:SKILL.md\n\n---\nname: web-tts-speaker\ndescription: \"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3）\"\nmetadata:\n  openclaw:\n    requires: { bins: [\"python3\"] }\n    install:\n      - id: python\n        kind: pip\n        package: \"-r requirements.txt\"\n---\n\n# web-tts-speaker v3.0\n\n**网页/文字 → TTS语音 → 自动匹配来源渠道发送**\n\n---\n\n## 🧠 Agent 工具定义\n\n当用户希望**朗读网页**或**将文字转为语音**时，按以下流程操作。\n\n### 触发条件\n\n- \"朗读 / 读一下 / 帮我读 / 听一下\" + URL/文本\n- 直接发送 URL（自动朗读）\n- \"转语音 / 生成语音 / TTS\"\n\n### 执行流程\n\n#### Step 1：提取目标\n\n```\n\"朗读 https://abc.com/article\"  → URL\n\"读一下：你好世界\"              → 文本\n直接发 URL                      → URL\n```\n\n#### Step 2：获取来源渠道\n\n从 inbound context 的 `channel` 字段获取：\n\n| 值 | 来源 |\n|----|------|\n| `openclaw-weixin` | 微信 |\n| `feishu` | 飞书 |\n| `telegram` | Telegram |\n| `discord` | Discord |\n\n#### Step 3：调用 CLI（安全模式）\n\n**⚠️ 安全规则：**\n1. 必须用 exec 的数组（argv）模式，**禁止拼接 shell 字符串**\n2. URL 必须验证以 `http://` 或 `https://` 开头\n3. 不处理含密钥、密码、内部文档的敏感内容\n\n```python\n# ✅ 安全：argv 数组传参，不走 shell 解析\nTOOL_DIR = r\"C:\\Users\\www\\.openclaw\\workspace\\skills\\web-tts-speaker\"\n\n# 朗读网页\nresult = exec(\n    command=[\"python\", \"cli.py\", \"--url\", url],\n    workdir=TOOL_DIR,\n    timeout=300\n)\n\n# 文字转语音\nresult = exec(\n    command=[\"python\", \"cli.py\", \"--text\", text],\n    workdir=TOOL_DIR,\n    timeout=300\n)\n```\n\n> 注意：`workdir` 参数指定工作目录，执行时自动切换到该目录。\n\n#### Step 4：解析输出\n\nCLI 一次性输出全部渠道标记。根据来源渠道选取对应的：\n\n| 来源 channel | 取用标记 | 发送文件 |\n|-------------|---------|---------|\n| `openclaw-weixin` | `[WECHAT_VOICE]` | `file=xxx.mp3` |\n| `feishu` | `[FEISHU_VOICE]` | `file=xxx.opus` |\n| `telegram` | `[TELEGRAM_VOICE]` | `file=xxx.mp3` |\n| `discord` | `[DISCORD_VOICE]` | `file=xxx.mp3` |\n\n#### Step 5：发送语音\n\n```python\n# 微信\nmessage(action=\"send\", channel=\"openclaw-weixin\", media=file_path)\n\n# 飞书语音条\nmessage(action=\"send\", channel=\"feishu\", asVoice=true, filePath=file_path)\n\n# Telegram / Discord\nmessage(action=\"send\", channel=\"telegram\", media=file_path)\n```\n\n### 完整调用示例\n\n```python\n# 用户说：朗读 https://zshttp.com/2981.html\n\n# Step 2\nchannel = \"openclaw-weixin\"         # 从 inbound context 获取\n\n# Step 3 - 安全调用\nimport re\nif not re.match(r\"^https?://\", url):\n    return \"仅支持 http/https 链接\"\n\nresult = exec(\n    command=[\"python\", \"cli.py\", \"--url\", url],\n    workdir=r\"C:\\Users\\www\\.openclaw\\workspace\\skills\\web-tts-speaker\",\n    timeout=300\n)\n\n# Step 4 - 解析标记\nfor line in result.stdout.split(\"\\n\"):\n    if line.startswith(\"[WECHAT_VOICE]\"):\n        # 取下几行找到 file=xxx\n        ...\n\n# Step 5 - 发送\nmessage(action=\"send\", channel=channel, media=file_path)\n```\n\n---\n\n## 快速命令\n\n```bash\n# 自动模式（推荐）：生成全部格式\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n\n# 指定单渠道\npython cli.py --channel feishu --text \"你好\"\npython cli.py -c wechat --text \"你好\"\n```\n\n## 支持渠道\n\n| 渠道 | 格式 | 发送方式 |\n|------|------|---------|\n| **feishu** | `.opus` (16kHz) | `asVoice=true` |\n| **wechat** | `.mp3` (24kHz) | `media=xxx` |\n| **telegram** | `.mp3` (24kHz) | `media=xxx` |\n| **discord** | `.mp3` (24kHz) | `media=xxx` |\n\n> ⚠️ **微信说明**：`openclaw-weixin` 插件暂未实现原生语音气泡发送（[GH#61031](https://github.com/openclaw/openclaw/issues/61031)），当前以 MP3 文件形式发送。\n\n## 长文本支持\n\n自动分块 + 拼接，不限长度。输出进度：\n\n```\n[1/2] 生成语音 (2772 字符)... 9分18秒\n[2/2] 生成语音 (1543 字符)... 5分19秒\n✅ 合成完成\n📁 wechat: voice.mp3 (5140KB, 14分37秒)\n```\n\n## 语音角色\n\n```bash\npython cli.py --text \"你好\" --voice zh-CN-YunxiNeural\n```\n\n- `zh-CN-XiaoxiaoNeural` — 晓晓（女声，默认）\n- `zh-CN-YunxiNeural` — 云希（男声，活泼）\n- `zh-CN-YunyangNeural` — 云扬（男声，新闻）\n- `zh-CN-XiaoyiNeural` — 晓伊（女声，柔和）\n\n## 输出标记示例\n\n```\n[WECHAT_VOICE]\nchannel=wechat\nfile=/path/to/voice.mp3\ntext=新闻摘要...\ndur=877\nsize=5262860\nfull=微信文件消息\n[/WECHAT_VOICE]\n```\n\n## 依赖\n\n```bash\npip install -r requirements.txt\n```\n\n依赖锁定的精确版本（ClawScan 推荐）：\n- `edge-tts==7.2.8`\n- `beautifulsoup4==4.14.3`\n- `requests==2.33.1`\n\n额外依赖：**FFmpeg**（系统级）。\n\nFile v3.0.2:README.md\n\n# Web TTS Speaker v3.0\n\n**网页/文字 → TTS语音 → 飞书语音条 / 微信语音文件**\n\n不调飞书/微信 API，不复杂。Agent 负责发送，脚本只负责**提取文字 → 生成语音 → 输出标记**。\n\n---\n\n## 快速开始\n\n```bash\n# 安装依赖\npip install edge-tts beautifulsoup4 requests\n\n# 飞书语音条（Opus格式）\npython cli.py --channel feishu --url https://example.com/article\npython cli.py -c feishu --text \"你好世界\"\n\n# 微信语音文件（MP3格式）\npython cli.py --channel wechat --url https://example.com/article\npython cli.py -c wechat --text \"你好世界\"\n```\n\n## 渠道说明\n\n| 参数 | 输出格式 | 声道/码率 | 发送方式 | 效果 |\n|------|---------|-----------|---------|------|\n| `-c feishu` | `.opus` | 单声道 16kHz / 12kbps | `message(asVoice=true)` | 飞书语音气泡 ✅ |\n| `-c wechat` | `.mp3` | 单声道 24kHz / 48kbps | `message(media=xxx)` | 微信文件消息（点开可听） |\n\n> ⚠️ **微信说明**：`openclaw-weixin` 插件暂未实现原生语音气泡发送（[GH#61031](https://github.com/openclaw/openclaw/issues/61031)），当前以 MP3 文件形式发送，点击即可播放。后续插件支持后可升级为语音气泡。\n\n## 使用指南\n\n### 1. 读取网页朗读\n\n```bash\npython cli.py -c feishu --url https://example.com/long-article\n```\n\n自动提取正文（过滤导航/广告/页脚），支持中英文。\n\n### 2. 直接文字转语音\n\n```bash\npython cli.py -c wechat --text \"会议提醒：下午3点有项目评审\"\n```\n\n适合快速生成通知/提醒语音。\n\n### 3. 指定语音角色\n\n```bash\npython cli.py -c feishu --text \"你好\" --voice zh-CN-YunxiNeural\n```\n\nEdge TTS 支持多种中文语音：\n- `zh-CN-XiaoxiaoNeural` — 晓晓（女声，默认）\n- `zh-CN-YunxiNeural` — 云希（男声，活泼）\n- `zh-CN-YunyangNeural` — 云扬（男声，新闻）\n- `zh-CN-XiaoyiNeural` — 晓伊（女声，柔和）\n\n### 4. 自定义输出文件\n\n```bash\npython cli.py -c wechat --text \"通知\" -o notice.mp3\n```\n\n## 输出标记\n\n脚本输出标准化标记，供 Agent/Cron 任务读取：\n\n### 飞书\n\n```bash\n[FEISHU_VOICE]\nchannel=feishu\nfile=/path/to/voice.opus\ntext=会议提醒：下午3点有项目评审...\n[/FEISHU_VOICE]\n```\n\n**Agent 执行：**\n\n```python\nmessage(\n  action: \"send\",\n  channel: \"feishu\",\n  asVoice: true,\n  filePath: \"/path/to/voice.opus\"\n)\n```\n\n### 微信\n\n```bash\n[WECHAT_VOICE]\nchannel=wechat\nfile=/path/to/voice.mp3\ntext=会议提醒：下午3点有项目评审...\n[/WECHAT_VOICE]\n```\n\n**Agent 执行：**\n\n```python\nmessage(\n  action: \"send\",\n  channel: \"openclaw-weixin\",\n  media: \"/path/to/voice.mp3\"\n)\n```\n\n## Cron 集成示例\n\n```bash\n# 每天早8点朗读新闻（飞书）\n0 8 * * * cd /path/to/web-tts-speaker && \\\n  python cli.py -c feishu --url https://news.example.com/today\n\n# 整点时间播报（微信）\n0 * * * * cd /path/to/web-tts-speaker && \\\n  python cli.py -c wechat --text \"现在是$(date +%H:%M)\"\n```\n\n## 依赖\n\n| 依赖 | 用途 | 安装 |\n|------|------|------|\n| **Python 3.8+** | 运行环境 | — |\n| **edge-tts** | Microsoft Edge 神经网络 TTS（免费，无需 API Key） | `pip install edge-tts` |\n| **beautifulsoup4** | 网页正文提取 | `pip install beautifulsoup4` |\n| **requests** | 网页抓取 | `pip install requests` |\n| **FFmpeg** | 音频转码 | 见下方 |\n\n### FFmpeg 安装\n\n- **Windows:** 下载 [gyan.dev 编译版](https://www.gyan.dev/ffmpeg/builds/)，将 `bin/` 加入 PATH\n- **macOS:** `brew install ffmpeg`\n- **Linux:** `apt install ffmpeg`\n\n## 架构\n\n```\nURL/文本\n    │\n    ▼\n网页提取正文 ──→ Edge TTS 生成语音 ──→ FFmpeg 转码\n    │                                             │\n    │                                    ┌────────┴────────┐\n    │                                    ▼                  ▼\n    │                              feishu(.opus)      wechat(.mp3)\n    │                                    │                  │\n    └── [FEISHU_VOICE] / [WECHAT_VOICE] 标记               │\n                                                │                  │\n                                                ▼                  ▼\n                                         message(asVoice)    message(media)\n                                                │                  │\n                                                ▼                  ▼\n                                          飞书语音气泡 ✅     微信 MP3 ✅\n```\n\n## 开发\n\n- `cli.py` — 主程序（~120 行）\n- `requirements.txt` — Python 依赖清单\n- 新增渠道：在 `generate_voice()` 函数添加 `elif channel == \"xxx\"` 分支，指定 FFmpeg 转码参数和文件扩展名即可\n\n## 安全与隐私\n\n- ⚠️ **不处理敏感内容**：文本经微软 Edge TTS 云端处理，不要朗读密钥、密码、内部文档\n- ⚠️ **URL 校验**：仅接受 `http://` / `https://` 协议，拒绝其他协议和命令注入尝试\n- ⚠️ **渠道安全**：语音通过 Agent 所在的消息通道发送，确保通道权限配置正确\n- ✅ **依赖锁定**：`requirements.txt` 使用精确版本号，防止上游更新引入意外行为\n\n## 版本\n\nv3.0 — 简化重构版，砍掉所有飞书 API 直调代码，新增多渠道支持\n\nFile v3.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn72nytm5dxvsna04vkn7q2k3d827y6x\",\n  \"slug\": \"web-tts-speaker\",\n  \"version\": \"3.0.2\",\n  \"publishedAt\": 1778677003652\n}\n\nFile v3.0.2:requirements.txt\n\nedge-tts==7.2.8\nbeautifulsoup4==4.14.3\nrequests==2.33.1\n\nArchive v3.0.1: 5 files, 9191 bytes\n\nFiles: _meta.json (134b), cli.py (10988b), README.md (4911b), requirements.txt (60b), SKILL.md (5090b)\n\nFile v3.0.1:SKILL.md\n\n---\nname: web-tts-speaker\ndescription: \"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3）\"\nmetadata:\n  openclaw:\n    requires: { bins: [\"python3\"] }\n    install:\n      - id: python\n        kind: pip\n        package: \"-r requirements.txt\"\n---\n\n# web-tts-speaker v3.0\n\n**网页/文字 → TTS语音 → 自动匹配来源渠道发送**\n\n## 一句话用法\n\n```bash\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n```\n\n默认 `--channel auto`，生成所有格式，Agent 按来源渠道自动取用。\n\n---\n\n## 🧠 Agent 工具定义\n\n当用户希望**朗读网页**或**将文字转为语音**时，按以下流程操作。\n\n### 触发条件\n\n用户消息中出现以下意图之一：\n- \"朗读 / 读一下 / 帮我读 / 听一下\" + **URL**\n- \"朗读 / 读一下 / 帮我读 / 听一下\" + **文本内容**\n- 直接发了一个 **URL**（自动朗读）\n- \"转语音 / 生成语音 / TTS\"\n\n### 执行流程\n\n#### Step 1：提取目标文本\n\n```\n用户说 \"朗读 https://abc.com/article\"  → 取 URL\n用户说 \"帮我读一下这段：你好世界\"      → 取文本\n用户直接发一个 URL                     → 取 URL\n```\n\n#### Step 2：获取来源渠道\n\n从当前消息的 `inbound context` 中读取 `channel` 字段：\n\n```json\n// inbound metadata 示例\n{ \"channel\": \"openclaw-weixin\" }   // 微信\n{ \"channel\": \"feishu\" }           // 飞书\n{ \"channel\": \"telegram\" }         // Telegram\n{ \"channel\": \"discord\" }          // Discord\n```\n\n#### Step 3：调用 CLI\n\n```bash\ncd C:\\Users\\www\\.openclaw\\workspace\\skills\\web-tts-speaker\n\n# 朗读网页（自动模式）\npython cli.py --url \"https://example.com/article\"\n\n# 文字转语音（自动模式）\npython cli.py --text \"你好世界\"\n```\n\n使用 **exec 工具** 执行，并捕获 stdout。\n\n#### Step 4：解析输出标记\n\nCLI 输出多个渠道标记。根据来源渠道选取对应的那个：\n\n| 来源 channel | 取用标记 | 发送文件 |\n|-------------|---------|---------|\n| `openclaw-weixin` | `[WECHAT_VOICE]` | `file=xxx.mp3` |\n| `feishu` | `[FEISHU_VOICE]` | `file=xxx.opus` |\n| `telegram` | `[TELEGRAM_VOICE]` | `file=xxx.mp3` |\n| `discord` | `[DISCORD_VOICE]` | `file=xxx.mp3` |\n\n#### Step 5：发送语音\n\n用 `message` 工具发送，channel 和 file 从所选标记中提取：\n\n**微信：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"openclaw-weixin\",\n    media: \"/path/to/voice.mp3\"\n)\n```\n\n**飞书：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"feishu\",\n    asVoice: true,\n    filePath: \"/path/to/voice.opus\"\n)\n```\n\n**Telegram / Discord：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"telegram\",   # 或 \"discord\"\n    media: \"/path/to/voice.mp3\"\n)\n```\n\n---\n\n## 完整调用示例（给 Agent 参考）\n\n```\n用户: 朗读 https://zshttp.com/2981.html\n\n→ 检测来源: inbound metadata.channel = \"openclaw-weixin\"\n→ 执行: exec(command=\"cd C:\\\\Users\\\\www\\\\.openclaw\\\\workspace\\\\skills\\\\web-tts-speaker && python cli.py --url https://zshttp.com/2981.html\", timeout=300)\n→ 解析输出:\n   找到 [WECHAT_VOICE] 标记\n   file=C:\\xxx\\voice_195836.mp3\n→ 发送:\n   message(action=\"send\", channel=\"openclaw-weixin\", media=\"C:\\xxx\\voice_195836.mp3\")\n→ 回复用户: \"语音已发到微信\"\n```\n\n```\n用户: 帮我读一下这篇文章的摘要：今天天气真好...\n\n→ 检测来源: inbound metadata.channel = \"feishu\"\n→ 执行: exec(command=\"cd C:\\\\Users\\\\www\\\\.openclaw\\\\workspace\\\\skills\\\\web-tts-speaker && python cli.py --text '今天天气真好...'\")\n→ 解析输出:\n   找到 [FEISHU_VOICE] 标记\n   file=C:\\xxx\\voice_xxxxxx.opus\n→ 发送:\n   message(action=\"send\", channel=\"feishu\", asVoice=true, filePath=\"C:\\xxx\\voice_xxxxxx.opus\")\n→ 回复用户: \"语音条已发到飞书\"\n```\n\n---\n\n## 快速命令\n\n```bash\n# 自动模式（推荐）：一次性生成所有格式\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n\n# 指定单渠道\npython cli.py --channel feishu --text \"你好\"\npython cli.py -c wechat --text \"你好\"\n```\n\n## 支持渠道\n\n| 渠道 | 格式 | 发送方式 |\n|------|------|---------|\n| **feishu** | `.opus` (16kHz) | `asVoice=true` |\n| **wechat** | `.mp3` (24kHz) | `media=xxx` |\n| **telegram** | `.mp3` (24kHz) | `media=xxx` |\n| **discord** | `.mp3` (24kHz) | `media=xxx` |\n\n> ⚠️ **微信说明**：`openclaw-weixin` 插件暂未实现原生语音气泡发送（[GH#61031](https://github.com/openclaw/openclaw/issues/61031)），当前以 MP3 文件形式发送。\n\n## 长文本支持\n\n自动分块 + 拼接，不限长度。\n\n## 语音角色\n\n```bash\npython cli.py --text \"你好\" --voice zh-CN-YunxiNeural\n```\n\n常用中文语音：\n- `zh-CN-XiaoxiaoNeural` — 晓晓（女声，默认）\n- `zh-CN-YunxiNeural` — 云希（男声，活泼）\n- `zh-CN-YunyangNeural` — 云扬（男声，新闻）\n- `zh-CN-XiaoyiNeural` — 晓伊（女声，柔和）\n\n## 依赖\n\n```bash\npip install edge-tts beautifulsoup4 requests\n```\n\n也依赖系统安装的 **FFmpeg**。\n\nFile v3.0.1:README.md\n\n# Web TTS Speaker v3.0\n\n**网页/文字 → TTS语音 → 飞书语音条 / 微信语音文件**\n\n不调飞书/微信 API，不复杂。Agent 负责发送，脚本只负责**提取文字 → 生成语音 → 输出标记**。\n\n---\n\n## 快速开始\n\n```bash\n# 安装依赖\npip install edge-tts beautifulsoup4 requests\n\n# 飞书语音条（Opus格式）\npython cli.py --channel feishu --url https://example.com/article\npython cli.py -c feishu --text \"你好世界\"\n\n# 微信语音文件（MP3格式）\npython cli.py --channel wechat --url https://example.com/article\npython cli.py -c wechat --text \"你好世界\"\n```\n\n## 渠道说明\n\n| 参数 | 输出格式 | 声道/码率 | 发送方式 | 效果 |\n|------|---------|-----------|---------|------|\n| `-c feishu` | `.opus` | 单声道 16kHz / 12kbps | `message(asVoice=true)` | 飞书语音气泡 ✅ |\n| `-c wechat` | `.mp3` | 单声道 24kHz / 48kbps | `message(media=xxx)` | 微信文件消息（点开可听） |\n\n> ⚠️ **微信说明**：`openclaw-weixin` 插件暂未实现原生语音气泡发送（[GH#61031](https://github.com/openclaw/openclaw/issues/61031)），当前以 MP3 文件形式发送，点击即可播放。后续插件支持后可升级为语音气泡。\n\n## 使用指南\n\n### 1. 读取网页朗读\n\n```bash\npython cli.py -c feishu --url https://example.com/long-article\n```\n\n自动提取正文（过滤导航/广告/页脚），支持中英文。\n\n### 2. 直接文字转语音\n\n```bash\npython cli.py -c wechat --text \"会议提醒：下午3点有项目评审\"\n```\n\n适合快速生成通知/提醒语音。\n\n### 3. 指定语音角色\n\n```bash\npython cli.py -c feishu --text \"你好\" --voice zh-CN-YunxiNeural\n```\n\nEdge TTS 支持多种中文语音：\n- `zh-CN-XiaoxiaoNeural` — 晓晓（女声，默认）\n- `zh-CN-YunxiNeural` — 云希（男声，活泼）\n- `zh-CN-YunyangNeural` — 云扬（男声，新闻）\n- `zh-CN-XiaoyiNeural` — 晓伊（女声，柔和）\n\n### 4. 自定义输出文件\n\n```bash\npython cli.py -c wechat --text \"通知\" -o notice.mp3\n```\n\n## 输出标记\n\n脚本输出标准化标记，供 Agent/Cron 任务读取：\n\n### 飞书\n\n```bash\n[FEISHU_VOICE]\nchannel=feishu\nfile=/path/to/voice.opus\ntext=会议提醒：下午3点有项目评审...\n[/FEISHU_VOICE]\n```\n\n**Agent 执行：**\n\n```python\nmessage(\n  action: \"send\",\n  channel: \"feishu\",\n  asVoice: true,\n  filePath: \"/path/to/voice.opus\"\n)\n```\n\n### 微信\n\n```bash\n[WECHAT_VOICE]\nchannel=wechat\nfile=/path/to/voice.mp3\ntext=会议提醒：下午3点有项目评审...\n[/WECHAT_VOICE]\n```\n\n**Agent 执行：**\n\n```python\nmessage(\n  action: \"send\",\n  channel: \"openclaw-weixin\",\n  media: \"/path/to/voice.mp3\"\n)\n```\n\n## Cron 集成示例\n\n```bash\n# 每天早8点朗读新闻（飞书）\n0 8 * * * cd /path/to/web-tts-speaker && \\\n  python cli.py -c feishu --url https://news.example.com/today\n\n# 整点时间播报（微信）\n0 * * * * cd /path/to/web-tts-speaker && \\\n  python cli.py -c wechat --text \"现在是$(date +%H:%M)\"\n```\n\n## 依赖\n\n| 依赖 | 用途 | 安装 |\n|------|------|------|\n| **Python 3.8+** | 运行环境 | — |\n| **edge-tts** | Microsoft Edge 神经网络 TTS（免费，无需 API Key） | `pip install edge-tts` |\n| **beautifulsoup4** | 网页正文提取 | `pip install beautifulsoup4` |\n| **requests** | 网页抓取 | `pip install requests` |\n| **FFmpeg** | 音频转码 | 见下方 |\n\n### FFmpeg 安装\n\n- **Windows:** 下载 [gyan.dev 编译版](https://www.gyan.dev/ffmpeg/builds/)，将 `bin/` 加入 PATH\n- **macOS:** `brew install ffmpeg`\n- **Linux:** `apt install ffmpeg`\n\n## 架构\n\n```\nURL/文本\n    │\n    ▼\n网页提取正文 ──→ Edge TTS 生成语音 ──→ FFmpeg 转码\n    │                                             │\n    │                                    ┌────────┴────────┐\n    │                                    ▼                  ▼\n    │                              feishu(.opus)      wechat(.mp3)\n    │                                    │                  │\n    └── [FEISHU_VOICE] / [WECHAT_VOICE] 标记               │\n                                                │                  │\n                                                ▼                  ▼\n                                         message(asVoice)    message(media)\n                                                │                  │\n                                                ▼                  ▼\n                                          飞书语音气泡 ✅     微信 MP3 ✅\n```\n\n## 开发\n\n- `cli.py` — 主程序（~120 行）\n- `requirements.txt` — Python 依赖清单\n- 新增渠道：在 `generate_voice()` 函数添加 `elif channel == \"xxx\"` 分支，指定 FFmpeg 转码参数和文件扩展名即可\n\n## 版本\n\nv3.0 — 简化重构版，砍掉所有飞书 API 直调代码，新增微信渠道支持\n\nFile v3.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn72nytm5dxvsna04vkn7q2k3d827y6x\",\n  \"slug\": \"web-tts-speaker\",\n  \"version\": \"3.0.1\",\n  \"publishedAt\": 1778676133713\n}\n\nFile v3.0.1:requirements.txt\n\nedge-tts>=6.0.0\nbeautifulsoup4>=4.12.0\nrequests>=2.31.0\n\nArchive v3.0.0: 5 files, 4096 bytes\n\nFiles: _meta.json (134b), cli.py (3495b), README.md (1343b), requirements.txt (60b), SKILL.md (1330b)\n\nFile v3.0.0:SKILL.md\n\n---\nname: web-tts-speaker\ndescription: \"网页一键朗读：输入URL或文本，TTS转语音，飞书语音条推送\"\nmetadata:\n  openclaw:\n    requires: { bins: [\"python3\"] }\n    install:\n      - id: python\n        kind: pip\n        package: \"-r requirements.txt\"\n---\n\n# web-tts-speaker v3.0\n\n**网页/文字 → TTS语音 → 飞书语音条**\n\n一个极简的网页转语音工具，只做三件事：**提取文字 → 生成语音 → 输出标记**\n\n## 使用方式\n\n```bash\n# 朗读网页\npython cli.py --url https://example.com/article\n\n# 直接文字转语音\npython cli.py --text \"你好世界\"\n```\n\n## 输出格式\n\n脚本输出 `[FEISHU_VOICE]` 标记供 Cron/Agent 读取：\n\n```bash\n[FEISHU_VOICE]\nfile=/path/to/voice.opus\ntext=标题...\n[/FEISHU_VOICE]\n```\n\nAgent 读取后用 `message` 工具发送飞书语音条：\n\n```python\nmessage(\n  action: \"send\",\n  channel: \"feishu\",\n  asVoice: true,\n  filePath: \"/path/to/voice.opus\"\n)\n```\n\n## 依赖\n\n```bash\npip install edge-tts beautifulsoup4 requests\n```\n\n也依赖系统安装的 FFmpeg（用于转码为标准 opus 格式）。\n\n## 架构原则\n\n- 🎯 **只做一件事**：网页→语音，不搞复杂架构\n- 🚫 **不调飞书API**：不依赖 app_id/app_secret\n- 🔧 **不转码**：交给 FFmpeg 处理\n- 📦 **极简依赖**：只需 3 个 Python 包\n\nFile v3.0.0:README.md\n\n# Web TTS Speaker v3.0\n\n**网页/文字 → TTS语音 → 飞书语音条**  \n极简工具，不调飞书API，不转码，不复杂\n\n## 快速开始\n\n```bash\n# 安装依赖\npip install edge-tts beautifulsoup4 requests\n\n# 朗读网页\npython cli.py --url https://example.com/article\n\n# 直接文字转语音\npython cli.py --text \"你好世界\"\n```\n\n## 输出\n\n生成 `.opus` 语音文件，并输出 `[FEISHU_VOICE]` 标记供 Agent 读取：\n\n```bash\n[FEISHU_VOICE]\nfile=/path/to/voice.opus\ntext=标题...\n[/FEISHU_VOICE]\n```\n\n## 飞书发送（由 Agent 执行）\n\n```python\nmessage(\n  action: \"send\",\n  channel: \"feishu\",\n  asVoice: true,\n  filePath: \"/path/to/voice.opus\"\n)\n```\n\n## 依赖\n\n- Python 3.8+\n- FFmpeg（用于转码为标准 opus 格式）\n- edge-tts、beautifulsoup4、requests\n\n## 架构\n\n```\nURL/文本 → 提取正文 → Edge TTS → FFmpeg转码 → .opus文件\n                                                        ↓\n                                              [FEISHU_VOICE]标记\n                                                        ↓\n                                              message(asVoice=true)\n                                                        ↓\n                                              飞书语音条 ✅\n```\n\n## 版本\n\nv3.0 — 简化重构版，砍掉所有飞书API直调代码\n\nFile v3.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn72nytm5dxvsna04vkn7q2k3d827y6x\",\n  \"slug\": \"web-tts-speaker\",\n  \"version\": \"3.0.0\",\n  \"publishedAt\": 1778578469021\n}\n\nFile v3.0.0:requirements.txt\n\nedge-tts>=6.0.0\nbeautifulsoup4>=4.12.0\nrequests>=2.31.0","readmeExcerpt":"Skill: Web TTS Speaker Owner: phentse Summary: 网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3） Tags: latest:3.2.1 Version history: v3.2.1 | 2026-05-20T12:46:13.208Z | user 🔧 v3.2.1 — 修复SKILL.md：添加version字段到frontmatter、修正workspace完整路径(agents\\tech)，重新发布完整文档包。 v3.2.0 | 2026-05-20T12:38:39.167Z | user 📦 v3.2.0 — PKG精简：删除测试语音&__pycache__，精编文档(README/skill.json)，新增对比表引导废弃项目，零冗余发布。 v3.1.0 | 2026-05-20T11:52:51.","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"python cli.py --url https://example.com/article\npython cli.py --text \"你好世界\""},{"language":"text","snippet":"用户说 \"朗读 https://abc.com/article\"  → 取 URL\n用户说 \"帮我读一下这段：你好世界\"      → 取文本\n用户直接发一个 URL                     → 取 URL"},{"language":"json","snippet":"// inbound metadata 示例\n{ \"channel\": \"openclaw-weixin\" }   // 微信\n{ \"channel\": \"feishu\" }           // 飞书\n{ \"channel\": \"telegram\" }         // Telegram\n{ \"channel\": \"discord\" }          // Discord"},{"language":"bash","snippet":"cd C:\\Users\\www\\.openclaw\\agents\\tech\\workspace\\skills\\web-tts-speaker\n\n# 朗读网页（自动模式）\npython cli.py --url \"https://example.com/article\"\n\n# 文字转语音（自动模式）\npython cli.py --text \"你好世界\""},{"language":"python","snippet":"message(\n    action: \"send\",\n    channel: \"openclaw-weixin\",\n    media: \"/path/to/voice.mp3\"\n)"},{"language":"python","snippet":"message(\n    action: \"send\",\n    channel: \"feishu\",\n    asVoice: true,\n    filePath: \"/path/to/voice.opus\"\n)"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: web-tts-speaker\nversion: 3.2.1\ndescription: \"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3）\"\nmetadata:\n  openclaw:\n    requires: { bins: [\"python3\"] }\n    install:\n      - id: python\n        kind: pip\n        package: \"-r requirements.txt\"\n---\n\n# web-tts-speaker v3.2.1\n\n**网页/文字 → TTS语音 → 多渠道自动匹配推送**\n\n> 📢 替代 [web-reader-tts](https://clawhub.ai/packages/web-reader-tts) — 所有功能由本项目统一覆盖。\n\n## 一句话用法\n\n```bash\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n```\n\n默认 `--channel auto`，生成所有格式，Agent 按来源渠道自动取用。\n\n---\n\n## 🧠 Agent 工具定义\n\n当用户希望**朗读网页**或**将文字转为语音**时，按以下流程操作。\n\n### 触发条件\n\n用户消息中出现以下意图之一：\n- \"朗读 / 读一下 / 帮我读 / 听一下\" + **URL**\n- \"朗读 / 读一下 / 帮我读 / 听一下\" + **文本内容**\n- 直接发了一个 **URL**（自动朗读）\n- \"转语音 / 生成语音 / TTS\"\n\n### 执行流程\n\n#### Step 1：提取目标文本\n\n```\n用户说 \"朗读 https://abc.com/article\"  → 取 URL\n用户说 \"帮我读一下这段：你好世界\"      → 取文本\n用户直接发一个 URL                     → 取 URL\n```\n\n#### Step 2：获取来源渠道\n\n从当前消息的 `inbound context` 中读取 `channel` 字段：\n\n```json\n// inbound metadata 示例\n{ \"channel\": \"openclaw-weixin\" }   // 微信\n{ \"channel\": \"feishu\" }           // 飞书\n{ \"channel\": \"telegram\" }         // Telegram\n{ \"channel\": \"discord\" }          // Discord\n```\n\n#### Step 3：调用 CLI\n\n```bash\ncd C:\\Users\\www\\.openclaw\\agents\\tech\\workspace\\skills\\web-tts-speaker\n\n# 朗读网页（自动模式）\npython cli.py --url \"https://example.com/article\"\n\n# 文字转语音（自动模式）\npython cli.py --text \"你好世界\"\n```\n\n使用 **exec 工具** 执行，并捕获 stdout。\n\n#### Step 4：解析输出标记\n\nCLI 输出多个渠道标记。根据来源渠道选取对应的那个：\n\n| 来源 channel | 取用标记 | 发送文件 |\n|-------------|---------|---------|\n| `openclaw-weixin` | `[WECHAT_VOICE]` | `file=xxx.mp3` |\n| `feishu` | `[FEISHU_VOICE]` | `file=xxx.opus` |\n| `telegram` | `[TELEGRAM_VOICE]` | `file=xxx.mp3` |\n| `discord` | `[DISCORD_VOICE]` | `file=xxx.mp3` |\n\n#### Step 5：发送语音\n\n用 `message` 工具发送，channel 和 file 从所选标记中提取：\n\n**微信：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"openclaw-weixin\",\n    media: \"/path/to/voice.mp3\"\n)\n```\n\n**飞书：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"feishu\",\n    asVoice: true,\n    filePath: \"/path/to/voice.opus\"\n)\n```\n\n**Telegram / Discord：**\n```python\nmessage(\n    action: \"send\",\n    channel: \"telegram\",   # 或 \"discord\"\n    media: \"/path/to/voice.mp3\"\n)\n```\n\n---\n\n## 完整调用示例（给 Agent 参考）\n\n```\n用户: 朗读 https://zshttp.com/2981.html\n\n→ 检测来源: inbound metadata.channel = \"openclaw-weixin\"\n→ 执行: exec(command=\"cd C:\\\\Users\\\\www\\\\.openclaw\\\\workspace\\\\skills\\\\web-tts-speaker && python cli.py --url https://zshttp.com/2981.html\", timeout=300)\n→ 解析输出:\n   找到 [WECHAT_VOICE] 标记\n   file=C:\\xxx\\voice_195836.mp3\n→ 发送:\n   message(action=\"send\", channel=\"openclaw-weixin\", media=\"C:\\xxx\\voice_195836.mp3\")\n→ 回复用户: \"语音已发到微信\"\n```\n\n```\n用户: 帮我读一下这篇文章的摘要：今天天气真好...\n\n→ 检测来源: inbound metadata.channel = \"feishu\"\n→ 执行: exec(command=\"cd C:\\\\Users\\\\www\\\\.openclaw\\\\workspace\\\\skills\\\\web-tts-speaker && python cli.py --text '今天天气真好...'\")\n→ 解析输出:\n   找到 [FEISHU_VOICE] 标记\n   file=C:\\xxx\\voice_xxxxxx.opus\n→ 发送:\n   message(action=\"send\", channel=\"feishu\", asVoice=true, filePath=\"C:\\xxx\\v"},{"path":"README.md","content":"# Web TTS Speaker v3.2.0\n\n**网页/文字 → TTS语音 → 多渠道自动匹配推送**\n\n一键朗读网页或文字，自动生成适配不同平台的语音格式。不调飞书/微信 API，Agent 负责发送，脚本只做三件事：**提取文字 → 生成语音 → 输出标准化标记**。\n\n> 📢 **替代 [web-reader-tts](https://clawhub.ai/packages/web-reader-tts)**\n> Web Reader TTS 已废弃，所有功能由本项目统一覆盖。新增多渠道支持（飞书语音条/微信 MP3/TG/Discord）、自动格式匹配、零飞书 API 依赖。\n\n---\n\n## 快速开始\n\n```bash\n# 安装依赖\npip install edge-tts beautifulsoup4 requests\n\n# 自动模式：生成全部渠道格式\npython cli.py --url https://example.com/article\npython cli.py --text \"你好世界\"\n\n# 指定单渠道\npython cli.py -c feishu --text \"你好世界\"\npython cli.py -c wechat --text \"你好世界\"\n```\n\n---\n\n## 渠道支持\n\n| 渠道 | 输出格式 | 声道/码率 | Agent 发送方式 |\n|------|---------|-----------|---------------|\n| `-c feishu` | `.opus` | 单声道 16kHz / 12kbps | `asVoice=true` → 飞书语音气泡 |\n| `-c wechat` | `.mp3` | 单声道 24kHz / 48kbps | `media=xxx` → 微信文件消息 |\n| `-c telegram` | `.mp3` | 单声道 24kHz / 48kbps | `media=xxx` → TG 文件消息 |\n| `-c discord` | `.mp3` | 单声道 24kHz / 48kbps | `media=xxx` → Discord 文件消息 |\n| `-c auto`（默认） | 全部 | — | Agent 按来源渠道自动取用 |\n\n---\n\n## 使用场景\n\n### 朗读网页\n\n```bash\npython cli.py -c feishu --url https://example.com/article\n```\n\n自动提取正文（过滤导航/广告/页脚），支持中英文。\n\n### 文字转语音\n\n```bash\npython cli.py -c wechat --text \"会议提醒：下午3点有项目评审\"\n```\n\n适合快速生成通知/提醒语音。\n\n### 指定语音角色\n\n```bash\npython cli.py -c feishu --text \"你好\" --voice zh-CN-YunxiNeural\n```\n\n常用中文语音：\n\n| 语音参数 | 角色 |\n|---------|------|\n| `zh-CN-XiaoxiaoNeural` | 晓晓（女声，默认） |\n| `zh-CN-YunxiNeural` | 云希（男声，活泼） |\n| `zh-CN-YunyangNeural` | 云扬（男声，新闻） |\n| `zh-CN-XiaoyiNeural` | 晓伊（女声，柔和） |\n\n### 自定义输出\n\n```bash\npython cli.py -c wechat --text \"通知\" -o notice.mp3\n```\n\n---\n\n## 输出标记（Agent 读取）\n\n自动模式输出标准化标记块，Agent 根据请求来源渠道自动选取对应文件：\n\n```text\n[FEISHU_VOICE]\nchannel=feishu\nfile=/path/to/voice.opus\ntext=会议提醒：下午3点有项目评审...\ndur=15\nsize=22124\nfull=飞书语音气泡\n[/FEISHU_VOICE]\n\n[WECHAT_VOICE]\nchannel=wechat\nfile=/path/to/voice.mp3\ntext=会议提醒：下午3点有项目评审...\ndur=15\nsize=88560\nfull=微信文件消息\n[/WECHAT_VOICE]\n```\n\n---\n\n## 架构\n\n```\nURL/文本\n    │\n    ▼\n网页提取正文 ──→ Edge TTS 分块合成 ──→ 合并 WAV ──→ 多渠道转码\n    │                                                    │\n    │                                         ┌──────────┼──────────┐\n    │                                         ▼          ▼          ▼\n    │                                     feishu     wechat     telegram/discord\n    │                                    (.opus)    (.mp3)       (.mp3)\n    │                                         │          │            │\n    └───输出标准化标记供 Agent 解析 ──────────┘──────────┘────────────┘\n                                                    │\n                                                    ▼\n                                           message() → 渠道语音发送\n```\n\n---\n\n## 依赖\n\n| 依赖 | 用途 | 安装 |\n|------|------|------|\n| Python 3.8+ | 运行环境 | — |\n| edge-tts | 微软 Edge 神经网络 TTS（免费，无需 API Key） | `pip install edge-tts` |\n| beautifulsoup4 | 网页正文提取 | `pip install beautifulsoup4` |\n| requests | 网页抓取 | `pip install requests` |\n| FFmpeg | 音频转码 | [gyan.dev](https://www.gyan.dev/ffmpeg/builds/) / `brew install ffmpeg` / `apt install ffmpeg` |\n\n---\n\n## 与"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn72nytm5dxvsna04vkn7q2k3d827y6x\",\n  \"slug\": \"web-tts-speaker\",\n  \"version\": \"3.2.1\",\n  \"publishedAt\": 1779281173208\n}"},{"path":"skill-card.md","content":"## Description:\n\nWeb TTS Speaker turns webpage content or supplied text into text-to-speech audio files for Feishu, WeChat, Telegram, and Discord workflows.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[phentse](https://clawhub.ai/user/phentse)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to fetch article text or accept supplied text, synthesize speech, and prepare platform-specific audio attachments for supported messaging channels.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can fetch arbitrary URLs.\n\nMitigation: Use it only where public-web URL fetching is acceptable, avoid private or internal URLs, and add confirmation plus URL validation before deployment.\n\nRisk: Extracted webpage content or supplied text may be sent to an external TTS service.\n\nMitigation: Do not process secrets or sensitive text without consent, and remove text snippets from shared logs or machine-readable output when needed.\n\nRisk: The security verdict recommends review before installation.\n\nMitigation: Review the skill before installing, pin dependencies, and deploy only in an environment where its URL fetching and TTS behavior are permitted.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/phentse/skills/web-tts-speaker)\n- [Publisher profile](https://clawhub.ai/user/phentse)\n- [OpenClaw WeChat voice message issue](https://github.com/openclaw/openclaw/issues/61031)\n- [FFmpeg Windows builds](https://www.gyan.dev/ffmpeg/builds/)\n\n## Skill Output:\n\n**Output Type(s):** [text, shell commands, configuration, files, guidance]\n\n**Output Format:** [Markdown guidance with bash examples and CLI stdout markers that point to generated MP3 or Opus audio files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires Python 3.8+, Python packages edge-tts, beautifulsoup4, and requests, plus FFmpeg for audio transcoding.]\n\n## Skill Version(s):\n\n3.2.1 (source: server release metadata, artifact skill.json, and SKILL.md frontmatter)\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."},{"path":"skill.json","content":"{\n  \"name\": \"web-tts-speaker\",\n  \"version\": \"3.2.1\",\n  \"description\": \"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3）\",\n  \"author\": \"tech\",\n  \"tags\": [\"tts\", \"voice\", \"speaker\", \"朗读\", \"飞书语音条\", \"Edge TTS\"],\n  \"dependencies\": {\n    \"python\": \">=3.8\",\n    \"packages\": [\n      \"edge-tts\",\n      \"beautifulsoup4\",\n      \"requests\"\n    ]\n  },\n  \"commands\": {\n    \"auto\": \"python cli.py --url <url>\",\n    \"feishu\": \"python cli.py -c feishu --url <url>\",\n    \"wechat\": \"python cli.py -c wechat --text <text>\",\n    \"voice\": \"python cli.py -c feishu --text <text> --voice zh-CN-YunxiNeural\"\n  },\n  \"examples\": [\n    {\n      \"description\": \"朗读网页（自动匹配渠道）\",\n      \"command\": \"python cli.py --url \\\"https://example.com/article\\\"\"\n    },\n    {\n      \"description\": \"飞书语音条\",\n      \"command\": \"python cli.py -c feishu --text \\\"会议提醒：3点评审\\\"\"\n    },\n    {\n      \"description\": \"微信语音\",\n      \"command\": \"python cli.py -c wechat --url \\\"https://example.com/article\\\"\"\n    },\n    {\n      \"description\": \"指定男声\",\n      \"command\": \"python cli.py --text \\\"你好\\\" --voice zh-CN-YunxiNeural\"\n    }\n  ]\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3） Skill: Web TTS Speaker Owner: phentse Summary: 网页一键朗读：URL/文本 → TTS语音 → 多渠道自动匹配（飞书语音条 / 微信/TG/Discord MP3） Tags: latest:3.2.1 Version history: v3.2.1 | 2026-05-20T12:46:13.208Z | user 🔧 v3.2.1 — 修复SKILL.md：添加version字段到frontmatter、修正workspace完整路径(agents\\tech)，重新发布完整文档包。 v3.2.0 | 2026-05-20T12:38:39.167Z | user 📦 v3.2.0 — PKG精简：删除测试语音&__pycache__，精编文档(README/skill.json)，新增对比表引导废弃项目，零冗余发布。 v3.1.0 | 2026-05-20T11:52:51.","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1020,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T15:25:02.519Z","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-11T15:25:02.519Z","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-11T17:44:47.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"}]}}}