AI PLAY玩法更新持续收录
← 回到更新流

2026-09-24 · 原文发布日

n8n 工作流:网站宕机后让 AI 自动开修复 PR

该 n8n 模板每 2 分钟对健康检查 URL 发请求,响应不符预期时拉取 GitHub 仓库最近的提交、Actions 运行记录和少量候选源码文件,交给 Claude 生成根因诊断、PR 文案和文件修改方案。若 AI 给出修改,就自动建新分支、提交并开 PR,同时把诊断和 PR 链接发到 Slack;没有可靠方案时也会发另一条提示。需要 GitHub、Anthropic 凭证和 Slack incoming webhook。

原文要点

来源是n8n模板页(Oneclick AI Squad,2026-09-24,非付费模板):工作流每2分钟定时请求健康检查URL,响应不符预期状态时拉取所配GitHub仓库的最近提交、Actions运行记录和少量候选源码文件,连同故障详情发给Anthropic Claude生成根因诊断、PR文案与文件修改方案;有方案则自动建分支、提交并开PR,把诊断和PR链接发到Slack incoming webhook,无可信方案时发另一条提示。需要GitHub API凭证、Anthropic的HTTP Header Auth凭证、Slack webhook,并需配置仓库owner/name、基础分支、健康检查URL、期望状态码、超时与诊断文件数上限。

这次做成什么

在不导入任何现成文件的前提下,照本页在自己的n8n里手工复刻这条链路:定时健康检查→故障时收集GitHub上下文→Claude诊断→分支开PR→Slack通知,并用合成测试数据走通一次。

准备什么

  • 一个n8n实例(自托管或云版),能建凭证并激活工作流
  • GitHub凭证:可读仓库内容、可建分支/提交/PR的token(练习用测试仓库)
  • Anthropic API密钥,以HTTP Header Auth方式接入
  • Slack工作区及一个incoming webhook地址(练习可用测试频道)
  • 一个可访问的健康检查URL,练习时可自建返回状态的测试端点

具体怎么做

  1. 配置触发器与健康检查

    新建工作流,加Schedule Trigger设为每2分钟;接HTTP Request节点请求你的健康检查URL,设超时;再接IF节点判断响应状态码是否等于期望值(如200),为true直接结束,false进入诊断分支。

  2. 收集GitHub上下文

    在false分支依次加GitHub节点:读取所配仓库最近提交列表、Actions运行记录;再用HTTP Request调GitHub contents接口拉取不超过所设上限(如3个)的候选源码文件内容,把仓库owner、name、基础分支写进配置值节点统一管理。

  3. 调用Claude生成诊断

    加HTTP Request节点以Header Auth(x-api-key)调用Anthropic消息接口,请求体中把故障详情、提交记录、Actions日志摘要、源码文件内容一起放入用户消息,要求模型返回结构化JSON:根因诊断、PR标题正文、文件修改列表;无把握时返回空修改列表。

  4. 分支处理与开PR

    用IF节点判断修改列表是否非空。非空:GitHub节点从基础分支建新分支(如fix/incident-时间戳),逐文件提交更新内容,再以新分支向基础分支开PR,标题正文用模型输出。为空:跳过GitHub写操作。

  5. 发Slack通知并测试

    两个分支各接HTTP Request POST到你的Slack webhook:有PR的消息含诊断摘要与PR链接,无方案的消息说明未能给出可信修复。用测试端点返回500触发一次,确认PR与Slack消息都出现。

可直接复制的材料

配置值(本站示例,需替换)

本站按模板说明独立整理的配置示例;anthropic具体模型名模板页未给出,需回原模板节点核对,不要照抄本站占位值。

{
  "healthCheckUrl": "https://demo-health.example.internal/status",
  "expectedStatusCode": 200,
  "timeoutMs": 8000,
  "maxDiagnosticFiles": 3,
  "githubOwner": "your-org",
  "githubRepo": "demo-webapp",
  "baseBranch": "main",
  "anthropicModel": "在模板原页面核对后填写",
  "slackWebhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX"
}

Claude诊断请求的用户消息模板

本站独立编写的提示词,字段名需与你前面节点的输出对应。

你是一个值班修复助手。以下是网站健康检查失败的详情、GitHub最近提交、Actions运行记录和候选源码文件内容。请只返回JSON,字段为:diagnosis(根因诊断,中文)、prTitle、prBody、changes(数组,元素含path与newContent;没有可靠修复方案时返回空数组)。

故障详情:{{ $json.health }}
最近提交:{{ $json.commits }}
Actions记录:{{ $json.actionsRuns }}
源码文件:{{ $json.files }}

Slack无方案通知的测试载荷

合成测试数据,webhook地址与时间请替换。

{
  "text": "【告警】demo-webapp 健康检查失败(期望200,实际500)。AI未能给出可信修复方案,请人工排查。时间:2026-09-24T10:00:00Z"
}

输入与输出示例

本站虚构演示,非模板作者结果,未实际运行。

输入

测试端点返回HTTP 500;仓库demo-webapp最近3次提交中有一次改了config/cache.js,Actions最近一次构建失败;候选源码3个文件被送入Claude。

对应输出

Slack收到:「【告警】demo-webapp 宕机。诊断:cache.js 缺少空值判断导致启动即抛错。已开PR:https://github.com/your-org/demo-webapp/pull/42 请复核后合并。」同时GitHub出现fix/incident-20260924分支与PR #42。

做完检查这些

  • 健康检查正常时工作流在IF节点即停止,不产生任何GitHub写操作
  • 故障时Claude节点请求体中同时包含故障详情、提交、Actions记录和源码内容
  • AI返回空changes时不建分支不开PR,且Slack收到的是无方案提示而非PR链接
  • 有方案时新分支从所配置基础分支拉出,PR标题与正文来自模型输出
  • 两处Slack请求都换成自己的webhook后消息能送达

容易卡住的地方

  • 本页是按模板说明手工复刻的路线,不依赖导入现成文件,具体节点参数与默认值请以原模板页面为准
  • GitHub token权限不足会在建分支或开PR时报403,练习用隔离测试仓库,别拿生产仓库试
  • 每2分钟一次调度在故障期间会反复触发,需自行考虑去重或暂停,模板说明未提防抖
  • 模板未写明Anthropic模型名与具体API版本,本页不伪造,请在原模板核对
  • AI自动改的代码未必正确,PR应人工复核再合并

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Self-heal web app outages with Claude, GitHub and Slack
原作者
Oneclick AI Squad
原始发布日期
2026-09-24T04:21:25.957Z
来源
https://n8n.io/workflows/19874