Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.voxworks.ai/llms.txt

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

Overview

Steps execute in order from top to bottom. Each step reads from and writes to a shared context object that carries data through the pipeline. You can add up to 20 steps per automation. To add a step, click + Add step in the pipeline builder and select the step type.

Step Types

Transform

Reshape and map data from one format to another. Transforms are typically used to:
  • Map incoming webhook fields to contact fields before an Upsert Contact step
  • Map call results to CRM column identifiers before a Destination step
Configuration: Add one or more field mappings. Each mapping has:
FieldDescription
SourceThe field to read from (e.g., trigger.phone, call.call_summary)
TargetThe field to write to (e.g., contact.phone_number, long_text_7)
TransformOptional transformation: uppercase, lowercase, truncate:100, date:YYYY-MM-DD, to_string, to_number
Example — mapping webhook fields for a contact:
SourceTarget
trigger.phonecontact.phone_number
trigger.first_namecontact.first_name
trigger.last_namecontact.last_name
Transform results are written to mapped.* in the context and are available to all subsequent steps.

Upsert Contact

Create a new contact in Voxworks or update an existing one. The step matches on either phone number or email to determine whether to create or update. Configuration:
FieldDescription
Match onHow to find existing contacts: phone_number or email
Field mappingsMap context fields to contact fields (phone_number, first_name, last_name, email, address, location)
After this step runs, contact.* is available in the context for all subsequent steps. Example: Match on phone_number, with mappings:
SourceTarget
trigger.phonephone_number
trigger.first_namefirst_name
trigger.last_namelast_name
If a contact with that phone number already exists, their name fields are updated. If not, a new contact is created.

Upsert Object

Create or update a typed data object and optionally link it to the contact. Objects store CRM identifiers and external data that your automation needs to reference later — for example, a Monday.com item ID or a HubSpot deal ID. Configuration:
FieldDescription
Object typeThe type of object to create (e.g., monday_item, hubspot_deal)
Match onThe field within the object data to match against (e.g., CRM_ID)
Match valueThe source path for the match value (e.g., trigger.crm_id)
Link to contactWhether to link this object to the current contact in context
Field mappingsMap context fields to object data fields
After this step runs, the object’s data is available at objects.{type_name}.*. Example: Object type: monday_item, match on CRM_ID = trigger.crm_id, link to contact: yes.
SourceTarget
trigger.crm_idCRM_ID
trigger.board_idboard_id
trigger.sourcesource

Create Call

Trigger an outbound call using a specific Script. This step creates a call record and schedules it for immediate execution (or at a specified time). Configuration:
FieldDescription
ScriptThe Script to use for the call
Phone fieldContext path to the phone number (e.g., contact.phone_number)
From numberThe outbound phone number to call from (optional, uses default if not set)
Important: Pipeline split. Any steps placed after Create Call become post-call steps. They do not execute until the call finishes and the AI has generated the summary and structured data. The pipeline builder shows a visual divider: “after call completes”. After the call completes, call.* is populated with the full call record including summary, transcript, structured data, and objectives.

Destination

Push data to an external system. There are four destination types:

Integration Sync

Sync data to a connected CRM (e.g., Monday.com). Uses field mappings to map call outputs and object data to integration-specific column identifiers.
SourceTarget
call.call_summarylong_text_7
call.statusstatus_1
call.durationnumbers_3
objects.monday_item.CRM_IDitem_id
objects.monday_item.board_idboard_id
The target field names correspond to column IDs in your CRM. You’ll find these in your CRM’s column settings.

Email

Send an email to the contact, your team members, or a specific address. Email subjects and bodies support {{variable}} interpolation.
FieldDescription
Tocontact (uses contact.email), team (sends to selected members), or a specific email address
SubjectEmail subject with variable support (e.g., Your call summary - {{contact.full_name}})
BodyHTML email body with variable support (e.g., Hi {{contact.first_name}}, here is your call summary: {{call.call_summary}})
From nameDisplay name for the sender (defaults to your team name)
Reply toReply-to address (defaults to team owner email)

SMS

Send a text message to the contact or to team members.
FieldDescription
SMS typecontact (sends to the contact) or team (sends to selected team members)
ToPhone field path for contact SMS (e.g., contact.phone_number)
TemplateMessage text with {{variable}} interpolation
MembersFor team SMS, which team members to notify

Webhook

Send an HTTP request to any URL. Useful for integrating with systems that don’t have a native integration.
FieldDescription
URLThe destination URL (must be HTTPS)
MethodPOST or PUT
HeadersCustom HTTP headers (optional)
Body templateJSON body with {{variable}} interpolation

Condition

Branch the pipeline based on a field value. If the condition is true, the on_true steps run. If false, the optional on_false steps run (or the condition is skipped). Configuration:
FieldDescription
FieldContext path to evaluate (e.g., call.status, call.end_reason, call.structured_data.rating)
Operatoreq, neq, gt, lt, gte, lte, in, exists
ValueThe value to compare against
Example — notify team on low rating:
  • Field: call.structured_data.rating
  • Operator: lt
  • Value: 3
  • On true: SMS to team — “Low rating call: {{contact.full_name}}”
  • On false: (skip)
Conditions can be nested up to 2 levels deep.

Source

Fetch data from an external API or connected integration. The response is written to source.* in the context. Configuration (HTTP):
FieldDescription
URLThe API endpoint (supports {{variable}} interpolation)
MethodGET or POST
HeadersCustom HTTP headers (optional)
Body templateRequest body for POST requests (optional)
Configuration (Integration Fetch):
FieldDescription
IntegrationThe connected integration to fetch from
The fetched data is resolved at runtime using object identifiers from the context (e.g., the contact’s linked CRM item ID).

Limits

LimitValue
Max steps per automation20
Max condition nesting depth2 levels
Max field mappings per transform50
Max execution time per step30 seconds
Max total execution time5 minutes