Skip to main content

Correção Automática de Tíquetes via Webhooks

Conecte sistemas de tíquetes locais (on-prem) ou não compatíveis ao Devin com uma ponte de webhook-para-sessão.
AuthorCognition
CategoryAutomação
FeaturesAPI, Playbooks
1

Criar um usuário de serviço

Devin usa tokens de usuário de serviço para autenticar requisições à API. Esta é a abordagem recomendada para automação em produção.
  1. Vá para app.devin.ai > Settings > Service Users e crie um novo usuário de serviço com a permissão ManageOrgSessions
  2. Copie o token de API exibido após a criação e armazene-o com segurança — ele é exibido apenas uma vez e você o usará como DEVIN_API_KEY no seu manipulador de webhook
Para encontrar o ID da sua organização, faça uma chamada GET https://api.devin.ai/v3/enterprise/organizations com o seu token — a URL mostra apenas o slug da organização, não o ID.Teste com um comando curl rápido:
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."}'
Você deve receber um session_id e uma url. Exclua a sessão de teste no aplicativo web do Devin e prossiga.
2

Crie o manipulador de webhook

Esse padrão é ideal para sistemas de tickets on‑premises (como Jira, Redmine ou Bugzilla em hospedagem própria) ou ferramentas de tickets que não têm integração nativa com o Devin (diferente do Linear e do Jira Cloud, que têm suporte integrado). Se o seu sistema de tickets oferece suporte a webhooks, você pode conectá‑lo ao Devin com um pequeno serviço.Inclua um link para a documentação da API do seu sistema de tickets no prompt para que o Devin consiga entender como enviar comentários de volta para os tickets. Passe o token da API de tickets como um session secret para que o Devin possa se autenticar diretamente.Peça ao Devin para criar a estrutura inicial:Veja como fica o handler principal:
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 });
});
O mapa PLAYBOOKS direciona rótulos de tickets para os playbooks que você cria em Settings > Playbooks. Um playbook de correção de bug pode dizer “Sempre adicione um teste de regressão”; um playbook de feature pode dizer “Crie um PR em rascunho e solicite revisão.”O prompt inclui um link para a documentação da API do seu sistema de tickets, para que o Devin saiba como enviar comentários de volta. O TICKET_API_TOKEN é passado como um session secret — ele é injetado como uma variável de ambiente apenas para aquela sessão e nunca é armazenado. Substitua a URL da documentação da API pela documentação real do seu sistema de tickets.Implante o handler em qualquer lugar que possa receber solicitações POST HTTPS — uma função em nuvem (AWS Lambda, Google Cloud Functions), um contêiner ou um VPS. Registre sua URL como um webhook nas configurações de notificação ou integração do seu sistema de tickets e filtre por eventos de ticket created.Crie um ticket de teste com o rótulo devin-autofix para verificar o ciclo completo: ticket created → webhook é disparado → sessão do Devin é iniciada → PR é aberto → Devin publica um comentário no ticket.