关于 service-digital-engagement-deployment-configure
用于配置 Salesforce Messaging for In-App and Web 的 Embedded Service Deployment,涵盖通过 Connect API 创建及通过 Metadata API 更新。适合需要配置部署元数据、表单、品牌和渠道设置的 Salesforce 管理流程。
主要功能
- 01创建 API、Mobile 和 Web 部署
- 02更新部署元数据与设置
- 03生成 EmbeddedServiceConfig XML
- 04配置预聊天表单和品牌选项
适用场景
- 01创建新的消息部署
- 02调整现有部署的渠道与界面设置
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill service-digital-engagement-deployment-configure安装后在 Claude Code 中输入/service-digital-engagement-deployment-configure确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/esd_api_mobile_template.xmlesd_web_update_template.xmlexamples/esd_api.xmlesd_mobile.xmlesd_web_full.xmlesd_web_prechat_fields.xmlreferences/branding_and_tooling.mdcode_snippet.mdconnect_api_creation.mddeployment_settings.mdonboarding_contract.mdprechat_forms.mdscripts/check-api-version.sh详细介绍
配置嵌入式消息部署
配置 Salesforce Messaging for In-App and Web(MIAW)的 EmbeddedServiceConfig 元数据。支持两种不同的工作流:通过 Connect API 创建新部署,以及通过 Metadata API 更新现有部署。
范围
- 范围内:通过 Connect API 创建新的 Embedded Service Deployments(API、Mobile、Web 类型);通过 Metadata API 使用表单、品牌、渠道设置和功能更新现有部署;为更新生成
EmbeddedServiceConfigXML - 范围外:创建消息渠道本身(请使用
service-digital-engagement-channel-configure)、生成网站代码片段(仅作为后续步骤提供,参见references/code_snippet.md)、创建 Experience Sites(Web 类型的 Connect API 前置条件)
入口点和传输方式
- 委托调用(
context.calledFrom == "service-onboarding"):使用已批准的values,不提问;如果缺少任何必需键,则返回failed并指出缺少的键。独立调用(无context):执行澄清问题。 - 传输方式 A(首选):在
/services/data/vXX.0/headless/metadata上使用 headless-360 MCPdispatch/dispatch_readonly。传输方式 B:仅当探测显示传输方式 A 不可用时,才使用下方的sf命令。例外:创建 Web 始终使用sfCLI(步骤 17a)。
详情:references/onboarding_contract.md(§1 入口点、§2 传输方式、§3 预扫描、§5 结果)。
澄清问题
生成之前,如果尚未明确,请询问用户(仅限独立调用):
- 创建还是更新? 您要创建新的部署,还是更新现有部署?
- 部署类型? API(无头)、Mobile(原生应用)还是 Web(浏览器小组件)?
- 渠道名称? 要关联的消息渠道的
channelPlatformKey是什么? - 对于创建:部署应使用什么名称?
- 对于更新:要配置哪些功能?(预聊天表单、营业时间、条款和条件、UI 切换项)
- 对于预聊天(如有要求):
references/prechat_forms.md§Inputs to Gather 中的问题 - 对于更新(Web):Experience Site 的名称是什么?是否需要品牌覆盖设置?
必需输入
继续之前,收集或推断以下信息:
- 操作:
create或update - 部署类型:
API、Mobile或Web - 部署名称:用作
masterLabel。根据该名称派生 API 名称(fullName/DeveloperName、Connectname):将每一段非字母数字字符替换为_,然后去除首尾的_(Acme Support Chat→Acme_Support_Chat)。结果必须匹配^[a-zA-Z][a-zA-Z0-9_]*$。所有查找和写入操作都使用 API 名称 - 渠道名称:关联的消息渠道的
channelPlatformKey
对于更新操作,还需提供:
- 站点名称(仅限 Web):Experience Site 名称(格式为
ESW_<name>_<timestamp>) - 品牌名称(可选):对现有
BrandingSet的引用 - 预聊天表单字段(可选):参见
references/prechat_forms.md§Inputs to Gather - 营业时间(可选):现有
BusinessHours记录的名称
除非另有指定,否则使用以下默认值:
isEnabled:truedeploymentFeature:EmbeddedMessaging
工作流
所有步骤都按顺序执行。不得跳过或重新排序。根据操作类型选择分支。
阶段 1 — 收集上下文
-
验证组织 API 版本 — 运行
scripts/check-api-version.sh 67.0 <org-alias>,并报告该命令返回的所有错误。如果脚本运行失败,请在元数据输出文件夹中生成一个sfdx-project.json,其中包含"sourceApiVersion": "67.0"。 -
确定操作 — 独立模式:询问用户要创建新的部署还是更新现有部署。委派模式:从
values.operation获取,然后由预扫描(步骤 4a)确认。 -
收集输入 — 独立模式:按照澄清问题收集。委派模式:从
values获取(deploymentName、deploymentType、channelName为必填项)。
3a. 探测传输方式 — 对 EmbeddedServiceConfig 执行只读 GET(参见契约 §2)。
- 读取部署设置参考文档 — 加载
references/deployment_settings.md,了解所有可用的配置选项。
4a. 预扫描 — 按派生的 API 名称查找部署(契约 §3):没有匹配项 → create(阶段 2A);有匹配项 → 不执行写入,标记为 already-configured,跳至阶段 3;配置不同 → update(阶段 2B),说明每项变更(独立模式:先询问);关联到其他通道 → 独立模式:询问后再更改关联,委派模式:failed。独立模式下,如果部署已存在,则只提供以下三种选择 — 不作更改 / 覆盖 / 添加到现有部署。
阶段 2A — 创建新部署
操作为 create 时使用此路径。
-
根据类型确定 API 方法 — API/Mobile:通过 Metadata API 部署。Web:使用 Connect API(创建 Experience Site)。所有类型都要求通道已存在。
-
对于 API/Mobile 类型 — 读取模板
assets/esd_api_mobile_template.xml,并生成EmbeddedServiceConfigXML,其中包含:- 将
deploymentType设为API或Mobile - 将
deploymentFeature设为EmbeddedMessaging - 应用所有默认值
- 将
-
对于 Web 类型 — 告知用户,由于 Network 和 CustomSite 之间存在循环依赖,首次创建 Web 部署需要使用 Connect API。读取
references/connect_api_creation.md,获取 Connect API 负载和说明。 -
生成输出 — 生成
.EmbeddedServiceConfig-meta.xml文件(适用于 API/Mobile)或 Connect API 操作说明(适用于 Web)。 -
展示输出和后续步骤 — 按照步骤 17 执行。
阶段 2B — 更新现有部署(Metadata API)
当操作为 update 时,使用此路径。
-
检索现有部署 — 进行更改前,先从组织中获取当前的
EmbeddedServiceConfig。传输方式 A:使用步骤 3a/4a 中GET返回的xmlRep。传输方式 B:sf project retrieve start --metadata EmbeddedServiceConfig:<DEPLOYMENT_NAME> --target-org <org-alias>将其作为起始结构 — 更新始终需要完整文档(请参阅规则)。如果无法检索,则将
assets/esd_web_update_template.xml作为备用参考。 -
应用消息传递渠道设置 — 在
<embeddedServiceMessagingChannel>中设置messagingChannel(该渠道的channelPlatformKey)和 UI 开关(shouldShow*、shouldStartNewLineOnEnter、邀请标志)。包括所有布尔值,即使值为false也不例外;完整列表见references/deployment_settings.md。保留检索到的每个shouldShow*/shouldStartNewLineOnEnter值(如果没有检索到,则默认为false);只有用户明确要求启用某项功能时才将其设为true— 切勿根据示例推断。 -
应用预聊天表单 — 预聊天默认关闭:除非用户要求在对话开始前收集数据,否则省略
<embeddedServiceForms>。如果用户有此要求,请先阅读references/prechat_forms.md并遵循其中的说明(字段属性、隐藏字段、ChoiceList、displayNameFormat、停用与移除)。- 生成前,针对检索到的渠道,运行其中 §Validating and Remediating Prerequisites 下的检查。渠道修复必须通过
service-digital-engagement-channel-configure进行;切勿在此处手动编辑渠道。 - 要合并到基础部署中的差异:
examples/esd_web_prechat_fields.xml。
- 生成前,针对检索到的渠道,运行其中 §Validating and Remediating Prerequisites 下的检查。渠道修复必须通过
-
应用品牌自定义(仅限 Web)— 通过 Connect API 创建部署时,会自动创建带有默认值的 BrandingSet。如果用户希望覆盖特定品牌属性(颜色、字体、尺寸),请阅读
references/branding_and_tooling.md,了解通过 Tooling API 更新各项属性的步骤。 -
应用邀请(仅限 Web)— 将
isInvitationEnabled设为true,添加<embdMsgChannelInvitationConditions>(字段和运算符见references/deployment_settings.md),并在条件变更时确保formula(例如1 AND 2)与条件的sequence编号保持同步。 -
应用其他设置:
isTermsAndConditionsEnabled/isTermsAndConditionsRequired— 预聊天中的条款与条件site— Web:保留检索到的值,不作更改(请参阅规则);API/Mobile:省略
-
生成文件 — 在用户指定的路径下生成
.EmbeddedServiceConfig-meta.xml文件;如果用户未指定,则默认生成到项目元数据源路径下的EmbeddedServiceConfig/。 -
展示输出和后续步骤 — 展示生成的文件,并总结已配置的内容。建议后续步骤:
- 发布(Web)— 仅在用户批准后进行,遵循步骤 17c
- 生成代码片段以供集成 — 请参阅
references/code_snippet.md
阶段 2C — 应用到组织
阶段 2A 和 2B 均会执行,除非预扫描返回 already-configured。独立执行:写入前确认。委托执行:计划审批即为确认;仍须在每次写入时告知用户。
17a. 写入部署 —
- Web 创建:通过 sf api request rest 使用 Connect API(参见 references/connect_api_creation.md)——始终使用此方式,而非 dispatch(MCP dispatch 在创建站点期间会因 INTERNAL_ERROR 失败)。
- API/Mobile 创建:传输方式 A:POST EmbeddedServiceConfig(请求体包含 type、fullName、xmlRep);传输方式 B:sf project deploy start。
- 更新:传输方式 A:对完整文档执行 PUT;传输方式 B:sf project deploy start。
检查 results[].success,不能只看 HTTP 状态。失败时停止并报告出错步骤——不得静默重试。
17b. 重新读取并比对 — 再次 GET 该组件,确认每个预期字段均已写入,且没有内联区块(embeddedServiceMessagingChannel、表单)被删除。
17c. 发布(仅限 Web)——绝不自动发布。 发布会让更改对客户生效;部署操作只会保存草稿。完成 17b 后停止:总结更改内容,提供纯文本 Setup 链接 <instanceUrl>/lightning/setup/EmbeddedServiceDeployments/<EmbeddedServiceConfigId>/view,供用户查看草稿,并询问是否现在发布。只有用户在本轮明确回答是时才发布(原始请求中的“发布”不算)。然后在完整限定的发布路径上执行 dispatch POST;如果返回路径/路由错误,或使用传输方式 B,则运行 references/connect_api_creation.md 中的 sf 发布命令。委托执行:不要发布;返回 published: false。注意:通过 Connect API 创建 Web 部署时会自动发布(isPublishSuccess: true);创建前须在计划中说明。
阶段 3 — 验证
-
根据清单验证 — 确认以下验证清单中的所有项目均通过。
-
报告 — 委托执行:返回契约 §5 规定的结果。独立执行:以通俗语言报告相同结果。
规则 / 约束
| 约束 | 原因 |
|---|---|
deploymentType 必须为 API、Mobile 或 Web | 平台会拒绝其他值 |
Web 更新必须包含 site,并将其设置为检索到的原值,不得更改 | site(ESW_<name>_<timestamp>)在创建时自动生成;缺失或更改该值会被平台拒绝 |
embeddedServiceMessagingChannelName 必须引用现有渠道 | 渠道不存在时,部署会失败 |
文件扩展名为 .EmbeddedServiceConfig-meta.xml | Metadata API 使用此特定扩展名 |
不要硬编码文件路径——应遵循 sfdx-project.json 中的包目录 | 客户组织会自定义源路径 |
| 不要在生成的文件或制品中嵌入部署/推送命令 | 制品应保持可移植;会话期间的写入须在阶段 2C 通过选定的传输方式进行 |
更新时使用检索到的完整文档,绝不要执行最小化 PUT | 更新可能会静默清除省略的内联区块 |
注意事项
| 问题 | 解决方法 |
|---|---|
| 品牌覆盖设置未应用 | 创建部署后,使用 Tooling API 更新各项 BrandingSet 属性 |
预聊天表单、字段、ChoiceList 或 displayNameFormat 问题 | 参见 references/prechat_forms.md 中的注意事项表 |
| 更改未显示在小组件中 | 发布前,部署只是草稿(步骤 17c) |
sf api request rest 失败(“No 'mode' found”、“Nonexistent flag: --url”) | 参见 references/connect_api_creation.md §更新后的发布 |
| 部署因“required field missing”或“upsert failed null”失败 | 所有属性均为必填项:embeddedServiceMessagingChannel 中的布尔字段(即使默认值为 false 也要全部包含),以及所有预聊天表单字段属性 |
验证清单
通用检查
-
deploymentType是否为API、Mobile或Web之一? -
masterLabel是否已填写且唯一? -
messagingChannel是否引用了现有渠道? -
deploymentFeature是否设置为EmbeddedMessaging? -
isEnabled是否设置为true?
Web 类型检查
-
site是否已填写 Experience Site 名称? - 如果已配置品牌,
embeddedServiceBrandingName是否引用了现有的 BrandingSet? - 预聊天(如已配置):
references/prechat_forms.md中的验证清单是否每项都通过? - 如果
isInvitationEnabled为true,formula是否已填写,且与<embdMsgChannelInvitationConditions>中的所有sequence编号一致?
API/Mobile 类型检查
-
siteUrl是否为空(无需站点)? -
deploymentType是否正确设置为API或Mobile?
部署后检查
- Web:是否在发布前停止、提供审核链接,并且仅在用户明确同意后发布?是否提醒用户激活任何已部署的消息组件(Tooling API)?
输出要求
交付内容:
- API/Mobile 创建及任何更新:
<source-path>/EmbeddedServiceConfig/<DeploymentName>.EmbeddedServiceConfig-meta.xml - Web 创建:Connect API 载荷和说明(无 XML 文件)
文件结构遵循 assets/ 中的模板。
跨技能集成
| 需求 | 委派给 |
|---|---|
| 创建消息渠道 | service-digital-engagement-channel-configure 技能 |
| 渠道自定义参数、流程变量映射或 Queue → Omni-Flow 路由 | service-digital-engagement-channel-configure 技能(传递检索到的渠道;参见步骤 12) |
| 创建 Omni-Channel 路由流程 | automation-flow-generate 技能 |
| 为 Agent 创建权限集 | platform-permission-set-generate 技能 |
参考文件索引
| 文件 | 阅读时机 |
|---|---|
references/onboarding_contract.md | 预扫描(§3,两种模式);委派模式(context.calledFrom == "service-onboarding")、组织写入(传输)、模块注册 |
assets/esd_api_mobile_template.xml、assets/esd_web_update_template.xml | 分别在生成 API/Mobile 部署和 Web 更新前 |
references/deployment_settings.md | 配置超出默认值的部署选项时;较少见的注意事项(嵌入式流程、reCAPTCHA、营业时间) |
references/prechat_forms.md | 每当用户要求预聊天时——输入、字段规则、ChoiceList、displayNameFormat、停用与移除、预聊天注意事项和清单 |
references/connect_api_creation.md | 创建 Web 类型部署时(需要 Connect API);发布命令和 ID 查询 |
references/branding_and_tooling.md | 用户询问品牌配置时 |
references/code_snippet.md | 用户需要用于其网站的 JavaScript 嵌入代码片段时 |
scripts/check-api-version.sh | 阶段 1——验证组织 API 版本是否达到传入的最低版本(67.0) |
examples/esd_api.xml、esd_mobile.xml、esd_web_full.xml、esd_web_prechat_fields.xml | 按类型验证输出;预聊天文件是一个表单增量,需合并到 esd_web_full.xml 中 |