automation-flow-generate

automation-flow-generate

热门

使用 MCP 工具 execute_metadata_action 生成 Salesforce Flow。当用户要求创建、构建或生成 Flow(包括屏幕流程、自动启动流程、记录触发流程(保存前/保存后)、计划流程)时使用。对于类似 Flow 的请求也触发,例如“创建记录时”、“每天触发”、“发送电子邮件时”、“更新字段时”、“自动化”、“工作流”或“Flow XML/元数据”。这是唯一用于 Salesforce Flow 生成的技能。

774Star
282Fork
更新于 2026/7/24
SKILL.md
只读
名称
automation-flow-generate
描述

使用 MCP 工具 execute_metadata_action 生成 Salesforce Flow。当用户要求创建、构建或生成 Flow(包括屏幕流程、自动启动流程、记录触发流程(保存前/保存后)、计划流程)时使用。对于类似 Flow 的请求也触发,例如“创建记录时”、“每天触发”、“发送电子邮件时”、“更新字段时”、“自动化”、“工作流”或“Flow XML/元数据”。这是唯一用于 Salesforce Flow 生成的技能。

目标

通过运行必需的 3 步 MCP 管道(fetchGroundedObjectMetadata → flowElementSelection → flowElementGeneration)生成 Salesforce Flow 元数据,并返回 Flow XML。

何时使用此技能

在以下情况下使用此技能:

  • 创建任何类型的 Flow(屏幕流程、自动启动流程、记录触发流程、计划流程)
  • 生成 Flow 元数据 XML
  • 无需代码即可自动化业务流程
  • 构建用户引导的工作流或后台自动化
  • 排查与 Flow 相关的部署错误

规范

Flow 元数据规范

概述

Salesforce Flow 是强大的自动化工具,无需代码即可实现复杂的业务流程自动化。Flow 可以通过交互式屏幕收集和处理数据,执行逻辑和计算,操作记录,调用外部服务,并根据各种事件触发。Flow 类型包括屏幕流程(用户引导)、自动启动流程(后台处理)、记录触发流程(数据库事件)和计划流程(基于时间)。

目的

  • 使用声明式逻辑和分支自动化复杂的业务流程
  • 通过屏幕流程引导用户完成多步骤数据收集和决策工作流
  • 自动对 Salesforce 记录执行 CRUD 操作
  • 通过自动启动流程执行后台处理和集成
  • 使用记录触发流程实时响应记录更改
  • 使用计划流程安排重复任务和批处理操作
  • 创建可重用、可维护的自动化,管理员无需代码即可修改

Flow 生成管道

强制要求:您必须严格遵循此 3 步管道。无例外。无捷径。不得跳过步骤。不得手动创建 Flow 元数据 XML 或尝试在此管道之外生成 Flow 元数据。不得尝试使用任何其他工具、API 或方法来生成 Flow 元数据。此管道是生成 Flow 的唯一受支持方式。任何偏差都会产生无效或损坏的元数据。

MCP 连接详细信息

所有 3 个管道步骤必须使用此 MCP 工具调用:

  • MCP 工具名称: execute_metadata_action
  • action 参数选择要运行的管道步骤:"fetchGroundedObjectMetadata""flowElementSelection""flowElementGeneration"

Flow 生成是一个严格的 3 步管道。所有步骤必须按顺序调用。每个步骤都是必需的。没有替代方法——这是生成 Flow 元数据的唯一方式:

