Skip to main content

Webhook を利用したチケットの自動解決

オンプレミス環境や未対応のチケット管理システムを、Webhook-to-session ブリッジで Devin に接続します。
AuthorCognition
Category自動化
FeaturesAPI、Playbooks
1

サービスユーザーを作成

Devin は API 呼び出しを認証するために service user tokens を使用します。これは本番環境の自動化に推奨される方法です。
  1. app.devin.ai > Settings > Service Users に移動し、ManageOrgSessions 権限を持つ新しい service user を作成します
  2. 作成後に表示される API トークンをコピーして安全に保管します — このトークンは一度しか表示されず、webhook ハンドラ内で DEVIN_API_KEY として使用します
組織 ID を確認するには、トークンを使用して GET https://api.devin.ai/v3/enterprise/organizations を呼び出します — この URL では org のスラッグのみが表示され、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 トークンは session secret として渡し、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 で作成したプレイブックに対応付けます。バグ修正用のプレイブックには 「必ず回帰テストを追加する」、機能追加用のプレイブックには 「ドラフト PR を作成してレビューを依頼する」 といった内容を記載できます。プロンプトには、Devin がコメントを投稿する方法を理解できるように、利用しているチケットシステムの API ドキュメントへのリンクを含めます。TICKET_API_TOKENセッションシークレットとして渡されます — そのセッションでのみ環境変数として注入され、保存されることはありません。API ドキュメントの URL を、実際に利用しているチケットシステムのドキュメントに置き換えてください。ハンドラーは HTTPS の POST リクエストを受け取れる任意の環境にデプロイします — クラウドファンクション(AWS Lambda、Google Cloud Functions)、コンテナ、または VPS などです。その URL をチケットシステムの通知またはインテグレーション設定で webhook として登録し、ticket created イベントを対象にフィルタします。devin-autofix ラベル付きのテストチケットを作成し、フルループを検証します: チケット作成 → webhook 発火 → Devin セッション開始 → PR 作成 → Devin がチケットにコメントを投稿。