Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.thoughtly.com/llms.txt

Use this file to discover all available pages before exploring further.

The Code integration lets advanced users run small JavaScript snippets inside automation flows or live agent actions. Use it for last-mile customization when built-in steps almost solve the workflow but you need to transform, validate, format, or calculate something first. Examples:
  • Normalize phone numbers before dialing.
  • Convert a webhook response into fields an agent can use.
  • Calculate a lead score.
  • Choose a local-presence number based on area code.
  • Route by date, time window, or custom business rules.
Code is not a general-purpose serverless environment. It runs in a restricted sandbox with time, memory, network, and security limits.

How it works

A Code step receives prior node outputs through an inputs object. Your script returns a JSON-serializable value. That return value becomes the step output and can be mapped into later steps or agent actions.
const phone = inputs['trigger'].phone
const digits = phone.replace(/\D/g, '')

return {
  e164: digits.startsWith('1') ? `+${digits}` : `+1${digits}`,
}

Configuration

FieldRequiredDescription
CodeYesJavaScript to execute. Must return a JSON-serializable value.
TimeoutNoMaximum execution time. Shorter limits apply during live calls to protect call quality.

Use variables from prior steps

Use the data picker to insert references to previous outputs. References are inserted as inputs['nodeId'].fieldName paths. Example:
const firstName = inputs['create_contact'].first_name
const appointmentDate = inputs['check_availability'].selected_time

return {
  message: `Hi ${firstName}, your appointment is confirmed for ${appointmentDate}.`,
}

Limits

Typical limits include:
LimitWhy it exists
Execution timeoutPrevents slow scripts from blocking workflows or live calls.
Memory capProtects platform stability.
Code size capKeeps snippets small and reviewable.
Console output capPrevents excessive logs.
Concurrency capPrevents one workspace from consuming all runner capacity.

Blocked capabilities

The sandbox blocks risky or platform-level operations, including:
  • Network calls such as fetch, XMLHttpRequest, or WebSocket
  • Node.js built-ins such as require or process
  • Code generation such as eval, new Function, or dynamic import()
  • Known sandbox escape patterns
  • Obvious infinite loops
If your workflow needs external API access, use a webhook or integration step before or after the Code step.

Examples

Validate an email address

const email = inputs['trigger'].email
const valid = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)

return { email, valid }

Calculate a lead score

const lead = inputs['create_or_update_contact']

const score =
  (lead.budget >= 50000 ? 40 : 20) +
  (lead.timeline === 'immediate' ? 30 : 10) +
  (lead.company_size >= 100 ? 30 : 10)

return {
  score,
  qualified: score >= 70,
}

Route by area code

const digits = inputs['trigger'].phone.replace(/\D/g, '')
const areaCode = digits.length === 11 ? digits.slice(1, 4) : digits.slice(0, 3)

const region = {
  '212': 'new_york',
  '646': 'new_york',
  '415': 'san_francisco',
}[areaCode] || 'default'

return { areaCode, region }

Best practices

  • Keep scripts short and focused.
  • Return structured JSON objects, not long strings.
  • Use webhooks or CRM steps for external API calls.
  • Test with realistic sample data before going live.
  • Avoid putting secrets in code.