Bibliotecas
Las bibliotecas permiten que tu empresa escriba una lógica una vez y la reutilice en todas partes: en workflows, pasos de código, agentes y formularios. Cada biblioteca se publica en versiones numeradas que nunca cambian, y cada lugar que usa una biblioteca elige una versión exacta. Editar o publicar una biblioteca nunca cambia algo que ya la usa; pasar a una versión más nueva es siempre una decisión explícita.

Todas las bibliotecas de tu empresa en una lista, con su versión más reciente y su estado.
Elegir CEL, JavaScript o Python
| CEL | JavaScript | Python | |
|---|---|---|---|
| Qué escribes | Funciones tipadas con cuerpo en expresión CEL | Un módulo JavaScript con exportaciones con nombre | Un módulo Python |
| Dónde lo usas | Cualquier expresión CEL: condiciones, plantillas, formularios, herramientas de agentes | Pasos Ejecutar código en JavaScript | Pasos Ejecutar código en Python |
| Dónde se ejecuta | En el evaluador CEL, sin I/O | En un aislado V8; inicio rápido, hasta 30 s por ejecución | En un contenedor con paquetes de datos; hasta 120 s por ejecución |
| Útil para | Reglas pequeñas y formato que necesitas dentro de expresiones | Código general, transformación de datos, llamadas HTTP | Hojas de cálculo, PDFs, imágenes y otro trabajo con datos |
Las bibliotecas CEL tienen su propio editor: consulta Bibliotecas CEL. El resto de esta página trata de las bibliotecas JavaScript y Python.
Encontrar y crear una biblioteca
Abre Automatizaciones → Bibliotecas. La lista muestra cada biblioteca con su nombre de módulo, su versión más reciente, su última actualización y su estado: Publicada, Borrador, Cambios sin publicar o Archivada. Filtra por lenguaje, busca por nombre y activa Mostrar archivadas para incluir las bibliotecas archivadas.
Para crear una, elige Nueva biblioteca y luego CEL, JavaScript o Python. Para JavaScript y Python:
- Lenguaje queda fijo una vez creada la biblioteca.
- Nombre es lo que la gente ve en la app.
- Nombre del módulo es cómo el código se refiere a la biblioteca, por ejemplo
text_helpers. Se rellena a partir del nombre mientras escribes, y puedes cambiarlo antes de crear la biblioteca. Usa letras minúsculas, dígitos y guiones bajos, empieza con una letra y tiene como máximo 48 caracteres; las palabras clave del lenguaje y los nombres del runtime están reservados. No se puede cambiar después, y una biblioteca archivada conserva su nombre. - Descripción es opcional.
La vista previa bajo el nombre del módulo muestra cómo un paso de código llamará a la biblioteca.
El editor
Una biblioteca de código se abre con una línea de estado arriba. Indica en qué punto está la biblioteca, como "Aún sin pruebas", "1 prueba falla" o "Lista para publicar la v2", y reúne tres acciones:
- Verificar sintaxis comprueba el código y sus imports sin ejecutarlo.
- Ejecutar pruebas ejecuta las pruebas de la biblioteca.
- Publicar vN crea la siguiente versión. El botón indica qué versión creará y, cuando no está disponible, explica el motivo al pasar el cursor.
Guardar la biblioteca nunca ejecuta código. Verificar sintaxis y Ejecutar pruebas usan el sandbox de código y cuentan en el uso de procesamiento.
El editor tiene seis pestañas:
| Pestaña | Para qué sirve |
|---|---|
| Código | El código del módulo. Los problemas que encuentra Verificar sintaxis aparecen subrayados en su línea. Ajustar líneas ajusta las líneas largas; Vista amplia da toda la página al editor. |
| Pruebas | Pruebas con nombre, cada una con su Entrada JSON, y el resultado de la última ejecución. |
| Importaciones | Otras bibliotecas que usa este módulo, cada una fijada en una versión exacta. |
| Versiones | Cada versión publicada, con su fecha, el resultado de las pruebas y las exportaciones que cambiaron. Compara una versión con la anterior o exporta su código. |
| Usada en | Workflows y otras bibliotecas que usan esta biblioteca, agrupados por versión, con cuántas versiones atrás está cada uno. |
| Ajustes | Nombre, descripción, descargar el borrador y archivar la biblioteca. |

