Service Digital Engagement Messaging Site Integrate

作者 forcedotcome5164d94d751无许可证1K 个星标收录于 2026年10月8日更新于 2026年10月8日仓库昨天更新

Integrates a Messaging for In-App and Web (MIAW) Embedded Messaging chat widget into an Experience Cloud site by patching the site's LWR or Aura page bundle, deploying, publishing, and verifying guest access. Use when the user wants to embed messaging on an Experience site, add a chat widget to a community, place the Embedded Messaging component on an LWR or Aura page, wire an embedded service deployment to a site, references the retrieved bundle artifacts (`content.json`, `homeGuestLayout.json`, or a `*.site-meta.xml` file), or automates the retrieve/patch-JSON/deploy/publish flow instead of clicking through Experience Builder. DO NOT TRIGGER when creating the messaging channel (use service-digital-engagement-channel-configure), when creating or updating the EmbeddedServiceConfig deployment (use service-digital-engagement-deployment-configure), or when generating a standalone JavaScript snippet for a non-Experience website.

包含脚本DevOps & Cloud
AI 生成的概览

通过修改 Experience Cloud 站点包来嵌入 MIAW 聊天组件,并完成部署、发布与验证。

功能
检索 Experience Cloud 站点包,判断其为 LWR 还是 Aura 类型,并修改主页或主题布局 JSON,以放置 experience_messaging:embeddedMessaging 组件。随后将站点包放入 force-app,执行异步部署并轮询状态,解析 Network.Name,发布站点并对访客 URL 做冒烟测试。失败时输出 Experience Builder 深链接和手动操作说明。
适用场景
适用于在 Experience Cloud 站点上嵌入已有的 MIAW Embedded Messaging 部署、为社区添加聊天组件,或用自动化方式替代 Experience Builder 完成检索、修改 JSON、部署和发布流程。不适用于创建消息渠道、EmbeddedServiceConfig 部署、站点本身,或生成独立 JavaScript 代码片段。
运行要求
需要 Salesforce CLI(sf)、curl、jq 和 python3;需要目标组织别名,且该组织已有 Experience Cloud 站点和已发布的 EmbeddedServiceConfig;还需站点名称、部署名称、scrtUrl、siteEndpoint 和 URL 路径前缀。随附用于包类型检测及 LWR/Aura 修改的可执行 shell 脚本。

Embed Messaging Widget on an Experience Cloud Site

Wires an existing Embedded Messaging (MIAW) deployment onto an Experience Cloud site by retrieving the site's bundle (LWR DigitalExperienceBundle or Aura ExperienceBundle), patching the home page JSON to place the experience_messaging:embeddedMessaging component, staging the bundle into the local project, deploying it, publishing the site, and verifying guest access.

The operation is idempotent: if the component is already present it is updated in place (its id is preserved), so re-running with different ESD coordinates cleanly updates.

