Introdução
A Memory permite armazenar variáveis que persistem entre conversas, skills e nós. Ao contrário do Context (que está disponível apenas durante a conversa atual), a Memory mantém os dados disponíveis para interações futuras com o usuário.
Principais características
| Característica | Descrição |
|---|
| TTL configurável | Defina o tempo de vida de cada variável em segundos |
| Múltiplos tipos | Suporta primitivos, JSON e arquivos |
| Armazenamento de arquivos | Armazene imagens, vídeos, áudios e documentos de até 10 MB |
| Métodos específicos | API diferenciada para cada tipo de dado |
Tipos de dados
| 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.400 s (1 dia) |
| File | 10 MB | Obrigatório | 604.800 s (1 semana) |
TTL (Time To Live): Tempo de vida em segundos. Quando o TTL expira, a variável é automaticamente excluída. Por exemplo, 3600 = 1 hora, 86400 = 1 dia.
Salvando variáveis
Usando o nó Variable
Para salvar variáveis sem código, use o nó Variable dentro da seção Logic. Em Variable insira o nome e em Value o que deseja salvar; pode ser texto simples, outra variável ou um valor do contexto.
Variable: name
Value: {{$user.names}}
O nó Variable é ideal para salvar primitivos (string, number, boolean) de forma rápida e visual.
Cada nó Variable permite um máximo de 20 variáveis. Se precisar de mais, use múltiplos nós ou salve os valores a partir de um nó de código.
Usando nós de código
Para maior controle sobre o TTL e tipos de dados complexos, use os métodos $memory em nós de código:
// Primitives (string, number, boolean) - TTL optional
$memory.set('name', 'John')
$memory.set('attempts', 3)
$memory.set('verified', true)
// Primitive with TTL (expires in 1 hour)
$memory.set('temporaryCode', 'ABC123', 3600)
// JSON - TTL required (maximum 1 day)
$memory.setJson('preferences', {
language: 'en',
notifications: true
}, 86400)
// File - async, TTL required, MIME required (maximum 1 week)
await $memory.setFile('receipt', base64String, 604800, 'application/pdf')
Lendo variáveis
Em qualquer nó
Dentro de qualquer nó você pode acessar a Memory com a sintaxe {{$memory.variableName}}. Por exemplo, se as variáveis na memória forem:
{
"name": "John",
"lastOrder": { "id": "ORD-123", "status": "on the way" }
}
Então:
{{$memory.name}} mostra John
{{$memory.lastOrder.status}} mostra on the way
Em nós de código
Use os métodos específicos de acordo com o tipo de dado:
// Primitives
const name = $memory.get('name')
const name = $memory.get('name', 'Guest') // with default value
// JSON
const prefs = $memory.getJson('preferences')
const prefs = $memory.getJson('preferences', {}) // with default value
// Files - returns FileHandle
const file = $memory.getFile('receipt')
Ao salvar um arquivo na Memory, você deve fornecer o conteúdo em base64, o TTL e o tipo MIME:
// Save a file
await $memory.setFile('document', base64Content, 604800, 'application/pdf')
Ao ler um arquivo com $memory.getFile() você obtém um FileHandle com três métodos para acessar o conteúdo:
| Método | Descrição | Assíncrono |
|---|
.toUrl() | URL temporária para download (S3) | Não |
.toBase64() | Conteúdo como string base-64 | Sim |
.toRaw() | Buffer / Uint8Array | Sim |
// Get temporary URL
const url = $memory.getFile('receipt').toUrl()
// Get content in base64
const base64 = await $memory.getFile('receipt').toBase64()
// Get file content
const content = await $memory.getFile('receipt').toRaw()
Tipos MIME permitidos
| Categoria | Tipos MIME |
|---|
| Texto | text/plain |
| JSON | application/json |
| XML | application/xml, text/xml |
| Imagens | image/jpeg, image/png, image/gif |
| Vídeos | video/mp4, video/ogg, video/webm, video/x-msvideo, video/mpeg |
| Áudios | audio/mpeg, audio/wav, audio/ogg, audio/aac, audio/flac |
| Documentos | application/pdf |
Os métodos $memory.setFile(), $memory.getFile().toBase64() e $memory.getFile().toRaw() são assíncronos. Você deve usar await ao chamá-los.
Excluindo variáveis
Você pode excluir variáveis antes que seu TTL expire:
// Delete a variable
$memory.delete('temporary')
// Delete multiple variables
$memory.delete(['cache', 'session', 'temporary'])
Segurança
Não armazene dados sensíveis na Memory:
- Senhas ou números de cartão de crédito
- Tokens de autenticação de longa duração
- Informações de identificação pessoal (PII) altamente sensíveis
Para persistência de longo prazo, use o Datum.