OpenClaw 定时任务新增 Telegram 话题支持:3 步配置线程 ID

—# OpenClaw 定时任务新增 Telegram 话题支持:3 步配置线程 ID

OpenClaw 最新版本为 Telegram 消息推送带来了备受期待的功能——支持在定时任务(cron)中指定话题 ID(thread ID)。这意味着你可以将自动化消息精准投递到 Telegram 群组内的特定话题,而不是混乱地堆叠在主聊天中。本文将详细介绍这一功能的配置方法、技术细节及最佳实践。

为什么需要话题 ID 支持?

Telegram 的超级群组(Supergroup)支持创建多个话题(Topic),类似于论坛的分板块功能。对于使用 OpenClaw 进行自动化通知的团队来说,将不同类型的告警、报告或日志分发到对应话题,能显著提升信息组织效率。

此前,OpenClaw 的 cron 任务仅支持发送到群组级别,所有消息混杂在一起。本次更新(commit: 76cd972)彻底解决了这一痛点。

核心功能详解

1. 新增 --thread-id 参数

在创建或编辑定时任务时,现在可以通过 --thread-id 参数指定目标话题:

创建新的定时任务,指定话题 ID

openclaw cron add \ --name "每日服务器报告" \ --schedule "0 9 *" \ --delivery telegram \ --chat-id "-1001234567890" \ --thread-id 15

编辑现有任务,添加话题 ID

openclaw cron edit --thread-id 23

参数说明:

  • --chat-id: Telegram 群组 ID(必须以 -100 开头的超级群组)
  • --thread-id: 话题 ID(正整数,对应群组内特定话题)

2. 严格的参数验证机制

为防止配置错误导致消息投递失败,OpenClaw 实现了多层验证:

| 验证规则 | 说明 | 错误示例 |
|———|——|———|
| 正整数校验 | 拒绝零或负数 | --thread-id 0 ❌ |
| 非空校验 | 空值会被拦截 | --thread-id "" ❌ |
| 类型安全 | 字符串数字自动转换 | --thread-id "42" ✅ |

// 内部验证逻辑示意(伪代码)
function validateThreadId(id) {
  const num = parseInt(id, 10);
  if (!Number.isFinite(num) || num <= 0) {
    throw new Error('Thread ID must be a positive integer');
  }
  return num;
}

3. 编辑任务时的智能保留机制

当使用 cron edit 仅修改部分参数时,OpenClaw 会自动保留现有的投递模式配置。例如:

假设任务已配置 thread-id=15,以下命令不会清除该设置

openclaw cron edit --schedule "0 12 *"

显式修改 thread-id 才会覆盖

openclaw cron edit --thread-id 30 # 更新为 30

这一设计避免了"误操作导致话题配置丢失"的风险。

---

如何获取 Telegram 话题 ID

方法一:通过 Telegram Web 端

1. 在浏览器中打开 Telegram Web
2. 进入目标群组的话题
3. 观察 URL 结构:https://web.telegram.org/a/#-1001234567890_15
4. 下划线后的数字即为话题 ID(本例为 15

方法二:通过 Bot API 获取

使用你的 bot token 调用 getUpdates

curl "https://api.telegram.org/bot/getUpdates" | jq '.result[].message.message_thread_id'

方法三:OpenClaw 调试模式

发送测试消息并查看响应

openclaw telegram test --chat-id "-1001234567890" --verbose

---

分页查询的安全加固

本次更新还修复了 cron 编辑时的分页查询潜在死循环问题。在查找特定任务进行编辑时,之前的实现可能在极端情况下陷入非终止循环。新实现增加了:

  • 最大页数限制:防止无限翻页
  • 进度检测:确保每次查询都有实质性进展
  • 超时机制:长时间无响应自动中断

这对管理大量定时任务的企业用户尤为重要。

---

完整配置示例

以下是一个生产环境的典型配置:

#!/bin/bash

server-monitoring-cron.sh

创建系统告警话题任务

openclaw cron add \ --name "系统告警-CPU" \ --schedule "/5 *" \ --delivery telegram \ --chat-id "${TG_ALERT_GROUP}" \ --thread-id 5 \ --template "cpu-alert" \ --threshold "cpu>80"

创建业务报告话题任务

openclaw cron add \ --name "日报-业务数据" \ --schedule "0 18 1-5" \ --delivery telegram \ --chat-id "${TG_REPORT_GROUP}" \ --thread-id 12 \ --template "daily-report"

echo "Cron tasks configured successfully"

---

常见问题 FAQ

Q1: 话题 ID 和普通群组消息有什么区别?

A: 普通群组消息发送到主聊天流,所有成员可见且混杂在一起。话题 ID 将消息归类到特定主题下,成员可选择性订阅感兴趣的话题,减少信息噪音。超级群组必须开启"话题"功能才能使用。

Q2: 配置错误的 thread ID 会怎样?

A: OpenClaw 会在配置阶段拦截非法值(非正整数),不会创建任务。如果配置了存在但无权访问的话题 ID,Telegram API 会返回 400 Bad Request: message thread not found,OpenClaw 会将错误记录到日志供排查。

Q3: 可以同时发送到多个话题吗?

A: 单个 cron 任务目前仅支持单个话题 ID。如需广播到多个话题,建议创建多个任务,或使用 OpenClaw工作流功能进行多分支投递。

Q4: 编辑任务时不指定 --thread-id 会清除原有配置吗?

A: 不会。本次更新的核心改进之一就是保留机制——仅当显式提供 --thread-id 时才会修改,否则保持原有话题设置不变。

Q5: 如何验证话题 ID 配置正确?

A: 使用测试命令:

openclaw cron test-run 

或启用 --dry-run 预览:

openclaw cron edit  --thread-id 15 --dry-run

---

总结与下一步

本次更新为 OpenClaw 的 Telegram 集成带来了企业级的消息组织能力:

| 能力 | 价值 |
|-----|------|
| 话题精准投递 | 信息分类管理,降低认知负荷 |
| 参数严格验证 | 配置即正确,减少运行时错误 |
| 编辑安全保留 | 增量修改,避免误操作 |
| 分页查询加固 | 大规模任务管理更稳定 |

建议下一步行动:
1. 检查现有 Telegram cron 任务,评估是否需要迁移到话题
2. 在测试环境验证 --thread-id 参数行为
3. 参考 OpenClaw 官方文档 了解高级模板配置

---

相关阅读

---

参考来源