Escribir bibliotecas JavaScript
Una biblioteca JavaScript es un módulo ES. Exporta lo que otro código debe usar:
/** Trims a name and collapses repeated spaces. */
export function normalizeName(name) {
return String(name ?? "").trim().replace(/\s+/g, " ");
}
export const DEFAULT_COUNTRY = "BR";
- Se pueden exportar funciones, clases y constantes. Las funciones
asyncexportadas funcionan, y un paso de código puede usarawaitcon ellas. - Para usar otra biblioteca, añádela en Importaciones e impórtala:
import * as text_helpers from "autotalk_libraries/text_helpers";oimport {normalizeName} from "autotalk_libraries/text_helpers";. awaita nivel de módulo eimport()dinámico no son compatibles.- Una biblioteca tiene las mismas APIs de sandbox que un paso de código, incluido
fetch, y cada ejecución recibe instancias nuevas de los módulos. - Un comentario
/** ... */justo encima de una exportación se convierte en la descripción que se muestra en el paso de código y en el autocompletado.
Escribir bibliotecas Python
Una biblioteca Python es un módulo:
from decimal import Decimal, ROUND_HALF_UP
TAX_RATE = Decimal("0.18")
def money(value):
"""Rounds a value to cents."""
return Decimal(str(value)).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
- Las exportaciones de la biblioteca son sus funciones, clases y asignaciones de nivel superior. Los nombres que empiezan con
_y los nombres que el módulo solo importa quedan fuera, así queDecimalarriba no es una exportación. Para elegir las exportaciones tú mismo, define__all__. - Para usar otra biblioteca, añádela en Importaciones y luego
from autotalk_libraries import text_helpers. - Para HTTP, importa
fetchdel runtime:from autotalk_runtime import fetch, FetchError. La biblioteca estándar y los paquetes incluidos en el ejecutor Python están disponibles. - Pasa los datos del llamador a tus funciones como argumentos; una biblioteca no lee la entrada del paso directamente.
- El docstring de una función se convierte en la descripción que se muestra en el paso de código y en el autocompletado.
Pruebas
Una prueba es un script corto que llama a la biblioteca y falla cuando algo está mal: lanza un error en JavaScript o falla un assert en Python. Cada prueba puede tener una Entrada JSON, disponible como input en JavaScript e INPUT en Python.
if (autotalk_libraries.text_helpers.normalizeName(input.name) !== "Ada Lovelace") { // input: {"name": " Ada Lovelace "}
throw new Error("Unexpected name");
}
from autotalk_libraries import order_math
assert str(order_math.money(INPUT["value"])) == "10.50" # INPUT: {"value": 10.499}
Añadir prueba crea una prueba que llama a la primera función exportada, con sus parámetros tomados de la entrada. Después de una ejecución, cada prueba muestra Pasó con su duración, o Falló con la línea que falló y sus logs. Editar una prueba después de una ejecución marca su resultado como desactualizado.
Las pruebas se ejecutan en el sandbox normal, una tras otra, en sandboxes nuevos. Pueden acceder a la red y escribir archivos, y cada ejecución cuenta en el uso de procesamiento. Se ejecutan hasta 20 pruebas por biblioteca, en 120 segundos en total como máximo.
Publicación y versiones
Guarda la biblioteca y elige Publicar vN. La confirmación muestra lo que cambia la nueva versión respecto de la anterior: exportaciones añadidas y eliminadas, cuántas líneas cambiaron (con la diferencia completa a un clic), cuántas pruebas se ejecutarán y quién usa la versión actual. Publicar comprueba el código guardado y vuelve a ejecutar todas las pruebas; una prueba que falla detiene la publicación. Una biblioteca sin pruebas se puede publicar, y su versión queda marcada como no probada.
Las versiones se numeran v1, v2, v3 en el orden de publicación y nunca cambian. Publicar una versión nueva no mueve nada a ella: todo lo que usa la biblioteca conserva su versión hasta que alguien lo actualice.
Usar una biblioteca en un paso de código
En un paso Ejecutar código, el cuadro Bibliotecas sobre el código lista las bibliotecas que usa el paso:
- Añadir biblioteca fija una biblioteca publicada del mismo lenguaje, en su versión más reciente.
- El selector de versión muestra cada versión, con (la más reciente) junto a la más nueva. Cuando existe una versión más nueva, Actualizar a vN abre una revisión de las exportaciones y del código que cambian antes de aplicarla.
- Abre la fila de una biblioteca para ver sus exportaciones con sus parámetros y descripción. El botón de insertar junto a cada una añade una llamada en la posición del cursor, en su propia línea, con el primer parámetro seleccionado. En Python también añade el import arriba si falta.

