Saltar al contenido principal
Actualizado el Oct 18, 2026

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.

La lista de Bibliotecas con bibliotecas CEL, JavaScript y Python

Todas las bibliotecas de tu empresa en una lista, con su versión más reciente y su estado.

Elegir CEL, JavaScript o Python​

CELJavaScriptPython
Qué escribesFunciones tipadas con cuerpo en expresión CELUn módulo JavaScript con exportaciones con nombreUn módulo Python
Dónde lo usasCualquier expresión CEL: condiciones, plantillas, formularios, herramientas de agentesPasos Ejecutar código en JavaScriptPasos Ejecutar código en Python
Dónde se ejecutaEn el evaluador CEL, sin I/OEn un aislado V8; inicio rápido, hasta 30 s por ejecuciónEn un contenedor con paquetes de datos; hasta 120 s por ejecución
Útil paraReglas pequeñas y formato que necesitas dentro de expresionesCódigo general, transformación de datos, llamadas HTTPHojas 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ñaPara qué sirve
CódigoEl 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.
PruebasPruebas con nombre, cada una con su Entrada JSON, y el resultado de la última ejecución.
ImportacionesOtras bibliotecas que usa este módulo, cada una fijada en una versión exacta.
VersionesCada 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 enWorkflows y otras bibliotecas que usan esta biblioteca, agrupados por versión, con cuántas versiones atrás está cada uno.
AjustesNombre, descripción, descargar el borrador y archivar la biblioteca.

El editor de bibliotecas de código con la línea de estado, las acciones y las pestañas

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 async exportadas funcionan, y un paso de código puede usar await con ellas.
  • Para usar otra biblioteca, añádela en Importaciones e impórtala: import * as text_helpers from "autotalk_libraries/text_helpers"; o import {normalizeName} from "autotalk_libraries/text_helpers";.
  • await a nivel de módulo e import() 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í que Decimal arriba 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 fetch del 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.

Un paso de código con una biblioteca fijada y sus exportaciones

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ímiteValor
Imports directos por paso o biblioteca24
Bibliotecas en un grafo de dependencias32
Profundidad de imports16
Código por módulo o prueba64 KiB
Borrador completo (código y pruebas)512 KiB
Paquete de código de una ejecución2 MiB (aparte de los límites de archivos de entrada)
Pruebas por biblioteca20
Tiempo total de las pruebas120 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 requiere data:read.

MCP y API​

Un cliente MCP puede hacer todo lo que hace el editor:

  • get_code_library_reference lista 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. Requiere data:read.
  • Crea y edita bibliotecas con create_document y update_document en code_libraries. Envía el draftRevision que leíste con la biblioteca, para no sobrescribir nunca la edición de otra persona.
  • Usa execute_function para validateDraft, testDraft y publish (con expectedDraftRevision), y para listReleases, getRelease, listDependents y archive.
  • Fija versiones exactas como codeLibraries: [{libraryId, releaseId}] en un paso de código, o en la herramienta run_code para 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ódigoQué significa
code_library_draft_conflictLa biblioteca cambió desde que la abriste. Recarga e inténtalo de nuevo.
code_library_owner_requiredSolo el propietario de la empresa puede verificar, probar, publicar o archivar.
code_library_archivedLa biblioteca está archivada, así que no se puede editar, publicar ni fijar de nuevo.
code_library_invalid_slugEl nombre del módulo no cumple las reglas o está reservado.
code_library_language_mismatchEl lenguaje de una biblioteca fijada no coincide con el del paso o la biblioteca que la usa.
code_library_dependency_cycleLas bibliotecas se importan entre sí en un ciclo.
code_library_syntax_errorEl código no se puede leer; el editor subraya la línea.
code_library_suite_timeoutLas pruebas tardaron más de 120 segundos en total.
code_library_not_foundLa biblioteca no existe o no puedes leerla.
code_library_operation_reusedEl mismo operationId o Idempotency-Key ya ejecutó estas verificaciones. Reintenta con una clave nueva.