mirror of
https://github.com/forcedotcom/afv-library.git
synced 2026-07-30 03:09:50 +08:00
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.
1010 lines
26 KiB
Markdown
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"}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
```
|