Bibliotecas
Bibliotecas permitem que sua empresa escreva uma lógica uma vez e a reutilize em todo lugar: em workflows, passos de código, agentes e formulários. Cada biblioteca é publicada em versões numeradas que nunca mudam, e cada lugar que usa uma biblioteca escolhe uma versão exata. Editar ou publicar uma biblioteca nunca altera algo que já a usa; passar para uma versão mais nova é sempre uma decisão explícita.

Todas as bibliotecas da sua empresa em uma lista, com a versão mais recente e o estado de cada uma.
Escolhendo CEL, JavaScript ou Python
| CEL | JavaScript | Python | |
|---|---|---|---|
| O que você escreve | Funções tipadas com corpo em expressão CEL | Um módulo JavaScript com exportações nomeadas | Um módulo Python |
| Onde você usa | Qualquer expressão CEL: condições, templates, formulários, ferramentas de agentes | Passos Executar código em JavaScript | Passos Executar código em Python |
| Onde roda | No avaliador CEL, sem I/O | Em um isolate V8; início rápido, até 30 s por execução | Em um contêiner com pacotes de dados; até 120 s por execução |
| Bom para | Regras pequenas e formatação usadas dentro de expressões | Código geral, transformação de dados, chamadas HTTP | Planilhas, PDFs, imagens e outros trabalhos com dados |
Bibliotecas CEL têm editor próprio: veja Bibliotecas CEL. O restante desta página trata das bibliotecas JavaScript e Python.
Encontrar e criar uma biblioteca
Abra Automações → Bibliotecas. A lista mostra cada biblioteca com o nome do módulo, a versão mais recente, a última atualização e o estado: Publicada, Rascunho, Mudanças não publicadas ou Arquivada. Filtre por linguagem, pesquise pelo nome e ative Mostrar arquivadas para incluir as bibliotecas arquivadas.
Para criar uma, escolha Nova biblioteca e depois CEL, JavaScript ou Python. Para JavaScript e Python:
- Linguagem fica fixa depois que a biblioteca é criada.
- Nome é o que as pessoas veem no app.
- Nome do módulo é como o código se refere à biblioteca, por exemplo
text_helpers. Ele é preenchido a partir do nome enquanto você digita, e você pode alterá-lo antes de criar a biblioteca. Usa letras minúsculas, dígitos e sublinhados, começa com uma letra e tem no máximo 48 caracteres; palavras-chave da linguagem e nomes do runtime são reservados. Não pode ser alterado depois, e uma biblioteca arquivada mantém o seu nome. - Descrição é opcional.
A prévia abaixo do nome do módulo mostra como um passo de código vai chamar a biblioteca.
O editor
Uma biblioteca de código abre com uma linha de status no topo. Ela diz em que ponto a biblioteca está, como "Ainda sem testes", "1 teste falha" ou "Pronta para publicar a v2", e reúne três ações:
- Verificar sintaxe confere o código e os imports sem executá-lo.
- Executar testes roda os testes da biblioteca.
- Publicar vN cria a próxima versão. O botão diz qual versão vai criar e, quando está indisponível, explica o motivo ao passar o mouse.
Salvar a biblioteca nunca executa código. Verificar sintaxe e Executar testes usam o sandbox de código e contam no uso de processamento.
O editor tem seis abas:
| Aba | Para que serve |
|---|---|
| Código | O código do módulo. Problemas encontrados por Verificar sintaxe aparecem sublinhados na linha. Quebrar linhas quebra as linhas longas; Visão ampla dá a página inteira ao editor. |
| Testes | Testes com nome, cada um com sua Entrada JSON, e o resultado da última execução. |
| Importações | Outras bibliotecas que este módulo usa, cada uma fixada em uma versão exata. |
| Versões | Cada versão publicada, com data, resultado dos testes e exportações alteradas. Compare uma versão com a anterior ou exporte o código dela. |
| Usada em | Workflows e outras bibliotecas que usam esta biblioteca, agrupados por versão, com quantas versões cada um está atrás. |
| Configurações | Nome, descrição, baixar o rascunho e arquivar a biblioteca. |

