1. 为什么我要把热点新闻塞进电报群n8n 计划触发器定时推送的真实场景每天手动刷微博热搜、知乎热榜、GitHub Trending再挑几条发到群里这件事我坚持了不到一周就放弃了。不是懒是重复劳动太消耗注意力。后来我把这套流程拆成了三个动作定时抓取、AI 摘要筛选、推送到电报群聊。n8n 的计划触发器负责“到点干活”HTTP 请求节点负责“拿数据”和“调模型”电报节点负责“发出去”。整条链路跑通之后我每天早上八点半打开电报群里已经躺着一份整理好的热点清单。这套方案适合谁如果你有 n8n 基础环境想让 AI 帮你做信息过滤又不想写太多胶水代码那它很合适。n8n 本身是低代码工作流工具计划触发器就是它的定时器HTTP 请求节点是万能连接器AI Agent 节点负责理解和改写内容。三者串起来就是一个自动化的“新闻秘书”。核心检索词先摆出来n8n 计划触发器、HTTP 请求节点、AI Agent、电报群聊推送。这四个词贯穿全文你照着配就能复现。我实测下来整个工作流从触发到消息到达群聊稳定在 6 到 12 秒之间取决于新闻 API 的响应速度和模型生成摘要的长度。先讲清楚整体数据流计划触发器按 Cron 表达式唤醒工作流第一个 HTTP 请求节点去拉热点新闻列表第二个 HTTP 请求节点把新闻原文发给 TaoToken 的模型接口做摘要和筛选最后电报节点把整理好的 Markdown 文本发到指定群聊。中间可以加一个 Code 节点做数据裁剪避免把整篇新闻原文塞给模型浪费 token。这里有个容易踩的坑新闻 API 返回的往往是嵌套 JSON字段名不统一。有的用title有的用name有的把热度放在hot里。你需要在 HTTP 请求节点之后加一个 Set 节点或者 Code 节点把字段统一成title和url不然后面 AI 提示词里引用字段会报 undefined。我试过直接拿原始 JSON 喂给模型结果模型把字段名也当成新闻内容总结了输出一堆“title: xxx”的废话。另一个坑是时区。n8n 默认用 UTC计划触发器里如果写0 8 * * *实际执行时间是北京时间下午四点。你需要在工作流设置里把时区改成Asia/Shanghai或者在 Cron 表达式里手动减 8 小时。我建议直接改工作流时区一劳永逸。电报群聊的配置也有讲究。你需要先找 BotFather 创建机器人拿到 Bot Token再把机器人拉进目标群聊最后通过getUpdates接口拿到群聊的 Chat ID。Chat ID 通常是负数比如-1001234567890。这个 ID 填到电报节点的 Chat ID 字段里消息才能准确投递。如果填错电报 API 会返回chat not found但 n8n 的电报节点报错信息比较模糊你最好先用 curl 测一下。整套流程的产出效果是这样的群里收到一条 Markdown 格式的消息标题是“今日热点摘要”下面分点列出 8 到 10 条新闻每条包含一句话摘要和原文链接。AI 会自动去掉重复内容把同一事件的不同报道合并成一条。你还可以在提示词里加关键词过滤比如“只保留科技和编程相关”这样娱乐八卦就不会混进来。2. TaoToken 前置准备统一 Key 与 HTTP 请求节点接入 n8n 的配置要点在 n8n 里调用 AI 模型最省事的方式是用 HTTP 请求节点直接打 API而不是装一堆社区节点。TaoToken 提供统一的 Base URL 和 Key兼容 OpenAI 风格的/v1/chat/completions接口你不需要为每个模型单独配一套认证。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 根地址是 https://taotoken.net/api 注意 API 地址后面不加 UTM 参数。你需要准备三样东西Base URL、API Key、Model ID。Base URL 填https://taotoken.net/api/v1API Key 在控制台的 API Keys 页面生成Model ID 根据你想要的模型填比如claude-sonnet-4-20250514或者gpt-4o-mini。这三个值在 n8n 的 HTTP 请求节点里会用到缺一不可。先登录控制台创建 Key。打开 https://taotoken.net/console 找到 API Keys 菜单点“创建新 Key”复制生成的字符串。这个 Key 只显示一次丢了就得重新建。我习惯把它存到 n8n 的 Credentials 里类型选“Header Auth”Name 填AuthorizationValue 填Bearer sk-你的Key。这样在 HTTP 请求节点里直接选这个 Credential不用每次手填。模型 ID 怎么选如果你只是做新闻摘要gpt-4o-mini或者claude-haiku这类轻量模型就够了速度快、成本低。如果你要模型做深度分析和跨平台聚合那就上claude-sonnet或者gpt-4o。我实测下来摘要 10 条新闻用轻量模型大概消耗 800 到 1200 token成本可以忽略不计。TaoToken 的接口路径是/v1/chat/completions请求方法是 POSTContent-Type 是application/json。请求体里需要包含model、messages、temperature这几个字段。messages是一个数组里面放system和user两条消息。system用来设定角色比如“你是一个新闻摘要助手”user用来放新闻原文和具体指令。这里有个细节n8n 的 HTTP 请求节点默认把 Body 当成 JSON 发但如果你在 Body 里用了表达式引用上游节点的数据要确保表达式返回的是字符串而不是对象。比如{{ $json.newsList }}如果本身是数组直接塞进 JSON Body 会变成嵌套对象模型接口可能解析失败。正确做法是用{{ JSON.stringify($json.newsList) }}转成字符串。另外TaoToken 的接口支持流式输出但在 n8n 里建议关掉 stream因为电报节点需要等完整响应才能发消息。流式输出会让 HTTP 请求节点提前返回拿到的内容不完整。在请求体里加stream: false就行。如果你打算长期跑这个工作流建议用 Coding Plan 而不是按量计费。Coding Plan 的入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 适合每天定时调用、token 消耗稳定的场景。我算过一笔账每天跑一次、每次 1000 token一个月下来按量计费也就几块钱但 Coding Plan 的额度更充裕不用担心突发流量。配置完 Key 之后先别急着搭完整工作流。你可以用模型对话页面 https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 手动测一下模型能不能正常返回。输入一段新闻文本看输出格式是否符合预期。这一步能帮你排除 Key 无效、模型 ID 写错、余额不足等问题。等手动测试通过了再回到 n8n 里配 HTTP 请求节点。3. 可复制的 n8n 工作流 JSON 与 HTTP 请求节点配置这一节直接给你能导入的 JSON。打开 n8n点右上角“Import from File”或者“Import from URL”把下面的 JSON 粘贴进去。导入后你会看到四个节点计划触发器、获取新闻的 HTTP 请求、调用 AI 的 HTTP 请求、发送电报的消息节点。节点之间的连线已经配好你只需要替换 API Key、Chat ID 和模型 ID。{ name: DailyHotNewsToTelegram, nodes: [ { parameters: { rule: { interval: [ { field: cronExpression, expression: 30 0 * * * } ] } }, name: Schedule Trigger, type: n8n-nodes-base.scheduleTrigger, typeVersion: 1.2, position: [200, 300] }, { parameters: { url: https://api.vvhan.com/api/hotlist/all, options: { response: { response: { responseFormat: json } } } }, name: Fetch Hot News, type: n8n-nodes-base.httpRequest, typeVersion: 4.2, position: [450, 300] }, { parameters: { method: POST, url: https://taotoken.net/api/v1/chat/completions, authentication: genericCredentialType, genericAuthType: httpHeaderAuth, sendBody: true, bodyParameters: { parameters: [ { name: model, value: gpt-4o-mini }, { name: stream, value: false }, { name: temperature, value: 0.3 }, { name: messages, value: {{ [{\role\:\system\,\content\:\你是一个新闻摘要助手请从用户提供的新闻列表中筛选出最重要的8条去除重复内容每条用一句话概括并附上原文链接。输出格式为Markdown列表。\},{\role\:\user\,\content\: JSON.stringify($json.data) }] }} } ] }, options: {} }, name: AI Summarize, type: n8n-nodes-base.httpRequest, typeVersion: 4.2, position: [700, 300] }, { parameters: { chatId: -1001234567890, text: {{ $json.choices[0].message.content }}, additionalFields: { parse_mode: Markdown } }, name: Send to Telegram, type: n8n-nodes-base.telegram, typeVersion: 1.2, position: [950, 300] } ], connections: { Schedule Trigger: { main: [[{node: Fetch Hot News, type: main, index: 0}]] }, Fetch Hot News: { main: [[{node: AI Summarize, type: main, index: 0}]] }, AI Summarize: { main: [[{node: Send to Telegram, type: main, index: 0}]] } } }导入后先别执行按顺序改三个地方。第一计划触发器的 Cron 表达式30 0 * * *表示 UTC 时间每天 0:30对应北京时间 8:30。如果你想改时间直接改这个表达式但记得工作流时区要设成Asia/Shanghai否则时间会偏。第二AI Summarize 节点的 Credential 要选你之前建的 Header AuthModel ID 按需替换。第三Send to Telegram 节点的 Chat ID 换成你自己的群聊 ID。HTTP 请求节点的 Body 配置是重点。在 n8n 里messages字段的值是一个表达式里面用了JSON.stringify($json.data)。这里的$json.data是上一个节点返回的新闻数组。不同新闻 API 的字段名不一样如果data字段不存在你需要改成实际的字段名。比如 vvhan 的接口返回结构是{ code: 200, data: [...] }所以$json.data能拿到数组。如果换成别的 API先手动执行一次 Fetch Hot News 节点看输出里数组挂在哪个字段下。电报节点的parse_mode设成Markdown这样 AI 输出的**加粗**和[链接](url)能正常渲染。但要注意如果 AI 输出的内容里包含 Markdown 特殊字符比如_或*电报可能会解析失败。你可以在 AI 提示词里加一句“不要使用下划线链接用 Markdown 格式”减少解析错误。如果你用的是 Claude Code 或者 Cline 这类工具来管理配置可以把 Base URL、Key、Model ID 写进settings.json或者auth.json。比如 Claude Code 的配置文件里ANTHROPIC_BASE_URL填https://taotoken.net/apiANTHROPIC_API_KEY填你的 KeyANTHROPIC_MODEL填模型 ID。Cline 的 MCP 配置类似在mcp_settings.json里指定baseUrl和apiKey。Codex 的auth.json则是{ openai: { baseURL: https://taotoken.net/api/v1, apiKey: sk-xxx } }。这三件套配好工具就能直接走 TaoToken 的接口。工作流 JSON 导入后节点位置可能有点乱你手动拖一下就行。重点是连线顺序Schedule Trigger → Fetch Hot News → AI Summarize → Send to Telegram。少一条线消息就发不出去。4. 手动触发与定时验证确认消息按时到达电报群聊配好之后先别等定时手动点一下“Execute Workflow”按钮看整条链路能不能跑通。手动执行时Schedule Trigger 节点会立即触发一次不需要等到 Cron 时间。你观察每个节点的输出Fetch Hot News 应该返回一个包含新闻数组的 JSONAI Summarize 应该返回choices[0].message.content字段里面是 Markdown 文本Send to Telegram 应该返回ok: true。如果 AI Summarize 节点报错reading choices说明接口返回的结构不对。可能是 Key 无效、模型 ID 写错、或者请求体格式有问题。你先在模型对话页面手动发一条请求确认 Key 和模型能用。如果手动能用但 n8n 里报错检查 HTTP 请求节点的 Headers 里有没有正确带上Authorization: Bearer sk-xxx。n8n 的 Header Auth Credential 有时候不会自动应用到所有请求你可以在节点里手动加一个 Header。如果电报节点报错chat not found说明 Chat ID 不对。你先用浏览器访问https://api.telegram.org/bot你的BotToken/getUpdates看返回的 JSON 里chat.id是多少。注意群聊的 ID 是负数而且可能带-100前缀。把正确的 ID 填回节点再执行一次。手动跑通之后把工作流右上角的“Active”开关打开。这时候 Schedule Trigger 才会按 Cron 表达式定时执行。你可以把 Cron 改成*/5 * * * *让它每 5 分钟跑一次观察几次执行记录。在 n8n 的“Executions”页面能看到每次执行的状态、耗时和输出。确认连续三次都成功之后再把 Cron 改回每天一次。时区问题再强调一遍。n8n 的工作流设置里有个“Timezone”选项默认是America/New_York或者 UTC。你把它改成Asia/Shanghai然后 Cron 表达式写30 8 * * *就是北京时间每天早上 8:30 执行。如果不改时区写30 0 * * *也能达到同样效果但容易把自己绕晕。我建议统一用Asia/ShanghaiCron 表达式按本地时间写。验证消息到达群聊时注意电报机器人有没有被限制发言。有些群组开启了“仅管理员可发言”你的机器人如果不是管理员消息会被静默丢弃。你可以在群组设置里把机器人设为管理员或者关闭发言限制。另外电报对消息长度有限制单条消息最多 4096 个字符。如果 AI 输出的摘要太长电报节点会报错message is too long。你可以在 AI 提示词里限制“总字数不超过 2000 字”或者在电报节点前加一个 Code 节点截断文本。如果你想让验证更直观可以在 AI Summarize 节点后面加一个“NoOp”节点把choices[0].message.content打印到 n8n 的日志里。这样即使电报发送失败你也能看到 AI 到底生成了什么内容。我踩过的坑是AI 返回了内容但电报节点因为 Markdown 解析失败而报错日志里只显示Bad Request: cant parse entities。后来我在提示词里明确要求“不要使用 Markdown 特殊字符”问题就解决了。定时验证通过后你可以把执行记录保留一段时间观察有没有偶发失败。n8n 默认保留最近 100 次执行记录够用了。如果发现某天没收到推送先看 Executions 页面有没有报错再看电报群聊的机器人是否还在群里。有时候群主会把机器人踢掉你重新拉进去就行。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth 报错对照报错一401 Unauthorized。这是最常见的说明 API Key 无效或者没带上。你先检查 n8n 的 Header Auth Credential 里 Value 是不是Bearer sk-xxx注意Bearer和 Key 之间有一个空格。然后检查 HTTP 请求节点有没有选中这个 Credential。如果都对了还是 401去控制台看看 Key 是不是被删了或者余额不足。TaoToken 的 Key 在 API Keys 页面能看状态过期或禁用的 Key 会标红。报错二local proxy failed或者ECONNREFUSED。这个报错通常出现在你本地跑 n8n、又配了系统代理的情况下。n8n 的 HTTP 请求节点会继承环境变量里的HTTP_PROXY和HTTPS_PROXY如果代理地址不通就会报这个错。解决办法是在 n8n 的启动命令里加--no-proxy或者把环境变量里的代理清掉。如果你用的是 Docker在docker run时加-e NO_PROXYtaotoken.net让 n8n 直连 TaoToken 的接口。报错三Cannot read properties of undefined (reading choices)。这说明 AI Summarize 节点拿到的响应里没有choices字段。可能原因有三个请求体格式不对、模型 ID 不存在、接口返回了错误信息。你先在 n8n 里点开 AI Summarize 节点的输出看完整的 JSON 是什么。如果返回的是{ error: { message: model not found } }那就是模型 ID 写错了。如果返回的是{ error: { message: invalid api key } }那就是 Key 问题。如果返回的是空对象可能是请求体里的messages表达式没解析成功你检查一下JSON.stringify有没有漏掉。报错四OAuth相关错误。n8n 的电报节点支持两种认证方式Bot Token 和 OAuth。如果你选错了认证类型会报OAuth token is missing。正确做法是在 Telegram Credential 里选“Bot Token”填 BotFather 给你的 Token。不要选 OAuth那个是给用户账号用的配置复杂且容易过期。报错五Bad Request: message is too long。电报单条消息限制 4096 字符AI 生成的摘要如果超过这个长度发送就会失败。你可以在 AI 提示词里加“总字数控制在 1500 字以内”或者在电报节点前加一个 Code 节点用text.slice(0, 4000)截断。截断后记得加省略号不然用户不知道内容被剪了。报错六Forbidden: bot was blocked by the user。这个报错说明机器人被群成员拉黑了或者机器人不在群里。你重新把机器人拉进群聊或者让群管理员解除限制。电报机器人如果被多个用户举报可能会被限制发言这种情况只能换一个机器人。报错七ETIMEDOUT或ESOCKETTIMEDOUT。这是网络超时通常是因为新闻 API 或者 TaoToken 接口响应太慢。你可以在 HTTP 请求节点的 Options 里把 Timeout 调到 30000 毫秒30 秒。如果还是超时检查 n8n 服务器的网络出口是否稳定。我实测下来TaoToken 的接口响应一般在 2 到 5 秒新闻 API 偶尔会慢到 10 秒所以 30 秒的超时设置比较稳妥。排查顺序建议先看 n8n 的 Executions 页面找到报错的那次执行点进去看每个节点的输入输出。错误信息通常在节点的“Error”标签页里。然后根据报错关键词对照上面的列表。如果报错信息不明确把 HTTP 请求节点的“Response”选项里的“Include Response Headers and Status”打开这样能看到完整的 HTTP 状态码和响应头。6. 语义一致 CTA从模型对话到 Coding Plan 的接入路径整条工作流跑通之后你可能会想调整模型、换新闻源、或者加更多推送渠道。这些扩展都建立在同一个基础上TaoToken 的统一 Key 和 Base URL。你不需要为每个模型单独申请账号也不用改代码里的接口地址。想验证模型效果直接打开模型对话页面 https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 输入一段新闻文本看摘要质量是否符合预期。觉得满意了再把模型 ID 填回 n8n 的 HTTP 请求节点。如果你打算把这个工作流长期跑下去每天定时调用、token 消耗稳定那 Coding Plan 比按量计费更划算。入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 开通后额度更充裕不用担心某天新闻特别多导致 token 超支。我自己的用法是轻量摘要用gpt-4o-mini深度分析用claude-sonnet两个模型共用同一个 Key切换时只改 Model ID 字段。Key 的管理在控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 你可以创建多个 Key 分配给不同的工作流方便追踪消耗。比如新闻推送用一个 Key代码辅助用另一个 Key。API Keys 页面能看到每个 Key 的最近使用时间和调用量如果某个 Key 突然消耗暴涨你能快速定位是哪个工作流出了问题。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 里面列出了所有支持的模型 ID、接口路径、请求参数和返回格式。你在 n8n 里配 HTTP 请求节点时如果拿不准 Body 怎么写直接对照文档里的 curl 示例改。文档里还有 Python 和 Node.js 的调用示例你可以复制到 Code 节点里做数据预处理。最后说一个实用技巧在 n8n 的工作流里加一个“Error Trigger”节点当任何节点报错时自动发一条电报消息到你的私聊。这样即使群聊推送失败你也能第一时间知道。Error Trigger 的配置很简单新建一个工作流触发器选“Error Trigger”然后接一个电报节点Chat ID 填你自己的用户 ID。把这个错误处理工作流设为 Active它就会监听主工作流的执行状态。主工作流报错时你会收到一条包含错误详情的电报消息不用每次都去 n8n 后台翻日志。