Skip to main content

Corrección automática de tickets mediante webhooks

Conecta sistemas de tickets locales o no compatibles con Devin a través de un puente de webhook a sesión.
AuthorCognition
CategoryAutomatizaciones
FeaturesAPI, Playbooks
1

Crear un usuario de servicio

Devin usa service user tokens para autenticar las llamadas a la API. Este es el enfoque recomendado para la automatización en producción.
  1. Ve a app.devin.ai > Settings > Service Users y crea un nuevo usuario de servicio con el permiso ManageOrgSessions
  2. Copia el token de API que se muestra después de la creación y guárdalo de forma segura: solo se muestra una vez y lo usarás como DEVIN_API_KEY en tu handler de webhook
Para encontrar el ID de tu organización, realiza una llamada GET https://api.devin.ai/v3/enterprise/organizations con tu token: la URL solo muestra el slug de la organización, no el ID.Pruébalo con un 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."}'
Deberías obtener un session_id y una url como respuesta. Elimina la sesión de prueba en la aplicación web de Devin y pasa al siguiente paso.
2

Crea el controlador de webhooks

Este patrón es ideal para sistemas de tickets on-premise (como Jira autohospedado, Redmine o Bugzilla) o herramientas de gestión de tickets que no tienen una integración nativa con Devin (a diferencia de Linear y Jira Cloud, que tienen soporte integrado). Si tu sistema de tickets admite webhooks, puedes conectarlo a Devin con un servicio ligero.Incluye un enlace a la documentación de la API de tu sistema de tickets en el prompt para que Devin pueda determinar cómo publicar comentarios de nuevo en los tickets. Pasa el token de la API de tickets como un session secret para que Devin pueda autenticarse directamente.Pídele a Devin que genere el esqueleto:Así se ve el 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 });
});
El mapa PLAYBOOKS enruta las etiquetas de los tickets a los playbooks que creas en Settings > Playbooks. Un playbook de corrección de errores podría decir: «Añade siempre una prueba de regresión»; un playbook de funcionalidades podría decir: «Crea un PR de borrador y solicita revisión».El prompt incluye un enlace a la documentación de la API de tu sistema de tickets para que Devin sepa cómo publicar comentarios de vuelta. El TICKET_API_TOKEN se pasa como un session secret: se inyecta como una variable de entorno solo para esa sesión y nunca se almacena. Sustituye la URL de la documentación de la API por la documentación real de tu sistema de tickets.Despliega el handler en cualquier lugar que pueda recibir solicitudes HTTPS POST: una función en la nube (AWS Lambda, Google Cloud Functions), un contenedor o un VPS. Registra su URL como un webhook en la configuración de notificaciones o integraciones de tu sistema de tickets y configúralo para los eventos de ticket created.Crea un ticket de prueba con la etiqueta devin-autofix para verificar el ciclo completo: creación del ticket → se dispara el webhook → se inicia la sesión de Devin → se abre un PR → Devin publica un comentario en el ticket.