news 2026/9/12 6:03:44

如何部署 claude-code-templates 的 daily-health-report Worker 发送 Telegram 每日健康摘要?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何部署 claude-code-templates 的 daily-health-report Worker 发送 Telegram 每日健康摘要?

如何部署 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-checkDASHBOARD_URL未设置时默认指向https://www.aitmpl.com(仓库自己的 dashboard),如果你部署的是自己的环境,需要设置该 Secret 指向自己的地址。
  • Sentry 摘要:查询 3 个 Sentry 项目aitmpl-workersaitmpl-dashboardaitmpl-cli最近 24 小时未解决的 issue(is:unresolved age:-24h),并自动 resolve 标题命中NOISE_TITLE_PATTERNSmanual verification testmanual 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:

  1. Cloudflare 账号(免费版即可,cron 触发与每日 1 次请求均在免费额度内)。
  2. Wrangler CLI
    npm install -g wrangler
  3. Telegram Bot Token 与 Chat ID(docs-monitor README 给出的获取方式,daily-health-report 的 wrangler.toml 注释说明两个值与 docs-monitor/pulse 通用):
    • 在 Telegram 中找 @BotFather,发送/newbot并按提示操作,保存它给出的token
    • 找 @userinfobot,发送/start,获取你的chat ID
  4. Sentry 凭据(wrangler.toml 注释):
    • SENTRY_AUTH_TOKEN:Sentry 的 API Auth Token(Settings > Auth Tokens),scopes 需要Project=ReadOrganization=ReadIssue & Event=WRITE。注释特别说明 WRITE 权限是自动 resolve 噪音 issue 所必需的,只读就做不到;
    • SENTRY_ORG_SLUG:你的 Sentry 组织 slug,注释中的示例是"daniel-avila"
  5. 可选
    • 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 login

npm 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 中的错误分支逐项确认:

  1. Secret 是否齐全wrangler secret list应能看到TELEGRAM_BOT_TOKENTELEGRAM_CHAT_IDSENTRY_AUTH_TOKENSENTRY_ORG_SLUG。缺少 Telegram 两项时,代码返回{ sent: false, error: 'missing_credentials' },消息不会发出。

  2. 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"
  3. Sentry 段显示⚠️ SENTRY_AUTH_TOKEN or SENTRY_ORG_SLUG not configured:说明两个 Sentry Secret 有一个没设置;单项目查询失败会显示⚠️ <project-slug>: HTTP <status>,通常是 token scopes 不足——注意自动 resolve 需要Issue & Event=WRITE,只有读权限时 list 可用但 resolve 无效。

  4. cron 是否真的在生产运行:cron 触发只在wrangler deploy之后生效,wrangler dev下不会跑;用wrangler tail查看 cron 执行日志。

已知限制

  • 该 Worker 依赖 dashboard 的/api/health-check端点和 3 个固定 Sentry 项目名(aitmpl-workersaitmpl-dashboardaitmpl-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: truetelegram.senttrue,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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 6:03:35

C++模板编译期机器学习:原理与性能优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 6:01:17

豆包+飞书构建松弛工作流:AI协同提效实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 6:00:39

LangChain四大文档加载器对比与应用指南

1. LangChain文档加载器深度解析&#xff1a;四大Loader核心差异与应用场景在构建基于大语言模型(LLM)的应用时&#xff0c;文档加载是数据处理流程的第一步。LangChain作为当前最流行的LLM应用开发框架&#xff0c;提供了多种文档加载器(Document Loader)来处理不同格式的原始…

作者头像 李华
网站建设 2026/9/12 6:00:18

STM32 J1939协议测试源码:29位CAN ID解析与PGN/SPN映射实战

简介&#xff1a;基于STM32单片机的汽车CAN-J1939协议测试源码&#xff0c;是一份面向嵌入式软硬件开发者的工程参考&#xff0c;主要解决车载CAN总线环境下J1939协议栈的初始化、报文收发与地址声明等学习验证问题。工程在STM32标准外设库基础上实现了CAN模块底层驱动、J1939协…

作者头像 李华
网站建设 2026/9/12 5:58:14

3 分钟网页转应用:PakePlus 零代码打包出 5M 轻量客户端

3 分钟网页转应用&#xff1a;PakePlus 零代码打包出 5M 轻量客户端 【免费下载链接】PakePlus Turn any webpage/HTML/Vue/React and so on into desktop and mobile app under 5M with easy in few minutes. 轻松将任意网站/HTML/Vue/React等项目构建为轻量级(小于5M)多端桌面…

作者头像 李华