Token导航 LogoToken导航TokenDH.com
研究检索执行命令clawhub未标认证来源可访问clear审计提醒

telegram-composeTelegram compose 搜索

Agent Skill

telegram-compose 用于查找、检索和筛选相关信息,适合在 OpenClaw 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

139,828

周安装

5,885

GitHub Stars

4

下载量

48,963
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:telegram-compose(Telegram compose 搜索)
来源仓库:https://github.com/tmchow/telegram-compose
安装命令:
openclaw skills install telegram-compose
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install telegram-compose

简介

通过直接 Telegram API 使用 HTML 格式格式化和传递丰富的 Telegram 消息。

  • 由主会话自动调用以进行实质性 Telegram 输出——无需其他技能调用它。
  • 决策规则:如果您的 Telegram 回复超过 3 行或包含结构化数据(列表、统计数据、部分、报告), 将其生成为俳句子代理以进行格式化和发送。简短回复(<3 行)直接通过 OpenClaw 消息工具进行。
  • 处理:研究摘要、警报、状态更新、报告、简报、通知——任何具有视觉层次结构的东西。

SKILL.md

name
telegram-compose
description
|
Handles
research summaries, alerts, status updates, reports, briefings, notifications — anything with visual hierarchy.
metadata
|
model-preference
claude-haiku-4-5
subagent
true
allowed-tools
exec, Read

Telegram Compose

Format and deliver rich, scannable Telegram messages via direct API with HTML formatting.

How This Skill Gets Used

This skill is auto-invoked by the main session agent. No other skills need to know about it.

Decision Rule (for the main session agent)

Before sending a message to Telegram, check:

  • Short reply (<3 lines, no structure): Send directly via OpenClaw message tool. Done.
  • Substantive content (>3 lines, or has lists/stats/sections/reports): Spawn this skill as a sub-agent.

Spawning the sub-agent

The main session agent calls sessions_spawn with:

sessions_spawn(
  model: "claude-haiku-4-5",
  task: "<task content — see template below>"
)

Task template:

Read the telegram-compose skill at {baseDir}/SKILL.md for formatting rules, then format and send this content to Telegram.

Bot account: <account_name>  (e.g., "main" — must match a key in channels.telegram.accounts)
Chat ID: <chat_id>
Thread ID: <thread_id>  (omit this line if not a forum/topic chat)

Content to format:
---
<raw content here>
---

After sending, reply with the message_id on success or the error on failure. Do NOT include the formatted message in your reply — it's already been sent to Telegram.

IMPORTANT: The caller MUST specify which bot account to use. The sub-agent must NOT auto-select or iterate accounts.

CRITICAL: The sub-agent announcement routes back to the main session, NOT to Telegram. So the main session should reply NO_REPLY after spawning to avoid double-messaging. The sub-agent's curl call is what delivers to Telegram.

What the sub-agent receives

  1. Skill path — so it can read the formatting rules
  2. Bot account name — which Telegram bot account to use (must be specified, never auto-selected)
  3. Chat ID — where to send
  4. Thread ID — topic thread if applicable
  5. Raw content — the unformatted text/data to turn into a rich message

Credentials

Bot token: Stored in the OpenClaw config file under channels.telegram.accounts.<name>.botToken.

The account name is always provided by the caller. Never auto-select or iterate accounts.

# Auto-detect config path
CONFIG=$([ -f ~/.openclaw/openclaw.json ] && echo ~/.openclaw/openclaw.json || echo ~/.openclaw/clawdbot.json)

# ACCOUNT is provided by the caller (e.g., "main")
# Validate the account exists before extracting the token
ACCOUNT="<provided_account_name>"
BOT_TOKEN=$(jq -r ".channels.telegram.accounts.$ACCOUNT.botToken" "$CONFIG")

if [ "$BOT_TOKEN" = "null" ] || [ -z "$BOT_TOKEN" ]; then
  echo "ERROR: Account '$ACCOUNT' not found in config or has no botToken"
  exit 1
fi

Sending

CONFIG=$([ -f ~/.openclaw/openclaw.json ] && echo ~/.openclaw/openclaw.json || echo ~/.openclaw/clawdbot.json)
# ACCOUNT provided by caller — never auto-select
BOT_TOKEN=$(jq -r ".channels.telegram.accounts.$ACCOUNT.botToken" "$CONFIG")

# Without topic thread
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
  -H "Content-Type: application/json" \
  -d "$(jq -n \
    --arg chat "$CHAT_ID" \
    --arg text "$MESSAGE" \
    '{
      chat_id: $chat,
      text: $text,
      parse_mode: "HTML",
      link_preview_options: { is_disabled: true }
    }')"

# With topic thread
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
  -H "Content-Type: application/json" \
  -d "$(jq -n \
    --arg chat "$CHAT_ID" \
    --arg text "$MESSAGE" \
    --argjson thread $THREAD_ID \
    '{
      chat_id: $chat,
      text: $text,
      parse_mode: "HTML",
      message_thread_id: $thread,
      link_preview_options: { is_disabled: true }
    }')"

Formatting Rules

HTML Tags

