Cloudflare Pages 和 Telegram 发布
云端版运行于 https://horizon-cloud.luoxi.workers.dev/。Cloudflare Worker 每天北京时间 09:00 采集 Hacker News 和 RSS,通过 AI Gateway default 调用 Workers AI @cf/zai-org/glm-4.7-flash,把日报存入 KV,并在配置后推送到 Telegram。旧 Cloudflare Pages 首页会跳转到云端版;电脑关机不影响定时运行。
云端版是一个适配 Workers 运行环境的轻量流程,代码见 cloud/worker.mjs。它与本地 Python Horizon 使用同类来源,但不运行完整的本地评分、网页搜索和 Ollama 流程。来源列表在文件开头;公开 Telegram 频道可添加到 TELEGRAM_CHANNELS。改动后运行 wrangler deploy -c cloud/wrangler.jsonc。
Bot Token 和目标聊天 ID 要作为 Worker Secret 设置:
wrangler secret put TELEGRAM_BOT_TOKEN -c cloud/wrangler.jsonc
wrangler secret put TELEGRAM_CHAT_ID -c cloud/wrangler.jsonc
Token 由 BotFather 创建。目标频道中,Bot 必须有发帖权限;私聊中需先向 Bot 发送消息。两个 Secret 配好后,下一次定时任务会发布消息。不要把 Token 写入 wrangler.jsonc 或代码。生成的日报可通过 /api/latest 获取 JSON。
若需要 Bot 采集它已加入的聊天或频道消息,再设置两个 Secret:
wrangler secret put TELEGRAM_WEBHOOK_SECRET -c cloud/wrangler.jsonc
wrangler secret put TELEGRAM_SOURCE_CHAT_IDS -c cloud/wrangler.jsonc
TELEGRAM_SOURCE_CHAT_IDS 为允许采集的数字 chat ID,多个值用逗号分隔;未配置时不会接受任何聊天的内容。使用 Bot API setWebhook 指向 https://horizon-cloud.luoxi.workers.dev/telegram/webhook,并将 secret_token 设为与 TELEGRAM_WEBHOOK_SECRET 相同的值。Bot Token 只用于调用 Bot API,不能放到 Webhook URL 中。Webhook 请求会验证 Telegram 的 Secret Token 头;仅处理白名单内带来源链接的消息。公开频道也可直接在 cloud/worker.mjs 的 TELEGRAM_CHANNELS 中添加用户名,无需 Bot 加入。
本地版与旧静态页面
更新网页
本地版仍可运行 run-local.cmd,也可运行 run-cloudflare.cmd 发布旧静态日报。run-publish.cmd 是依赖开机和本地 Ollama 的旧一体化流程,与云端定时任务独立。
本地版 Telegram
- 在 Telegram 用 BotFather 创建 Bot,将 Bot 加入目标频道并授予发帖权限,或在与 Bot 的私聊中先发送一条消息。
- 在项目根目录的
.env写入:
dotenv
HORIZON_TELEGRAM_BOT_URL=https://api.telegram.org/bot<token>/sendMessage
TELEGRAM_CHAT_ID=@your_channel
私聊可用数字 chat ID。不要把 token 写入仓库、URL 查询串或公开页面。
3. data/config.json 已启用通用 Webhook 的 Telegram 模式,运行 uv run horizon-webhook --dry-run 可预览,uv run horizon-webhook 可测试发送。日常运行 run-local.cmd 时会在日报完成后推送。
推送为一条概览加逐条详情,单条自动限制在 Telegram 的 4096 字符以内。data/config.json 不在 Git 跟踪范围;迁移到新电脑时需保留配置。公开频道采集用 sources.telegram.channels;Bot 采集仅限它已加入的聊天与频道。