Scope

  • In scope: Detecting LWR vs Aura bundle type; scaffolding missing LWR template routes required by the site template (e.g. too-many-requests); patching all sfdc_cms__themeLayout/*/content.json files to insert or update the Embedded Messaging component in the footer region (site-wide placement); staging the bundle into force-app; async deploy with polling; resolving the Network.Name and publishing the site; guest-URL smoke test; manual Experience Builder fallback with a deep link.
  • Out of scope: Creating the EmbeddedServiceConfig (Embedded Service Deployment) itself — use service-digital-engagement-deployment-configure; creating the MessagingChannel — use service-digital-engagement-channel-configure; creating the Experience Cloud site itself — use experience-lwr-site-generate; generating a standalone JS snippet for a non-Experience website.

Clarifying Questions

Before executing, ask the user if not already clear:

  • Site name? The DeveloperName of the Experience Cloud site (the metadata folder name under digitalExperiences/site/<siteName>/ or experiences/<siteName>/).
  • Deployment coordinates? The deploymentName (Embedded Service Deployment DeveloperName), the scrtUrl, and the siteEndpoint (Experience site base URL). All three come from the published EmbeddedServiceConfig — obtain from service-digital-engagement-deployment-configure output if not provided.
  • Target org alias? For the sf commands.
  • URL path prefix? The site's UrlPathPrefix (needed to resolve Network.Name for publish and to hit the guest URL for verification).

Required Inputs

Gather or infer before proceeding:

  • Site name — DeveloperName of the site
  • Deployment name — DeveloperName of the EmbeddedServiceConfig
  • scrtUrl — SCRT2 endpoint URL from the deployment
  • siteEndpoint — Base URL of the Experience site
  • Target org alias
  • URL path prefix — Site's public URL path segment (e.g. esw-site)

Defaults applied to the component's attributes when writing:

  • isExpSiteAuthMode: false
  • hideChatButtonOnLoad: "Default"
  • clientVersion: "WebV1"

Workflow

Steps are sequential. If any automated step fails, proceed to the manual fallback (Phase 6) and do not claim the widget is "live" until either the guest-URL smoke test returns 200 or the user confirms manual publish.

Phase 1 — Detect Bundle Type

  1. Retrieve both candidate bundles into <retrieve-dir>. The script only performs a deterministic path check, so the retrieve calls must run first:

    bash
    sf project retrieve start --metadata "DigitalExperienceBundle:site/<siteName>" \  --target-org <org-alias> --target-metadata-dir <retrieve-dir>sf project retrieve start --metadata "ExperienceBundle:<siteName>" \  --target-org <org-alias> --target-metadata-dir <retrieve-dir>

    Either call may return "no metadata found" — that is expected; the missing bundle simply means the site is the other type.

  2. Run scripts/detect_bundle_type.sh <retrieve-dir> <siteName>. It emits exactly one token to stdout:

    • LWR → the LWR marker file exists (digitalExperiences/site/<siteName>/sfdc_cms__view/home/content.json). Go to Phase 2.
    • AURA → the Aura marker file exists (experiences/<siteName>/views/homeGuestLayout.json). Go to Phase 3.
    • UNKNOWN (exit code 1) → neither marker exists. Skip to the manual fallback in Phase 6.

Read references/bundle_detection.md for retrieval command shapes and troubleshooting.

Phase 2 — Patch the LWR Bundle

  1. Scaffold any missing LWR template routes (commonly too-many-requests) before patching — missing routes fail the deploy. Route+view scaffolding is owned by experience-lwr-site-generate (see its configure-content-route.md, configure-content-view.md, and handle-component-and-region-ids.md). Delegate to that skill for the actual scaffold; this skill only supplies the messaging-specific context (which route the deploy is complaining about, and confirmation that the scaffolded pair resolves that specific deploy error). See references/lwr_route_scaffolding.md for the delegation pointer.

  2. Patch all themeLayout files by running:

    bash
    scripts/patch_lwr_bundle.sh \  <retrieve-dir>/digitalExperiences/site/<siteName> \  <deploymentName> <scrtUrl> <siteEndpoint>

    The script iterates every sfdc_cms__themeLayout/*/content.json file. For each, it locates the footer region at .contentBody.component.children[], walks into the existing community_layout:section wrapper's inner slot region, and either updates the existing experience_messaging:embeddedMessaging component in place (preserving its id) or appends a fresh component node. Targeting the themeLayout footer makes the widget site-wide (floating overlay on every page), equivalent to the Aura themeFooter placement. See references/lwr_patch.md for the JSON shapes and how to verify.

  3. Proceed to Phase 4.

Phase 3 — Patch the Aura Bundle

  1. Patch the home guest layout by running:

    bash
    scripts/patch_aura_bundle.sh \  <retrieve-dir>/experiences/<siteName>/views/homeGuestLayout.json \  <deploymentName> <scrtUrl> <siteEndpoint>

    The script iterates .regions[], picks the first region whose .components[] is non-empty, recurses through any forceCommunity:section wrappers, and either updates the existing .componentName == "experience_messaging:embeddedMessaging" component in place (preserving id) or appends a fresh forceCommunity:section wrapper. Aura uses componentName / componentAttributes (not definition / attributes) and has no dxpStyle. See references/aura_patch.md for JSON shapes and verification steps.

  2. Proceed to Phase 4.