步骤 1(必需):获取基础对象元数据(fetchGroundedObjectMetadata

获取与 Flow 生成请求相关的组织架构元数据。此步骤必须始终首先调用。

输入(全部必需):

  • userPrompt(字符串,必需):用户的自然语言请求
  • inflightMetadata(数组,必需):来自本地 sfdx 项目的自定义对象/字段。如果不需要,使用空数组 []

输出:

  • groundingMetadata(字符串):与请求相关的组织架构的基础对象元数据,以 JSON 字符串形式返回。您必须直接将其传递给步骤 2——它已经是字符串,无需再次序列化。

步骤 2(必需):Flow 元素选择(flowElementSelection

根据用户提示和基础元数据选择 Flow 元素(赋值、决策、记录操作等)及其连接。此步骤必须在步骤 1 之后调用。

输入(全部必需):

  • userPrompt(字符串,必需):用户的自然语言请求(必须与步骤 1 中的值相同
  • groundingMetadata(字符串,必需):组织架构元数据(必须是步骤 1 输出返回的确切字符串——直接传递,不要再次序列化)
  • operationId(字符串,必需):操作 ID(首次调用使用空字符串 ""

输出:

  • operationId(字符串):操作 ID。您必须将其传递给步骤 3。
  • userOutput(字符串):下一步的推理。您可以向用户显示此内容。

步骤 3(必需):Flow 元素生成(flowElementGeneration

逐个元素生成 Flow 元数据。此步骤必须在步骤 2 之后调用。必须循环重复调用,直到 isCompletetrue

输入(全部必需):

  • operationId(字符串,必需):来自步骤 2 输出的操作 ID
  • requestSource(字符串,必需):请求的来源。使用 "A4V" 以 XML 格式获取 Flow 元数据。

输出:

  • isComplete(布尔值):指示 Flow 生成是否完成。您必须检查此值。
  • result(字符串):Flow 元素生成的结果。仅当 isCompletetrue 时包含最终 Flow 元数据。

强制要求:循环直到完成。切勿暂停或询问用户确认继续。

  • Flow 可以有任意数量的元素(10、15 或更多)。每次调用生成一个元素,因此您可能需要多次迭代。这是预期且正常的。
  • 使用步骤 2 中的 operationIdrequestSource(对于 XML 输出使用 "A4V",对于 JSON 使用空字符串或其他值)调用 flowElementGeneration
  • 每次调用后检查 isComplete 输出和 result 字段。
  • 如果 isCompletefalse 且未返回错误,则必须使用步骤 2 中的相同 operationId 再次调用 flowElementGeneration不要询问用户是否要继续。不要暂停。不要在循环中总结进度。只需继续调用。
  • 不要停止,直到 isCompletetrue 可调用操作返回错误。没有最大迭代次数——无论需要多少次调用,都要继续。
  • isCompletetrue 时,从 result 字段提取 Flow 元数据。
  • 如果返回错误,停止循环并向用户显示错误。

严格约束(关键)——这些规则适用于生成管道返回的 XML:

  • 不要修改任何块内的内容、值或子节点。
  • 不要添加新节点、标签、属性或文本(不要添加缺失的标签、X/Y 坐标等)。
  • 不要删除任何现有节点。

inflightMetadata 格式

数据类型:数组(不是字符串)

严格命名约定 - 必须完全遵循:

属性 正确名称 不要使用
对象 API 名称 apiName objectApiNamenameobjectName
字段 API 名称 apiName fieldApiNamenamefieldName
字段类型 type fieldTypedataType
查找目标 referenceTo relatedTolookupToreference

当需要自定义对象时(示例格式显示多种字段数据类型):

[
  {
    "type": "CustomObject",
    "apiName": "CustomerRequest__c",
    "label": "Customer Request",
    "fields": [
      {
        "apiName": "Status__c",
        "type": "Picklist",
        "label": "Status",
        "values": ["New", "In Progress", "Completed"]
      },
      {
        "apiName": "Priority__c",
        "type": "Number",
        "label": "Priority"
      },
      {
        "apiName": "AssignedTo__c",
        "type": "Lookup",
        "label": "Assigned To",
        "referenceTo": "User"
      },
      {
        "apiName": "Description__c",
        "type": "Textarea",
        "label": "Description"
      },
      {
        "apiName": "Email__c",
        "type": "Email",
        "label": "Contact Email"
      },
      {
        "apiName": "DueDate__c",
        "type": "Date",
        "label": "Due Date"
      },
      {
        "apiName": "IsUrgent__c",
        "type": "Boolean",
        "label": "Is Urgent"
      },
      {
        "apiName": "Amount__c",
        "type": "Currency",
        "label": "Amount"
      }
    ],
    "relationships": []
  }
]

支持的字段类型:文本、文本区域、数字、选择列表、查找、电子邮件、电话、URL、日期、日期时间、布尔值、复选框、货币、百分比

当不需要自定义对象时:

[]

inflightMetadata 的强制决策逻辑(数据类型:数组)

  1. 必需 - 首先:扫描本地 sfdx 项目中与用户 Flow 请求相关的自定义对象和字段。
  2. 如果找到相关的自定义对象:您必须提取它们并作为结构化对象数组传递(见上面的格式)
  3. 如果未找到相关的自定义对象:您必须传递空数组 [](不是字符串 "[]"
  4. 切勿:在 inflightMetadata 中传递文本描述、说明或字符串表示
  5. 强制:数据类型必须是数组,而不是字符串

当自定义对象相关时对 Vibes 的说明:

  • 提取对象元数据并映射到 JSON 属性:
    • apiName:对象的 API 名称(自定义对象带有 __c 后缀)
    • label:对象的显示标签
    • type:设置为 "CustomObject"
    • fields:字段对象数组,每个包含:
      • apiName:字段的 API 名称(自定义字段带有 __c 后缀)
      • type:字段类型(文本、数字、选择列表、查找等)
      • label:字段的显示标签
      • values:(仅选择列表)选择列表值数组
      • referenceTo:(仅查找)目标对象 API 名称
  • 仅包含与正在生成的 Flow 相关的对象和字段

强制增强规则

  • userPrompt:必需。
    • 如果用户请求单个 Flow:按原样使用用户的提示。
    • 如果用户请求多个 Flow:您必须拆分请求并为每个单独的 Flow 编写单独的、专注的 userPrompt。每个 userPrompt 必须仅描述一个 Flow。不要将整个多 Flow 请求作为单个 userPrompt 传递。请参阅下面的多个 Flow 部分以获取示例。
  • inflightMetadata:必需。始终使用数组数据类型。
    • 当不需要自定义对象时,必须使用 [](空数组)
    • 当自定义对象相关时,必须使用结构化对象数组
    • 切勿使用字符串 "[]" - 这是不正确的
    • 切勿使用文本描述 - 仅使用结构化对象元数据

强制:多个 Flow = 多个单独的管道

首先:在调用任何管道步骤之前,检查用户的请求是否包含多个 Flow。如果是,您必须将其拆分为单独的单个 Flow 提示。每个 Flow 获得自己的 3 步管道,其 userPrompt 仅描述该一个 Flow。

切勿将多 Flow 请求作为单个 userPrompt 字段传递。切勿将多个 Flow 描述合并到一个 userPrompt 中。

当用户请求多个 Flow(例如,“为我的应用创建 Flow:1) ... 2) ... 3) ...”)时,您必须:

  1. 拆分请求为单独的各个 Flow 描述。
  2. 为每个 Flow 运行单独的 3 步管道,使用仅描述该一个 Flow 的 userPrompt
  3. 顺序执行所有管道——一个接一个,切勿并行。不要在第一个 Flow 后停止。不要等待用户要求您继续。不要总结并停止。继续直到每个请求的 Flow 都已完全生成。

错误 - 多个 Flow 合并到一个 userPrompt 中:

{
  "userPrompt": "为应用创建 Flow:1) 在 ResourceAllocation__c 上创建记录触发 Flow 以更新 Resource__c。2) 创建屏幕 Flow 以分配资源。3) 在 Supply__c 上创建记录触发 Flow 以自动标记 Low_Stock__c。",
  ...
}

正确 - 为每个 Flow 单独调用:

Flow 1 - 步骤 1(fetchGroundedObjectMetadata):

{
  "userPrompt": "创建一个名为 Tenant_Onboarding 的屏幕 Flow,捕获租户详细信息,选择 Status__c = 'Vacant' 的 Unit__c,创建 Lease__c...",
  "inflightMetadata": [...]
}

然后使用步骤 1 中的 groundingMetadata 调用步骤 2(flowElementSelection),然后使用步骤 2 中的 operationId 调用步骤 3(flowElementGeneration)。

Flow 2 - 步骤 1(fetchGroundedObjectMetadata):

{
  "userPrompt": "创建一个名为 Generate_Onboarding_Checklist 的自动启动 Flow,给定 Lease__c Id 输入,查询 OnboardingTask__c...",
  "inflightMetadata": [...]
}

然后为此 Flow 调用步骤 2 和步骤 3。

Flow 3 - 步骤 1(fetchGroundedObjectMetadata):

{
  "userPrompt": "创建一个名为 Sync_Unit_On_Lease_Changes 的记录触发 Flow,在插入和更新 Lease__c 时...",
  "inflightMetadata": [...]
}

然后为此 Flow 调用步骤 2 和步骤 3。

强制规则:

  • 如果有 N 个 Flow 要生成,则必须有 N 个单独的 3 步管道,并且必须执行所有 N 个管道。无例外。不要仅生成一个 Flow 后停止。
  • 您必须完全完成当前 Flow 的 3 步管道(包括循环步骤 3 直到 isCompletetrue 或返回错误)才能开始下一个 Flow 的管道。 不要跨 Flow 交错或并行管道。一切都是顺序的——切勿并行。
  • 完成 Flow 的管道后,立即开始下一个 Flow 的管道。不要在 Flow 之间暂停、总结或等待用户确认。
  • 对于每个 Flow,您必须扫描本地 sfdx 项目以使用特定于该 Flow 提示的自定义对象/字段填充 inflightMetadata
  • 每个 Flow 管道必须有自己的 inflightMetadata,仅包含与该特定 Flow 相关的对象/字段。

示例工具调用

示例 1:仅标准对象(无自定义对象)

步骤 1 - fetchGroundedObjectMetadata:

{
  "userPrompt": "创建一个名为 Daily_Good_Morning 的计划触发 Flow,每天上午 6:00 运行并向运行用户发送问候电子邮件。",
  "inflightMetadata": []
}

步骤 2 - flowElementSelection:

{
  "userPrompt": "创建一个名为 Daily_Good_Morning 的计划触发 Flow,每天上午 6:00 运行并向运行用户发送问候电子邮件。",
  "groundingMetadata": "<来自步骤 1 的 groundingMetadata 字符串 — 直接传递,不要再次序列化>",
  "operationId": ""
}

步骤 3 - flowElementGeneration(循环调用):

{
  "operationId": "<来自步骤 2 的 operationId>",
  "requestSource": "A4V"
}

使用相同的 operationId 重复调用,直到 isCompletetrue 或返回错误。Flow 可以有任意数量的元素,因此预计会有多次迭代。当 isCompletetrue 时,从 result 字段提取 Flow 元数据。使用 "requestSource": "A4V" 以 XML 格式获取 Flow 元数据。

示例 2:使用本地 sfdx 项目中的自定义对象

步骤 1 - fetchGroundedObjectMetadata:

{
  "userPrompt": "创建一个 Flow,在分配客户请求时更新其状态",
  "inflightMetadata": [
    {
      "type": "CustomObject",
      "apiName": "CustomerRequest__c",
      "label": "Customer Request",
      "fields": [
        {
          "apiName": "Status__c",
          "type": "Picklist",
          "label": "Status",
          "values": ["New", "In Progress", "Completed"]
        },
        {
          "apiName": "AssignedTo__c",
          "type": "Lookup",
          "label": "Assigned To",
          "referenceTo": "User"
        }
      ],
      "relationships": []
    }
  ]
}

步骤 2 - flowElementSelection:

{
  "userPrompt": "创建一个 Flow,在分配客户请求时更新其状态",
  "groundingMetadata": "<来自步骤 1 的 groundingMetadata 字符串 — 直接传递,不要再次序列化>",
  "operationId": ""
}

步骤 3 - flowElementGeneration(循环调用):

{
  "operationId": "<来自步骤 2 的 operationId>",
  "requestSource": "A4V"
}

使用相同的 operationId 重复调用,直到 isCompletetrue 或返回错误。Flow 可以有任意数量的元素,因此预计会有多次迭代。当 isCompletetrue 时,从 result 字段提取 Flow 元数据。使用 "requestSource": "A4V" 以 XML 格式获取 Flow 元数据。

强制最佳实践

  • 始终遵循 3 步管道:fetchGroundedObjectMetadata → flowElementSelection → flowElementGeneration。这是生成 Flow 元数据的唯一方式。没有替代方案。
  • 不要在此管道之外手动创建 Flow 元数据 XML、JSON 或任何其他格式。
  • 当用户明确要求修复已生成 Flow XML 中的验证或部署错误时,您被允许对 XML 进行有针对性的手动编辑以解决这些错误。这是“无手动元数据”规则的唯一例外。
  • 不要尝试通过跳过步骤或合并步骤来“优化”。每个步骤都是原子的且必需的。
  • 切勿跳过管道中的任何步骤。所有 3 个步骤都是必需的。
  • 切勿在不调用所有 3 个步骤的情况下尝试生成 Flow 元数据。
  • 切勿在任何情况下偏离此管道——即使您认为自己知道 Flow 结构。
  • 对于单个 Flow 请求:您必须使用用户提示作为 userPrompt
  • 对于多个 Flow 请求:您必须为每个 Flow 运行单独的 3 步管道顺序执行(一个接一个,切勿并行),并且必须执行所有管道——不要在第一个 Flow 后停止。
  • 您必须将 Flow 要求放在 userPrompt 中,而不是 inflightMetadata 中。
  • inflightMetadata 仅用于来自本地项目的自定义对象/字段元数据(见上文)。无例外。
  • 步骤 3 必须使用步骤 2 中的相同 operationId 循环调用,直到 isCompletetrue 或返回错误。Flow 可以有任意数量的元素——不要提前停止,不要暂停询问用户是否要继续,无论需要多少次迭代。
  • 您必须仅在 isCompletetrue 时从 result 字段提取 Flow 元数据。

关键验证清单(必须在每次 Flow 生成之前和之后验证)

未能完全遵循此清单将导致 Flow 元数据损坏或缺失。

  • [ ] 管道:所有 3 个步骤均按严格顺序调用(fetchGroundedObjectMetadata → flowElementSelection → flowElementGeneration)。没有跳过任何步骤。
  • [ ] 无手动元数据:Flow 元数据不是在此管道之外以任何方式手动创建、修改或生成的
  • [ ] 无偏差:没有使用替代工具、API 或方法代替或与此管道一起使用
  • [ ] userPrompt 包含单个 Flow 提示。如果用户请求多个 Flow,则请求已拆分,每个管道收到单独的 userPrompt,仅描述一个 Flow
  • [ ] userPrompt 一致地传递给步骤 1 和步骤 2(相同的值)
  • [ ] inflightMetadata 是数组数据类型(不是字符串)
  • [ ] inflightMetadata 在不需要自定义对象时为 []
  • [ ] inflightMetadata 包含通过扫描本地 sfdx 项目提取的相关自定义对象/字段的结构化对象
  • [ ] inflightMetadata 不包含 "[]"(字符串) - 必须是 [](数组)
  • [ ] inflightMetadata 不包含文本描述或说明
  • [ ] 步骤 1 输出的 groundingMetadata 直接传递给步骤 2 输入(它已经是字符串——不要再次序列化)
  • [ ] 步骤 2 输出的 operationId 传递给步骤 3 输入
  • [ ] requestSource 应始终设置为 "A4V"
  • [ ] 步骤 3 使用步骤 2 中的相同 operationId 循环调用,直到 isCompletetrue 或返回错误——无论多少次迭代,都不要暂停、不要询问用户继续
  • [ ] 多 Flow:每个 Flow 的完整管道在开始下一个 Flow 的管道之前完成(无交错)
  • [ ] result 字段仅在 isCompletetrue 时用于提取 XML Flow 元数据
  • [ ] 不向 XML 添加内容:没有添加原始管道输出中不存在的元素、属性或属性。没有插入任何内容(没有 <label><description> 或任何其他节点)。最终 XML 必须与管道返回的完全相同。
  • [ ] 错误修复例外:如果用户明确要求修复验证/部署错误,则允许对 XML 进行有针对性的手动编辑,并且“不向 XML 添加内容”/“无手动元数据”约束不适用于这些编辑。