@salesforce/afv-skills 1.40.0 → 1.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/automation-flow-generate/SKILL.md +32 -43
- package/skills/experience-portal-create/SKILL.md +497 -0
- package/skills/experience-portal-create/assets/report-template.md +30 -0
- package/skills/experience-portal-create/references/mcp-invocation.md +288 -0
- package/skills/experience-portal-create/references/post-creation-activate-publish.md +165 -0
- package/skills/experience-portal-create/references/templates.md +253 -0
- package/skills/experience-ui-bundle-features-generate/SKILL.md +5 -1
- package/skills/experience-ui-bundle-frontend-generate/SKILL.md +2 -0
- package/skills/experience-ui-bundle-frontend-generate/references/page.md +1 -0
- package/skills/platform-datamask-run/SKILL.md +345 -0
- package/skills/platform-datamask-run/references/api-surface.md +130 -0
- package/skills/platform-datamask-run/references/policy-authoring.md +185 -0
- package/skills/platform-datamask-run/references/run-and-abort.md +116 -0
- package/skills/platform-datamask-run/scripts/poll-job.sh +115 -0
- package/skills/platform-dataspace-access-configure/SKILL.md +51 -3
- package/skills/platform-dataspace-access-configure/scripts/inspect-dataspace-scopes.sh +56 -0
- package/skills/platform-lightning-type-widget-coordinate/references/build-plan-format.md +1 -0
- package/skills/platform-sandbox-configure/SKILL.md +17 -2
- package/skills/platform-trial-org-create/SKILL.md +175 -0
- package/skills/platform-trial-org-create/examples/create_request.json +9 -0
- package/skills/platform-trial-org-create/examples/error_response.json +41 -0
- package/skills/platform-trial-org-create/examples/success_response.json +27 -0
- package/skills/platform-trial-org-create/references/error_codes.md +42 -0
- package/skills/platform-trial-org-create/references/signup_request_fields.md +69 -0
- package/skills/platform-trial-org-create/scripts/create_signup_request.sh +175 -0
- package/skills/platform-trial-org-create/scripts/get_signup_request.sh +155 -0
- package/skills/platform-widget-generate/SKILL.md +47 -6
- package/skills/platform-widget-generate/examples/conditional.json +3 -3
- package/skills/platform-widget-generate/examples/list-with-foreach.json +2 -2
- package/skills/platform-widget-generate/examples/single-object.json +2 -2
- package/skills/platform-widget-generate/references/widget-bundle-layout.md +1 -1
- package/skills/service-agentforce-channel-configure/SKILL.md +271 -0
- package/skills/service-agentforce-channel-configure/references/agent-wiring.md +97 -0
- package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +145 -0
- package/skills/service-agentforce-channel-configure/references/channel-branch-voice.md +69 -0
- package/skills/service-agentforce-channel-configure/references/channel-types.md +61 -0
- package/skills/service-agentforce-channel-configure/references/live-traffic-gate.md +86 -0
- package/skills/service-agentforce-channel-configure/references/queue-resolution.md +135 -0
- package/skills/service-agentforce-channel-configure/references/routing-flow.md +384 -0
- package/skills/service-catalog-template-deploy/SKILL.md +310 -0
- package/skills/service-catalog-template-deploy/references/cli-invocation.md +258 -0
- package/skills/service-catalog-template-deploy/scripts/activate-verify.mjs +164 -0
- package/skills/service-catalog-template-deploy/scripts/build-deploy-payload.mjs +94 -0
- package/skills/service-catalog-template-deploy/scripts/resolve-template.mjs +331 -0
- package/skills/service-catalog-template-search/SKILL.md +212 -0
- package/skills/service-catalog-template-search/references/cli-invocation.md +128 -0
- package/skills/service-catalog-template-search/scripts/classify-catalog.mjs +205 -0
- package/skills/service-concierge-portal-generate/SKILL.md +126 -0
- package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +1428 -0
- package/skills/service-digital-engagement-channel-configure/SKILL.md +46 -6
- package/skills/service-digital-engagement-channel-configure/assets/messaging_channel_template.xml +2 -1
- package/skills/service-digital-engagement-channel-configure/examples/asa_agent_channel.xml +4 -1
- package/skills/service-helpagent-coordinate/README.md +8 -2
- package/skills/service-helpagent-coordinate/SKILL.md +126 -130
- package/skills/service-helpagent-coordinate/assets/help-agent-spec.md +70 -53
- package/skills/service-helpagent-coordinate/references/agent-script.md +571 -457
- package/skills/service-helpagent-coordinate/references/channel-voice.md +38 -9
- package/skills/service-helpagent-coordinate/references/channel-web-chat.md +173 -49
- package/skills/service-helpagent-coordinate/references/output-report-format.md +126 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +153 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +79 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +35 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +271 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +265 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +220 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-final-report.mjs +102 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/record-enable-result.mjs +73 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +206 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +194 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +223 -0
- package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +45 -7
- package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +45 -5
- package/skills/service-itsm-agentic-setup-configure/SKILL.md +116 -0
- package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +64 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +158 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/cli-invocation.md +361 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/error-taxonomy.md +44 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/reactivation.md +66 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +66 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/specialized-templates.md +148 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/workflow-detail.md +169 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/build-create-body.mjs +116 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/classify-agent-existence.mjs +185 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/classify-preflight.mjs +168 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/create-scratch-dir.mjs +58 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +197 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +186 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +51 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/cli-invocation.md +345 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/error-taxonomy.md +44 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/reactivation.md +63 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +44 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/workflow-detail.md +149 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +110 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +201 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-activate-result.mjs +135 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-agent-existence.mjs +194 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-preflight.mjs +158 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/create-scratch-dir.mjs +58 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +191 -0
- package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +133 -0
- package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +71 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +308 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +23 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +193 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +57 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +394 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +266 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +106 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +142 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +82 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-action-surface.mjs +137 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-assignment-state.mjs +99 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +120 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/resolve-target-user.mjs +86 -0
- package/skills/service-itsm-agentic-setup-uel-user-create/SKILL.md +284 -0
- package/skills/service-itsm-agentic-setup-uel-user-create/references/mcp-invocation.md +302 -0
- package/skills/service-itsm-channels-coordinate/SKILL.md +472 -0
- package/skills/service-itsm-incident-mgmt-configure/SKILL.md +212 -0
- package/skills/service-itsm-incident-mgmt-configure/references/mcp-invocation.md +225 -0
- package/skills/service-itsm-incident-priority-configure/SKILL.md +53 -12
- package/skills/service-itsm-swarming-configure/SKILL.md +212 -0
- package/skills/service-itsm-teams-configure/SKILL.md +395 -0
- package/skills/service-itsm-teams-configure/references/azure-credential-population.md +213 -0
- package/skills/service-itsm-teams-configure/references/gotchas.md +23 -0
- package/skills/service-itsm-teams-coordinate/SKILL.md +175 -0
- package/skills/service-itsm-teams-coordinate/examples/output-templates.md +85 -0
- package/skills/service-itsm-teams-debug/SKILL.md +144 -0
- package/skills/service-itsm-teams-debug/references/configuration-checklists.md +277 -0
- package/skills/service-itsm-teams-debug/references/report-generation.md +95 -0
- package/skills/service-itsm-teams-employee-agent-configure/SKILL.md +139 -0
- package/skills/service-itsm-teams-employee-agent-configure/assets/Teams_AgentForce.EmbeddedServiceConfig-meta.xml +43 -0
- package/skills/service-itsm-teams-employee-agent-configure/references/teams-embedded-employee-agent.md +480 -0
- package/skills/service-itsm-teams-itdesk-configure/SKILL.md +232 -0
- package/skills/service-itsm-teams-itservice-configure/SKILL.md +391 -0
|
@@ -10,10 +10,10 @@ metadata:
|
|
|
10
10
|
- "platform-permission-set-generate"
|
|
11
11
|
- "service-digital-engagement-deployment-configure"
|
|
12
12
|
cliTools:
|
|
13
|
-
- tool: ["python3"]
|
|
14
|
-
semver: ">=3.10.0"
|
|
15
13
|
- tool: ["sf"]
|
|
16
14
|
semver: ">=2.0.0"
|
|
15
|
+
- tool: ["python3"]
|
|
16
|
+
semver: ">=3.8"
|
|
17
17
|
---
|
|
18
18
|
|
|
19
19
|
# Configuring Enhanced Chat Channel
|
|
@@ -107,7 +107,20 @@ All steps are sequential. Do not skip or reorder.
|
|
|
107
107
|
| Omni-Channel Queue | `Queue` | `sessionHandlerQueue` |
|
|
108
108
|
| Omni-Channel Flow | `Flow` | `sessionHandlerFlow` + `sessionHandlerQueue` (fallback) |
|
|
109
109
|
| User | `User` | `sessionHandlerUser` + `sessionHandlerQueue` (fallback) |
|
|
110
|
-
| Agentforce Service Agent | `AgentforceServiceAgent` | `
|
|
110
|
+
| Agentforce Service Agent | `AgentforceServiceAgent` | `sessionHandlerQueue` (fallback only — see v67 note below) |
|
|
111
|
+
|
|
112
|
+
> **v67 limitation — `sessionHandlerAsa` is not accepted by the Metadata API at v67.** Do NOT include `<sessionHandlerAsa>` in the XML for ASA routing. Instead:
|
|
113
|
+
> 1. **Verify the bot is Active before channel creation.** The Data API rejects binding with "Only active Agentforce Service Agents are supported." Run `sf agent activate -o <org> --api-name <BotDevName>` and confirm `BotVersion.Status = Active` first.
|
|
114
|
+
> 2. Deploy the XML with `<sessionHandlerType>AgentforceServiceAgent</sessionHandlerType>` and `<sessionHandlerQueue>` only — no `<sessionHandlerAsa>` element.
|
|
115
|
+
> 3. After the deploy succeeds, query the channel Id: `sf data query -o <org> -q "SELECT Id FROM MessagingChannel WHERE DeveloperName='<ChannelDevName>'" --json`
|
|
116
|
+
> 4. Resolve the BotDefinition Id: `sf data query -o <org> -q "SELECT Id FROM BotDefinition WHERE DeveloperName='<BotDevName>'" --json`
|
|
117
|
+
> 5. PATCH both handler fields via Data API in a single call:
|
|
118
|
+
> ```bash
|
|
119
|
+
> sf api request rest -o <org> --method PATCH \
|
|
120
|
+
> "/services/data/v67.0/sobjects/MessagingChannel/<CHAN_ID>" \
|
|
121
|
+
> --body "{\"SessionHandlerId\":\"<BOT_ID>\",\"FallbackQueueId\":\"<QUEUE_ID>\"}"
|
|
122
|
+
> ```
|
|
123
|
+
> 6. Verify: `sf data query -o <org> -q "SELECT SessionHandlerId, FallbackQueueId FROM MessagingChannel WHERE Id='<CHAN_ID>'" --json` — both must be non-null.
|
|
111
124
|
|
|
112
125
|
8. **Apply user verification** — if enabled, set `embeddedConfig.authMode` to `Auth` and include `<messagingAuthorizations>`. If not enabled, set `embeddedConfig.authMode` to `UnAuth` and omit `<messagingAuthorizations>`.
|
|
113
126
|
|
|
@@ -141,6 +154,27 @@ All steps are sequential. Do not skip or reorder.
|
|
|
141
154
|
sf project deploy start --source-dir <path-to-messagingChannels-folder> --target-org <org-alias>
|
|
142
155
|
```
|
|
143
156
|
|
|
157
|
+
15a. **ASA routing only — bind the bot via Data API PATCH.** Skip this step for Queue, Flow, and User routing types.
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
CHAN_ID=$(sf data query -o <org> --json \
|
|
161
|
+
-q "SELECT Id FROM MessagingChannel WHERE DeveloperName='<CHANNEL_DEV_NAME>'" \
|
|
162
|
+
| python3 -c "import sys,json; print(json.load(sys.stdin)['result']['records'][0]['Id'])")
|
|
163
|
+
BOT_ID=$(sf data query -o <org> --json \
|
|
164
|
+
-q "SELECT Id FROM BotDefinition WHERE DeveloperName='<ASA_BOT_DEV_NAME>'" \
|
|
165
|
+
| python3 -c "import sys,json; print(json.load(sys.stdin)['result']['records'][0]['Id'])")
|
|
166
|
+
QUEUE_ID=$(sf data query -o <org> --json \
|
|
167
|
+
-q "SELECT Id FROM Group WHERE Type='Queue' AND DeveloperName='<FALLBACK_QUEUE_DEV_NAME>'" \
|
|
168
|
+
| python3 -c "import sys,json; print(json.load(sys.stdin)['result']['records'][0]['Id'])")
|
|
169
|
+
|
|
170
|
+
sf api request rest -o <org> --method PATCH \
|
|
171
|
+
"/services/data/v67.0/sobjects/MessagingChannel/$CHAN_ID" \
|
|
172
|
+
--body "{\"SessionHandlerId\":\"$BOT_ID\",\"FallbackQueueId\":\"$QUEUE_ID\"}"
|
|
173
|
+
# Expected: HTTP 204
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Verify: `sf data query -o <org> -q "SELECT SessionHandlerId, FallbackQueueId FROM MessagingChannel WHERE Id='$CHAN_ID'" --json` — both must be non-null.
|
|
177
|
+
|
|
144
178
|
15. **Activate the channel** — after successful deployment, activate the messaging channel:
|
|
145
179
|
```bash
|
|
146
180
|
sf data update record --sobject MessagingChannel --where "DeveloperName='<CHANNEL_NAME>'" --values "IsActive=true" --target-org <org-alias>
|
|
@@ -163,7 +197,8 @@ All steps are sequential. Do not skip or reorder.
|
|
|
163
197
|
| `sessionHandlerType` must match the handler fields present | Setting `Queue` but populating `sessionHandlerFlow` causes deployment error |
|
|
164
198
|
| Flow routing requires both `sessionHandlerFlow` and `sessionHandlerQueue` | Queue is the mandatory fallback for human escalation |
|
|
165
199
|
| User routing requires both `sessionHandlerUser` and `sessionHandlerQueue` | Queue is the mandatory fallback when user is unavailable |
|
|
166
|
-
| ASA routing
|
|
200
|
+
| ASA routing: include `sessionHandlerQueue` in the XML; bind `SessionHandlerId` via Data API PATCH after deploy | `sessionHandlerAsa` is not accepted by the Metadata API at v67 — bot binding must happen via Data API |
|
|
201
|
+
| Bot must be Active before the Data API PATCH that sets `SessionHandlerId` | API rejects with "Only active Agentforce Service Agents are supported" if the bot is inactive |
|
|
167
202
|
| `masterLabel` max 40 characters | Platform limit on channel labels |
|
|
168
203
|
| File name must match `^[a-zA-Z][a-zA-Z0-9_]*$` | API name format enforced by Metadata API |
|
|
169
204
|
| `allowedFileTypes` is a comma-separated string with no spaces | Not a nested list or array |
|
|
@@ -184,6 +219,8 @@ All steps are sequential. Do not skip or reorder.
|
|
|
184
219
|
| Queue not found on deploy | Ensure the referenced queue exists and has `MessagingSession` as a `queueSobject` type |
|
|
185
220
|
| Omni-Channel Flow not found on deploy | Ensure the referenced flow exists and is active before deploying the channel |
|
|
186
221
|
| ASA bot reference invalid | Bot must be published and active; use exact developer name from BotDefinition metadata |
|
|
222
|
+
| ASA channel deployed but `SessionHandlerId` is null after deploy | `sessionHandlerAsa` is silently rejected by the Metadata API at v67 — run the Data API PATCH step (Phase 3, step 15a) to bind it |
|
|
223
|
+
| "Only active Agentforce Service Agents are supported" on Data API PATCH | Bot is inactive — run `sf agent activate` before the PATCH |
|
|
187
224
|
| Flow or ASA routing fails without fallback queue | `sessionHandlerQueue` is mandatory when `sessionHandlerType` is `Flow` or `AgentforceServiceAgent` |
|
|
188
225
|
| JWT verification not working | Connected app and certificate must be configured for the org |
|
|
189
226
|
| Custom parameters not collected | `name` must be unique per channel; `parameterDataType` defaults to `Text` |
|
|
@@ -202,8 +239,11 @@ All steps are sequential. Do not skip or reorder.
|
|
|
202
239
|
|
|
203
240
|
### Routing Checks
|
|
204
241
|
- [ ] Is exactly one `sessionHandlerType` value set (`Queue`, `Flow`, `User`, or `AgentforceServiceAgent`)?
|
|
205
|
-
- [ ]
|
|
206
|
-
- [ ] For Flow
|
|
242
|
+
- [ ] For Queue routing: is `sessionHandlerQueue` in the XML?
|
|
243
|
+
- [ ] For Flow routing: is `sessionHandlerFlow` in the XML, plus `sessionHandlerQueue` as fallback?
|
|
244
|
+
- [ ] For User routing: is `sessionHandlerUser` in the XML, plus `sessionHandlerQueue` as fallback?
|
|
245
|
+
- [ ] For ASA routing: is `sessionHandlerQueue` in the XML (no `sessionHandlerAsa` — that goes via Data API)?
|
|
246
|
+
- [ ] For ASA routing: was step 15a run? Are `SessionHandlerId` and `FallbackQueueId` non-null after the PATCH?
|
|
207
247
|
- [ ] Does the routing target reference an existing entity in the org?
|
|
208
248
|
|
|
209
249
|
### User Verification Checks
|
package/skills/service-digital-engagement-channel-configure/assets/messaging_channel_template.xml
CHANGED
|
@@ -96,7 +96,8 @@
|
|
|
96
96
|
<!-- <sessionHandlerType>Flow</sessionHandlerType> -->
|
|
97
97
|
|
|
98
98
|
<!-- Routing: Agentforce Service Agent (requires a fallback queue) -->
|
|
99
|
-
<!--
|
|
99
|
+
<!-- NOTE: sessionHandlerAsa is NOT included here — it is rejected by the Metadata API at v67. -->
|
|
100
|
+
<!-- After deploy, bind the bot via Data API PATCH: SessionHandlerId + FallbackQueueId (see SKILL.md step 15a) -->
|
|
100
101
|
<!-- <sessionHandlerQueue>{FALLBACK_QUEUE_NAME}</sessionHandlerQueue> -->
|
|
101
102
|
<!-- <sessionHandlerType>AgentforceServiceAgent</sessionHandlerType> -->
|
|
102
103
|
</MessagingChannel>
|
|
@@ -47,7 +47,10 @@
|
|
|
47
47
|
<keywordType>Help</keywordType>
|
|
48
48
|
<language>en_US</language>
|
|
49
49
|
</messagingKeywords>
|
|
50
|
-
|
|
50
|
+
<!-- sessionHandlerAsa is NOT in the XML — rejected by Metadata API at v67.
|
|
51
|
+
After deploy, run step 15a in SKILL.md to bind via Data API PATCH:
|
|
52
|
+
SessionHandlerId = <BotDefinition.Id for Support_Service_Agent>
|
|
53
|
+
FallbackQueueId = <Group.Id for Support_Escalation_Queue> -->
|
|
51
54
|
<sessionHandlerQueue>Support_Escalation_Queue</sessionHandlerQueue>
|
|
52
55
|
<sessionHandlerType>AgentforceServiceAgent</sessionHandlerType>
|
|
53
56
|
</MessagingChannel>
|
|
@@ -15,8 +15,10 @@ skills against a canonical spec — it does **not** author a new agent primitive
|
|
|
15
15
|
| `assets/help-agent-spec.md` | The canonical Help Agent spec — the guided flow (source of truth), kept small |
|
|
16
16
|
| `references/agent-script.md` | The canonical agent script + placeholders; loaded only at agent-creation time |
|
|
17
17
|
| `references/channel-web-chat.md` | Web Chat channel provisioning detail; loaded only when Web Chat is chosen |
|
|
18
|
-
| `references/channel-
|
|
19
|
-
| `references/
|
|
18
|
+
| `references/channel-voice.md` | Voice channel wiring detail (existing `PstnVoice` numbers only); loaded only when Voice is chosen |
|
|
19
|
+
| `references/output-report-format.md` | The two report shapes, templates, and scored-failure list; loaded when writing the final `report.md` |
|
|
20
|
+
|
|
21
|
+
Help Portal is delegated end-to-end to the sibling skill `service-concierge-portal-generate` — no per-channel reference file lives here for that branch.
|
|
20
22
|
|
|
21
23
|
The spec is split for **progressive disclosure**: the large agent script and the per-channel
|
|
22
24
|
branches live in `references/` and are read only when the flow reaches them, keeping the
|
|
@@ -121,3 +123,7 @@ Verify: `! ls .agents/skills/` and `! cat skills-lock.json`.
|
|
|
121
123
|
## Related
|
|
122
124
|
|
|
123
125
|
- ECA / OAuth setup skill: `integration-connectivity-connected-app-configure`
|
|
126
|
+
- Channel setup vs. final agent wiring: `service-digital-engagement-channel-configure` deploys and
|
|
127
|
+
activates the MessagingChannel with initial Queue routing; `service-agentforce-channel-configure`
|
|
128
|
+
then replaces that routing with the agent binding (fallback queue + `sessionHandlerAsa`). This
|
|
129
|
+
skill coordinates both at Checkpoint 3.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: service-helpagent-coordinate
|
|
3
|
-
description: "Use to set up, configure, ground, or go live with a Salesforce Help Agent (an Agentforce Service Agent in Service Cloud) via a guided four-checkpoint flow. Use whenever a user says any of: set up / create / build / add a help agent, service agent, or support chat agent; add or embed a chat widget on a website or Experience Cloud / LWR site; put a help agent on a channel (web chat, voice, phone, help portal)
|
|
3
|
+
description: "Use to set up, configure, ground, or go live with a Salesforce Help Agent (an Agentforce Service Agent in Service Cloud) via a guided four-checkpoint flow. Use whenever a user says any of: set up / create / build / add a help agent, service agent, or support chat agent; add or embed a chat widget on a website or Experience Cloud / LWR site; put a help agent on a channel (web chat, voice, phone, help portal); ground a help agent on Salesforce Knowledge; or wants an AI to answer customer questions, manage support cases, and escalate to a human. The right skill even when the request names only one part or references help-agent-spec.md or the Agentforce Quick Setup wizard. DO NOT TRIGGER when authoring a brand-new agent with no Help Agent lineage (use agentforce-generate), configuring OAuth/ECAs (use integration-connectivity-connected-app-configure), or only deploying metadata (use platform-metadata-deploy)."
|
|
4
4
|
allowed-tools: Bash Read Write Edit Glob Grep WebFetch AskUserQuestion TodoWrite
|
|
5
5
|
metadata:
|
|
6
6
|
version: "0.9"
|
|
@@ -12,6 +12,8 @@ metadata:
|
|
|
12
12
|
- "experience-lwr-site-generate"
|
|
13
13
|
- "integration-connectivity-connected-app-configure"
|
|
14
14
|
- "platform-metadata-deploy"
|
|
15
|
+
- "service-agentforce-channel-configure"
|
|
16
|
+
- "service-concierge-portal-generate"
|
|
15
17
|
- "service-digital-engagement-channel-configure"
|
|
16
18
|
- "service-digital-engagement-deployment-configure"
|
|
17
19
|
- "service-digital-engagement-messaging-site-integrate"
|
|
@@ -20,6 +22,8 @@ metadata:
|
|
|
20
22
|
semver: ">=7.0.0"
|
|
21
23
|
- tool: ["sf"]
|
|
22
24
|
semver: ">=2.139.6"
|
|
25
|
+
- tool: ["python3"]
|
|
26
|
+
semver: ">=3.8"
|
|
23
27
|
---
|
|
24
28
|
|
|
25
29
|
# service-helpagent-coordinate: Service Cloud Help Agent, guided setup
|
|
@@ -58,192 +62,183 @@ The spec feeds these existing skills — do **not** author a new Help Agent skil
|
|
|
58
62
|
|---|---|
|
|
59
63
|
| `agentforce-generate` | Agent authoring + ADL provisioning/grounding (see its `references/data-library-reference.md`, `references/org-setup-for-adl.md`) |
|
|
60
64
|
| `dx-org-permission-set-assign` | Data Cloud permission-set assignment |
|
|
61
|
-
| `service-digital-engagement-channel-configure` |
|
|
62
|
-
| `service-digital-engagement-deployment-configure` | Embedded Service Deployment
|
|
65
|
+
| `service-digital-engagement-channel-configure` + `service-agentforce-channel-configure` | Deploy channel (Queue routing), then PATCH `SessionHandlerId` to bind agent (see `references/channel-web-chat.md`) |
|
|
66
|
+
| `service-digital-engagement-deployment-configure` | Embedded Service Deployment — supports both LWR (`ChatterNetworkPicasso`) and Aura (`ChatterNetwork`) sites |
|
|
63
67
|
| `experience-lwr-site-generate` | Experience Cloud (LWR) site — used when the org has no Live LWR site yet |
|
|
64
68
|
| `service-digital-engagement-messaging-site-integrate` | Widget placement + embed (Checkpoint 3.5 / 4) |
|
|
65
69
|
|
|
70
|
+
## Skills inventory pre-flight (advisory — never a hard stop)
|
|
71
|
+
|
|
72
|
+
This skill delegates to several sibling skills. Depending on the runtime, those dependencies resolve one of two ways: as directories under `.claude/skills/`, **or** through a runtime skill catalog that the harness resolves on demand (no local directory). An absent `.claude/skills/<name>` directory therefore does **not** prove a dependency is unavailable — it is normal when the catalog resolves skills at invocation time.
|
|
73
|
+
|
|
74
|
+
Run this check **once, silently, for your own awareness** — never as the run's first user-facing output:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
for skill in agentforce-generate dx-org-permission-set-assign service-digital-engagement-channel-configure service-digital-engagement-deployment-configure experience-lwr-site-generate service-digital-engagement-messaging-site-integrate service-concierge-portal-generate service-agentforce-channel-configure; do
|
|
78
|
+
[ -d ".claude/skills/$skill" ] && echo "OK: $skill" || echo "resolve-at-runtime: $skill"
|
|
79
|
+
done
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Do not stop, and do not open the run with a missing-dependency roll call.** Proceed with the checkpoints; delegate to each sibling skill only when the flow actually reaches it. If — and only if — a delegation step is actually reached and that specific skill cannot be resolved at that moment, surface *that one skill* by name at that point. Never front-load the full eight-skill inventory as the deliverable; it is not a decision the user owns and it is not the report.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
66
86
|
## Workflow
|
|
67
87
|
|
|
68
88
|
Read `assets/help-agent-spec.md` first — it is the authoritative flow and is intentionally kept small. **Do not pre-load the rest.** The heavy or conditional material is split into `references/` and read only when the flow reaches it (progressive disclosure — this is deliberate, to keep token usage low):
|
|
69
89
|
|
|
70
90
|
- **`references/agent-script.md`** — the ~500-line canonical agent script + placeholder list. Load it **only when you are ready to create the agent, after Checkpoint 2** — not during Checkpoints 1, 3, or 4.
|
|
71
91
|
- **`references/channel-web-chat.md`** — Web Chat provisioning detail. Load **only if the user picks Web Chat** at Checkpoint 3.
|
|
72
|
-
- **`
|
|
92
|
+
- **`service-concierge-portal-generate`** — Help Portal / Agentforce Concierge portal deploy. **Delegate to this skill** if the user picks Help Portal at Checkpoint 3 — do not inline the portal runbook steps here. Pass `$ORG`, `$BOT_ID`, and `$BOT_DEV_NAME` as context so the skill skips its own entry-point questions.
|
|
93
|
+
- **`references/channel-voice.md`** — Voice channel wiring detail (existing numbers only). Load only if the user picks Voice.
|
|
73
94
|
|
|
74
95
|
Read the one channel file that matches the user's selection — never all three. Then run the interactive setup **without one-shotting**: walk the user through four checkpoints in order, waiting for a reply at each.
|
|
75
96
|
|
|
76
97
|
### Readiness check (silent, MANDATORY, do not reorder)
|
|
77
98
|
Order is load-bearing — running step 3 before step 2 fails with `PermissionSet not found: GenieUserEnhancedSecurity` because the Data Cloud permission sets do not exist in the org until Data Cloud itself is turned on:
|
|
78
|
-
1. Verify
|
|
99
|
+
1. **Verify PSL seat availability, then create a dedicated Einstein Agent User for this agent.** First confirm the three required PSLs have available seats:
|
|
100
|
+
```bash
|
|
101
|
+
sf data query --target-org $ORG --json \
|
|
102
|
+
--query "SELECT MasterLabel, TotalLicenses, UsedLicenses FROM PermissionSetLicense WHERE DeveloperName IN ('AgentforceServiceAgentUserPsl', 'GenieDataPlatformStarterPsl', 'EinsteinGPTPromptTemplatesPsl')"
|
|
103
|
+
```
|
|
104
|
+
For each, `UsedLicenses < TotalLicenses` must be true. If any PSL is at capacity, stop and surface which one is exhausted — the PSG assignment will fail and there is nothing the skill can do until a seat is freed or provisioned.
|
|
105
|
+
|
|
106
|
+
If all three have capacity, create the user. Do not reuse any existing Einstein Agent User — each Help Agent gets its own. Username: `{agentDevName}_user@{orgId}.ext` (15-char org Id from `sf org display`). Email: `noreply@salesforce.com`. Profile: `Einstein Agent User` (query `SELECT Id FROM Profile WHERE Name = 'Einstein Agent User'` to get the ProfileId, then `sf data create record --sobject User`). If a user with exactly that username already exists, reuse it (idempotent). Then assign all four of the following **before publishing the agent**:
|
|
107
|
+
- `AgentforceServiceAgentUserPsg` (Permission Set Group) — assigns three PSLs in one call: `Agentforce Service Agent User`, `Data Cloud`, and `Einstein Prompt Templates`. Use `sf org assign permsetgroup`.
|
|
108
|
+
- `AgentforceServiceAgentSecureBase` (Permission Set) — required for all service agents. Use `sf org assign permset`.
|
|
109
|
+
- `AgentforceKnowledgeObjectAccess` (Permission Set) — required because the Help Agent uses the `knowledge:` block. Use `sf org assign permset`.
|
|
110
|
+
- `{AgentName}_Access` (custom Permission Set) — created by `agentforce-generate` for agent-specific Apex/object access.
|
|
111
|
+
|
|
112
|
+
Verify PSL assignments landed: `SELECT PermissionSetLicense.DeveloperName FROM PermissionSetLicenseAssign WHERE Assignee.Username = '{agentDevName}_user@{orgId}.ext'` — expect `AgentforceServiceAgentUser`, `DataCloud`, `EinsteinPromptTemplates`.
|
|
113
|
+
|
|
114
|
+
**Capture the username** (`{agentDevName}_user@{orgId}.ext`) — it is the value for `<default_agent_user_placeholder>` in the agent script. The agent runs as this user at runtime.
|
|
115
|
+
|
|
116
|
+
**Pre-publish gate — verify before every `sf agent publish authoring-bundle` call.** Skipping this causes a masked 401→404: SFAP returns HTTP 401 "User doesn't have access to agent" when the Einstein Agent User is missing `AgentforceServiceAgentUserPsg`, and jsforce's session-refresh retry silently converts that 401 to `ERROR_HTTP_404`. Verify all four assignments are present before invoking the CLI:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
AGENT_USER_ID=$(sf data query --target-org $ORG --json \
|
|
120
|
+
--query "SELECT Id FROM User WHERE Username='{agentDevName}_user@{orgId}.ext'" \
|
|
121
|
+
| python3 -c "import sys,json; print(json.load(sys.stdin)['result']['records'][0]['Id'])")
|
|
122
|
+
|
|
123
|
+
# Must return exactly 1 row — if 0, assign before continuing
|
|
124
|
+
sf data query --target-org $ORG --json \
|
|
125
|
+
--query "SELECT PermissionSetGroup.DeveloperName FROM PermissionSetAssignment \
|
|
126
|
+
WHERE AssigneeId='${AGENT_USER_ID}' \
|
|
127
|
+
AND PermissionSetGroup.DeveloperName='AgentforceServiceAgentUserPsg'"
|
|
128
|
+
|
|
129
|
+
# Must return 2 rows — if any are missing, assign before continuing
|
|
130
|
+
sf data query --target-org $ORG --json \
|
|
131
|
+
--query "SELECT PermissionSet.Name FROM PermissionSetAssignment \
|
|
132
|
+
WHERE AssigneeId='${AGENT_USER_ID}' \
|
|
133
|
+
AND PermissionSet.Name IN ('AgentforceServiceAgentSecureBase','AgentforceKnowledgeObjectAccess')"
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Do not call `sf agent publish authoring-bundle` until all four assignments return non-empty results.
|
|
137
|
+
|
|
79
138
|
2. **Enable Data Cloud** — must complete before step 3 (permission sets don't exist until Data Cloud is on). If Data Cloud is not yet provisioned, offer the user the choice up front — enable and come back later, or wait through it now.
|
|
80
|
-
3. **CRITICAL — Assign the Data Cloud permission sets immediately after enablement.** Non-negotiable — skipping it ships an agent whose grounding returns empty `knowledgeSummary` at runtime even though ADL indexing reports SUCCESS.
|
|
139
|
+
3. **CRITICAL — Assign the Data Cloud permission sets immediately after enablement.** Non-negotiable — skipping it ships an agent whose grounding returns empty `knowledgeSummary` at runtime even though ADL indexing reports SUCCESS. The PSG assigned in step 1 covers this once Data Cloud is on.
|
|
81
140
|
|
|
82
|
-
Also verify the `SvcCopilotTmpl` and `EmployeeCopilot` namespaces are present. These are Salesforce out-of-the-box platform artifacts surfaced by `enableEinsteinGptPlatform: true` — not AppExchange managed packages — and will not appear in `sf package installed list`. Probe the namespace directly (e.g. `SELECT DeveloperName FROM Flow WHERE NamespacePrefix = 'SvcCopilotTmpl' LIMIT 1`).
|
|
83
141
|
|
|
84
142
|
### Recognizing where the user is entering
|
|
85
|
-
|
|
143
|
+
|
|
144
|
+
**Checkpoint 1 (agent identity) and Checkpoint 3 (channel) must always be confirmed with the user in the current conversation — never inferred from a previous session, a compacted summary, or skill arguments.** These are decisions the user owns; acting on stale context from a prior run will configure the wrong agent or the wrong channel.
|
|
145
|
+
|
|
146
|
+
If the user's opening message *in the current conversation turn* explicitly names the agent and/or channel (e.g. "set up Master Yoda on Web Chat"), accept those as the inputs and confirm them before proceeding. If not stated in the current turn, ask.
|
|
147
|
+
|
|
148
|
+
For the org alias: if the user has been working against a specific org in the current session, use that. Otherwise ask.
|
|
149
|
+
|
|
150
|
+
**Do not assume every run starts at Checkpoint 1.** Read the opening prompt and enter at the right checkpoint: identity decided → Checkpoint 2 (grounding); grounding done → Checkpoint 3 (channel). When the prompt explicitly names or implies a later checkpoint (e.g. "set up the grounding", "wire up the web chat channel") — and states or clearly implies prior checkpoints are already done — accept those prior checkpoints as established, enter scoped at the named checkpoint, and produce a settled-facts report for it. Do NOT force a full guided-identity re-confirmation, do NOT restart at Checkpoint 1, and do NOT demand in-conversation re-confirmation of prior decisions. Values the prompt supplies for the entered checkpoint (audience → `authMode`, named site, categories) are decided, not questions to re-ask.
|
|
151
|
+
|
|
152
|
+
If the opening prompt names **Voice / phone / telephony / IVR**, read `references/channel-voice.md` and follow it from the top of Checkpoint 3 as the Voice branch.
|
|
86
153
|
|
|
87
154
|
### Checkpoint 1 — Meet Your Agent
|
|
88
|
-
|
|
155
|
+
Ask for four things (offer these exact defaults so the guided-decision report can enumerate them without loading `assets/help-agent-spec.md`):
|
|
156
|
+
1. **Agent Name** — default `Help Agent` (DeveloperName `Help_Agent`).
|
|
157
|
+
2. **Language** — default `en_US`.
|
|
158
|
+
3. **Welcome Greeting** — default `"Hi, I'm {Agent Name}. How can I help you today?"`.
|
|
159
|
+
4. **Tone** — default `"calm, patient, friendly service agent — warm but professional, short sentences, never robotic."`
|
|
160
|
+
|
|
161
|
+
When the opener names Q&A / case management / human escalation, note explicitly that these map to the canonical four-subagent shape (Agent Router → General FAQ, Service Customer Verification, Case Management, Escalation) — do not invent a different design.
|
|
89
162
|
|
|
90
163
|
### Checkpoint 2 — Give Your Agent Context (grounding)
|
|
91
164
|
Ask which knowledge source (Salesforce Knowledge / files / website sync). Grounding is **provisioning an Agentforce Data Library**, not designing a search — the agent's `knowledge:` block does the retrieval at runtime. This checkpoint MUST produce all five of:
|
|
92
165
|
1. **Delegate provisioning to `agentforce-generate`** — it owns ADL create/index/publish. Do not hand-roll data-library metadata.
|
|
93
166
|
2. **A dedicated, named library** — create `Help_Agent_Knowledge`. **Never wire the stock `All_Records_and_Fields_Default`** (it sits in `NOT_SCHEDULED` on trial or preloaded sample-data orgs and returns empty `knowledgeSummary` with no error).
|
|
94
|
-
3. **Category selection** — for Salesforce Knowledge, query the org's Data Category Groups
|
|
167
|
+
3. **Category selection** — for Salesforce Knowledge, query the org's Data Category Groups. Ask which categories to ground on **only in an interactive run**; for a non-interactive/scoped run, decide the sensible default (**the org's default Data Category Group**, or all groups if none is designated) and note the default explicitly in the settled-facts report's Blocking Issues line (e.g. "Knowledge data category not specified — chose the org's default group"). Do not stall the report asking.
|
|
95
168
|
4. **Wait-for-indexing gate** — poll and only proceed once `indexingStatus.status ∈ {COMPLETED, READY, SUCCESS}`. `NOT_SCHEDULED` is not success.
|
|
96
169
|
5. **Capture the `rag_feature_config_id`** (format `ARFPC_<libraryId>`) and wire it into the agent script's `knowledge:` block — never hardcode.
|
|
97
170
|
|
|
98
171
|
**Anti-rule:** never respond to a grounding request by designing a SOQL/SOSL/GraphQL/Apex search over Knowledge articles. Grounding is ADL provisioning; retrieval is the agent's job at runtime.
|
|
99
172
|
|
|
100
173
|
### Checkpoint 3 — Add to Channels
|
|
101
|
-
Web Chat / Help Portal / Voice.
|
|
174
|
+
Web Chat / Help Portal / Voice. Deploy the channel with Queue routing (`service-digital-engagement-channel-configure`), then delegate agent wiring to `service-agentforce-channel-configure` (PATCH `SessionHandlerId`; `sessionHandlerAsa` not accepted at v67). Delegate to the appropriate channel reference file:
|
|
102
175
|
|
|
103
|
-
|
|
104
|
-
SELECT Id, Name, UrlPathPrefix, SiteType, Status
|
|
105
|
-
FROM Site
|
|
106
|
-
WHERE SiteType = 'ChatterNetworkPicasso' AND Status = 'Live'
|
|
107
|
-
```
|
|
176
|
+
- **Web Chat** → read `references/channel-web-chat.md`. Create messaging channel + Embedded Service Deployment; locate the target site via a **query-first pattern**:
|
|
108
177
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
178
|
+
```sql
|
|
179
|
+
SELECT Id, Name, UrlPathPrefix, SiteType, Status
|
|
180
|
+
FROM Site
|
|
181
|
+
WHERE SiteType IN ('ChatterNetworkPicasso', 'ChatterNetwork') AND Status = 'Active'
|
|
182
|
+
```
|
|
113
183
|
|
|
114
|
-
|
|
184
|
+
Both LWR (`ChatterNetworkPicasso`) and Aura (`ChatterNetwork`) sites support the `experience_messaging:embeddedMessaging` widget. Filter out `ESW_`-prefixed sites in post-processing — those are internal ESD endpoint scaffolding, not real Experience Cloud sites. Resolve the site **in the same turn**, do not defer:
|
|
185
|
+
- **Zero real sites** → create one via `experience-lwr-site-generate` (recommend the Help Center template), or offer "Deploy on my own website (get snippet)".
|
|
186
|
+
- **Exactly one** → confirm it with the user before using (an existing site may serve a different audience); do not silently adopt it.
|
|
187
|
+
- **Multiple** → in the SAME turn, show the executed SOQL, enumerate the results as a table (`Name | Type | UrlPathPrefix`), state plainly "no site is created or modified until you choose," then ask which one to target (include "Create a new LWR site" and "Deploy on my own website" as options). Do not answer "I'll query and get back to you" — run the query and present results now.
|
|
115
188
|
|
|
116
|
-
|
|
189
|
+
Do not filter by hardcoded name or URL path prefix — the correct site depends on the customer's org.
|
|
190
|
+
|
|
191
|
+
- **Help Portal** → delegate to `service-concierge-portal-generate`. Pass the resolved `$ORG`, `$BOT_ID`, and `$BOT_DEV_NAME` so it can skip its entry-point questions. Help Portal deploys an Agentforce Concierge experience on an LWR Experience Cloud site and is fully supported.
|
|
192
|
+
|
|
193
|
+
- **Voice** → read `references/channel-voice.md` and follow it fully. Voice wires an existing `PstnVoice` MessagingChannel to the agent via `service-agentforce-channel-configure` Branch B — it does not provision a new phone number.
|
|
194
|
+
|
|
195
|
+
**After each channel branch completes, loop — ask if the user wants to add another channel.** Once a Web Chat, Help Portal, or Voice branch finishes (success or failure), present via `AskUserQuestion`:
|
|
196
|
+
|
|
197
|
+
- **Add another [same type] channel** — e.g. if Web Chat was just deployed, offer remaining unwired Web Chat channels first. Re-run the branch for that type; skip channels already wired in this session.
|
|
198
|
+
- **Add a different channel type** — return to the top of Checkpoint 3 (re-query `MessagingChannel`, rebuild the type list, omit already-wired channels from the options).
|
|
199
|
+
- **Done — proceed to go-live** — exit the loop and advance to Checkpoint 3.5.
|
|
200
|
+
|
|
201
|
+
Track which channels have been wired in this session so they are not re-offered. The loop continues until the user selects "Done" or all available channels have been wired.
|
|
202
|
+
|
|
203
|
+
**When the opening prompt names two or more channels up front** (e.g. "add web chat first, then also make it reachable by phone as Voice — add both"), the prompt itself authorizes every named channel — treat them all as committed work, not one channel plus a maybe. You do **not** need a fresh user reply to move from the first named channel to the next: the up-front request *is* that authorization. Skip the between-branch `AskUserQuestion` for channels the prompt already named, wire each in the stated order, and only fall back to the loop's `AskUserQuestion` for channels the prompt did *not* name. The report must show every named channel was wired — do **not** report only the first and leave the rest as an intention. In the settled-facts report's Checkpoint 3 row (or a short trace right below the tables), make all of the following explicit, in order:
|
|
204
|
+
1. **First-channel completion** as a settled fact (channel type, `authMode` for Web Chat, resolved site/number, ESD state) — not "will then add".
|
|
205
|
+
2. **The authorization to continue**: state that the prompt named the next channel up front, so the flow advanced to it without a between-branch prompt — report *that* (the prompt-level authorization), never a user reply that did not occur. Do not claim the user "continued after an AskUserQuestion" for a channel the prompt already listed; that fabricates an interaction and breaks the settled-facts contract.
|
|
206
|
+
3. **Second- (and later-) channel entry**: state that the flow re-entered Checkpoint 3 for the next named channel and carry that branch to its own settled outcome. If a between-branch prompt genuinely ran (only for a channel the prompt did *not* name), report its options and the actual selection.
|
|
207
|
+
4. Only after every channel the prompt named is wired (or explicitly blocked with a one-line reason) does the flow reach go-live.
|
|
208
|
+
|
|
209
|
+
A report that stops after the first named channel — or that frames the second as "next step" / "to be added" — is scored as an incomplete loop even when the first channel is perfect.
|
|
117
210
|
|
|
118
211
|
### Checkpoint 3.5 — Silent pre-flight (INTERNAL — never announce)
|
|
119
212
|
Run silently; surface output only on failure. Every check must pass before Checkpoint 4:
|
|
120
213
|
1. Data Cloud access in place for running user **and** Einstein Agent User (defer to `agentforce-generate`).
|
|
121
214
|
2. ADL is Activated **and** grounded — run a canary retrieval with the captured `rag_feature_config_id`; if empty despite SUCCESS, surface the **Known manual step** (Data Space scope on the permission set) verbatim, wait for confirmation, re-run.
|
|
122
|
-
3. Messaging channel
|
|
215
|
+
3. Messaging channel remains **Active** after the Agentforce routing deploy (assert; initial activation is the channel-configure skill's job, not the site-integrate skill's), **and** the widget is actually placed — independently re-read the deployed guest-layout JSON for the `experience_messaging:embeddedMessaging` node rather than trusting the site-integrate skill's 200-only signal; inject if missing.
|
|
123
216
|
|
|
124
217
|
### Checkpoint 4 — Review & Go Live
|
|
125
218
|
Embed (LWR + Aura), then complete four explicit go-live steps: (a) wire the **Escalation Flow** to the agent (reuse `Help_Agent_Escalation_Flow` if it already exists — do not create a duplicate); (b) confirm the **Messaging Channel is Active** in Setup → Messaging Settings; (c) **Publish the Embedded Service Deployment** in Setup → Embedded Service Deployments; (d) offer to test together. An unpublished deployment or an inactive channel silently ships a dead widget.
|
|
126
219
|
|
|
127
220
|
## Rules / Constraints
|
|
128
221
|
|
|
222
|
+
## Long-list presentation rules
|
|
223
|
+
|
|
224
|
+
`AskUserQuestion` is capped at 4 options. For discovered item lists (sites, channels, queues, ADLs): **1–6 items** — paginate 3 per page, "Show more (N remaining)" as option 4, fixed options (Create new, etc.) on the final page only. **7+ items** — list names in plain text, ask the user to type their choice, validate case-insensitively, confirm before proceeding.
|
|
225
|
+
|
|
129
226
|
| Rule | Rationale |
|
|
130
227
|
|---|---|
|
|
131
228
|
| Never one-shot the setup | It is a guided conversation; wait for user input at each checkpoint |
|
|
132
229
|
| Never skip or reorder the readiness steps | Permission sets don't exist before Data Cloud enablement — you'll see `PermissionSet not found: GenieUserEnhancedSecurity` |
|
|
133
230
|
| Never advance past 3.5 with empty ADL retrieval | Ships a silently-broken agent |
|
|
134
231
|
| Never hardcode a site name or URL path prefix | The correct target LWR site depends on the customer's org — query first, then decide |
|
|
135
|
-
| Never
|
|
136
|
-
| Never wire an Embedded Service Deployment to an Aura (`ChatterNetwork`) site | It must target `ChatterNetworkPicasso` (LWR) or the widget will fail silently |
|
|
232
|
+
| Never present ESW-prefixed sites as widget deployment targets | `ESW_*` sites are internal ESD endpoint scaffolding — filter them out in post-processing before presenting site options to the user |
|
|
137
233
|
| Create the Embedded Service Deployment as V2 via the Connect API, never bare Metadata deploy — and embed the V2 ESD via the `experience_messaging:embeddedMessaging` LWR component | Metadata API defaults to legacy V1 (`WebV1`, *"Web (v1)"* in Setup) which breaks Enhanced Web Chat; create via Connect API on v67.0+ with `clientVersion: WebV2`. The customer widget mounts via the LWR component keyed on `deploymentName` (not a bootstrap `<script>`). Full six-attribute shape, the Tooling-API patch path, and guest-browser verification are in `references/channel-web-chat.md` — do NOT verify with <!-- skill-validate: ignore-start -->`curl \| grep`<!-- skill-validate: ignore-end --> |
|
|
138
234
|
| Always create a dedicated ADL for the Help Agent — never wire the stock `All_Records_and_Fields_Default` library | On trial or preloaded sample-data orgs the stock library is stuck in `NOT_SCHEDULED` and never indexes; wiring the agent to it produces empty `knowledgeSummary` at runtime with no visible error. Create `Help_Agent_Knowledge` at Checkpoint 2 and wait for `indexingStatus ∈ {COMPLETED, READY, SUCCESS}` before wiring |
|
|
139
235
|
| Never leave Checkpoint 4 without publishing the Embedded Service Deployment and activating the channel | Both are required for the widget to actually serve on the site. If the ESD was created via the Connect API `deployment/setup` call, it is already published — verify *"Published on:"* is stamped (not empty) and the title has no `(v1)` suffix |
|
|
140
|
-
|
|
|
236
|
+
| All three channel types are supported — Web Chat, Help Portal, and Voice | For Web Chat, always run the post-deploy assertion (re-fetch the MessagingChannel, assert `embeddedConfig.authMode`; default `UnAuth`) — a wrong choice silently ships a widget that won't render for guests. The report names `authMode` as a bare value (`authMode: UnAuth`); do not narrate the rationale or the assertion in the report. Never emit a legacy `esw.min.js` / Live Agent V1 snippet |
|
|
141
237
|
|
|
142
238
|
## Output Expectations
|
|
143
239
|
|
|
144
|
-
The one deliverable is a single `report.md`: a **status report of what was decided and done**, not a design doc,
|
|
145
|
-
|
|
146
|
-
1. **Report concrete outcomes, never intentions.** Write what *is* — the decided value, the created resource, the resolved ID — not what you *would* or *plan to* do. If a step could not run to completion because this is a non-interactive run, **decide the sensible default, state it as the decision, and report it as such** — do not stall on "awaiting confirmation," "to be resolved," "pending user input," or "please provide…". Hedging language ("will create", "to be executed", "once confirmed") reads as an unfinished plan and is scored as incomplete. Name the agent, the locale, the grounding source, `authMode`, the ADL name, the `rag_feature_config_id`, the site `UrlPathPrefix`, the ESD publish state — as settled facts.
|
|
147
|
-
2. **No padding, no scaffolding prose.** No preamble, no design-doc sections, no restating the prompt. Dense, declarative lines only.
|
|
148
|
-
|
|
149
|
-
**Before writing, choose the report shape by what the run actually did. There are three:**
|
|
150
|
-
- **A coming-soon stop** — the run hard-stopped on a coming-soon channel (Voice / Help Portal).
|
|
151
|
-
- **A settled-facts report** — the flow *executed a step*: the user directed a concrete action ("set up the grounding", "put it on <named site>") and every input was supplied or has a sensible skill-owned default. Report what was decided and done.
|
|
152
|
-
- **A guided-decision report** — the flow is at a *decision the user owns*: an opening request with no agent details yet ("set up a help agent", "add a chat widget"), **or** a checkpoint surfacing multiple real alternatives the skill must not invent (e.g. several Live LWR sites). Presenting the checkpoint's questions/options *is* the deliverable; stay draft-first.
|
|
153
|
-
|
|
154
|
-
Use the settled-facts report, not the guided-decision one, when the missing value is a mechanical default the skill can just pick (data category → org default) — decide it and report it done. Use the guided-decision report only when the choice genuinely belongs to the user (identity at an opener; which of several existing sites). The guided-decision report is **not** an escape hatch for hedging on an execute request.
|
|
155
|
-
|
|
156
|
-
**Coming-soon stop — the flow hard-stopped on a coming-soon channel (Voice / Help Portal).** Short and fixed — the four H2 sections below, nothing more. Do NOT describe how Voice/Portal would be built, do NOT list architecture options, telephony, IVR, Amazon Connect, or "planning-only" steps — that content is an automatic fail. Write exactly:
|
|
157
|
-
|
|
158
|
-
```markdown
|
|
159
|
-
# Help Agent Setup Report
|
|
160
|
-
|
|
161
|
-
## Blocking Issue
|
|
162
|
-
<Channel> is a coming-soon channel with no supported setup path. Response given verbatim: "This feature is coming soon, please select Web Chat."
|
|
163
|
-
|
|
164
|
-
## Channel Options
|
|
165
|
-
- Web Chat — supported; the only buildable channel.
|
|
166
|
-
- Voice / phone — coming soon, not available.
|
|
167
|
-
- Help Portal — coming soon, not available.
|
|
168
|
-
|
|
169
|
-
## No Provisioning Performed
|
|
170
|
-
No Voice/telephony channel, phone number, messaging channel, or Embedded Service Deployment was created or configured. No supported channel was selected, so the flow did not proceed past the channel gate.
|
|
171
|
-
|
|
172
|
-
## Next Action
|
|
173
|
-
Re-run and select Web Chat as the channel.
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
**Settled-facts report — the flow ran (completed, or blocked on something other than a coming-soon channel).** Start with the exact H1 `# Help Agent Setup Report`, then the two tables and two short sections below, in order. Every cell is a **concrete, decided value** — a bare value, not a sentence. Keep prose out.
|
|
177
|
-
|
|
178
|
-
**Report DECISIONS as settled facts, never placeholders or intentions.** This is a non-interactive run: you do not get to defer. Do NOT emit "to be captured", "not yet reached", "flow is paused", "awaiting", "once confirmed", or "will create". For a value the flow **decides** (agent name, locale, tone, ADL name, `authMode`, data category), state the concrete decision as done — a cell with nothing decided gets `None`. For an **opaque ID the run generates** (the `rag_feature_config_id`, a Salesforce record Id, a site's URL path prefix), report the **actual value produced this run** — never invent a plausible-looking one and never copy an ID from this template; if the run genuinely did not produce it, name that in Blocking Issues rather than fabricating. Hedging is scored as incomplete; fabricated IDs are scored as inaccurate. Include every value below and nothing else.
|
|
179
|
-
|
|
180
|
-
**Scope the report to the checkpoint(s) the request targeted — do not narrate checkpoints the run never entered.** When the user directs a single checkpoint ("set up the grounding", "ground it on Knowledge" → Checkpoint 2 only), the report centers on that checkpoint. Fill its row with settled facts; give each checkpoint the run did **not** reach a bare `Not started` in its Decision cell — no plan, no "pending", no "not yet reached", no downstream detail. Do **not** manufacture a `Blocking Issues` entry or a `Next Action` about a later checkpoint you were never asked to run: if the targeted checkpoint completed, `Blocking Issues` is `None` and `Next Action` is the single next checkpoint by name (e.g. "Checkpoint 3 (channel) when you're ready"). A report that sprawls into unrequested checkpoints and hedges there is scored as incomplete even when the targeted checkpoint is perfect.
|
|
181
|
-
|
|
182
|
-
**When the request centers on one decision, carry that decision's reasoning — not a bare value.** Some requests are about a single load-bearing choice: *why the readiness steps run in a specific order*, or *which `authMode` to pick and why*. For these, the targeted cell (or a short `## <Topic>` section right after the tables) must state the **decision, its rationale, and the concrete failure it avoids** — because that reasoning is the deliverable, not scaffolding:
|
|
183
|
-
- **Readiness ordering** — give the ordered sequence (licenses / Einstein Agent User → **enable Data Cloud** → **assign Data Cloud permission sets**), say *why* the order is load-bearing (the permission sets do not exist until Data Cloud is enabled — assigning first fails with `PermissionSet not found: GenieUserEnhancedSecurity`), and warn that skipping the assignment yields empty runtime grounding even when ADL indexing reports SUCCESS. Do not compress this to "perm sets assigned". If Data Cloud is not yet enabled on this org, the Readiness row must say so — never assert "Data Cloud enabled; perm sets assigned" while `Blocking Issues` says it isn't; that contradiction is scored as inaccurate.
|
|
184
|
-
- **`authMode` choice** — name the value (`UnAuth` for an anonymous-or-mixed audience), state the rationale (`UnAuth` allows **both** guests and authenticated upgrades via `identityToken`; `Auth` is authenticated-only and silently breaks the guest widget and the Setup "Test Enhanced Web Chat" page), confirm the audience it was chosen for, and state the assertion as a settled part of the flow — "the deployed MessagingChannel is re-fetched and `embeddedConfig.authMode = UnAuth` is asserted" — **present tense, not "will be re-fetched"**. Do not compress this to "authMode UnAuth". The `authMode` decision is complete once chosen: do **not** frame it as pending ("to be confirmed"), and do **not** manufacture a `Blocking Issues` entry or `Next Action` about the *adjacent* site-resolution step — a scoped `authMode` request is not blocked on the LWR site. If nothing stopped the scoped decision, `Blocking Issues` is `None`.
|
|
185
|
-
|
|
186
|
-
The `‹…›` slots below mark where **this run's** real values go — replace each slot, never emit the slot text itself:
|
|
187
|
-
|
|
188
|
-
```markdown
|
|
189
|
-
# Help Agent Setup Report
|
|
190
|
-
|
|
191
|
-
## Setup Summary
|
|
192
|
-
| Field | Value |
|
|
193
|
-
|---|---|
|
|
194
|
-
| Readiness | Data Cloud enabled; perm sets assigned (GenieUserEnhancedSecurity, GenieAnalytics, DataSpacePermSet); Einstein Agent User assigned |
|
|
195
|
-
| Failure mode guarded | Stock NOT_SCHEDULED ADL → empty knowledgeSummary; guarded via dedicated ADL, indexing gated to COMPLETED |
|
|
196
|
-
| Delegation | agentforce-generate → agent + ADL; dx-org-permission-set-assign → Data Cloud perms; service-digital-engagement-* → channel + ESD |
|
|
197
|
-
|
|
198
|
-
## Checkpoint Outcomes
|
|
199
|
-
| # | Checkpoint | Decision |
|
|
200
|
-
|---|---|---|
|
|
201
|
-
| 1 | Identity | ‹agent name› (‹DeveloperName›), ‹locale›, ‹tone› |
|
|
202
|
-
| 2 | Grounding | Salesforce Knowledge via agentforce-generate; dedicated ADL ‹library name› (stock All_Records_and_Fields_Default not wired); indexing gated to COMPLETED before wiring; rag_feature_config_id ‹ARFPC_ id from this run's adl publish› captured |
|
|
203
|
-
| 3 | Channel | Web Chat; authMode ‹UnAuth or Auth›; site ‹target site UrlPathPrefix›; ESD HelpChat WebV2 — *or* `Not started` if the run never entered this checkpoint |
|
|
204
|
-
| 4 | Go-live | ESD Published; channel Active; escalation flow wired — *or* `Not started` |
|
|
205
|
-
|
|
206
|
-
## Blocking Issues
|
|
207
|
-
‹the one thing that actually stopped the flow — one line — or `None`›
|
|
208
|
-
|
|
209
|
-
## Next Action
|
|
210
|
-
One line — the single next step for the user.
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
Non-slot values above (Data Cloud, perm-set names, `HelpChat WebV2`, delegation targets) are the skill's canonical defaults — reproduce them as-is. Fill the `‹…›` slots from this run (including `authMode`, which is decided per run from the Step B choice — do not default it in the report). **Any checkpoint the run did not reach gets a bare `Not started` — not a plan, forecast, or "pending" note.** For a request scoped to one checkpoint (e.g. Checkpoint 2 grounding), only that row carries settled facts; rows 3 and 4 read `Not started`, `Blocking Issues` is `None`, and `Next Action` names the next checkpoint (e.g. "Checkpoint 3 (channel) when you're ready").
|
|
214
|
-
|
|
215
|
-
**Blocked run?** `Blocking Issues` is the one sanctioned place to state a real blocker — one honest line there (e.g. "multiple Live LWR sites — asked user to choose"; "Knowledge data category not specified — chose the org's default group") is **required and is not hedging**. It records what stopped a checkpoint the run *actually entered* — never a checkpoint the request never targeted (a scoped Checkpoint-2 run is not "blocked" on Checkpoint 3). Keep the checkpoint cells decisive for what *was* settled; put the single unresolved thing here. What is scored as incomplete is hedging *inside the decision cells* ("to be captured", "not yet", "pending") — not a clear one-line blocker in this section.
|
|
216
|
-
|
|
217
|
-
**Guided-decision report — a decision the user owns.** Here the deliverable is *the decision point itself*, presented cleanly. This is not hedging: at an opener or a genuine fork, asking with sensible defaults is the correct, complete response. Do **not** provision, deploy, or fabricate the value the user still owns. Orient, present the current checkpoint's choices with defaults, sketch what the remaining checkpoints will cover, and confirm nothing is live yet. Use exactly these sections:
|
|
218
|
-
|
|
219
|
-
```markdown
|
|
220
|
-
# Help Agent Setup Report
|
|
221
|
-
|
|
222
|
-
## Guided Setup
|
|
223
|
-
Help Agent setup runs as four checkpoints: identity → grounding → channel → go-live. Nothing is created, deployed, or published until you confirm at each step.
|
|
224
|
-
|
|
225
|
-
## Current Checkpoint
|
|
226
|
-
Checkpoint ‹n — name›. This agent will ‹map the user's stated needs to the design in one line: knowledge-grounded Q&A from Salesforce Knowledge, support-case create/update, and escalation to a live human when needed›, delivered as ‹the channel the user named, e.g. a Web Chat widget on their site›.
|
|
227
|
-
|
|
228
|
-
## Decisions Needed
|
|
229
|
-
- ‹Question 1 — offered default› (e.g. Agent name — `Help Agent`, API name `Help_Agent`)
|
|
230
|
-
- ‹Question 2 — offered default› (e.g. Language — `en_US`)
|
|
231
|
-
- ‹Question 3 — offered default› (e.g. Greeting, Tone)
|
|
232
|
-
- ‹…the real choices for THIS checkpoint only; for a multi-option fork, list the actual alternatives found (e.g. each Live LWR site by Name + UrlPathPrefix) and never pick for the user›
|
|
233
|
-
|
|
234
|
-
## Checkpoint Roadmap
|
|
235
|
-
- Readiness (silent, before provisioning): confirm licenses / Einstein Agent User → enable Data Cloud → assign the Data Cloud permission sets, in that order.
|
|
236
|
-
- 2 Grounding: connect Salesforce Knowledge via a dedicated Agentforce Data Library, indexing gated to COMPLETED.
|
|
237
|
-
- 3 Channel: deploy the chosen channel + Embedded Service Deployment; confirm `authMode` from who will be chatting.
|
|
238
|
-
- 4 Go-live: embed, publish, and verify with a live round-trip — only after you confirm.
|
|
239
|
-
|
|
240
|
-
## Next Action
|
|
241
|
-
Reply with your choices (or accept the defaults) and I'll proceed to the next checkpoint. Nothing is created, grounded, embedded, or published until you confirm at each step.
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
Fill every `‹…›` from this run's context. Keep to these five sections — the Roadmap names what later checkpoints will do (it is not a settled-fact table and must not claim any of it is done); no provisioning tables, no settled-fact cells for steps not yet reached.
|
|
240
|
+
The one deliverable is a single `report.md`: a **status report of what was decided and done**, not a design doc. Two shapes exist — a **settled-facts report** when the flow executed a step (concrete decided values in tables), and a **guided-decision report** when the flow is at a decision the user owns (present the choices, do not fabricate). Never hedge inside decision cells ("to be captured", "pending", "will create"); never fabricate opaque IDs; never manufacture blockers on checkpoints the request did not target. Full templates, per-shape rules, one-decision reasoning callouts (readiness ordering, `authMode`), and the "never include" scored-failure list live in **`references/output-report-format.md`** — read it before writing the report.
|
|
245
241
|
|
|
246
|
-
**Never include** (each is a scored failure): a preamble restating the prompt or the request; "End of report." trailers; decorative `---` / `===` rules; `Scope`, `Assumptions`, `Out-of-Scope`, `Architecture`, `Options Considered`, `Next Steps`, `Steps:`, or `Outcome Gate:` sections; the checkpoints re-listed as questions; the agent script or reference-file contents pasted inline; emoji; marketing adjectives ("seamless", "robust", "powerful", "comprehensive").
|
|
247
242
|
|
|
248
243
|
## Reference File Index
|
|
249
244
|
|
|
@@ -252,5 +247,6 @@ Fill every `‹…›` from this run's context. Keep to these five sections —
|
|
|
252
247
|
| `assets/help-agent-spec.md` | Always (first) — the canonical flow; small by design. Points to the files below |
|
|
253
248
|
| `references/agent-script.md` | At agent creation only (after Checkpoint 2) — the canonical agent script + placeholders |
|
|
254
249
|
| `references/channel-web-chat.md` | Only if the user selects Web Chat at Checkpoint 3 |
|
|
255
|
-
| `
|
|
256
|
-
| `references/channel-voice.md` | Only if the user selects Voice (
|
|
250
|
+
| `service-concierge-portal-generate` (external skill) | Only if the user selects Help Portal at Checkpoint 3 — delegate, do not inline |
|
|
251
|
+
| `references/channel-voice.md` | Only if the user selects Voice (wires an existing `PstnVoice` channel; no number provisioning) |
|
|
252
|
+
| `references/output-report-format.md` | Right before writing the final `report.md` — the two report shapes, templates, and scored-failure list |
|