Phase 4 — Stage and Deploy

  1. Copy the modified bundle into the project's default package. Use cp -R so unchanged files travel with the modified one:

    • LWR: cp -R <retrieve-dir>/digitalExperiences force-app/main/default/
    • Aura: cp -R <retrieve-dir>/experiences force-app/main/default/ and also copy the sibling <siteName>.site-meta.xml file — Aura deploys are rejected without it.
  2. Async deploy and poll:

    bash
    sf project deploy start --source-dir force-app/main/default \  --target-org <org-alias> --async

    Poll every 15 seconds up to 10 minutes:

    bash
    sf project deploy report --job-id <job-id> --target-org <org-alias>

    Stop when status is Succeeded, Failed, SucceededPartial, or Canceled. On failure, surface the deploy report and do not proceed to publish. See references/deploy_and_publish.md for the full polling loop and common failure modes.

Phase 5 — Publish and Verify

  1. Resolve the Network.Name. Network.Name frequently differs from the site DeveloperName, so query it by the URL path prefix rather than guessing:

    bash
    sf data query --query \  "SELECT Name FROM Network WHERE UrlPathPrefix='<urlPath>' LIMIT 1" \  --target-org <org-alias>
  2. Publish the community with the resolved name:

    bash
    sf community publish --name "<resolved-Name>" --target-org <org-alias>
  3. Smoke-test guest access by hitting the public URL:

    bash
    curl -sL -o /dev/null -w "%{http_code}" \  https://<domainHostname>/<urlPath>

    Report success only when the response is 200.

Phase 6 — Manual Fallback

  1. If any automated step fails (bundle undetectable, patch write blocked, deploy fails, publish fails, or guest URL not 200), print the Experience Builder deep link and verbatim instructions from references/manual_fallback.md. Do not claim the widget is live until the user confirms.

    The deep link is:

    text
    https://<MyDomain>.lightning.force.com/sfsites/picasso/core/config/commeditor.apexp?...networkId=<Network.Id>

    Resolve <MyDomain> via sf org display --target-org <org-alias> and <Network.Id> via:

    bash
    sf data query --query \  "SELECT Id FROM Network WHERE UrlPathPrefix='<urlPath>' LIMIT 1" \  --target-org <org-alias>

    Do not hardcode either value. Instruct the user to open Experience Builder, drag the Embedded Messaging component onto the target page, pick the deployment from the property panel, and click Publish.


Rules / Constraints

ConstraintRationale
Detect bundle type from retrieval output, do not assumeLWR and Aura sites need different files patched with different key names
Preserve the existing component id when updating in placeEnsures idempotency; the Experience runtime keys off id
Every new id must be a fresh UUIDDuplicate IDs corrupt the layout and can fail render
LWR uses definition / attributes; Aura uses componentName / componentAttributesWrong key names silently drop the component from render
LWR community_layout:section sectionConfig lives inside .attributes as a JSON string (not a top-level property, not a nested object)Top-level placement violates the schema's additionalProperties: false constraint; the serializer also expects a string not an object
Aura sibling <siteName>.site-meta.xml must be copied alongside the bundleDeploy is rejected without it
Poll the async deploy; do not fire-and-forgetPublish must run only after deploy succeeds
Resolve Network.Name from UrlPathPrefix, do not reuse site DeveloperNameThe two are frequently different
Do not claim "live on the site" until the guest URL returns 200 or the user confirmsPublish is asynchronous; premature success reports mislead
Never hardcode MyDomain or Network.Id in the manual fallback linkValues are org-specific and must be queried
Idempotency: re-running with new ESD coordinates must update in placeUsers iterate on deploymentName, scrtUrl, siteEndpoint during setup

Gotchas

