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 参数指定目标话题:
# 创建新的定时任务,指定话题 IDopenclaw cron add \ --name "每日服务器报告" \ --schedule "0 9 * * *" \ --delivery telegram \ --chat-id "-1001234567890" \ --thread-id 15# 编辑现有任务,添加话题 IDopenclaw cron edit <task-id> --thread-id 23
参数说明:
-
--chat-id: Telegram 群组 ID(必须以-100开头的超级群组) -
--thread-id: 话题 ID(正整数,对应群组内特定话题)
2. 严格的参数验证机制
为防止配置错误导致消息投递失败,OpenClaw 实现了多层验证:
|
|
|
|
|---|---|---|
|
|
|
--thread-id 0
|
|
|
|
--thread-id ""
|
|
|
|
--thread-id "42"
|
// 内部验证逻辑示意(伪代码)functionvalidateThreadId(id) {const num = parseInt(id, 10);if (!Number.isFinite(num) || num <= 0) {thrownewError('Thread ID must be a positive integer'); }return num;}
3. 编辑任务时的智能保留机制
当使用 cron edit 仅修改部分参数时,OpenClaw 会自动保留现有的投递模式配置。例如:
# 假设任务已配置 thread-id=15,以下命令不会清除该设置openclaw cron edit <task-id> --schedule "0 12 * * *"# 显式修改 thread-id 才会覆盖openclaw cron edit <task-id> --thread-id 30 # 更新为 30
这一设计避免了”误操作导致话题配置丢失”的风险。
如何获取 Telegram 话题 ID
方法一:通过 Telegram Web 端
-
在浏览器中打开 Telegram Web[1] -
进入目标群组的话题 -
观察 URL 结构: https://web.telegram.org/a/#-1001234567890_15 -
下划线后的数字即为话题 ID(本例为 15)
方法二:通过 Bot API 获取
# 使用你的 bot 令牌 调用 getUpdatescurl "https://api.telegram.org/bot<YOUR_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 的工作流功能[2]进行多分支投递。
Q4: 编辑任务时不指定 --thread-id 会清除原有配置吗?
A:不会。本次更新的核心改进之一就是保留机制——仅当显式提供 --thread-id 时才会修改,否则保持原有话题设置不变。
Q5: 如何验证话题 ID 配置正确?
A: 使用测试命令:
openclaw cron test-run <task-id>
或启用 --dry-run 预览:
openclaw cron edit <task-id> --thread-id 15 --dry-run
总结与下一步
本次更新为 OpenClaw 的 Telegram 集成带来了企业级的消息组织能力:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
建议下一步行动:
-
检查现有 Telegram cron 任务,评估是否需要迁移到话题 -
在测试环境验证 --thread-id参数行为 -
参考 OpenClaw 官方文档[3] 了解高级模板配置
相关阅读
-
OpenClaw Cron 任务完整指南[4] -
Telegram Bot API 话题功能说明[5] -
OpenClaw 工作流:多通道消息分发[6]
参考来源
-
GitHub Commit: 76cd972[7] — 本次功能更新的源代码 -
Telegram Bot API 文档 – ForumTopic[8] — 话题 ID 官方说明 -
OpenClaw 文档[9] — 官方使用文档 -
阅读原文:OpenClaw 教学小站[10]
引用链接
[1]Telegram Web: https://web.telegram.org
[2]工作流功能: URL
[3]OpenClaw 官方文档: URL
[4]OpenClaw Cron 任务完整指南: URL
[5]Telegram Bot API 话题功能说明: https://core.telegram.org/bots/api#forumtopic
[6]OpenClaw 工作流:多通道消息分发: URL
[7]GitHub Commit: 76cd972: https://github.com/openclaw/openclaw/commit/76cd97289b790fdbb49792c65ff48b01384872ec
[8]Telegram Bot API 文档 – ForumTopic: https://core.telegram.org/bots/api#forumtopic
[9]OpenClaw 文档: URL
[10]阅读原文:OpenClaw 教学小站: https://61wp.com
夜雨聆风