360 Secure SkillHub
360 安全技能中心

Castreader Openclaw Skill

CastReader 通过 Node 脚本从网页 URL 提取文章正文与元信息,展示标题、语言、段落数和字符数并询问用户选择全文或摘要,再调用 CastReader API 将文本合成为 MP3,最后以消息附件形式发送。包含提取、段落/文本生成、朗读与演示脚本,需要 Node 运行时和 API Key,流程依赖宿主的消息工具与 Telegram 会话。

vinxu
vinxu
热度 58.45
最近更新 2026-05-18 12:22:24
分类:效率依赖:代码执行 / 读写文件 / 第三方 API / 内部调用大模型应用场景:摘要总结 / 工作流

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add castreader-openclaw-skill
Metadata
name
castreader
description
Read any web page aloud with natural AI voices. Extract article text from any URL and convert it to audio (MP3). Use when the user wants to: listen to a webpage, read an article aloud, convert URL to audio, text-to-speech for a link, read this page to me, listen to this article.
version
2.1.0
metadata
{"openclaw":{"emoji":"🔊","requires":{"anyBins":["node"]},"os":["darwin","linux","win32"],"homepage":"https://castreader.ai/openclaw"}}

CastReader — Read Any Web Page Aloud

Setup (once per session)

cd <skill-directory> && npm install --silent 2>/dev/null

How to find target (chatId)

User messages look like: [Telegram username id:8716240840 ...] The number after id: is the target. You MUST use this number in every message tool call. Example: target is "8716240840".

When user sends a URL, follow these steps:

Step 1: Extract article

node scripts/read-url.js "<url>" 0

Returns: { title, language, totalParagraphs, totalCharacters, paragraphs[] }

Step 2: Show info + ask user to choose

Reply with this text:

📖 {title}
🌐 {language} · 📝 {totalParagraphs} paragraphs · 📊 {totalCharacters} chars

📋 Summary:
{write 2-3 sentence summary from paragraphs}

Reply a number to choose:
1️⃣ Listen to full article (~{totalCharacters} chars, ~{Math.ceil(totalCharacters / 200)} sec to generate)
2️⃣ Listen to summary only (~{summary_char_count} chars, ~{Math.ceil(summary_char_count / 200)} sec to generate)

STOP. Wait for user to reply 1 or 2.

Step 3a: User chose 1 (full article)

Reply: 🎙️ Generating full audio (~{totalCharacters} chars, ~{Math.ceil(totalCharacters / 200)} seconds)...

node scripts/read-url.js "<url>" all

Then send the audio file using the message tool:

{"action":"send", "target":"<chatId>", "channel":"telegram", "filePath":"<audioFile>", "caption":"🔊 {title}"}

Reply: ✅ Done!

Step 3b: User chose 2 (summary only)

Reply: 🎙️ Generating summary audio...

Save the SAME summary text you showed in Step 2 to a file and generate:

echo "<summary text>" > /tmp/castreader-summary.txt
node scripts/generate-text.js /tmp/castreader-summary.txt <language>

Then send the audio file using the message tool:

{"action":"send", "target":"<chatId>", "channel":"telegram", "filePath":"/tmp/castreader-summary.mp3", "caption":"📋 Summary: {title}"}

Reply: ✅ Done!

Rules

  • ALWAYS extract first (index=0), show info, wait for user choice. Never skip.
  • ALWAYS send audio files using the message tool with target (numeric chatId) and channel ("telegram"). Never just print the file path.
  • Do NOT use built-in TTS tools. ONLY use read-url.js and generate-text.js.
  • Do NOT use web_fetch. ONLY use read-url.js.