网淘吧来吧,欢迎您!

Telegram Compose技能使用说明

2026-03-28 新闻来源:网淘吧 围观:21
电脑广告
手机广告

Telegram 消息撰写

通过直接API,使用HTML格式编排并发送格式丰富、易于浏览的Telegram消息。

此技能的使用方式

此技能由主会话代理自动调用。无需其他技能知晓其存在。

决策规则(供主会话代理使用)

在向Telegram发送消息前,请检查:

  • 简短回复(少于3行,无结构化内容):直接通过OpenClaw消息工具发送。完成。实质性内容(超过3行,或包含列表/统计数据/章节/报告):将此技能作为子代理启动。
  • 启动子代理主会话代理调用

sessions_spawn

并附带以下参数:任务模板:重要:

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

调用方必须指定使用哪个机器人账户。子代理不得自动选择或遍历账户。

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.

重要:子代理的公告会路由回主会话,而不是Telegram。因此主会话在生成后应回复NO_REPLY以避免重复发送消息。是子代理的curl调用将内容递送到Telegram。

子代理接收的内容

  1. 技能路径——以便它能读取格式规则
  2. 机器人账户名称——指定使用哪个Telegram机器人账户(必须明确指定,切勿自动选择)
  3. 聊天ID——发送目的地
  4. 主题ID——适用的主题线程(如果存在)
  5. 原始内容——待转换为富文本消息的未格式化文本/数据

凭证

机器人令牌:存储在OpenClaw配置文件的channels.telegram.accounts.<名称>.botToken路径下。

账户名称始终由调用方提供。切勿自动选择或遍历账户。

# 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

发送中

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 }
    }')"

格式规则

HTML标签

<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>

转义

仅在文本内容中(而非HTML标签内)转义以下字符:&

  • &amp;(首先执行此操作以避免双重转义)<
  • &lt;>
  • &gt;常见陷阱:若未转义,

含有 & 符号的内容(如"研发部"、"问答区")将导致HTML解析失败。结构模式

样式规则

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>

伪标题格式:

  1. 表情符号 <b>大写标题</b> EMOJI <b>CAPS TITLE</b>后面留空行
  2. 表情符号:每条消息使用1-3个作为视觉锚点,而非装饰
  3. 空白处理:各版块之间留空行
  4. 长内容:使用<blockquote expandable>(可展开的区块引用)
  5. 链接:独占一行,附带箭头:链接文本 →

示例

状态更新:

📋 <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>

警报:

⚠️ <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>

列表:

✅ <b>PRIORITIES</b>

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

<i>2 of 3 complete</i>

移动端友好的数据显示

切勿使用<pre>(预格式化文本标签)来显示统计数据、摘要或视觉布局。 <pre>(预格式化文本标签)使用等宽字体且在移动设备上换行效果差,会破坏对齐和树状字符。请仅将<pre>(预格式化文本标签)保留用于实际代码/命令。

对于结构化数据,使用表情符号 + 粗体 + 分隔符:

❌ 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

其他模式:

记录卡片:

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

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

项目符号列表:

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

限制与分割

  • 消息最大长度:4,096 个字符
  • 标题最大长度:1,024 个字符

如果格式化消息超过 4,096 个字符:

  1. 在章节边界处分割(即<b>标题</b>块之间的空行)
  2. 每个块必须是有效的 HTML(不要在标签内拆分)
  3. 按顺序发送块,块之间延迟 1 秒
  4. 第一个块包含完整标题;后续块添加一个继续指示符:<i>(续)</i>

错误处理

如果 Telegram API 返回错误:

错误操作
错误请求:无法解析实体HTML格式不正确。请去除所有HTML标签,以纯文本形式重新发送。
错误请求:消息过长请根据上述规则分割内容后重试。
错误请求:未找到消息线程重试时请移除message_thread_id 参数(消息将发送至“常规”板块)。
请求过多:请在 X 秒后重试等待 X 秒后,重试一次。
任何其他错误请反馈该错误;不要重试。

后备规则:如果HTML格式化连续失败两次,请以纯文本形式发送,而不是完全不发送。确保送达比格式更重要。


子代理执行清单

作为子代理运行时,请遵循以下顺序:

  1. 解析任务— 提取Bot账户名称、聊天ID、线程ID(如有)、技能路径和原始内容
  2. 阅读此 SKILL.md 文件— 加载格式化规则
  3. 格式化内容— 应用HTML标签、结构模式、样式规则,移动端友好的数据显示
  4. 转义特殊字符&然后<然后>仅限文本内容中(不在你的HTML标签内)
  5. 检查长度— 如果超过4,096个字符,在章节边界处分割
  6. 获取机器人令牌— 自动检测配置路径,为指定账户提取令牌(如果未找到则报错)
  7. 通过curl发送— 使用适当的模板(带/不带线程ID)
  8. 检查响应— 解析curl输出以查找"ok": true
  9. 处理错误— 遵循上方的错误处理表
  10. 报告结果— 成功时回复message_id,失败时回复错误详情
免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第345669名访客 今日有103篇新文章/评论