Skip to main content

通过 Webhook 自动修复工单

通过 webhook 到会话的桥接,将本地部署或不受支持的工单系统连接到 Devin。
AuthorCognition
Category自动化
FeaturesAPI, Playbooks
1

创建服务账户

Devin 使用服务用户令牌对 API 调用进行身份验证。这是在生产环境中实现自动化的推荐方式。
  1. 访问 app.devin.ai > Settings > Service Users,创建一个具有 ManageOrgSessions 权限的新服务用户
  2. 复制创建后显示的 API 令牌并安全保存—它只会显示一次,你会在 webhook 处理程序中将其用作 DEVIN_API_KEY
要找到你的组织 ID,使用你的令牌调用 GET https://api.devin.ai/v3/enterprise/organizations — 该 URL 只会返回组织 slug,而不是 ID。使用一个简单的 curl 命令进行测试:
curl -X POST https://api.devin.ai/v3/organizations/YOUR_ORG_ID/sessions \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Say hello — this is a test session."}'
你应该会收到一个 session_idurl。在 Devin Web 应用中删除该测试会话,然后继续。
2

构建 Webhook 处理器

这种模式非常适合用于本地部署的工单系统(例如自托管的 Jira、Redmine 或 Bugzilla),或者没有原生 Devin 集成的工单工具(不同于 LinearJira Cloud,它们具有内置支持)。如果你的工单系统支持 Webhook,你可以通过一个小型服务将其与 Devin 对接。在提示中包含你的工单系统 API 文档的链接,以便 Devin 能够了解如何向工单回发评论。将工单系统的 API token 作为会话密钥传入,这样 Devin 就可以直接进行身份验证。让 Devin 来生成脚手架代码:核心处理程序大致如下所示:
const PLAYBOOKS = {
  'devin-autofix': 'playbook-a1b2c3d4e5f6',
  'devin-feature': 'playbook-f6e5d4c3b2a1',
};

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

  const { id, title, description, labels } = req.body;
  const label = labels.find(l => PLAYBOOKS[l]);
  if (!label) return res.status(200).send('No Devin label — skipped');

  const orgId = process.env.DEVIN_ORG_ID;
  const { session_id } = 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: [
        `Ticket ${id}: ${title}`,
        description,
        `Reference ticket ${id} in your commit message.`,
        `When done, post a comment on ticket ${id} with a summary of your`,
        `changes and a link to the PR. Use the ticketing API at`,
        `https://your-ticketing-system.com/api/docs to post the comment.`,
        `Authenticate with the $TICKET_API_TOKEN environment variable.`,
      ].join('\n\n'),
      playbook_id: PLAYBOOKS[label],
      session_secrets: [
        { key: 'TICKET_API_TOKEN', value: process.env.TICKET_API_TOKEN },
      ],
    }),
  }).then(r => r.json());

  res.json({ session_id });
});
PLAYBOOKS 映射会将工单标签路由到你在 Settings > Playbooks 中创建的运行手册。一个修复 bug 的运行手册可能会写着 “始终添加回归测试”;一个功能类运行手册可能会写着 “创建一个草稿 PR 并请求评审。”提示词中包含指向你工单系统 API 文档的链接,以便 Devin 知道如何回写评论。TICKET_API_TOKEN 作为会话密钥传入 —— 它只会在该会话中以环境变量的形式注入,不会被持久存储。请将示例中的 API 文档 URL 替换为你实际工单系统的文档地址。将 handler 部署到任意可以接收 HTTPS POST 请求的地方——云函数(AWS Lambda、Google Cloud Functions)、容器或 VPS。然后在工单系统的通知或集成设置中,将其 URL 注册为一个 webhook,并仅筛选 ticket created 事件。创建一个带有 devin-autofix 标签的测试工单来验证完整闭环:工单创建 → webhook 触发 → Devin 会话启动 → PR 创建 → Devin 在工单上发布评论。