如何部署 claude-code-templates 的 daily-health-report Worker 发送 Telegram 每日健康摘要?
【免费下载链接】claude-code-templatesCLI tool for configuring and monitoring Claude Code项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-templates
claude-code-templates 仓库在 cloudflare-workers 目录下维护了一组 Cloudflare Workers,其中daily-health-report是一个每日监控摘要 Worker:每天 14:00 UTC(10:00 AM EDT)由 cron 触发一次,汇总 dashboard 站点健康状态与 Sentry 最近 24 小时的问题,然后把结果作为一条 Telegram 消息发到你指定的聊天。它定位是"一切正常 / 哪里坏了"的心跳报告,与仓库中 docs-monitor 的变更告警、pulse 的每周 KPI 报告互补,不互相替代。
本文覆盖从准备账号与密钥,到wrangler deploy上线,再到用/status、/trigger端点和wrangler tail验证的完整部署路径。全部操作通过wranglerCLI 完成,不需要 Cloudflare 控制台。
这个 Worker 做什么:先确认监控范围
部署前需要清楚它每天会检查什么,对应 index.js 的实现:
- 站点健康:请求
${DASHBOARD_URL}/api/health-check。DASHBOARD_URL未设置时默认指向https://www.aitmpl.com(仓库自己的 dashboard),如果你部署的是自己的环境,需要设置该 Secret 指向自己的地址。 - Sentry 摘要:查询 3 个 Sentry 项目
aitmpl-workers、aitmpl-dashboard、aitmpl-cli最近 24 小时未解决的 issue(is:unresolved age:-24h),并自动 resolve 标题命中NOISE_TITLE_PATTERNS(manual verification test、manual verification)的测试噪音事件。该策略在代码注释中被明确要求保持保守,不要扩大成"全部自动 resolve"。 - 不直接轮询其他 Worker:Cloudflare 会拦截同账号内
*.workers.dev上的 Worker 互访(error 1042),其余 Worker 的健康由各自的 Sentry Cron Monitor 上报,本 Worker 只负责汇总。 - 输出:一条 Telegram 消息,使用
parse_mode: 'HTML',包含站点健康与 Sentry 两段。
调度配置在 wrangler.toml 中:
[triggers] crons = ["0 14 * * *"]固定为 EDT(UTC-4);如果要求精确对准美国东部夏令时下的 10:00,需要每年两次手动调整 1 小时(wrangler.toml 中的注释说明)。
部署前准备:账号、CLI 与必需 Secret
以下要求来自 cloudflare-workers/README.md 的 Prerequisites、wrangler.toml 的注释和 docs-monitor/README.md 的 Prerequisites:
- Cloudflare 账号(免费版即可,cron 触发与每日 1 次请求均在免费额度内)。
- Wrangler CLI:
npm install -g wrangler - Telegram Bot Token 与 Chat ID(docs-monitor README 给出的获取方式,daily-health-report 的 wrangler.toml 注释说明两个值与 docs-monitor/pulse 通用):
- 在 Telegram 中找 @BotFather,发送
/newbot并按提示操作,保存它给出的token; - 找 @userinfobot,发送
/start,获取你的chat ID。
- 在 Telegram 中找 @BotFather,发送
- Sentry 凭据(wrangler.toml 注释):
SENTRY_AUTH_TOKEN:Sentry 的 API Auth Token(Settings > Auth Tokens),scopes 需要Project=Read、Organization=Read、Issue & Event=WRITE。注释特别说明 WRITE 权限是自动 resolve 噪音 issue 所必需的,只读就做不到;SENTRY_ORG_SLUG:你的 Sentry 组织 slug,注释中的示例是"daniel-avila"。
- 可选:
TRIGGER_SECRET:手动/trigger端点的鉴权密钥;DASHBOARD_URL:自己的 dashboard 地址,不设置则默认https://www.aitmpl.com。
Secret 一律通过wrangler secret put存入 Cloudflare,不要写进代码或.env文件(cloudflare-workers/README.md 中的明确警告)。
部署 daily-health-report
在仓库根目录下执行(daily-health-report目录内没有 README,具体文档就是主 README 与 wrangler.toml 注释):
cd cloudflare-workers/daily-health-report npm install wrangler loginnpm install安装的是本地 devDependencywrangler ^3.91.0(见 package.json);wrangler login会打开浏览器完成 Cloudflare 认证。
然后按顺序设置 4 个必需 Secret(package.json 中封装了等价的npm run secret:*脚本):
wrangler secret put TELEGRAM_BOT_TOKEN wrangler secret put TELEGRAM_CHAT_ID wrangler secret put SENTRY_AUTH_TOKEN wrangler secret put SENTRY_ORG_SLUG每条命令执行后会提示输入值。若需要手动触发端点和自定义 dashboard 地址,再设置:
wrangler secret put TRIGGER_SECRET wrangler secret put DASHBOARD_URL确认已配置的 Secret(只列名称、不显示值):
wrangler secret list最后部署:
npm run deploy即wrangler deploy。部署后 cron 触发即开始生效;cron 只在生产环境(deploy 之后)工作,wrangler dev本地环境不会执行定时任务(docs-monitor README 的 Troubleshooting 说明)。package.json还提供了一个本地测试脚本:
npm run test它执行wrangler dev --test-scheduled,可在本地手动触发一次 scheduled 执行来跑通逻辑。
验证部署:/status、/trigger 与实时日志
1. 检查 Worker 存活。访问GET /status,URL 中YOUR-USERNAME替换为你账号对应的 workers.dev 子域名(与 docs-monitor README 中https://claude-docs-monitor.YOUR-USERNAME.workers.dev/status相同的 URL 形式,实际域名以wrangler deploy的输出为准):
curl https://daily-health-report.YOUR-USERNAME.workers.dev/status按 index.js 的实现,返回(示例结果,字段值来自源码):
{ "status": "running", "worker": "daily-health-report", "schedule": "Daily 14:00 UTC (10:00 AM EDT)" }2. 手动触发一次完整报告。这是不等 14:00 就能看到 Telegram 收到消息的最快方式,需要已设置TRIGGER_SECRET:
curl -X POST https://daily-health-report.YOUR-USERNAME.workers.dev/trigger \ -H "Authorization: Bearer YOUR_TRIGGER_SECRET"- 未设置
TRIGGER_SECRET或 token 不匹配时返回401 Unauthorized; - 追加
?send=false可以只生成报告、跳过 Telegram 发送(代码中send参数等于'false'时跳过); - 正常时返回
runReport的结果(示例结果,字段结构来自源码):
{ "success": true, "healthy": true, "report": "📋 Daily Health Report\n...(完整报告文本)", "telegram": { "sent": true, "result": "..." } }report字段就是即将(或已经)发到 Telegram 的正文,可以直接用来核对内容是否符合预期。
3. 核对 Telegram 消息内容。formatReport生成的消息由两段组成(以下为按源码逻辑标注的示例结果,非固定输出):
📋 Daily Health Report Thu, 11 Sep 2026 14:00:00 GMT 🌐 Site (aitmpl.com) ✅ All endpoints healthy 🐛 Sentry (last 24h) ✅ aitmpl-workers: no new issues 🔴 aitmpl-dashboard: 2 unresolved issue(s) (auto-resolved 1 test event(s)) — needs review • Example error title (3x)站点段出现❌ Could not reach health-check: ...表示/api/health-check请求失败(多为DASHBOARD_URL指向错误);Sentry 段逐项目输出✅ 无新 issue或🔴 N unresolved issue(s) — needs review,并列出前 3 条 issue。
4. 观察实时日志:
wrangler tail可以用wrangler deployments list查看部署记录;日常就是等待每天 14:00 UTC 的 cron 自动执行。
收不到 Telegram 消息时的排查
按 docs-monitor README 的 Troubleshooting 和 index.js 中的错误分支逐项确认:
Secret 是否齐全:
wrangler secret list应能看到TELEGRAM_BOT_TOKEN、TELEGRAM_CHAT_ID、SENTRY_AUTH_TOKEN、SENTRY_ORG_SLUG。缺少 Telegram 两项时,代码返回{ sent: false, error: 'missing_credentials' },消息不会发出。Bot 本身是否可用(docs-monitor README 中的检查命令,
YOUR_BOT_TOKEN/YOUR_CHAT_ID替换为自己的值):curl https://api.telegram.org/botYOUR_BOT_TOKEN/getMe应返回 bot 信息。再直接发一条测试消息验证 chat ID:
curl -X POST https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage \ -d chat_id=YOUR_CHAT_ID \ -d text="Test"Sentry 段显示
⚠️ SENTRY_AUTH_TOKEN or SENTRY_ORG_SLUG not configured:说明两个 Sentry Secret 有一个没设置;单项目查询失败会显示⚠️ <project-slug>: HTTP <status>,通常是 token scopes 不足——注意自动 resolve 需要Issue & Event=WRITE,只有读权限时 list 可用但 resolve 无效。cron 是否真的在生产运行:cron 触发只在
wrangler deploy之后生效,wrangler dev下不会跑;用wrangler tail查看 cron 执行日志。
已知限制
- 该 Worker 依赖 dashboard 的
/api/health-check端点和 3 个固定 Sentry 项目名(aitmpl-workers、aitmpl-dashboard、aitmpl-cli),部署到自有环境时这两处对应的是代码中的常量/默认值,不是 wrangler.toml 里可直接改的配置项。 - 其他 3 个 Cloudflare Worker 的健康不经过本 Worker 直接检查(同账号
*.workers.dev互访会被拦截,error 1042),只通过各自的 Sentry Cron Monitor 数据在 Sentry 摘要中体现。 - 自动 resolve 只针对标题命中
NOISE_TITLE_PATTERNS的测试事件,真实错误一律保留并列出待人工处理;代码注释明确要求不要扩大这一策略。 - 每天仅执行 1 次、请求量远低于 Cloudflare 免费层限制(10 万请求/天、cron 不限次)。
部署完成后,验证闭环就是:/status返回running,/trigger返回success: true且telegram.sent为true,Telegram 中收到示例格式的日报。之后无需人工干预,每天 14:00 UTC 自动运行。
【免费下载链接】claude-code-templatesCLI tool for configuring and monitoring Claude Code项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-templates
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考