Escrevendo bibliotecas JavaScript
Uma biblioteca JavaScript é um módulo ES. Exporte o que outros códigos devem usar:
/** Trims a name and collapses repeated spaces. */
export function normalizeName(name) {
return String(name ?? "").trim().replace(/\s+/g, " ");
}
export const DEFAULT_COUNTRY = "BR";
- Funções, classes e constantes podem ser exportadas. Funções
asyncexportadas funcionam, e um passo de código pode usarawaitcom elas. - Para usar outra biblioteca, adicione-a em Importações e importe-a:
import * as text_helpers from "autotalk_libraries/text_helpers";ouimport {normalizeName} from "autotalk_libraries/text_helpers";. awaitno nível do módulo eimport()dinâmico não são suportados.- Uma biblioteca tem as mesmas APIs de sandbox de um passo de código, incluindo
fetch, e cada execução recebe instâncias novas dos módulos. - Um comentário
/** ... */logo acima de uma exportação vira a descrição mostrada no passo de código e no autocompletar.
Escrevendo bibliotecas Python
Uma biblioteca Python é um 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)
- As exportações da biblioteca são as funções, classes e atribuições de nível superior. Nomes que começam com
_e nomes que o módulo apenas importa ficam de fora, entãoDecimalacima não é uma exportação. Para escolher as exportações você mesmo, defina__all__. - Para usar outra biblioteca, adicione-a em Importações e depois
from autotalk_libraries import text_helpers. - Para HTTP, importe
fetchdo runtime:from autotalk_runtime import fetch, FetchError. A biblioteca padrão e os pacotes incluídos no executor Python estão disponíveis. - Passe os dados do chamador para suas funções como argumentos; uma biblioteca não lê a entrada do passo diretamente.
- A docstring de uma função vira a descrição mostrada no passo de código e no autocompletar.
Testes
Um teste é um script curto que chama a biblioteca e falha quando algo está errado: lança um erro em JavaScript ou falha um assert em Python. Cada teste pode ter uma Entrada JSON, disponível como input em JavaScript e INPUT em 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}
Adicionar teste começa um teste que chama a primeira função exportada, com os parâmetros vindos da entrada. Depois de uma execução, cada teste mostra Passou com a duração, ou Falhou com a linha que falhou e os logs. Editar um teste depois de uma execução marca o resultado como desatualizado.
Os testes rodam no sandbox normal, um após o outro, em sandboxes novos. Eles podem acessar a rede e gravar arquivos, e cada execução conta no uso de processamento. Até 20 testes rodam por biblioteca, em até 120 segundos no total.
Publicação e versões
Salve a biblioteca e escolha Publicar vN. A confirmação mostra o que a nova versão muda em relação à anterior: exportações adicionadas e removidas, quantas linhas mudaram (com a diferença completa a um clique), quantos testes vão rodar e quem usa a versão atual. A publicação confere o código salvo e roda todos os testes de novo; um teste com falha impede a publicação. Uma biblioteca sem testes pode ser publicada, e a versão fica marcada como não testada.
As versões são numeradas v1, v2, v3 na ordem de publicação e nunca mudam. Publicar uma versão nova não move nada para ela: tudo que usa a biblioteca continua na sua versão até alguém atualizar.
Usando uma biblioteca em um passo de código
Em um passo Executar código, a caixa Bibliotecas acima do código lista as bibliotecas que o passo usa:
- Adicionar biblioteca fixa uma biblioteca publicada da mesma linguagem, na versão mais recente.
- O seletor de versão mostra cada versão, com (mais recente) ao lado da mais nova. Quando existe uma versão mais nova, Atualizar para vN abre uma revisão das exportações e do código que mudam antes de você aplicar.
- Abra a linha de uma biblioteca para ver as exportações com seus parâmetros e descrição. O botão de inserir ao lado de cada uma adiciona uma chamada na posição do cursor, em uma linha própria, com o primeiro parâmetro selecionado. Em Python, ele também adiciona o import no topo se estiver faltando.

