> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Sentry 集成

> 将 Devin 连接到 Sentry，实现错误自动分诊与修复

<div id="overview">
  ## 概述
</div>

Sentry 是 [MCP Marketplace](/zh/work-with-devin/mcp) 中提供的官方 MCP 集成。它使用 OAuth 身份验证，让 Devin 能够访问你的 Sentry 项目，以便查询问题详情、堆栈跟踪、事件面包屑等信息。

连接后，你可以通过 Webhook 设置自动化错误分诊，或计划定期运行修复会话，批量处理 Sentry 错误。

<div id="enable-the-sentry-mcp">
  ## 启用 Sentry MCP
</div>

<Steps>
  <Step title="打开 MCP Marketplace">
    前往 **Settings > MCP Marketplace**，找到 **Sentry**。
  </Step>

  <Step title="完成 OAuth 流程">
    点击 **Enable**，然后使用有权访问你的项目的 Sentry 账户进行身份验证。这将授予 Devin 对你的 Sentry 问题、事件和堆栈跟踪的读取权限。
  </Step>

  <Step title="验证连接">
    启动一个会话，并让 Devin 列出你某个项目中的最近问题，以测试连接。你也可以在 MCP Marketplace 中点击 **Test listing tools**，确认连接是否正常。
  </Step>
</Steps>

<div id="capabilities">
  ## 功能
</div>

启用 Sentry MCP 后，Devin 可在任何会话中执行以下操作：

| 功能       | 描述                     |
| :------- | :--------------------- |
| 查询问题详情   | 查看问题的元数据、状态、分配情况和事件计数  |
| 获取完整堆栈跟踪 | 访问任意事件的完整堆栈跟踪          |
| 查看事件面包屑  | 查看错误发生前的用户操作和系统事件      |
| 检查发布标签   | 查看是哪个发布版本引入或解决了某个问题    |
| 更新问题状态   | 将问题标记为已解决、已忽略，或分配给团队成员 |
| 管理分配和标签  | 更新问题分配、标签和书签           |
| 配置告警     | 查看和管理告警规则及通知设置         |

<div id="auto-triage-pipeline-webhook-driven">
  ## 自动分诊流水线 (Webhook 驱动)
</div>

你可以将 Sentry 告警直接接入 Devin，这样新的生产环境错误就能自动完成分诊。这里使用 Sentry Internal Integration 将 webhook 发送到桥接服务，再由该服务调用 Devin API。

<Steps>
  <Step title="创建 Sentry Internal Integration">
    在你的 Sentry 控制台中，前往 **Settings > Developer Settings > Custom Integrations**，然后点击 **Create New Integration > Internal Integration**。

    按如下方式配置：

    * **Name：** `Devin Auto-Triage`
    * **Webhook URL：** 你的桥接服务端点 (例如 `https://your-domain.com/sentry-webhook`)
    * **Alert Rule Action：** 切换为 **on** —— 这样该集成就可作为告警规则中的一个操作使用
    * **Permissions：** 为 **Issue & Event** 和 **Project** 提供读取权限
  </Step>

  <Step title="创建告警规则">
    前往你项目中的 **Alerts > Create Alert Rule > Issue Alert**：

    * **When：** 创建了新 issue
    * **If：** 该 issue 在 **1 小时**内有超过 **50** 个 event (可根据你的流量调整)
    * **Then：** 通过 **Devin Auto-Triage** 发送通知
  </Step>

  <Step title="部署 webhook 处理程序">
    构建一个小型处理程序，用来接收 Sentry 的告警负载并启动 Devin session。在 **Settings > Service Users** 中创建一个[服务用户](/zh/api-reference/v3/overview)，并授予 `ManageOrgSessions` permission (如果你还想通过 API 列出或筛选 sessions，也请添加 `ViewOrgSessions`) 。将 API token 存储为 `DEVIN_API_KEY`，将你的组织 ID 存储为 `DEVIN_ORG_ID`，并将 Sentry Internal Integration 的 **Client Secret** 存储为 `SENTRY_CLIENT_SECRET`，写入处理程序的环境变量。

    ```javascript theme={null}
    const express = require('express');
    const crypto = require('crypto');
    const app = express();
    app.use(express.json({
      verify: (req, _res, buf) => { req.rawBody = buf; },
    }));

    function verifySignature(req) {
      const signature = req.headers['sentry-hook-signature'];
      if (!signature) return false;
      const expected = crypto
        .createHmac('sha256', process.env.SENTRY_CLIENT_SECRET)
        .update(req.rawBody)
        .digest('hex');
      if (signature.length !== expected.length) return false;
      return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
    }

    app.post('/sentry-webhook', async (req, res) => {
      if (!verifySignature(req)) return res.status(401).send('Bad signature');

      const event = req.body.data?.event;
      if (!event) return res.sendStatus(200);

      const orgId = process.env.DEVIN_ORG_ID;
      const response = await fetch(
        `https://api.devin.ai/v3/organizations/${orgId}/sessions`, {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${process.env.DEVIN_API_KEY}`,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          prompt: [
            `A Sentry alert fired for a new issue: "${event.title}"`,
            `Culprit: ${event.culprit}`,
            `Sentry URL: ${event.web_url}`,
            ``,
            `Use the Sentry MCP to pull the full stack trace and breadcrumbs.`,
            `Identify the root cause, fix the issue, and open a PR with a`,
            `regression test.`,
          ].join('\n'),
          tags: ['sentry-auto-triage', `project:${event.project}`],
        }),
      });

      const { session_id } = await response.json();
      console.log(`Started Devin session ${session_id} for: ${event.title}`);
      res.sendStatus(200);
    });

    app.listen(3000);
    ```

    将它部署到任何可以接收 HTTPS 流量的环境中即可——例如 Cloudflare Worker、AWS Lambda，或小型 VPS。然后将 Sentry Internal Integration 的 webhook URL 指向它。
  </Step>

  <Step title="测试流水线">
    在 Sentry 中触发一次测试告警 (或暂时调低阈值) ，然后在 [app.devin.ai](https://app.devin.ai) 中查看是否出现了一个带有 `sentry-auto-triage` 标签的新 session。
  </Step>
</Steps>

<Note>
  上述代码会为每个 session 打上 `sentry-auto-triage` 和 Sentry 项目名称两个标签。这样你就可以在 Devin 控制台中筛选这些 sessions，并通过 `tags` 查询参数[使用 API 拉取它们](/zh/api-reference/v3/sessions/organizations-sessions)。列出 sessions 需要你的服务用户具备 `ViewOrgSessions` permission——完整权限表请参阅 [API 概览](/zh/api-reference/v3/overview)。
</Note>

<div id="scheduled-batch-remediation">
  ## 定期批量修复
</div>

与其逐一处理单个告警，你可以计划一个定期运行的 [Devin](/zh/work-with-devin/advanced-capabilities) session，批量拉取尚未解析的 Sentry 错误，并为每个错误启动一个修复 session。

<Steps>
  <Step title="创建计划">
    前往 **Settings > [Schedules](/zh/product-guides/scheduled-sessions)**，然后点击 **Create schedule**。

    * **名称**: `Daily Sentry remediation`
    * **频率**: 每天早上 6:00 (这样修复 PR 能在站会前准备好)
    * **Agent**: Devin —— 这样 Devin 就能为每个错误启动一个单独的 session，从而并行运行修复
    * **提示**:

    ```
    使用 Sentry MCP 拉取 payments-api 项目中过去
    24 小时内所有未解析的错误，并按事件数排序。
    跳过带有 `wontfix` 或 `expected-behavior` 标签的错误。

    对于前 5 个错误：
    1. 拉取完整的堆栈跟踪和 breadcrumbs
    2. 在我们的 repo 中找到相关源文件
    3. 找出根本原因
    4. 启动一个 Devin session，创建包含修复和回归
       测试的 PR，并在 PR 描述中附上对应的 Sentry issue URL

    将所有错误及其 PR 的摘要发布到 Slack。
    ```
  </Step>

  <Step title="审查并迭代">
    运行一周后，调整作用域：

    * **增加或减少错误数量**，具体取决于有多少修复可以合并
    * **按项目或标签筛选**，以聚焦代码库中的特定区域
    * **添加 [Knowledge](/zh/product-guides/knowledge)**，说明你的错误处理约定，让 Devin 的修复更符合你团队的模式
  </Step>
</Steps>

<Tip>
  将由 webhook 驱动的高影响错误 (50+ 事件/小时) 分诊，与针对低频长尾问题的定期批量修复结合使用。这样既能处理紧急错误，也能持续处理其他错误。
</Tip>

<div id="related-resources">
  ## 相关资源
</div>

* [完整指南：自动分诊 Sentry 错误](/zh/use-cases/gallery/api-sentry-auto-triage)
* [完整指南：每日修复 Sentry 错误](/zh/use-cases/gallery/scheduled-sentry-remediation)
* [MCP Marketplace 文档](/zh/work-with-devin/mcp)
* [Devin API 参考文档](/zh/api-reference/overview)
