> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Integración de APIs

> Devin puede integrar, configurar y probar APIs de terceros en tus aplicaciones.

<div id="integrating-sendgrid-into-an-application">
  # Integración de SendGrid en una aplicación
</div>

Nuestra aplicación de ejemplo es una plataforma educativa en línea desarrollada con el framework web Django de Python. Recientemente se abrió un [PR](https://github.com/uncc-hice/edukona_backend/pull/47) para integrar la API de correo electrónico de SendGrid en la aplicación, y en este tutorial vamos a pedirle a Devin que realice su propia implementación de SendGrid para mostrar cómo puede trabajar con APIs de terceros.

<div id="initial-prompt">
  #### Prompt inicial
</div>

En nuestro prompt, proporcionamos instrucciones específicas sobre cómo y dónde queremos que Devin integre nuestros hooks de SendGrid, y hacemos que Devin revierta a un hash de commit anterior, antes de que se fusionara el PR mencionado arriba, para tener un punto de partida limpio para nuestra integración. Puedes seguir la sesión en vivo de Devin [aquí](https://app.devin.ai/sessions/05d9bf38b65d4aa9a16a5c16c8b5fc5e).

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/01469dde6757a54d39579647204db2d8ad316b75-1334x536.png)
</Frame>

Devin analiza el código y se asegura de que no exista ya en la aplicación ninguna implementación de correo electrónico que entre en conflicto.

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/daa91bce25d55187d9f637c3e195c65650eb9128-1256x592.png)
</Frame>

<div id="implementing-sendgrid">
  #### Implementación de SendGrid
</div>

A continuación pasa a implementar la API de SendGrid y nos pide nuestras credenciales de la API, que podemos configurar como [Secrets](/es/product-guides/secrets) en el entorno de Devin para que pueda acceder a ellas en el futuro como variables de entorno (ENV).

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/1dc4794dca5a5eec9632fa106930b4ba623449f7-1310x1622.png)
</Frame>

Ahora que tiene credenciales de API válidas, Devin termina de implementar SendGrid.

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/101faac5f7d36b18c622cef27a9f700f4a22547f-1294x1634.png)
</Frame>

Cuando comparo la implementación de SendGrid de Devin con el PR que se fusionó y que enlazamos al principio, observo algunas mejoras notables:

* Devin configuró SendGrid en un nuevo módulo email.py en lugar de en el mismo archivo que la propia vista. También devuelve True o False para indicar si el envío del correo electrónico fue exitoso según el código de respuesta de SendGrid.
* Devin utiliza el módulo de registro (logging) integrado de Python en lugar de print (que era un patrón sobre el que el revisor del PR comentó específicamente).
* Devin también hace que la dirección de correo electrónico de remitente (From) sea configurable en lugar de estar codificada, y además agrega un valor predeterminado si la variable de entorno ENV no existe.
* Devin agrega manejo de excepciones a su método mailInstructor.

Con su implementación principal terminada, puedo pedirle a Devin que pruebe la aplicación añadiendo una cuenta de instructor con mi dirección de correo electrónico. Para probar la aplicación, también tendrá que instalar y configurar todas las dependencias, como un servidor PostgreSQL y las bibliotecas de Python correspondientes.

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/162781b998d454f43ffb8ff226a8f7b50568800e-1282x796.png)
</Frame>

<div id="debugging">
  #### Depuración
</div>

Devin encuentra rápidamente un error, que se debe a que nunca le proporcioné una dirección de remitente (FROM) para mi cuenta de SendGrid. Devin de hecho usa su [Browser](/es/work-with-devin/devin-session-tools#interactive-browser) para ir a la documentación de la API y averiguar qué está pasando aquí, así como para entender los mensajes de error y las prácticas recomendadas de implementación:

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/808fb112960206f72c6f451ad12a89c1dea709bd-1308x1062.png)
</Frame>

Puedo volver al cuadro de diálogo Secrets y agregar una variable SENDGRID\_FROM\_EMAIL a la que Devin pueda acceder.

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/7c0db2df23075a74594b00fd254f27c7745bf2a2-1520x744.png)
</Frame>

También le indico a Devin que use el nombre de usuario predeterminado de SendGrid, “apikey”, ya que no he configurado una subcuenta para la API:

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/77939146f2fd5baba1ac90ecac5111e4901db2b3-1312x1394.png)
</Frame>

<div id="adding-knowledge">
  #### Añadir Knowledge
</div>

Devin observa que mis solicitudes y requisitos de implementación pueden generalizarse y me sugiere que agregue [Knowledge](/es/product-guides/knowledge#what-is-knowledge) que pueda utilizar en el futuro:

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/528762e066c609f5c408fcb4a55eadead2b59d0e-2522x828.png)
</Frame>

Si lo deseas, también puedes editar el Knowledge para agregar aún más detalles específicos si estas tácticas serán útiles en futuras sesiones que tu equipo planee realizar.

<div id="testing">
  #### Pruebas
</div>

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/4d8fcae26a4eb91b734d53ec23e09a0aaca31f51-1346x1312.png)
</Frame>

Tras unos minutos de configuración y preparación del entorno, Devin completa su sesión con éxito y veo el correo en mi bandeja de entrada. En realidad no configuré la plantilla de SendGrid para que tuviera contenido real, pero la petición a la API funciona, así que el trabajo de Devin ya está hecho!

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/36f648f15ccc4fc49c89ec2d9e6de8ace491ff2e-1406x882.png)
</Frame>

Si decido enviar un PR, Devin ya ha redactado el mensaje por mí, con detalles de todo lo que cambió en la aplicación y de cómo funciona:

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/1a3375d78dce3cb1122332bd8566041946a73791-2206x1094.png)
</Frame>

Regístrate hoy para [probar Devin](https://cognition.com/get-started#company) y abordar una integración de APIs que lleva tiempo atascada en el backlog de tu equipo.
