Expressions
Expressions are a powerful data processing tool in Atomemo that allow you to dynamically access, transform, and manipulate data in your workflows.
What are Expressions?
Expressions are a special syntax for accessing and manipulating workflow data. With expressions, you can:
- Access node data - Reference output data from any node
- Transform data - Use built-in methods to process arrays, strings, numbers, etc.
- Dynamic calculations - Perform mathematical operations and logical judgments
- Combine data - Merge multiple data sources into new outputs
Basic Syntax
Accessing Node Data
In Atomemo, expressions must explicitly specify the node name:
// Access node outputs
$('Chat Trigger').message
$('HTTP Request').body.userId
$('Entity Recognition').productName
// Use expressions in strings
`User ${$('Chat Trigger').userId} order status: ${$('HTTP Request').body.status}`Important: Expression syntax always requires specifying the node name. Shortcuts like $json.field are not supported.
Expression Contexts
Expressions can be used in:
- Node parameters - Any input field that supports expressions
- Conditional logic - Condition expressions in IF nodes
- Code nodes - Access data in JavaScript/Python code
- HTTP requests - Dynamically build URLs, headers, body
Data Types & Methods
The Atomemo expression engine provides rich built-in methods for different data types:
Arrays
Methods for processing array data, including filtering, transformation, aggregation, etc.
// Examples
$('HTTP Request').body.items.first()
$('HTTP Request').body.prices.average()
$('HTTP Request').body.users.pluck('name')Booleans
Boolean conversion and manipulation methods.
// Example
$('HTTP Request').body.isActive.toInt()Dates
Date and time processing methods, including formatting, calculations, comparisons, etc.
// Examples
$('Chat Trigger').timestamp.format('yyyy-MM-dd')
$('HTTP Request').body.createdAt.plus(7, 'day')Numbers
Number operations and conversion methods.
// Examples
$('HTTP Request').body.price.round(2)
$('HTTP Request').body.count.isEven()Objects
Object manipulation methods, including merging, filtering, transforming, etc.
// Examples
$('HTTP Request').body.user.hasField('email')
$('HTTP Request').body.config.merge({ newKey: 'value' })Strings
String processing methods, including formatting, parsing, validation, etc.
// Examples
$('Chat Trigger').message.toUpperCase()
$('HTTP Request').body.email.isEmail()
$('HTTP Request').body.url.extractDomain()Common Use Cases
1. Accessing Nested Data
// Access deeply nested object properties
$('HTTP Request').body.user.profile.address.city
// Access array elements
$('HTTP Request').body.items[0].name
$('HTTP Request').body.items[1].price2. Data Transformation
// Convert string to number
$('Chat Trigger').message.toInt()
// Format date
$('HTTP Request').body.createdAt.format('yyyy-MM-dd HH:mm:ss')
// Convert object to JSON string
$('HTTP Request').body.toJsonString()3. Conditional Logic
// Check if value exists
$('HTTP Request').body.email.isNotEmpty()
// Check number range
$('HTTP Request').body.age > 18
// Check date range
$('HTTP Request').body.createdAt.isInLast(7, 'day')4. Array Operations
// Get array length
$('HTTP Request').body.items.length
// Extract specific field
$('HTTP Request').body.users.pluck('email')
// Filter array
$('HTTP Request').body.items.filter(item => item.price > 100)
// Array aggregation
$('HTTP Request').body.prices.sum()
$('HTTP Request').body.scores.average()5. String Concatenation
// Use template strings
`Hello, ${$('HTTP Request').body.user.name}!`
// Concatenate multiple values
`Order ${$('HTTP Request').body.orderId} status: ${$('HTTP Request').body.status}`Best Practices
1. Use Clear Node Names
// Good - Clear node names
$('Get User Info').body.name
$('Query Orders').body.items
// Bad - Unclear node names
$('HTTP Request').body.name
$('HTTP Request 1').body.items2. Handle Potentially Missing Data
// Use optional chaining
$('HTTP Request').body?.user?.email
// Provide default values
$('HTTP Request').body.user.name || 'Anonymous'
// Check existence
$('HTTP Request').body.user.hasField('email')3. Avoid Overly Complex Expressions
// Good - Process in steps
// Handle complex logic in Code node, then reference results
$('Process Data').result
// Bad - Too complex
$('HTTP Request').body.items.filter(item => item.price > 100).pluck('name').join(', ')4. Use Type Conversion
// Ensure correct data types
$('Chat Trigger').message.toInt()
$('HTTP Request').body.isActive.toBoolean()
$('HTTP Request').body.timestamp.toDate()5. Test Expressions
When developing workflows:
- Use
console.log()in Code nodes to test expressions - Check output data after node execution
- Use expression editor's preview feature to verify results
Error Handling
Common Errors
Node doesn't exist
javascript// Error: Referencing non-existent node $('Nonexistent Node').data // Solution: Ensure node name is correct $('HTTP Request').dataProperty doesn't exist
javascript// Error: Accessing non-existent property $('HTTP Request').body.nonexistentField // Solution: Use optional chaining or check $('HTTP Request').body?.nonexistentField $('HTTP Request').body.hasField('nonexistentField')Type error
javascript// Error: Calling number method on string $('Chat Trigger').message.round() // Solution: Convert type first $('Chat Trigger').message.toInt().round()
Debugging Tips
1. Use Code Node for Debugging
// Print expression results in Code node
console.log('User data:', $('HTTP Request').body.user);
console.log('Item count:', $('HTTP Request').body.items.length);
return $('HTTP Request').body;2. Step-by-Step Validation
Break complex expressions into multiple steps, validating results at each step:
HTTP Request Node
→ Code Node (Validate and transform data)
→ IF Node (Conditional logic)
→ Answer Node (Return result)3. Use Expression Editor
The expression editor provides:
- Syntax highlighting
- Auto-completion
- Live preview
- Error hints
Performance Considerations
1. Avoid Repeated Calculations
// Bad - Repeated calculations
`${$('HTTP Request').body.items.length} items, total: ${$('HTTP Request').body.items.sum()}`
// Good - Calculate once in Code node, then reference
$('Calculate Stats').summary2. Limit Array Size
Be mindful of performance when processing large arrays:
// For large arrays, consider filtering first
$('HTTP Request').body.items
.filter(item => item.active)
.slice(0, 100)
.pluck('name')Next Steps
- Array Methods Reference
- String Methods Reference
- Date Methods Reference
- Object Methods Reference
- Number Methods Reference
- Boolean Methods Reference
Related Resources
- Code Node - Use expressions in code
- IF Node - Conditional expressions
- HTTP Request Node - Use expressions in API calls