Skip to content

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:

javascript
// 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.

javascript
// Examples
$('HTTP Request').body.items.first()
$('HTTP Request').body.prices.average()
$('HTTP Request').body.users.pluck('name')

Booleans ​

Boolean conversion and manipulation methods.

javascript
// Example
$('HTTP Request').body.isActive.toInt()

Dates ​

Date and time processing methods, including formatting, calculations, comparisons, etc.

javascript
// Examples
$('Chat Trigger').timestamp.format('yyyy-MM-dd')
$('HTTP Request').body.createdAt.plus(7, 'day')

Numbers ​

Number operations and conversion methods.

javascript
// Examples
$('HTTP Request').body.price.round(2)
$('HTTP Request').body.count.isEven()

Objects ​

Object manipulation methods, including merging, filtering, transforming, etc.

javascript
// Examples
$('HTTP Request').body.user.hasField('email')
$('HTTP Request').body.config.merge({ newKey: 'value' })

Strings ​

String processing methods, including formatting, parsing, validation, etc.

javascript
// Examples
$('Chat Trigger').message.toUpperCase()
$('HTTP Request').body.email.isEmail()
$('HTTP Request').body.url.extractDomain()

Common Use Cases ​

1. Accessing Nested Data ​

javascript
// 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].price

2. Data Transformation ​

javascript
// 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 ​

javascript
// 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 ​

javascript
// 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 ​

javascript
// 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 ​

javascript
// 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.items

2. Handle Potentially Missing Data ​

javascript
// 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 ​

javascript
// 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 ​

javascript
// Ensure correct data types
$('Chat Trigger').message.toInt()
$('HTTP Request').body.isActive.toBoolean()
$('HTTP Request').body.timestamp.toDate()

5. Test Expressions ​

When developing workflows:

  1. Use console.log() in Code nodes to test expressions
  2. Check output data after node execution
  3. Use expression editor's preview feature to verify results

Error Handling ​

Common Errors ​

  1. Node doesn't exist

    javascript
    // Error: Referencing non-existent node
    $('Nonexistent Node').data
    
    // Solution: Ensure node name is correct
    $('HTTP Request').data
  2. Property 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')
  3. 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 ​

javascript
// 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 ​

javascript
// 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').summary

2. Limit Array Size ​

Be mindful of performance when processing large arrays:

javascript
// For large arrays, consider filtering first
$('HTTP Request').body.items
  .filter(item => item.active)
  .slice(0, 100)
  .pluck('name')

Next Steps ​