> For the complete documentation index, see [llms.txt](https://docs.airops.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.airops.com/docs/es/acciones/workflow-concepts/workflow-steps/logic-steps/code.md).

# Ejecutar código

Añade lógica personalizada con Javascript o Python

## ¿Cómo funciona el paso de código?

El paso de código en AirOps Studio actualmente admite **JavaScript** y **Python**, lo que te brinda la flexibilidad necesaria para realizar solicitudes avanzadas.

{% hint style="warning" %}
El código en un paso de código se encapsula dentro de una función, y debes usar una **return** instrucción para mostrar los resultados del paso.
{% endhint %}

<figure><img src="https://3036434873-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-0b2306c3503d270e90185c5eab3ee24a14c54da1%2Fcode_step_1.png?alt=media" alt=""><figcaption><p>Ejemplo de paso de código</p></figcaption></figure>

## JavaScript

### Cómo hacer referencia a una entrada

A diferencia de Liquid, las variables de JavaScript **omiten** `{{` o `}}` . Por ejemplo:

* `{{linkedin_url}}` sería `linkedin_url`

### Cómo hacer referencia a una salida

La sintaxis de JavaScript es similar a Liquid, pero omite los corchetes:

* `{{step_1.output}}` sería `step_1.output`
* `{{step_1.output.name}}` sería `step_1.output.name`

### Usa una instrucción return

Debes incluir una `return` instrucción en un paso de código para determinar la salida del paso

### Ejemplo de JavaScript

Recorramos un ejemplo que hace referencia tanto a una entrada de texto como a una salida de LLM. Usaremos un flujo de trabajo básico que solicita una entrada de cadena y devuelve una coincidencia de palabras que riman con ella.

Nuestro paso de código simplemente se encargará de combinar el prompt de entrada con la salida del LLM, así tendremos un único resultado que incluye la pregunta y la respuesta:

{% @arcade/embed url="<https://app.arcade.software/share/ucsCBgcBlpyFyrPMzrZi>" flowId="ucsCBgcBlpyFyrPMzrZi" %}

## Python

### Cómo hacer referencia a una entrada

De forma similar a JavaScript, Python solo requiere hacer referencia directa al nombre de la variable. Así que el mismo ejemplo anterior sigue siendo válido:

* `{{linkedin_url}}` sería `linkedin_url`

### Cómo hacer referencia a una salida

La sintaxis de Python debe incluir corchetes alrededor del nombre de la variable:

* `{{step_1.output}}` sería `step_1["output"]`
* `{{step_1.output.key}}` sería `step_1["output"]["key"]`

### Usa una instrucción return

Debes incluir una `return` instrucción en un paso de código para determinar la salida del paso.

### Paquetes de Python compatibles

A partir del 13/2/2024:

```
pandas==1.3.4
requests
beautifulsoup4
lxml
pyjwt
urllib3==1.26.6
scipy
numpy
pycryptodome
bing-image-urls
markdown
PyPDF2
```

### Añadir paquetes adicionales de Python

Aunque siempre buscamos ampliar nuestros paquetes compatibles de forma nativa, nuestro paso de código sí ofrece una solución alternativa para trabajar con paquetes adicionales.

Al escribir tu paso de código, añade el siguiente código a tu bloque:

```python
import os
import sys
import subprocess

# instalar el paquete personalizado en /tmp/ y añadirlo a la ruta
subprocess.call('pip install flask -t /tmp/ --no-cache-dir'.split(), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
sys.path.insert(1, '/tmp/')
import flask

return 'import ok'
```

{% hint style="info" %}
Nota: cualquier biblioteca externa llamada con este método se instalará cada vez que se ejecute el paso de código, lo que podría añadir varios segundos notables al tiempo de ejecución.
{% endhint %}

### Ejemplo de Python

Recorramos el mismo ejemplo anterior, pero en Python:

{% @arcade/embed url="<https://app.arcade.software/share/gM15e94F8pxxwY3ExGy3>" flowId="gM15e94F8pxxwY3ExGy3" %}

## Asistentes de IA

Tanto Python como JavaScript admiten usar nuestro asistente de IA para generar código. Esto puede ser útil si te cuesta encontrar la sintaxis exacta en cualquiera de los dos lenguajes para lograr tu objetivo.

Similar al prompt para un LLM, recomendamos ser lo más claro y detallado posible en tu descripción.

{% @arcade/embed %}

Una vez que nuestros asistentes de IA hayan generado el código, puedes conservar o rechazar el texto generado. Si decides que quieres añadir o eliminar el código más tarde, puedes usar el mismo botón "Generate with AI" para modificar tu prompt y código.

## Cómo continuar si el paso de código falla

De forma predeterminada, el paso de código terminará el flujo de trabajo si falla. Sin embargo, para continuar el flujo de trabajo si el paso falla, simplemente haz clic en `Continuar` en la parte inferior del paso.

<figure><img src="https://3036434873-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-909683bdffa53e503c67fcbd3d10be9b91f137e8%2Fimage.png?alt=media" alt=""><figcaption><p>Haz clic en continuar para continuar el flujo de trabajo</p></figcaption></figure>

El paso devolverá las siguientes claves:

* `output` : esto será `null`
* `error` :
  * `message`: el mensaje devuelto por el paso
  * `code` : el código de error que representa el error

<figure><img src="https://3036434873-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-efafda7fe1d5464d514822509633ec2c8de54f23%2Fimage.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

## Cómo reintentar si el paso de código falla

Para reintentar un paso si falla,

1. Selecciona `Continuar` en lugar de `Terminar flujo de trabajo` si el paso falla
2. Añade una condición donde la condición compruebe si el `error` del paso existe, por ejemplo: `step_1.error`
3. Añade el paso que quieres reintentar si hubo un error

<figure><img src="https://3036434873-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-f551698d248295d68e604a0eaf0092b8d6134100%2Fimage.png?alt=media" alt="" width="563"><figcaption><p>Comprueba si ocurrió un error</p></figcaption></figure>

## Límites

Hay dos límites principales que debes tener en cuenta respecto a nuestro paso de código:

1. Tienen un tiempo máximo de ejecución de 15 minutos
2. El tamaño máximo de carga es 6 MB


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.airops.com/docs/es/acciones/workflow-concepts/workflow-steps/logic-steps/code.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
