Skip to main content

Tickets automatisch per Webhooks lösen

Verbinde lokale oder nicht unterstützte Ticketingsysteme über eine Webhook-zu-Session-Bridge mit Devin.
AuthorCognition
CategoryAutomatisierungen
FeaturesAPI, Playbooks
1

Servicebenutzer erstellen

Devin verwendet Service-User-Tokens zur Authentifizierung von API-Aufrufen. Dies ist der empfohlene Ansatz für Automatisierung in Produktionsumgebungen.
  1. Wechseln Sie zu app.devin.ai > Settings > Service Users und erstellen Sie einen neuen Service User mit der Berechtigung ManageOrgSessions.
  2. Kopieren Sie das nach der Erstellung angezeigte API-Token und bewahren Sie es sicher auf — es wird nur einmal angezeigt und Sie verwenden es als DEVIN_API_KEY in Ihrem Webhook-Handler.
Um Ihre Organisations-ID zu finden, rufen Sie GET https://api.devin.ai/v3/enterprise/organizations mit Ihrem Token auf — die URL zeigt nur den Organisations-Slug, nicht die ID.Testen Sie es mit einem kurzen curl-Befehl:
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."}'
Sie sollten eine session_id und eine url erhalten. Löschen Sie die Testsitzung in der Devin-Web-App und fahren Sie fort.
2

Webhook-Handler erstellen

Dieses Muster ist ideal für On-Premises-Ticketing-Systeme (wie selbstgehostetes Jira, Redmine oder Bugzilla) oder Ticketing-Tools, die keine native Devin-Integration haben (im Gegensatz zu Linear und Jira Cloud, die integrierte Unterstützung bieten). Wenn Ihr Ticketing-System Webhooks unterstützt, können Sie es mit einem kleinen Service mit Devin verbinden.Fügen Sie einen Link zur API-Dokumentation Ihres Ticketing-Systems in den Prompt ein, damit Devin herausfinden kann, wie Kommentare zurück in die Tickets gepostet werden. Übergeben Sie das Ticketing-API-Token als Session-Secret, damit Devin sich direkt authentifizieren kann.Bitten Sie Devin, das Grundgerüst zu erstellen:So sieht der zentrale Handler aus:
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 });
});
Die PLAYBOOKS-Map ordnet Ticket-Labels den Playbooks zu, die du in Settings > Playbooks erstellst. Ein Bugfix-Playbook könnte sagen: „Immer einen Regressionstest hinzufügen“; ein Feature-Playbook könnte sagen: „Erstelle eine Entwurfs-PR und fordere ein Review an.“Der Prompt enthält einen Link zu den API-Dokumenten deines Ticketing-Systems, damit Devin weiß, wie es Kommentare zurück in das System posten kann. Der TICKET_API_TOKEN wird als session secret übergeben – er wird nur für diese Session als Umgebungsvariable bereitgestellt und niemals gespeichert. Ersetze die API-Dokumentations-URL durch die tatsächliche URL der Dokumentation deines Ticketing-Systems.Stelle den Handler überall dort bereit, wo HTTPS-POST-Requests empfangen werden können – etwa als Cloud Function (AWS Lambda, Google Cloud Functions), in einem Container oder auf einem VPS. Registriere seine URL als Webhook in den Benachrichtigungs- oder Integrationseinstellungen deines Ticketing-Systems und filtere nach ticket created-Events.Erstelle ein Testticket mit dem Label devin-autofix, um den vollständigen Ablauf zu verifizieren: Ticket erstellt → Webhook wird ausgelöst → Devin-Session startet → PR wird geöffnet → Devin postet einen Kommentar zu dem Ticket.