← ClaudeAtlas

cloudflare-cron-telegram-alertlisted

This skill should be used when scaffolding a Cloudflare Worker that runs on a cron trigger, checks something external (a URL, an API, a heartbeat), and sends a Telegram alert only on failure — e.g. an uptime monitor, a health check, a dead-man's-switch. Trigger phrases include "cron trigger uptime monitor", "Telegram alert Worker", "cloudflare cron health check", "scheduled Worker Telegram", "uptime monitor Cloudflare Worker", "dead man's switch worker".
jackson2w/claude-code-skills · ★ 1 · DevOps & Infrastructure · score 64
Install: claude install-skill jackson2w/claude-code-skills
# Cloudflare Cron + Telegram Alert Worker A minimal, reusable shape for "check something on a schedule, alert only when it's broken" — built out fully for a tailnet uptime monitor; the same shape fits any periodic external check. ## Project shape ``` wrangler.jsonc # cron trigger, no public route (see below) src/index.ts # scheduled() handler + fetch() stub package.json tsconfig.json .gitignore # node_modules/, .wrangler/, .dev.vars, worker-configuration.d.ts ``` `wrangler.jsonc` essentials: ```jsonc { "name": "<worker-name>", "main": "src/index.ts", "compatibility_date": "<recent date>", "observability": { "enabled": true }, "workers_dev": false, // no public HTTP route needed — cron-only "preview_urls": false, "triggers": { "crons": ["*/5 * * * *"] } } ``` **Disable `workers_dev`/`preview_urls` explicitly.** A cron-only Worker gets a public `*.workers.dev` route by default on first deploy unless these are set — unnecessary attack surface for something that never needs inbound HTTP. ## Handler pattern ```typescript export interface Env { TELEGRAM_BOT_TOKEN: string; TELEGRAM_CHAT_ID: string; TARGET_URL: string; } export default { async scheduled(_event, env, ctx): Promise<void> { ctx.waitUntil(checkTarget(env)); }, async fetch(): Promise<Response> { return new Response("cron-only Worker; use wrangler dev --test-scheduled to test"); }, } satisfies ExportedHandler<Env>; async function checkTarget(env: Env):