IssueResolution
too-many-requests route missing during LWR deployScaffold the missing route+view pair per references/lwr_route_scaffolding.md
Aura deploy rejected with missing site metadataCopy the sibling <siteName>.site-meta.xml from the retrieve dir
Component appended but not renderingConfirm the region wrapper uses the correct type: "region" key and that Aura components use componentName (not definition)
sf community publish fails with "community not found"The Network.Name differs from site DeveloperName; resolve via UrlPathPrefix query
Guest URL returns 403 or 503 after publishPublish is async — retry the smoke test after 60s before falling back to manual
Re-run adds a second messaging componentThe recursive search matched on the wrong key name; component detection must use definition (LWR) or componentName (Aura)
Deploy succeeds but widget does not appear on all pagesFor LWR, confirm the component was injected into sfdc_cms__themeLayout/*/content.json footer (not sfdc_cms__view/home/content.json — that is page-specific). For Aura, confirm homeGuestLayout.json was patched (themeFooter region).
sectionConfig written as an objectSerialize it as a JSON string; the CMS parser will not accept an object

Verification Checklist

Bundle Detection

  • Was exactly one of sfdc_cms__view/home/content.json (LWR) or views/homeGuestLayout.json (Aura) found?
  • If neither was found, did the workflow route to the manual fallback?

Patch Correctness

  • For LWR, are the messaging component's keys definition and attributes?
  • For Aura, are the keys componentName and componentAttributes?
  • When updating in place, was the existing id preserved?
  • When appending, are all new id values fresh UUIDs?
  • For LWR, did the script patch every sfdc_cms__themeLayout/*/content.json (not just home/content.json)?
  • For LWR, does the messaging node appear inside the footer region's subtree in each themeLayout?
  • For LWR, is clientVersion set to "WebV2" in the messaging node attributes?

Deploy

  • For Aura, was <siteName>.site-meta.xml copied alongside the bundle?
  • Was the async deploy polled until a terminal status?
  • Is the terminal status Succeeded or SucceededPartial before proceeding to publish?

Publish

  • Was Network.Name resolved via UrlPathPrefix, not reused from site DeveloperName?
  • Did sf community publish complete without error?

Verify

  • Did the guest URL curl return 200?
  • Did the workflow refrain from claiming success until 200 was observed or the user confirmed manual publish?

Output Expectations

