Action Nodes
Action nodes perform side effects -- they send data out of the conversation, call external services, generate documents, and write records. There are 9 action node types. All of them support configurable error handling (stop, continue, error branch, or fallback message) and an optional retry-once for transient failures.
Send Email
Type: send_email
Sends an email to one or more recipients. All fields support variable interpolation, so you can personalize the subject, body, and recipients based on data collected earlier in the flow.
| Property | Description |
|---|---|
emailTo | Recipient email address (or comma-separated list) |
emailSubject | Subject line |
emailBody | Email body content |
emailCc | CC recipients (optional) |
When to use: Send a lead notification to your sales team after collecting contact details. Send a confirmation email to the visitor after they submit a form.
API Call
Type: api_call
Makes an HTTP request to an external API and maps response data into flow variables. This is the most flexible integration node -- use it when you need to read data back from the response.
| Property | Description |
|---|---|
url | The request URL |
method | HTTP method: GET, POST, or PUT |
headers | Request headers (JSON string) |
body | Request body (JSON string, for POST/PUT) |
responseMappings | Array of {jsonPath, variableName} pairs to extract fields from the response |
responseBodyVariable | Variable name to store the full response body |
responseStatusVariable | Variable name to store the HTTP status code |
Response mappings use JSON path expressions to pull specific fields out of the response. For example, a mapping of $.data.email to variable userEmail would extract the email field from the response and make it available as {{userEmail}} in subsequent nodes.
When to use: Fetch product availability from your inventory API. Look up a customer record before personalizing the conversation. Trigger a third-party webhook that returns a confirmation ID.
Webhook
Type: webhook
Calls an external URL with a payload. Unlike API Call, this is fire-and-forget -- the engine sends the request and moves on without waiting for or mapping the response.
| Property | Description |
|---|---|
webhookUrl | The target URL |
webhookMethod | HTTP method: POST or PUT |
webhookPayload | Request body (JSON string) |
webhookHeaders | Request headers (JSON string) |
When to use: Notify an external system when a conversation reaches a certain point. Log events to an analytics service. Trigger a Zapier or Make workflow without needing the response.
Generate Document
Type: generate_document
Creates a document using AI, based on the conversation context and structured section definitions. Each section has its own instruction and format, and the AI generates the content accordingly.
| Property | Description |
|---|---|
documentTitle | Title of the generated document |
outputFormat | Output file type: docx, pdf, excel, csv, or both (docx + pdf) |
documentSections | Array of section definitions (see below) |
triggerMode | automatic (generate immediately) or offer (present a download button) |
offerMessage | Message shown to the user when triggerMode is offer |
includeAttachments | Include any files the user uploaded during the conversation |
includeKnowledgeBase | Include relevant knowledge base content as context for generation |
maxContextMessages | Number of recent conversation messages to include as context |
Each entry in documentSections has:
| Field | Description |
|---|---|
title | Section heading |
instruction | Prompt telling the AI what to write in this section |
format | paragraphs, bullets, or table |
order | Numeric sort order |
When to use: Generate a proposal after a discovery conversation. Create a media plan based on collected campaign requirements. Produce a summary report at the end of an advisory session.
Push Message
Type: push_message
Sends a proactive message to visitors through a Knowledge agent's widget. This lets Action agents (or flows running in the background) reach out to users rather than waiting for them to start a conversation.
| Property | Description |
|---|---|
targetAgentId | The Knowledge agent whose widget will display the message |
targeting | Who receives it: active_conversations, specific_visitor, or all_recent |
visitorIdentifier | Object with type (email, visitor_id, or variable) and value -- used when targeting is specific_visitor |
recentHours | Time window for all_recent targeting (e.g., visitors in the last 24 hours) |
pushMessageContent | The message text (when using static mode) |
pushMessageType | static (fixed content) or ai_generated (LLM writes the message) |
pushAiPrompt | Prompt for the AI to generate the message (when using ai_generated mode) |
delivery | immediate (push now) or next_visit (show when the visitor next loads the page) |
When to use: Re-engage visitors who abandoned a conversation. Broadcast a promotion to recent visitors. Send a personalized follow-up after an Action agent completes a background workflow.
Integration Task
Type: integration_task
Executes a task through a connected platform integration. This is the primary node for interacting with third-party platforms that have been set up in the Integrations page.
| Property | Description |
|---|---|
provider | The integration platform (e.g., meta_ads, google_ads, hubspot, shopify) |
operation | The specific action to perform (e.g., update_budget, create_contact, sync_inventory) |
params | Key-value parameters for the operation (varies by provider and operation) |
outputVariable | Variable name to store the operation result |
Available operations depend on which integrations are connected to the workspace. Each platform integration exposes its own set of operations.
When to use: Update a Meta Ads campaign budget after analyzing performance. Create or update a CRM contact in HubSpot. Sync product data to Shopify.
Format Notification
Type: format_notification
Formats a list of items into a structured notification message. Takes a variable containing an array of items and renders each one using a template with title, subtitle, and detail fields.
| Property | Description |
|---|---|
platform | Target platform or format for the notification |
title | Notification title |
summary | Summary text shown above the item list |
footer | Footer text shown below the item list |
itemsVariable | Variable containing the array of items to format |
itemTemplate | Template object with title, subtitle, and detail fields (supports variable interpolation) |
outputVariable | Variable name to store the formatted notification |
The formatted output is stored in the output variable and can be used by subsequent nodes -- for example, passed to a Send Email or Webhook node.
When to use: Format a daily campaign performance summary for email delivery. Render inventory alerts as a structured list. Prepare a formatted report of ad set metrics before sending to Slack.
Write to Catalog
Type: write_to_catalog
Writes or updates records in a Data Catalog. Use this to persist structured data collected during a conversation or produced by an Action agent workflow.
| Property | Description |
|---|---|
catalogId | The target Data Catalog |
operation | create (new record), update (modify existing), or upsert (create or update) |
fieldMappings | Map of catalog field names to values or variable references |
matchField | Field used to find existing records (required for update and upsert) |
matchValue | Value to match against (supports variable interpolation) |
For update and upsert operations, the node finds an existing record where matchField equals matchValue, then applies the field mappings. For create, it inserts a new record directly.
When to use: Store leads collected during a conversation. Update inventory counts after an order. Log action agent decisions for audit purposes.
Record KPI Snapshot
Type: record_kpi_snapshot
Records a performance metric data point. Designed for Action agents that track campaign metrics, business KPIs, or operational data over time.
| Property | Description |
|---|---|
snapshotConfig.provider | Data source platform (e.g., meta_ads, google_ads) |
snapshotConfig.dashboardKey | Dashboard grouping key |
snapshotConfig.operation | Snapshot operation type |
snapshotConfig.entityType | Type of entity being measured (e.g., campaign, ad_set) |
snapshotConfig.kpiName | Name of the metric (e.g., spend, cpa, roas) |
snapshotConfig.kpiValueVar | Variable containing the current metric value |
snapshotConfig.targetValue | Target value for the metric |
snapshotConfig.direction | Whether the metric should be above, below, or within the target |
snapshotConfig.entityIdField | Field name for entity ID (batch operations) |
snapshotConfig.entityNameField | Field name for entity name (batch operations) |
snapshotConfig.kpiValueField | Field name for KPI value (batch operations) |
snapshotConfig.campaignIdVar | Variable containing the campaign ID |
snapshotConfig.campaignNameVar | Variable containing the campaign name |
snapshotConfig.campaignsVar | Variable containing a list of campaigns (batch operations) |
snapshotConfig.itemsPath | JSON path to items array within the campaigns variable |
When to use: Log daily ad spend for trend analysis. Record conversion rates after each optimization run. Track ROAS snapshots across campaigns for the agent's performance dashboard.