O nó Código permite que você execute JavaScript personalizado dentro do seu fluxo. É útil para operações que não podem ser realizadas com nós padrão: transformar dados, realizar cálculos, manipular texto ou integrar lógica de negócio personalizada.
Acessando variáveis
Dentro do nó de Código você pode ler e escrever variáveis do fluxo usando objetos globais predefinidos.
Contexto ($context)
Variáveis que persistem apenas durante a execução atual do fluxo:
// Read
const name = $context.get('name')
const name = $context.get('name', 'John') // with default value
// Write
$context.set('lastOrder.status', 'delivered')
$context.set('user', { name: 'John', plan: 'gold' })
Memória ($memory)
Variáveis que persistem entre skills, ferramentas e nós. Suportam time-to-live (TTL):
// Primitives (string, number, boolean) - optional TTL
$memory.set('name', 'John')
$memory.set('attempts', 3, 3600) // expires in 1 hour
// JSON - TTL required (in seconds, maximum 86,400 = 1 day)
$memory.setJson('user', { name: 'John', plan: 'gold' }, 86400)
// Files - async, TTL required (maximum 604,800 = 1 week)
await $memory.setFile('receipt', base64String, 604800, 'application/pdf')
Leitura
const name = $memory.get('name')
const user = $memory.getJson('user')
const url = $memory.getFile('receipt').toUrl() // temporary URL
const base64 = await $memory.getFile('receipt').toBase64()
Exclusão
$memory.delete('temporary')
$memory.delete(['tmp1', 'tmp2', 'cache']) // multiple keys
Limites por tipo de dado
| Tipo | Tamanho máximo | TTL | TTL máximo |
|---|
| String | 255 caracteres | Opcional | — |
| Number | 15 dígitos | Opcional | — |
| Boolean | — | Opcional | — |
| JSON | 5 KB | Obrigatório | 86.400s (1 dia) |
| File | 10 MB | Obrigatório | 604.800s (1 semana) |
Os métodos $memory.setFile(), $memory.getFile().toBase64() e $memory.getFile().toRaw() são assíncronos. Você deve usar await ao chamá-los.
Migração de nós legados
- Crie um novo nó Code (Memory V2).
- Copie e cole o script do nó legado.
- Use os novos métodos disponíveis (
$memory.setJson, $memory.setFile, etc.) se necessário.
Usuário ($user)
Informações sobre o contato que interage com seu fluxo:
const userId = $user.get('id')
const userName = $user.get('names')
Mensagem ($message)
A última mensagem enviada pelo usuário:
const text = $message.get('text')
const type = $message.get('type') // TEXT, IMAGE, AUDIO, VIDEO, LOCATION, FILE
const attachmentUrl = $message.get('mediaUrl')
const lat = $message.get('lat')
const lng = $message.get('lng')
Entrada/Saída (input,output)
Para comunicação entre ferramentas e skills:
const city = $input.get('city', 'Quito') // with default value
$output.set('data', result)
Respostas HTTP
Se você salvou a resposta de um nó API:
let apiResponse = $context.getHttpResponse('apiResponse')
apiResponse = apiResponse.json()
$memory.set('name', apiResponse.data.user.name)
A chave em $context.getHttpResponse() deve corresponder exatamente à que você configurou no campo “Salvar resposta” do nó API.
Utilitários disponíveis
Logger
Registra valores para depuração no formato chave-valor. Os logs aparecem no histórico de execução:
// Primitives are stored as-is
$utils.logger.log('userId', 1245)
$utils.logger.log('status', 'active')
// Objects and arrays are converted to string (truncated to 512 characters)
$utils.logger.log('orderData', { id: 1, name: 'christian' })
Cada nó permite no máximo 10 entradas de log. O valor de cada entrada tem um limite de 512 caracteres.
Crypto
Funções criptográficas padrão:
$utils.crypto.createHash('sha256')
$utils.crypto.createHmac('sha256', key)
$utils.crypto.randomBytes(32)
Lodash
Utilitários para manipulação de arrays, objetos e strings:
$utils._.get(object, 'nested.path', defaultValue)
$utils._.uniq(array)
$utils._.chunk(array, size)
$utils._.merge(object1, object2)
Tipos MIME permitidos para $memory.setFile():| Categoria | Tipos |
|---|
| Texto | text/plain |
| JSON/XML | application/json, application/xml, text/xml |
| Imagens | image/jpeg, image/png, image/gif |
| Vídeos | video/mp4, video/ogg, video/webm, video/x-msvideo, video/mpeg |
| Áudio | audio/mpeg, audio/wav, audio/ogg, audio/aac, audio/flac |
| Documentos | application/pdf |