afv-library/skills/agentforce-grid/references/column-configs.md
Marzi Golbaz 31d36f5210 feat: add agentforce-grid skill
Adds the Agentforce Grid (AI Workbench) skill for spreadsheet-like AI
operations in Salesforce — agent testing with utterances, batch prompt
processing, AI-driven data enrichment, and evaluation columns.

Covers the /services/data/v66.0/public/grid/ Connect API and 12 column
types (AI, Agent, AgentTest, Evaluation, Formula, Object,
DataModelObject, PromptTemplate, InvocableAction, Action, Reference,
Text).

Skill previously lived at git.soma.salesforce.com/tmcgrath/agentforce-grid-ai-skills
and github.com/Agentforce-emu/agentforce-grid-skills.
2026-07-01 16:21:30 -07:00

26 KiB

Column Configurations Reference

Complete JSON configurations for all 12 Agentforce Grid column types.

CRITICAL: Config Structure

All column configs follow this nested structure:

{
  "name": "Column Name",
  "type": "AI",                          // Type value (see table below)
  "config": {
    "type": "AI",                        // type repeated inside config (REQUIRED)
    "numberOfRows": 50,                  // Optional, at config level
    "queryResponseFormat": {...},        // REQUIRED for processing columns
    "autoUpdate": true,                  // REQUIRED
    "config": {                          // Nested config with column-specific fields
      "autoUpdate": true,
      // ... column-specific configuration
    }
  }
}

Type Values

Column Type type value columnType in referenceAttributes
AI "Ai" (canonical) or "AI" "AI"
Object "Object" "Object"
Reference "Reference" "Reference"
Text "Text" "Text"
PromptTemplate "PromptTemplate" "PromptTemplate"
InvocableAction "InvocableAction" "InvocableAction"
Action "Action" "Action"
AgentTest "AgentTest" "AgentTest"
Agent "Agent" "Agent"
Evaluation "Evaluation" "Evaluation"
Formula "Formula" "Formula"
DataModelObject "DataModelObject" "DataModelObject"

Note: type and columnType in referenceAttributes both use PascalCase (e.g., "Text", "Object", "AgentTest"). The Connect API canonical wire value for AI columns is "Ai", but the server is case-insensitive -- "AI", "Ai", "ai" all work.

queryResponseFormat (CRITICAL)

This determines whether a column imports new data or processes existing rows.

// EACH_ROW - Process each existing row (USE THIS when worksheet already has data)
"queryResponseFormat": {
  "type": "EACH_ROW"
}

// WHOLE_COLUMN - Import new data into the worksheet
"queryResponseFormat": {
  "type": "WHOLE_COLUMN",
  "splitByType": "OBJECT_PER_ROW"
}

IMPORTANT RULE: When a worksheet already has data (from Object, Text, CSV import, etc.), new columns should use EACH_ROW to process each existing row. Only use WHOLE_COLUMN when importing new data.

Scenario queryResponseFormat
Adding AI column to process existing Account data {"type": "EACH_ROW"}
Adding Agent column to test with existing utterances {"type": "EACH_ROW"}
Adding Object column to import new records {"type": "WHOLE_COLUMN", "splitByType": "OBJECT_PER_ROW"}
Adding Text column from CSV import {"type": "WHOLE_COLUMN", "splitByType": "OBJECT_PER_ROW"}

ReferenceAttribute

Used to reference other columns in configurations. Use PascalCase for columnType.

{
  "columnId": "1W5SB000005zk6H0AQ",
  "columnName": "Accounts",
  "columnType": "Object",
  "fieldName": "Name"
}

For Reference columns, fieldName can be empty:

{
  "columnId": "1W5SB0000060AqL0AU",
  "columnName": "Leads.Title",
  "columnType": "Reference"
}

By default, `referenceAttributes` are optional (`isRequired` defaults to `false`). If the referenced cell is empty, an empty string is substituted. Set `"isRequired": true` on a referenceAttribute to block execution when the reference is missing -- the cell will get status `MissingInput` instead of processing.

ModelConfig (Required for AI/PromptTemplate)

Always specify modelConfig. Use the model name for both fields:

{
  "modelId": "sfdc_ai__DefaultGPT4Omni",
  "modelName": "sfdc_ai__DefaultGPT4Omni"
}

Recommended models (active, high-capability):

  • sfdc_ai__DefaultGPT4Omni - GPT 4 Omni (16K tokens)
  • sfdc_ai__DefaultGPT41 - GPT 4.1 (32K tokens)
  • sfdc_ai__DefaultGPT5 - GPT 5 (128K tokens)
  • sfdc_ai__DefaultGPT5Mini - GPT 5 Mini (128K tokens)
  • sfdc_ai__DefaultO3 - O3 (100K tokens)
  • sfdc_ai__DefaultO4Mini - O4 Mini (100K tokens)
  • sfdc_ai__DefaultBedrockAnthropicClaude45Sonnet - Claude 4.5 Sonnet (8K tokens)
  • sfdc_ai__DefaultBedrockAnthropicClaude4Sonnet - Claude 4 Sonnet (8K tokens)
  • sfdc_ai__DefaultVertexAIGemini25Flash001 - Gemini 2.5 Flash (64K tokens)
  • sfdc_ai__DefaultVertexAIGeminiPro25 - Gemini 2.5 Pro (64K tokens)

Use GET /llm-models for the full list of available models in your org.


1. AI Column

Generate text using LLM with custom prompts.

Type value: "AI"

Required fields in config.config:

  • mode (String, required) - Always "llm"
  • modelConfig (ModelConfig, required) - LLM model selection
  • instruction (String, required) - Prompt with {$1}, {$2} placeholders
  • referenceAttributes (List, required when using placeholders) - Columns to substitute
  • responseFormat (object, required) - Response format control
    • type: "PLAIN_TEXT" or "SINGLE_SELECT"
    • options: Array (empty [] for PLAIN_TEXT, or list of {label, value} for SINGLE_SELECT)

Example - Processing Existing Row Data (MOST COMMON):

{
  "name": "Draft Email",
  "type": "AI",
  "config": {
    "type": "AI",
    "numberOfRows": 20,
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "mode": "llm",
      "modelConfig": {
        "modelId": "sfdc_ai__DefaultGPT4Omni",
        "modelName": "sfdc_ai__DefaultGPT4Omni"
      },
      "instruction": "Write a personalized email for:\nName: {$1}\nTitle: {$2}\nCompany: {$3}",
      "referenceAttributes": [
        {"columnId": "col-uuid-1", "columnName": "Leads", "columnType": "Object", "fieldName": "FirstName"},
        {"columnId": "col-uuid-2", "columnName": "Leads.Title", "columnType": "Reference"},
        {"columnId": "col-uuid-3", "columnName": "Leads.Company", "columnType": "Reference"}
      ],
      "responseFormat": {
        "type": "PLAIN_TEXT",
        "options": []
      }
    }
  }
}

Example - Single Select Classification:

{
  "name": "Sentiment",
  "type": "AI",
  "config": {
    "type": "AI",
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "mode": "llm",
      "modelConfig": {
        "modelId": "sfdc_ai__DefaultGPT4Omni",
        "modelName": "sfdc_ai__DefaultGPT4Omni"
      },
      "instruction": "Classify the sentiment of this text: {$1}",
      "referenceAttributes": [
        {"columnId": "col-uuid-1", "columnName": "CustomerFeedback", "columnType": "Text"}
      ],
      "responseFormat": {
        "type": "SINGLE_SELECT",
        "options": [
          {"label": "Positive", "value": "positive"},
          {"label": "Negative", "value": "negative"},
          {"label": "Neutral", "value": "neutral"}
        ]
      }
    }
  }
}

2. Agent Column

Run agent conversations with dynamic inputs.

Type value: "Agent"

Required fields in config.config:

  • agentId (String, required) - Agent definition ID
  • agentVersion (String, required) - Agent version ID
  • utterance (String, required) - Message with {$1}, {$2} placeholders
  • utteranceReferences (List, optional) - Columns for placeholder substitution
  • contextVariables (List, optional) - Agent context variables
  • initialState (ReferenceAttribute, optional) - For multi-turn conversations
  • conversationHistory (ReferenceAttribute, optional) - For multi-turn

ContextVariable Structure:

// Static value
{
  "variableName": "Priority",
  "type": "Text",
  "value": "High"
}

// Column reference
{
  "variableName": "CustomerName",
  "type": "Text",
  "reference": {"columnId": "col-uuid", "columnName": "Name", "columnType": "Object"}
}

CRITICAL: Each ContextVariable must have EITHER value OR reference, not both.

Note: testMode is deprecated on Agent columns and has no effect. Do not include it in Agent column configs.

Example:

{
  "name": "Sales Agent Response",
  "type": "Agent",
  "config": {
    "type": "Agent",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "agentId": "0XxRM000000xxxxx",
      "agentVersion": "0XyRM000000xxxxx",
      "utterance": "Hello, I need help with {$1}",
      "utteranceReferences": [
        {"columnId": "col-uuid-1", "columnName": "CustomerQuery", "columnType": "Text"}
      ],
      "contextVariables": [
        {
          "variableName": "CustomerName",
          "type": "Text",
          "reference": {"columnId": "col-uuid-2", "columnName": "Customers", "columnType": "Object", "fieldName": "Name"}
        },
        {
          "variableName": "Priority",
          "type": "Text",
          "value": "High"
        }
      ]
    }
  }
}

3. AgentTest Column

Test agents with utterances from a column. Used for batch testing.

Type value: "AgentTest"

Required fields in config.config:

  • agentId (String, required)
  • agentVersion (String, required)
  • inputUtterance (ReferenceAttribute, required) - References Text column with test utterances
  • contextVariables (List, optional)
  • initialState (ReferenceAttribute, optional)
  • conversationHistory (ReferenceAttribute, optional)
  • isDraft (boolean, optional) - Test draft agent version
  • enableSimulationMode (boolean, optional)

Example:

{
  "name": "Agent Test",
  "type": "AgentTest",
  "config": {
    "type": "AgentTest",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "agentId": "0XxRM000000xxxxx",
      "agentVersion": "0XyRM000000xxxxx",
      "inputUtterance": {
        "columnId": "col-uuid-1",
        "columnName": "Test Utterances",
        "columnType": "Text"
      },
      "contextVariables": [],
      "isDraft": false,
      "enableSimulationMode": false
    }
  }
}

Example with Context Variables:

{
  "name": "Agent Test with Context",
  "type": "AgentTest",
  "config": {
    "type": "AgentTest",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "agentId": "0XxRM000000xxxxx",
      "agentVersion": "0XyRM000000xxxxx",
      "inputUtterance": {
        "columnId": "col-uuid-1",
        "columnName": "Utterances",
        "columnType": "Text"
      },
      "contextVariables": [
        {
          "variableName": "AccountId",
          "type": "Text",
          "reference": {"columnId": "col-uuid-2", "columnName": "Accounts", "columnType": "Object", "fieldName": "Id"}
        }
      ]
    }
  }
}

Voice Testing (Conversation Level only)

AgentTest columns support voice testing when evaluationMode is "TEXT_VOICE":

  • voiceMode: "LIVE" | "REPLAY" | "VOICE_CONV_MODE"
  • selectedPersonas: Array of persona types (e.g., "DEFAULT", "FRUSTRATED")
  • noiseType: Background noise simulation ("traffic", "factory", "airport", "marketplace", etc.)
  • noiseVolume: 0.0 to 1.0
  • audioEffects: Object with sub-configs for lowPassFilter, clipping, gaussianNoise, packetLoss, compression

4. Object Column

Query Salesforce SObjects.

Type value: "Object"

Required fields in config.config:

  • objectApiName (String, required) - SObject API name (e.g., "Account", "Contact")
  • fields (List, required) - Fields to query with name and type
  • filters (List, optional) - Filter conditions
  • advancedMode (object, optional) - For raw SOQL queries
    • Uses inputs.queryString for the SOQL query
    • IMPORTANT: Placeholders use {ColumnName} or {ColumnName.FieldName} format (NOT {$1})

FieldConfig Structure:

Fields must include both name and type properties. The type must match Salesforce field data types (UPPERCASE):

{"name": "Id", "type": "ID"}
{"name": "Name", "type": "STRING"}
{"name": "Industry", "type": "PICKLIST"}
{"name": "AnnualRevenue", "type": "CURRENCY"}
{"name": "Phone", "type": "PHONE"}
{"name": "Website", "type": "URL"}
{"name": "Description", "type": "TEXTAREA"}

Common Field Types:

  • ID, STRING, TEXTAREA
  • INTEGER, DOUBLE, LONG, CURRENCY, PERCENT
  • BOOLEAN, DATE, DATETIME, TIME
  • PICKLIST, MULTIPICKLIST
  • PHONE, EMAIL, URL
  • REFERENCE, ADDRESS, LOCATION

Use get_sobject_fields_display or get_sobject_fields_filter tools to get the correct field types for your object.

FilterOperator Values:

  • In, NotIn
  • EqualTo, NotEqualTo
  • Contains, StartsWith, EndsWith
  • IsNull, IsNotNull
  • LessThan, LessThanOrEqualTo, GreaterThan, GreaterThanOrEqualTo

Example - Basic Query:

{
  "name": "Accounts",
  "type": "Object",
  "config": {
    "type": "Object",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "WHOLE_COLUMN",
      "splitByType": "OBJECT_PER_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "objectApiName": "Account",
      "fields": [
        {"name": "Id", "type": "ID"},
        {"name": "Name", "type": "STRING"},
        {"name": "Industry", "type": "PICKLIST"},
        {"name": "Description", "type": "TEXTAREA"}
      ],
      "filters": [
        {
          "field": "Industry",
          "operator": "In",
          "values": [
            {"value": "Technology", "type": "STRING"},
            {"value": "Finance", "type": "STRING"}
          ]
        }
      ]
    }
  }
}

Example - Advanced SOQL:

{
  "name": "Custom Query",
  "type": "Object",
  "config": {
    "type": "Object",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "WHOLE_COLUMN",
      "splitByType": "OBJECT_PER_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "objectApiName": "Account",
      "advancedMode": {
        "type": "SOQL",
        "inputs": {
          "queryString": "SELECT Id, Name, Industry FROM Account WHERE Industry = '{TargetIndustry}' AND CreatedDate > LAST_N_DAYS:30 LIMIT 50"
        },
        "referenceAttributes": [
          {"columnId": "col-uuid-1", "columnName": "TargetIndustry", "columnType": "Text"}
        ]
      }
    }
  }
}

5. Formula Column

Compute values using formula expressions.

Type value: "Formula"

Required fields in config.config:

  • formula (String, required) - Formula with {$1}, {$2} placeholders
  • returnType (String, required) - Return type
  • referenceAttributes (List, required) - Columns referenced in formula

Common Return Types:

  • string, boolean, double, integer, long
  • date, datetime, time
  • id, reference

Example - String Concatenation:

{
  "name": "Full Name",
  "type": "Formula",
  "config": {
    "type": "Formula",
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "formula": "CONCATENATE({$1}, ' ', {$2})",
      "returnType": "string",
      "referenceAttributes": [
        {"columnId": "col-uuid-1", "columnName": "FirstName", "columnType": "Text"},
        {"columnId": "col-uuid-2", "columnName": "LastName", "columnType": "Text"}
      ]
    }
  }
}

Example - Boolean Expression:

{
  "name": "Is High Value",
  "type": "Formula",
  "config": {
    "type": "Formula",
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "formula": "{$1} > 100000",
      "returnType": "boolean",
      "referenceAttributes": [
        {"columnId": "col-uuid-1", "columnName": "Accounts", "columnType": "Object", "fieldName": "AnnualRevenue"}
      ]
    }
  }
}

6. PromptTemplate Column

Execute GenAI prompt templates.

Type value: "PromptTemplate"

Required fields in config.config:

  • promptTemplateDevName (String, required) - Template developer name
  • promptTemplateVersionId (String, optional)
  • promptTemplateType (String, optional) - e.g., "flex"
  • modelConfig (ModelConfig, required) - LLM model selection
  • promptTemplateInputConfigs (List, required) - Input mappings

PromptTemplateInputConfig Structure:

{
  "referenceName": "InputVariableName",
  "definition": "Description of the input",
  "referenceAttribute": {"columnId": "...", "columnName": "...", "columnType": "..."}
}

Example:

{
  "name": "Email Generator",
  "type": "PromptTemplate",
  "config": {
    "type": "PromptTemplate",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "promptTemplateDevName": "Generate_Customer_Email",
      "promptTemplateType": "flex",
      "modelConfig": {
        "modelId": "sfdc_ai__DefaultGPT4Omni",
        "modelName": "sfdc_ai__DefaultGPT4Omni"
      },
      "promptTemplateInputConfigs": [
        {
          "referenceName": "CustomerName",
          "definition": "The customer's name",
          "referenceAttribute": {"columnId": "col-uuid-1", "columnName": "Customers", "columnType": "Object", "fieldName": "Name"}
        },
        {
          "referenceName": "Issue",
          "definition": "The customer's issue",
          "referenceAttribute": {"columnId": "col-uuid-2", "columnName": "CaseDescription", "columnType": "Text"}
        }
      ]
    }
  }
}

7. InvocableAction Column

Execute Flows, Apex, or other invocable actions.

Type value: "InvocableAction"

Required fields in config.config:

  • actionInfo (object, required)
    • actionType: FLOW, APEX, etc.
    • actionName: Flow/Apex API name
    • url: Action URL
    • label: Display label
  • inputPayload (String, required) - JSON payload with {$1} placeholders
  • referenceAttributes (List, required) - Columns for placeholder substitution

Example - Flow Execution:

{
  "name": "Create Case",
  "type": "InvocableAction",
  "config": {
    "type": "InvocableAction",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "actionInfo": {
        "actionType": "FLOW",
        "actionName": "Create_Support_Case",
        "url": "/services/data/v66.0/actions/custom/flow/Create_Support_Case",
        "label": "Create Support Case"
      },
      "inputPayload": "{\"Subject\": \"{$1}\", \"Description\": \"{$2}\", \"Priority\": \"{$3}\"}",
      "referenceAttributes": [
        {"columnId": "col-uuid-1", "columnName": "Subject", "columnType": "Text"},
        {"columnId": "col-uuid-2", "columnName": "Description", "columnType": "Text"},
        {"columnId": "col-uuid-3", "columnName": "Priority", "columnType": "Text"}
      ]
    }
  }
}

Example - Apex Action:

{
  "name": "Process Record",
  "type": "InvocableAction",
  "config": {
    "type": "InvocableAction",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "actionInfo": {
        "actionType": "APEX",
        "actionName": "ProcessRecordAction",
        "url": "/services/data/v66.0/actions/custom/apex/ProcessRecordAction",
        "label": "Process Record"
      },
      "inputPayload": "{\"recordId\": \"{$1}\"}",
      "referenceAttributes": [
        {"columnId": "col-uuid-1", "columnName": "Records", "columnType": "Object", "fieldName": "Id"}
      ]
    }
  }
}

8. Evaluation Column

Evaluate agent or prompt outputs using built-in or custom evaluations.

Type value: "Evaluation"

Required fields in config.config:

  • evaluationType (String, required) - One of 13 evaluation types
  • inputColumnReference (ReferenceAttribute, required) - Column to evaluate
  • referenceColumnReference (ReferenceAttribute, conditional) - For comparison evaluations
  • autoEvaluate (boolean, optional) - Auto-run evaluation
  • expressionFormula (String, optional) - For EXPRESSION_EVAL type
  • customEvaluation (object, optional) - For CUSTOM_LLM_EVALUATION

See Evaluation Types Reference for complete guidance.

Example - Response Match:

{
  "name": "Response Match",
  "type": "Evaluation",
  "config": {
    "type": "Evaluation",
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "evaluationType": "RESPONSE_MATCH",
      "inputColumnReference": {
        "columnId": "col-uuid-1",
        "columnName": "Agent Output",
        "columnType": "AgentTest"
      },
      "referenceColumnReference": {
        "columnId": "col-uuid-2",
        "columnName": "Expected Response",
        "columnType": "Text"
      },
      "autoEvaluate": true
    }
  }
}

Example - Quality Score (No Reference):

{
  "name": "Coherence Score",
  "type": "Evaluation",
  "config": {
    "type": "Evaluation",
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "evaluationType": "COHERENCE",
      "inputColumnReference": {
        "columnId": "col-uuid-1",
        "columnName": "Agent Output",
        "columnType": "AgentTest"
      },
      "autoEvaluate": true
    }
  }
}

9. DataModelObject Column

Query Data Cloud Data Model Objects (DMOs).

Type value: "DataModelObject"

Required fields in config.config:

  • dataModelObjectApiName (String, required) - DMO API name
  • dataspaceName (String, required) - Data Cloud dataspace
  • fields (List, required) - Fields to query with name and type
  • filters (List, optional) - Filter conditions
  • advancedMode (object, optional) - For DCSQL queries
    • Uses inputs.queryString for the DCSQL query
    • IMPORTANT: Placeholders use {ColumnName} or {ColumnName.FieldName} format (NOT {$1})

Example:

{
  "name": "Unified Individuals",
  "type": "DataModelObject",
  "config": {
    "type": "DataModelObject",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "WHOLE_COLUMN",
      "splitByType": "OBJECT_PER_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "dataModelObjectApiName": "UnifiedIndividual__dlm",
      "dataspaceName": "default",
      "fields": [
        {"name": "Id__c", "type": "string"},
        {"name": "FirstName__c", "type": "string"},
        {"name": "LastName__c", "type": "string"},
        {"name": "Email__c", "type": "string"}
      ]
    }
  }
}

Example - Advanced DCSQL:

{
  "name": "Custom DMO Query",
  "type": "DataModelObject",
  "config": {
    "type": "DataModelObject",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "WHOLE_COLUMN",
      "splitByType": "OBJECT_PER_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "dataModelObjectApiName": "UnifiedIndividual__dlm",
      "dataspaceName": "default",
      "advancedMode": {
        "type": "DCSQL",
        "inputs": {
          "queryString": "SELECT Id__c, FirstName__c, Email__c FROM UnifiedIndividual__dlm WHERE Email__c LIKE '%{EmailDomain}%'"
        },
        "referenceAttributes": [
          {"columnId": "col-uuid-1", "columnName": "EmailDomain", "columnType": "Text"}
        ]
      }
    }
  }
}

10. Reference Column

Extract specific fields from other columns using JSON path.

Type value: "Reference"

Required fields in config.config:

  • referenceColumnId (String, required) - Source column ID
  • referenceField (String, required) - JSON path to extract

Example - Extract Agent Topic:

{
  "name": "Agent Topic",
  "type": "Reference",
  "config": {
    "type": "Reference",
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "referenceColumnId": "agent-test-col-uuid",
      "referenceField": "response.topicName"
    }
  }
}

Example - Extract Object Field (e.g., Account Name from Object column):

{
  "name": "Account Name",
  "type": "Reference",
  "config": {
    "type": "Reference",
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "referenceColumnId": "accounts-col-uuid",
      "referenceField": "Name"
    }
  }
}

Example - Extract Nested Field:

{
  "name": "First Bot Message",
  "type": "Reference",
  "config": {
    "type": "Reference",
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "referenceColumnId": "agent-col-uuid",
      "referenceField": "response.botMessages[0].text"
    }
  }
}

11. Text Column

Static or editable text input. Also supports CSV import.

Type value: "Text"

CRITICAL: Text columns CANNOT use an empty config: {}. The type field is required inside config.

Optional fields in config.config:

  • documentId (String, optional) - For CSV import
  • documentColumnIndex (Integer, optional) - CSV column index
  • includeHeaders (Boolean, optional) - Include CSV headers

Example - Manual Entry (Minimum required config):

{
  "name": "Test Utterances",
  "type": "Text",
  "config": {
    "type": "Text",
    "autoUpdate": true,
    "config": {
      "autoUpdate": true
    }
  }
}

Example - CSV Import:

{
  "name": "Imported Data",
  "type": "Text",
  "config": {
    "type": "Text",
    "numberOfRows": 100,
    "queryResponseFormat": {
      "type": "WHOLE_COLUMN",
      "splitByType": "OBJECT_PER_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "documentId": "069xxxxxxxxxxxxxxx",
      "documentColumnIndex": 0,
      "includeHeaders": true
    }
  }
}

12. Action Column

Execute standard platform actions.

Type value: "Action"

Similar to InvocableAction but for standard Salesforce actions.

Required fields in config.config:

  • actionName (String, required) - Action API name
  • inputParams (List, optional) - Input parameters with references

InputParam Structure:

{
  "inputParamName": "parameterName",
  "referenceAttribute": {"columnId": "...", "columnName": "...", "columnType": "..."}
}

Example:

{
  "name": "Chatter Post",
  "type": "Action",
  "config": {
    "type": "Action",
    "numberOfRows": 50,
    "queryResponseFormat": {
      "type": "EACH_ROW"
    },
    "autoUpdate": true,
    "config": {
      "autoUpdate": true,
      "actionName": "chatterPost",
      "inputParams": [
        {
          "inputParamName": "text",
          "referenceAttribute": {"columnId": "col-uuid-1", "columnName": "Message", "columnType": "Text"}
        }
      ]
    }
  }
}