Chame a biblioteca no passo:
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)
- Um passo JavaScript só alcança as bibliotecas fixadas nele; os imports da própria biblioteca não ficam expostos ao passo.
- Um passo Python devolve o resultado gravando
/work/out/output.json. - Mudar a Linguagem do passo remove as bibliotecas fixadas. A confirmação lista quais são, e o código continua como está, então ajuste-o para a nova linguagem.
Usada em e arquivamento
Usada em mostra cada workflow e biblioteca que fixa esta biblioteca, agrupados por versão, para você ver quem ainda está em uma versão antiga antes de mudar algo.
Arquivar uma biblioteca (Configurações → Arquivar biblioteca) impede novas versões e novas fixações. Tudo que já a fixa continua funcionando. O arquivamento não pode ser desfeito: o rascunho não pode mais ser editado, o nome do módulo continua ocupado e as versões publicadas são mantidas. Não coloque segredos no código de uma biblioteca.
Limites
| Limite | Valor |
|---|---|
| Imports diretos por passo ou biblioteca | 24 |
| Bibliotecas em um grafo de dependências | 32 |
| Profundidade de imports | 16 |
| Código por módulo ou teste | 64 KiB |
| Rascunho inteiro (código e testes) | 512 KiB |
| Pacote de código de uma execução | 2 MiB (separado dos limites de arquivos de entrada) |
| Testes por biblioteca | 20 |
| Tempo total dos testes | 120 segundos |
Permissões e escopos da API
- Quem pode ler uma biblioteca pode fixá-la e usá-la.
- Criar, editar, verificar, testar, publicar e arquivar uma biblioteca são ações restritas ao proprietário da empresa. Os demais membros veem as bibliotecas somente para leitura.
- Com uma chave de API, criar e editar bibliotecas, verificar, testar, publicar e arquivar exigem
automation:admin. Ler bibliotecas e suas versões exigedata:read.
MCP e API
Um cliente MCP pode fazer tudo que o editor faz:
get_code_library_referencelista as bibliotecas publicadas que você pode ler, ou descreve versões exatas: exportações com parâmetros e descrição, como chamá-las e se existe uma versão mais nova. Exigedata:read.- Crie e edite bibliotecas com
create_documenteupdate_documentemcode_libraries. Envie odraftRevisionque você leu com a biblioteca, para nunca sobrescrever a edição de outra pessoa. - Use
execute_functionparavalidateDraft,testDraftepublish(comexpectedDraftRevision), e paralistReleases,getRelease,listDependentsearchive. - Fixe versões exatas como
codeLibraries: [{libraryId, releaseId}]em um passo de código, ou na ferramentarun_codepara uma execução avulsa.
O guia libraries do servidor MCP (get_guide) explica quando um assistente deve reutilizar ou criar uma biblioteca.
Erros comuns
| Código | O que significa |
|---|---|
code_library_draft_conflict | A biblioteca mudou desde que você a abriu. Recarregue e tente de novo. |
code_library_owner_required | Só o proprietário da empresa pode verificar, testar, publicar ou arquivar. |
code_library_archived | A biblioteca está arquivada, então não pode ser editada, publicada nem fixada de novo. |
code_library_invalid_slug | O nome do módulo não segue as regras ou é reservado. |
code_library_language_mismatch | A linguagem de uma biblioteca fixada é diferente da do passo ou da biblioteca que a usa. |
code_library_dependency_cycle | Bibliotecas importam umas às outras em ciclo. |
code_library_syntax_error | O código não pode ser lido; o editor sublinha a linha. |
code_library_suite_timeout | Os testes levaram mais de 120 segundos no total. |
code_library_not_found | A biblioteca não existe ou você não pode lê-la. |
code_library_operation_reused | O mesmo operationId ou Idempotency-Key já executou estas verificações. Tente de novo com uma chave nova. |