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

1010 lines
26 KiB
Markdown

# Column Configurations Reference
Complete JSON configurations for all 12 Agentforce Grid column types.
## CRITICAL: Config Structure
**All column configs follow this nested structure:**
```json
{
"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.**
```json
// 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.**
```json
{
"columnId": "1W5SB000005zk6H0AQ",
"columnName": "Accounts",
"columnType": "Object",
"fieldName": "Name"
}
```
**For Reference columns, fieldName can be empty:**
```json
{
"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:**
```json
{
"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):**
```json
{
"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:**
```json
{
"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:**
```json
// 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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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):
```json
{"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"referenceName": "InputVariableName",
"definition": "Description of the input",
"referenceAttribute": {"columnId": "...", "columnName": "...", "columnType": "..."}
}
```
**Example:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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](evaluation-types.md) for complete guidance.
**Example - Response Match:**
```json
{
"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):**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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):**
```json
{
"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:**
```json
{
"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):**
```json
{
"name": "Test Utterances",
"type": "Text",
"config": {
"type": "Text",
"autoUpdate": true,
"config": {
"autoUpdate": true
}
}
}
```
**Example - CSV Import:**
```json
{
"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:**
```json
{
"inputParamName": "parameterName",
"referenceAttribute": {"columnId": "...", "columnName": "...", "columnType": "..."}
}
```
**Example:**
```json
{
"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"}
}
]
}
}
}
```