<b>bold</b>  <i>italic</i>  <u>underline</u>  <s>strike</s>
<code>mono</code>  <pre>code block</pre>
<tg-spoiler>hidden until tapped</tg-spoiler>
<blockquote>quote</blockquote>
<blockquote expandable>collapsed by default</blockquote>
<a href="url">link</a>
<a href="tg://user?id=123">mention by ID</a>

Escaping

Escape these characters in text content only (not in your HTML tags):

  • &&amp; (do this FIRST to avoid double-escaping)
  • <&lt;
  • >&gt;

Common gotcha: content containing & (e.g., "R&D", "Q&A") will break HTML parsing if not escaped.

Structure Pattern

EMOJI <b>HEADING IN CAPS</b>

<b>Label:</b> Value
<b>Label:</b> Value

<b>SECTION</b>

• Bullet point
• Another point

<blockquote>Key quote or summary</blockquote>

<blockquote expandable><b>Details</b>

Hidden content here...
Long details go in expandable blocks.</blockquote>

<a href="https://...">Action Link →</a>

Style Rules

  1. Faux headings: EMOJI <b>CAPS TITLE</b> with blank line after
  2. Emojis: 1-3 per message as visual anchors, not decoration
  3. Whitespace: Blank lines between sections
  4. Long content: Use <blockquote expandable>
  5. Links: Own line, with arrow: Link Text →

Examples

Status update:

📋 <b>TASK COMPLETE</b>

<b>Task:</b> Deploy v2.3
<b>Status:</b> ✅ Done
<b>Duration:</b> 12 min

<blockquote>All health checks passing.</blockquote>

Alert:

⚠️ <b>ATTENTION NEEDED</b>

<b>Issue:</b> API rate limit at 90%
<b>Action:</b> Review usage

<a href="https://dashboard.example.com">View Dashboard →</a>

List:

✅ <b>PRIORITIES</b>

• <s>Review PR #234</s> — done
• <b>Finish docs</b> — in progress
• Deploy staging

<i>2 of 3 complete</i>

Mobile-Friendly Data Display

Never use <pre> for stats, summaries, or visual layouts. <pre> uses monospace font and wraps badly on mobile, breaking alignment and tree characters. Reserve <pre> for actual code/commands only.

For structured data, use emoji + bold + separators:

❌ BAD (wraps on mobile):
<pre>
├─ 🟠 Reddit  32 threads │ 1,658 pts
└─ 🌐 Web     8 pages
</pre>

✅ GOOD (flows naturally):
🟠 <b>Reddit:</b> 32 threads · 1,658 pts · 625 comments
🔵 <b>X:</b> 22 posts · 10,695 likes · 1,137 reposts
🌐 <b>Web:</b> 8 pages (supplementary)
🗣️ <b>Top voices:</b> @handle1 · @handle2 · r/subreddit

Other patterns:

Record cards:

<b>Ruby</b>
Birthday: Jun 16 · Age: 11

<b>Rhodes</b>
Birthday: Oct 1 · Age: 8

Bullet lists:

• <b>hzl-cli:</b> 1.12.0
• <b>skill:</b> 1.0.6

Limits and Splitting

  • Message max: 4,096 characters
  • Caption max: 1,024 characters

If formatted message exceeds 4,096 chars:

  1. Split at section boundaries (blank lines between <b>HEADING</b> blocks)
  2. Each chunk must be valid HTML (don't split inside a tag)
  3. Send chunks sequentially with a 1-second delay between them
  4. First chunk gets the full heading; subsequent chunks get a continuation indicator: <i>(continued)</i>

Error Handling

If Telegram API returns an error:

ErrorAction
Bad Request: can't parse entitiesHTML is malformed. Strip all HTML tags and resend as plain text.
Bad Request: message is too longSplit per the rules above and retry.
Bad Request: message thread not foundRetry without message_thread_id (sends to General).
Too Many Requests: retry after XWait X seconds, then retry once.
Any other errorReport the error back; don't retry.

Fallback rule: If HTML formatting fails twice, send as plain text rather than not sending at all. Delivery matters more than formatting.


Sub-Agent Execution Checklist

When running as a sub-agent, follow this sequence:

  1. Parse the task — extract Bot account name, Chat ID, Thread ID (if any), skill path, and raw content
  2. Read this SKILL.md — load the formatting rules
  3. Format the content — apply HTML tags, structure pattern, style rules, mobile-friendly data display
  4. Escape special chars& then < then > in text content only (not in your HTML tags)
  5. Check length — if >4,096 chars, split at section boundaries
  6. Get bot token — auto-detect config path, extract token for the specified account (error if not found)
  7. Send via curl — use the appropriate template (with/without thread ID)
  8. Check response — parse curl output for "ok": true
  9. Handle errors — follow the error handling table above
  10. Report back — reply with message_id on success, or error details on failure

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

83.63%
按下载量换算40,948

安全审计

VirusTotal

可疑

ClawScan

通过

Static analysis

未展示

权限和风险

执行命令

安装流程涉及命令执行,可能通过 openclaw skills install telegram-compose 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills