> ## 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.

# PagerDuty 集成

> 将 PagerDuty 事件路由给 Devin 以进行自动调查

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

PagerDuty 可与 Devin 集成，作为一种告警路由机制。当 PagerDuty 中发生事件时，会通过轻量级 webhook 桥接层，借助 [Devin API](/zh/api-reference/overview) 触发 Devin 会话。随后，Devin 会自动调查该事件——拉取遥测数据、追查根因，并可选地创建修复 PR。

这种模式与 [Datadog MCP 集成](/zh/enterprise/integrations/datadog) 结合使用时尤其有效：PagerDuty 将告警路由给 Devin，而 Devin 则使用 Datadog 调查日志和指标。

<div id="setup">
  ## 设置
</div>

<Steps>
  <Step title="部署一个 webhook 桥接服务">
    构建一个小型处理程序，用于接收 PagerDuty 事件负载，并调用 Devin API 启动调查会话。

    在 **Settings > Service Users** 中创建一个具有 `ManageOrgSessions` 权限的[服务用户](/zh/api-reference/v3/overview)。将 API 令牌存储为 `DEVIN_API_KEY`，将你的组织 ID 存储为 `DEVIN_ORG_ID`，并在桥接服务上将共享密钥存储为 `WEBHOOK_SECRET`。下一步中，你将在 PagerDuty webhook 的 **Custom Headers** 中配置这个相同的密钥。

    ```javascript theme={null}
    const express = require('express');
    const crypto = require('crypto');
    const app = express();
    app.use(express.json());

    function verifySignature(req) {
      const secret = Buffer.from(req.headers['x-webhook-secret'] || '');
      const expected = Buffer.from(process.env.WEBHOOK_SECRET || '');
      if (!expected.length) throw new Error('WEBHOOK_SECRET environment variable is not set');
      if (secret.length !== expected.length) return false;
      return crypto.timingSafeEqual(secret, expected);
    }

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

      const event = req.body?.event;
      if (!event || event.event_type !== 'incident.triggered') {
        return res.sendStatus(200);
      }

      const incident = event.data;
      const title = incident.title || 'Unknown incident';
      const service = incident.service?.summary || 'unknown-service';
      const urgency = incident.urgency || 'high';
      const incidentUrl = incident.html_url || '';

      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: [
            `PagerDuty incident triggered: "${title}"`,
            `Service: ${service}`,
            `Urgency: ${urgency}`,
            `Incident URL: ${incidentUrl}`,
            ``,
            `Investigate this incident:`,
            `1. Check recent logs and metrics for ${service}`,
            `2. Identify the root cause of the issue`,
            `3. If the root cause is a code issue, open a hotfix PR`,
            `4. Post your findings to #incidents on Slack`,
          ].join('\n'),
          tags: ['pagerduty-triage', `service:${service}`],
        }),
      });

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

    app.listen(3000);
    ```

    将它部署到任何能够接收 HTTPS 流量的地方，例如 Cloudflare Worker、AWS Lambda 或一个小型容器。
  </Step>

  <Step title="在 PagerDuty 中添加 webhook 集成">
    1. 在 PagerDuty 中，前往 **Services > \[your service] > Integrations**
    2. 点击 **Add Integration**，然后选择 **Generic Webhooks (v3)**
    3. 将 **Webhook URL** 设置为你的桥接服务端点 (例如：`https://your-bridge.example.com/pagerduty-alert`)
    4. 在 **Custom Headers** 下，添加 `X-Webhook-Secret`，其值与您在桥接服务上存储为 `WEBHOOK_SECRET` 的值相同
    5. 在 **Event Subscription** 下，按事件类型 `incident.triggered` 进行筛选，以便仅在新事件触发时发送 webhook
  </Step>

  <Step title="验证流程">
    在 PagerDuty 中触发一个测试事件 (或使用测试服务) ，并确认：

    1. 你的桥接服务收到了 webhook 负载
    2. [app.devin.ai](https://app.devin.ai) 中已创建一个新的 Devin 会话
    3. Devin 已开始调查该事件
  </Step>
</Steps>

<div id="best-practices">
  ## 最佳实践
</div>

* **从 warning 级别的监控开始。** 在将生产环境中的 P1 告警路由到 Devin 之前，先用非关键事件测试这条流程。
* **按服务或严重程度过滤。** 使用 PagerDuty 的 webhook 事件订阅，或在你的桥接服务中添加逻辑，跳过低优先级或噪声较大的服务。这样可以避免 Devin 被价值较低的告警淹没。
* **针对不同严重程度使用不同的 playbooks。** 将 P1 告警路由到立即调查和热修复流程。将 P3 告警仅路由到根因分析。根据紧急程度，在 Devin API 请求中传入不同的 `playbook_id` 值。
* **为会话添加标签以便跟踪。** 示例代码会为每个会话添加 `pagerduty-triage` 和服务名称标签，方便你在 Devin 控制台中过滤和查看。

<div id="combining-with-datadog">
  ## 结合 Datadog 使用
</div>

PagerDuty 通常与 [Datadog MCP 集成](/zh/enterprise/integrations/datadog) 配合使用。在这种模式下：

1. **PagerDuty** 将告警路由到 Devin (触发调查会话)
2. **Devin** 使用 **Datadog MCP** 查询受影响服务的日志、指标和追踪数据

这样，Devin 既能获得来自 PagerDuty 的告警上下文，也能获取来自 Datadog 的深度可观测性数据，从而进行更全面的调查。

<Tip>
  添加有关你的服务架构和 on-call 运行手册的 [Knowledge](/zh/product-guides/knowledge)，这样 Devin 就能自动遵循你团队的调查流程。
</Tip>

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

* [Datadog 集成](/zh/enterprise/integrations/datadog)
* [MCP Marketplace 文档](/zh/work-with-devin/mcp)
* [Devin API 参考文档](/zh/api-reference/overview)
