Skip to main content

Correzione automatica dei ticket tramite webhook

Collega i sistemi di ticketing on-prem o non supportati a Devin con un bridge da webhook a sessione.
AuthorCognition
CategoryAutomazioni
FeaturesAPI, Playbooks
1

Crea un utente di servizio

Devin utilizza i service user tokens per autenticare le chiamate API. Questo è l’approccio consigliato per l’automazione in ambiente di produzione.
  1. Vai su app.devin.ai > Settings > Service Users e crea un nuovo service user con l’autorizzazione ManageOrgSessions
  2. Copia il token API mostrato dopo la creazione e conservalo in modo sicuro — viene visualizzato solo una volta e lo utilizzerai come DEVIN_API_KEY nell’handler del tuo webhook
Per trovare l’ID della tua organizzazione, esegui GET https://api.devin.ai/v3/enterprise/organizations con il tuo token — l’URL mostra solo lo slug dell’organizzazione, non l’ID.Esegui un rapido test con 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."}'
Riceverai un session_id e un url. Elimina la sessione di test nella web app di Devin e continua.
2

Implementa il gestore del webhook

Questo pattern è ideale per sistemi di ticketing on-prem (come Jira self-hosted, Redmine o Bugzilla) o strumenti di ticketing che non hanno un’integrazione nativa con Devin (a differenza di Linear e Jira Cloud, che offrono supporto integrato). Se il tuo sistema di ticketing supporta i webhook, puoi collegarlo a Devin con un piccolo servizio.Includi nel prompt un link alla documentazione dell’API del tuo sistema di ticketing, così Devin può capire come inviare commenti ai ticket. Passa il token dell’API di ticketing come session secret in modo che Devin possa autenticarsi direttamente.Chiedi a Devin di creare lo scheletro del servizio:Ecco come si presenta l’handler principale:
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 });
});
La mappa PLAYBOOKS associa le etichette dei ticket ai playbook che crei in Settings > Playbooks. Un playbook per la correzione di bug potrebbe dire “Aggiungi sempre un test di regressione”; un playbook per le feature potrebbe dire “Crea una PR in bozza e richiedi una revisione.”Il prompt include un link alla documentazione API del tuo sistema di ticketing, così Devin sa come pubblicare i commenti in risposta. Il TICKET_API_TOKEN viene passato come session secret — viene iniettato come variabile d’ambiente solo per quella sessione e non viene mai archiviato. Sostituisci l’URL della documentazione API con la documentazione effettiva del tuo sistema di ticketing.Distribuisci l’handler in qualsiasi ambiente che possa ricevere richieste HTTPS POST — una funzione cloud (AWS Lambda, Google Cloud Functions), un container o un VPS. Registra il suo URL come webhook nelle impostazioni di notifica o integrazione del tuo sistema di ticketing e filtra per gli eventi ticket created.Crea un ticket di test con l’etichetta devin-autofix per verificare l’intero ciclo: ticket creato → webhook attivato → sessione Devin avviata → PR aperta → Devin pubblica un commento sul ticket.