Llama a la biblioteca desde el paso:
return autotalk_libraries.text_helpers.normalizeName(input.name);
import json
from autotalk_libraries import order_math
result = order_math.money(INPUT["value"])
with open("/work/out/output.json", "w") as output:
json.dump(str(result), output)
- Un paso JavaScript solo alcanza las bibliotecas fijadas en él; los imports propios de una biblioteca no se exponen al paso.
- Un paso Python devuelve su resultado escribiendo
/work/out/output.json. - Cambiar el Lenguaje del paso quita sus bibliotecas fijadas. La confirmación las lista, y el código queda como está, así que adáptalo al nuevo lenguaje.
Usada en y archivado
Usada en muestra cada workflow y biblioteca que fija esta biblioteca, agrupados por versión, para que veas quién sigue en una versión anterior antes de cambiar algo.
Archivar una biblioteca (Ajustes → Archivar biblioteca) impide nuevas versiones y nuevas fijaciones. Todo lo que ya la fija sigue funcionando. El archivado no se puede deshacer: el borrador ya no se puede editar, el nombre del módulo sigue ocupado y las versiones publicadas se conservan. No pongas secretos en el código de una biblioteca.
Límites
| Límite | Valor |
|---|---|
| Imports directos por paso o biblioteca | 24 |
| Bibliotecas en un grafo de dependencias | 32 |
| Profundidad de imports | 16 |
| Código por módulo o prueba | 64 KiB |
| Borrador completo (código y pruebas) | 512 KiB |
| Paquete de código de una ejecución | 2 MiB (aparte de los límites de archivos de entrada) |
| Pruebas por biblioteca | 20 |
| Tiempo total de las pruebas | 120 segundos |
Permisos y scopes de la API
- Quien puede leer una biblioteca puede fijarla y usarla.
- Crear, editar, verificar, probar, publicar y archivar una biblioteca están reservados al propietario de la empresa. Los demás miembros ven las bibliotecas en modo de solo lectura.
- Con una clave de API, crear y editar bibliotecas, verificar, probar, publicar y archivar requieren
automation:admin. Leer bibliotecas y sus versiones requieredata:read.
MCP y API
Un cliente MCP puede hacer todo lo que hace el editor:
get_code_library_referencelista las bibliotecas publicadas que puedes leer, o describe versiones exactas: exportaciones con sus parámetros y descripción, cómo llamarlas y si existe una versión más nueva. Requieredata:read.- Crea y edita bibliotecas con
create_documentyupdate_documentencode_libraries. Envía eldraftRevisionque leíste con la biblioteca, para no sobrescribir nunca la edición de otra persona. - Usa
execute_functionparavalidateDraft,testDraftypublish(conexpectedDraftRevision), y paralistReleases,getRelease,listDependentsyarchive. - Fija versiones exactas como
codeLibraries: [{libraryId, releaseId}]en un paso de código, o en la herramientarun_codepara una ejecución puntual.
La guía libraries del servidor MCP (get_guide) explica cuándo un asistente debe reutilizar o crear una biblioteca.
Errores comunes
| Código | Qué significa |
|---|---|
code_library_draft_conflict | La biblioteca cambió desde que la abriste. Recarga e inténtalo de nuevo. |
code_library_owner_required | Solo el propietario de la empresa puede verificar, probar, publicar o archivar. |
code_library_archived | La biblioteca está archivada, así que no se puede editar, publicar ni fijar de nuevo. |
code_library_invalid_slug | El nombre del módulo no cumple las reglas o está reservado. |
code_library_language_mismatch | El lenguaje de una biblioteca fijada no coincide con el del paso o la biblioteca que la usa. |
code_library_dependency_cycle | Las bibliotecas se importan entre sí en un ciclo. |
code_library_syntax_error | El código no se puede leer; el editor subraya la línea. |
code_library_suite_timeout | Las pruebas tardaron más de 120 segundos en total. |
code_library_not_found | La biblioteca no existe o no puedes leerla. |
code_library_operation_reused | El mismo operationId o Idempotency-Key ya ejecutó estas verificaciones. Reintenta con una clave nueva. |