Deliverables:

  • Modified sfdc_cms__themeLayout/*/content.json files (one per themeLayout) in the retrieval directory and in force-app/main/default/... (LWR); or modified homeGuestLayout.json (Aura)
  • (LWR only, if needed) new sfdc_cms__route/<RouteApiName>/ + sfdc_cms__view/<viewId>/ pair for any scaffolded missing route
  • Deploy job-id and the final deploy report
  • Publish confirmation
  • Guest URL smoke-test HTTP status
  • On failure: the Experience Builder deep link and manual instructions

Do not produce the EmbeddedServiceConfig or the MessagingChannel metadata — those are the responsibilities of the deployment and channel skills below.


Cross-Skill Integration

NeedDelegate to
Create or update the Embedded Service Deploymentservice-digital-engagement-deployment-configure
Create the underlying MIAW messaging channelservice-digital-engagement-channel-configure
Create the Experience Cloud LWR site itselfexperience-lwr-site-generate
Scaffold a missing LWR route + view pair (e.g. too-many-requests)experience-lwr-site-generate (route/view creation, ID handling)

Reference File Index

FileWhen to read
references/bundle_detection.mdPhase 1 — LWR vs Aura retrieval and disambiguation
references/lwr_route_scaffolding.mdPhase 2 — delegation pointer for scaffolding missing LWR template routes (owned by experience-lwr-site-generate)
references/lwr_patch.mdPhase 2 — what patch_lwr_bundle.sh does and how to verify its output
references/aura_patch.mdPhase 3 — what patch_aura_bundle.sh does and how to verify its output
references/deploy_and_publish.mdPhases 4–5 — staging into force-app, async deploy polling, publish, and guest-URL smoke test
references/manual_fallback.mdPhase 6 — Experience Builder deep link and manual drag-drop-publish instructions
scripts/detect_bundle_type.shPhase 1 — deterministic LWR/Aura/UNKNOWN detection over a retrieved bundle
scripts/patch_lwr_bundle.shPhase 2 — idempotent LWR content.json patch (insert or update in place)
scripts/patch_aura_bundle.shPhase 3 — idempotent Aura homeGuestLayout.json patch (insert or update in place)

来源与署名

来源:forcedotcom/sf-skills位于skills/service-digital-engagement-messaging-site-integrate提交e5164d9

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架

更多来自 forcedotcom/sf-skills 的技能

Service Itsm Teams Itservice Configure

forcedotcom

Configure the "Set Up Salesforce IT Service" checklist for Microsoft Teams Employee Service (ITSM) — the employee side, covering app enablement, marketplace install guidance, user access assignment, and Digital Experience Site selection. Use this for: 'turn on Salesforce IT Service', 'set up IT Service on Teams', 'assign Teams for Employee permission set', 'give employees access to Teams for Employee Service', 'manage user access for Teams ITSM', 'grant users the permission sets needed for Teams Employee Service', 'select a digital experience site for Teams', 'install Salesforce IT Service app on Teams', or any request to complete the IT Service half of the Teams ITSM Go page checklist (including the Manage User Access step). DO NOT TRIGGER for the base Teams Salesforce Go page toggle or Azure/Entra app setup (service-itsm-teams-configure) or for the IT Desk/fulfiller half of the checklist (service-itsm-teams-itdesk-configure).

待分类1K昨天更新

Service Itsm Teams Coordinate

forcedotcom

End-to-end autopilot orchestrator for setting up Microsoft Teams integration in Salesforce Service Cloud ITSM — runs the whole flow (enable the Teams for Employee Service Go feature, register the Microsoft Entra app, populate Named Credentials, configure the IT Desk and IT Service checklists, turn on Swarming, and optionally embed the Agentforce agent) in one continuous pass, stopping only at the points a human must act. Use when the user asks to set up Microsoft Teams for ITSM end to end, 'set up teams for it service', 'do the whole teams itsm setup', 'configure microsoft teams for employee service', or wants a guided Teams ITSM walkthrough. Delegates each stage to a specialized child skill while driving the sequence itself. DO NOT TRIGGER when the user asks to enable Teams alone, configure just the IT Desk or IT Service checklist alone, or enable Swarming alone — delegate directly to the specific child skill in those cases.

待分类1K昨天更新

Service Itsm Teams Itdesk Configure

forcedotcom

Configure the "Set Up Salesforce IT Desk" checklist for Microsoft Teams Employee Service (ITSM) — the fulfiller/agent side, covering app enablement, marketplace install guidance, user access assignment, and Swarming collaboration-tool setup. Use this for: 'turn on Salesforce IT Desk', 'set up IT Desk on Teams', 'assign Teams for IT Desk permission set', 'set Teams as collaboration tool for swarming', 'install Salesforce IT Desk app on Teams', or any request to complete the IT Desk half of the Teams ITSM Go page checklist. DO NOT TRIGGER for the base Teams Salesforce Go page toggle or Azure/Entra app setup (service-itsm-teams-configure) or for the IT Service/employee half of the checklist (service-itsm-teams-itservice-configure).

待分类1K昨天更新

Service Itsm Teams Debug

forcedotcom

通过针对 Salesforce 组织运行通过/失败配置检查清单,诊断 Microsoft Teams 员工服务(ITSM)配置故障。

DevOps & Cloud1K昨天更新

Service Itsm Teams Employee Agent Configure

forcedotcom

Configure the embedded Agentforce Employee Agent so it replies inside the Microsoft Teams ITSM custom client ('Salesforce Employee Assist' / 'Ask AI Agent'). Use this for: 'set up employee agent in Teams', 'embed Agentforce agent in Teams', 'make the IT Service Employee Agent reply in Teams', 'Teams Ask AI Agent not responding', 'agent joins then leaves without replying', 'configure MIAW deployment for Teams employee agent', 'Teams embedded messaging agent setup'. Builds the whole stack headlessly (zero Setup-UI clicks): the Web messaging channel with User Verification ON, the Enhanced Chat User Verification Key Set (JWKS_URL) it requires, the Teams_AgentForce custom-client deployment, the routing flow to the agent, and the Agent Access permission set that lets the portal user reach the agent. DO NOT TRIGGER for enabling the Teams feature Salesforce Go page toggle (service-itsm-teams-configure) or for configuring notification preferences.

待分类1K昨天更新

Service Itsm Swarming Configure

forcedotcom

通过 Connect API 调用启用 Salesforce Swarming ITSM 功能,并将协作工具设为 Teams。

DevOps & Cloud1K昨天更新