@salesforce/afv-skills 1.65.1 → 1.66.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/agentforce-offline-experimentation-run/SKILL.md +16 -15
- package/skills/agentforce-offline-experimentation-run/scripts/sfap_replay.py +3 -245
- package/skills/dx-devops-work-item-manage/SKILL.md +34 -17
- package/skills/dx-devops-work-item-manage/examples/common-workflows.md +49 -0
- package/skills/dx-devops-work-item-manage/references/commit-api.md +116 -0
- package/skills/experience-lwc-widget-assess/SKILL.md +79 -0
- package/skills/experience-lwc-widget-migrate/SKILL.md +50 -0
- package/skills/platform-role-hierarchy-apply/SKILL.md +177 -0
- package/skills/platform-widget-generate/SKILL.md +58 -41
- package/skills/platform-widget-generate/references/widget-bundle-validation.md +14 -0
- package/skills/service-agentforce-contact-center-coordinate/SKILL.md +1 -1
- package/skills/service-agentforce-contact-center-coordinate/references/number_management_api.md +11 -1
- package/skills/service-agentforce-contact-center-coordinate/scripts/fetch-numbers.sh +12 -6
- package/skills/service-agentforce-contact-center-coordinate/scripts/lib.sh +16 -0
- package/skills/service-agentforce-contact-center-coordinate/scripts/procure-number.sh +2 -1
- package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +24 -11
- package/skills/service-digital-engagement-channel-configure/SKILL.md +25 -14
- package/skills/service-digital-engagement-channel-configure/references/onboarding_contract.md +143 -0
- package/skills/service-digital-engagement-deployment-configure/SKILL.md +61 -12
- package/skills/service-digital-engagement-deployment-configure/references/connect_api_creation.md +14 -5
- package/skills/service-digital-engagement-deployment-configure/references/onboarding_contract.md +146 -0
- package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +23 -13
- package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md +7 -6
- package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md +9 -10
- package/skills/service-itsm-agentic-setup-incident-management/references/major-incident-management.md +6 -6
- package/skills/service-itsm-agentic-setup-incident-management/references/service-mgmt-privilege.md +1 -1
- package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +34 -25
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +1 -1
- package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +90 -86
- package/skills/service-itsm-agentic-setup-incident-sla-configure/references/workflow.md +63 -38
|
@@ -23,13 +23,30 @@ Configures `EmbeddedServiceConfig` metadata for Salesforce Messaging for In-App
|
|
|
23
23
|
## Scope
|
|
24
24
|
|
|
25
25
|
- **In scope**: Creating new Embedded Service Deployments (API, Mobile, Web types) via Connect API; updating existing deployments with forms, branding, channel settings, and features via Metadata API; generating `EmbeddedServiceConfig` XML for updates
|
|
26
|
-
- **Out of scope**: Creating the messaging channel itself (use `service-digital-engagement-channel-configure`),
|
|
26
|
+
- **Out of scope**: Creating the messaging channel itself (use `service-digital-engagement-channel-configure`), generating the website code snippet (offered only as a next step, see `references/code_snippet.md`), creating Experience Sites (Connect API prerequisite for Web type)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Entry points: delegated or standalone
|
|
31
|
+
|
|
32
|
+
Decide this before asking anything.
|
|
33
|
+
|
|
34
|
+
- **Delegated** — the invocation carries `{ values, context }` with `context.calledFrom == "service-onboarding"`. The admin already approved `values` in the onboarding plan. Ask nothing; skip Clarifying Questions. If a required key is missing, stop and return `failed` naming it — do not guess.
|
|
35
|
+
- **Standalone** — no `context`. Run Clarifying Questions as written.
|
|
36
|
+
|
|
37
|
+
Both paths run the same pre-scan, write and validate steps. Full contract (payload, wording rules, result shape, registration entry): `references/onboarding_contract.md`.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Transport
|
|
42
|
+
|
|
43
|
+
Org reads and writes go through the **headless-360 MCP `dispatch` / `dispatch_readonly`** tools on `/services/data/vXX.0/headless/metadata` (**Transport A, primary**). Use the **`sf` CLI** (**Transport B**) only for a type/verb that a read-only probe shows is not onboarded, or when the MCP is unavailable. Probe each type separately — never infer onboarding from a different type. Details, the GET → modify → full-document PUT rule, and the credential trap are in `references/onboarding_contract.md` §2. The `sf` commands in the steps below are the Transport B form. Exception: Web create always uses the `sf` CLI (step 17a).
|
|
27
44
|
|
|
28
45
|
---
|
|
29
46
|
|
|
30
47
|
## Clarifying Questions
|
|
31
48
|
|
|
32
|
-
Before generating, ask the user if not already clear:
|
|
49
|
+
Before generating, ask the user if not already clear (standalone only):
|
|
33
50
|
|
|
34
51
|
- **Create or update?** Are you creating a new deployment or updating an existing one?
|
|
35
52
|
- **Deployment type?** API (headless), Mobile (native apps), or Web (browser widget)?
|
|
@@ -46,7 +63,7 @@ Gather or infer before proceeding:
|
|
|
46
63
|
|
|
47
64
|
- **Operation**: `create` or `update`
|
|
48
65
|
- **Deployment type**: `API`, `Mobile`, or `Web`
|
|
49
|
-
- **Deployment name**: Used
|
|
66
|
+
- **Deployment name**: Used as `masterLabel`. Derive the API name (`fullName` / `DeveloperName`, Connect `name`) from it: replace each run of characters other than letters and digits with `_`, then trim leading/trailing `_` (`Acme Support Chat` → `Acme_Support_Chat`). The result must match `^[a-zA-Z][a-zA-Z0-9_]*$`. Use the API name for every lookup and write
|
|
50
67
|
- **Channel name**: The `channelPlatformKey` of the associated messaging channel
|
|
51
68
|
|
|
52
69
|
For **update** operations additionally:
|
|
@@ -69,12 +86,22 @@ All steps are sequential. Do not skip or reorder. Branch based on the operation
|
|
|
69
86
|
|
|
70
87
|
1. **Verify org API version** — run `scripts/check-api-version.sh 67.0 <org-alias>` and report any errors it returns. If the script fails, generate a `sfdx-project.json` in the metadata output folder with `"sourceApiVersion": "67.0"`.
|
|
71
88
|
|
|
72
|
-
2. **Determine operation** — ask whether the user wants to create a new deployment or update an existing one.
|
|
89
|
+
2. **Determine operation** — standalone: ask whether the user wants to create a new deployment or update an existing one. Delegated: taken from `values.operation`, then confirmed by the pre-scan (step 4a).
|
|
73
90
|
|
|
74
|
-
3. **Collect inputs** — gather deployment name, type, and channel name per Clarifying Questions above.
|
|
91
|
+
3. **Collect inputs** — standalone: gather deployment name, type, and channel name per Clarifying Questions above. Delegated: bind them from `values`; stop with `failed` if `deploymentName`, `deploymentType` or `channelName` is missing.
|
|
92
|
+
|
|
93
|
+
3a. **Probe transport** — read-only `GET` of `EmbeddedServiceConfig` via `dispatch_readonly`. Onboarded → Transport A. `UNSUPPORTED_OPERATION` or MCP unavailable → Transport B for that call. See `references/onboarding_contract.md` §2.
|
|
75
94
|
|
|
76
95
|
4. **Read deployment settings reference** — load `references/deployment_settings.md` to understand all available configuration options.
|
|
77
96
|
|
|
97
|
+
4a. **Pre-scan** — using the step 3a read, look for a deployment whose API name is the one derived from `deploymentName` (Required Inputs):
|
|
98
|
+
- none → operation is `create` (Phase 2A)
|
|
99
|
+
- exists and every targeted field already matches → **make no write**; return `already-configured` (delegated) or say so plainly (standalone). Skip to Phase 3
|
|
100
|
+
- exists with differences → operation is `update` (Phase 2B); announce each change, then write (standalone: ask for a yes first)
|
|
101
|
+
- exists but linked to a different channel → standalone: ask before repointing; delegated: return `failed`
|
|
102
|
+
|
|
103
|
+
Standalone with an existing deployment: offer no change / override / add to existing.
|
|
104
|
+
|
|
78
105
|
### Phase 2A — Create New Deployment
|
|
79
106
|
|
|
80
107
|
Use this path when the operation is `create`.
|
|
@@ -99,11 +126,11 @@ Use this path when the operation is `create`.
|
|
|
99
126
|
9. **Present output and next steps** — show the generated file and summarize what was configured. Recommend as next steps:
|
|
100
127
|
- **Publish** the deployment via Connect API to make it live:
|
|
101
128
|
```bash
|
|
102
|
-
sf api request rest "/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>" -X POST -o <org-alias>
|
|
129
|
+
sf api request rest "/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>" -X POST -b '{}' -o <org-alias>
|
|
103
130
|
```
|
|
104
131
|
To obtain the `EMBEDDED_SERVICE_CONFIG_ID`:
|
|
105
132
|
```bash
|
|
106
|
-
sf data query --query "SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName = '<DEPLOYMENT_NAME>'" --target-org <org-alias>
|
|
133
|
+
sf data query --use-tooling-api --query "SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName = '<DEPLOYMENT_NAME>'" --target-org <org-alias>
|
|
107
134
|
```
|
|
108
135
|
- **Generate code snippet** for integration — see `references/code_snippet.md`
|
|
109
136
|
|
|
@@ -111,11 +138,11 @@ Use this path when the operation is `create`.
|
|
|
111
138
|
|
|
112
139
|
Use this path when the operation is `update`.
|
|
113
140
|
|
|
114
|
-
10. **Retrieve the existing deployment** —
|
|
141
|
+
10. **Retrieve the existing deployment** — take the current `EmbeddedServiceConfig` from the org before making changes. Transport A: the `xmlRep` from the step 3a/4a `GET`. Transport B:
|
|
115
142
|
```bash
|
|
116
143
|
sf project retrieve start --metadata EmbeddedServiceConfig:<DEPLOYMENT_NAME> --target-org <org-alias>
|
|
117
144
|
```
|
|
118
|
-
Use the
|
|
145
|
+
Use it as the starting structure — the update is always a **full document**, never a minimal payload (omitted inline blocks can be silently cleared). If retrieval is not possible, load `assets/esd_web_update_template.xml` as a fallback reference.
|
|
119
146
|
|
|
120
147
|
11. **Apply messaging channel settings** — configure `<embeddedServiceMessagingChannel>` with:
|
|
121
148
|
- `messagingChannel` — the channel's `channelPlatformKey`
|
|
@@ -146,18 +173,34 @@ Use this path when the operation is `update`.
|
|
|
146
173
|
17. **Present output and next steps** — show the generated file and summarize what was configured. Recommend as next steps:
|
|
147
174
|
- **Publish** the deployment via Connect API to make changes live:
|
|
148
175
|
```bash
|
|
149
|
-
sf api request rest "/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>" -X POST -o <org-alias>
|
|
176
|
+
sf api request rest "/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>" -X POST -b '{}' -o <org-alias>
|
|
150
177
|
```
|
|
151
178
|
To obtain the `EMBEDDED_SERVICE_CONFIG_ID`:
|
|
152
179
|
```bash
|
|
153
|
-
sf data query --query "SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName = '<DEPLOYMENT_NAME>'" --target-org <org-alias>
|
|
180
|
+
sf data query --use-tooling-api --query "SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName = '<DEPLOYMENT_NAME>'" --target-org <org-alias>
|
|
154
181
|
```
|
|
155
182
|
- **Generate code snippet** for integration — see `references/code_snippet.md`
|
|
156
183
|
|
|
184
|
+
### Phase 2C — Apply to the org
|
|
185
|
+
|
|
186
|
+
Runs for both Phase 2A and 2B, except when the pre-scan returned `already-configured`. Standalone: confirm before writing. Delegated: the plan approval is the confirmation; still announce each write.
|
|
187
|
+
|
|
188
|
+
17a. **Write the deployment** —
|
|
189
|
+
- Web create: Connect API (see `references/connect_api_creation.md`) via `sf api request rest` — always, not `dispatch` (MCP `dispatch` fails with `INTERNAL_ERROR` during site creation).
|
|
190
|
+
- API/Mobile create: Transport A `POST` `EmbeddedServiceConfig` (body carries `type`, `fullName`, `xmlRep`); Transport B `sf project deploy start`.
|
|
191
|
+
- Update: Transport A `PUT` of the **full** document; Transport B `sf project deploy start`.
|
|
192
|
+
Check `results[].success`, not just HTTP status. On failure stop and report the step — no silent retry.
|
|
193
|
+
|
|
194
|
+
17b. **Re-read and diff** — `GET` the component again and confirm every intended field landed and no inline block (`embeddedServiceMessagingChannel`, forms) was dropped.
|
|
195
|
+
|
|
196
|
+
17c. **Publish (Web only, only if something was written)** — `dispatch` `POST` on the fully-qualified publish path; if it returns a path/route error, run the `sf` publish command from the next-steps block above. Skip after a Web create alone when the create response has `isPublishSuccess: true` — the create already published.
|
|
197
|
+
|
|
157
198
|
### Phase 3 — Validate
|
|
158
199
|
|
|
159
200
|
18. **Verify against checklist** — confirm all items in the Verification Checklist below pass.
|
|
160
201
|
|
|
202
|
+
19. **Report** — delegated: return `{ "status": "success" | "already-configured" | "failed", "errorMessage": "...", "outputs": { ... } }` (shape in `references/onboarding_contract.md` §5). Standalone: the same outcome in plain language.
|
|
203
|
+
|
|
161
204
|
---
|
|
162
205
|
|
|
163
206
|
## Rules / Constraints
|
|
@@ -174,7 +217,9 @@ Use this path when the operation is `update`.
|
|
|
174
217
|
| Pre-chat form fields must reference valid channel custom parameters | ChoiceList fields need the parameter deployed on the channel first |
|
|
175
218
|
| File extension is `.EmbeddedServiceConfig-meta.xml` | Metadata API uses this specific extension |
|
|
176
219
|
| Do not hardcode file paths — respect `sfdx-project.json` package directories | Customer orgs customize source paths |
|
|
177
|
-
|
|
|
220
|
+
| Do not embed deploy/push commands inside generated files or artifacts | Artifacts stay portable; in-session writes happen in Phase 2C through the chosen transport |
|
|
221
|
+
| Update with the full retrieved document, never a minimal PUT | Omitted inline blocks can be silently cleared by the update |
|
|
222
|
+
| Pre-scan before every write; no write when the org already matches | Makes re-runs idempotent and keeps "already configured" honest |
|
|
178
223
|
| Publish step (Connect API) required after Web ESD updates | Changes are not live until published |
|
|
179
224
|
|
|
180
225
|
---
|
|
@@ -188,6 +233,9 @@ Use this path when the operation is `update`.
|
|
|
188
233
|
| Branding overrides not applied | Use Tooling API to update individual BrandingSet properties after the deployment is created |
|
|
189
234
|
| Pre-chat ChoiceList not showing | ChoiceList requires two-step deploy: create ChoiceList first, then assign to form field |
|
|
190
235
|
| Changes not appearing in widget | Web ESDs must be published via Connect API after any update |
|
|
236
|
+
| `sf api request rest` POST fails with "No 'mode' found in 'body' entry" | The CLI rejects a POST with no body (and `-b ""`). Pass `-b '{}'` — the publish endpoint takes no input |
|
|
237
|
+
| `sf api request rest` fails with "Nonexistent flag: --url" | The URL is a positional argument, not a flag, and must be fully qualified (`/services/data/vXX.0/connect/...`) |
|
|
238
|
+
| Web create via MCP `dispatch` returns `INTERNAL_ERROR` | Platform limitation of the MCP route during site creation — use `sf api request rest` for Web create. API/Mobile create and publish work via `dispatch` |
|
|
191
239
|
| `embeddedServiceFlowConfig.enabled` error | Set to `false` unless you specifically need embedded flows (not routing flows) |
|
|
192
240
|
| reCAPTCHA configuration rejected | reCAPTCHA is `@HideInWsdl` — must use Tooling API |
|
|
193
241
|
| Business hours not taking effect | Only updating existing business hours works; creation is managed separately |
|
|
@@ -246,6 +294,7 @@ File structure follows the templates in `assets/`.
|
|
|
246
294
|
|
|
247
295
|
| File | When to read |
|
|
248
296
|
|------|-------------|
|
|
297
|
+
| `references/onboarding_contract.md` | Delegated mode (`context.calledFrom == "service-onboarding"`), org writes (transport), module registration |
|
|
249
298
|
| `assets/esd_api_mobile_template.xml` | Before generating API or Mobile type deployments |
|
|
250
299
|
| `assets/esd_web_update_template.xml` | Before generating Web type updates |
|
|
251
300
|
| `references/deployment_settings.md` | When configuring deployment options beyond defaults |
|
package/skills/service-digital-engagement-deployment-configure/references/connect_api_creation.md
CHANGED
|
@@ -15,9 +15,11 @@ Web-type Embedded Service Deployments cannot be created via Metadata API due to
|
|
|
15
15
|
## Connect API Endpoint
|
|
16
16
|
|
|
17
17
|
```text
|
|
18
|
-
POST /connect/embeddedmessaging/deployment/setup
|
|
18
|
+
POST /services/data/vXX.0/connect/embeddedmessaging/deployment/setup
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
+
Always use the fully-qualified path (minimum `v67.0`). A bare `/connect/...` path is not routed.
|
|
22
|
+
|
|
21
23
|
### Request Body (Web)
|
|
22
24
|
|
|
23
25
|
```json
|
|
@@ -55,10 +57,13 @@ POST /connect/embeddedmessaging/deployment/setup
|
|
|
55
57
|
|
|
56
58
|
### Using Salesforce CLI (Web)
|
|
57
59
|
|
|
60
|
+
Always create Web deployments with the CLI. The same call through the headless-360 MCP `dispatch` fails with an
|
|
61
|
+
`INTERNAL_ERROR` server error during site creation.
|
|
62
|
+
|
|
58
63
|
```bash
|
|
59
64
|
sf api request rest \
|
|
65
|
+
"/services/data/v67.0/connect/embeddedmessaging/deployment/setup" \
|
|
60
66
|
--method POST \
|
|
61
|
-
--url "/connect/embeddedmessaging/deployment/setup" \
|
|
62
67
|
--body '{"name":"<NAME>","masterLabel":"<LABEL>","deploymentType":"Web","clientVersion":"WebV2","hostDomain":"<DOMAIN>","messagingChannelId":"<CHANNEL_ID>"}' \
|
|
63
68
|
--target-org <org-alias>
|
|
64
69
|
```
|
|
@@ -67,8 +72,8 @@ sf api request rest \
|
|
|
67
72
|
|
|
68
73
|
```bash
|
|
69
74
|
sf api request rest \
|
|
75
|
+
"/services/data/v67.0/connect/embeddedmessaging/deployment/setup" \
|
|
70
76
|
--method POST \
|
|
71
|
-
--url "/connect/embeddedmessaging/deployment/setup" \
|
|
72
77
|
--body '{"name":"<NAME>","masterLabel":"<LABEL>","deploymentType":"API","messagingChannelId":"<CHANNEL_ID>"}' \
|
|
73
78
|
--target-org <org-alias>
|
|
74
79
|
```
|
|
@@ -123,16 +128,20 @@ After creating the Web ESD via Connect API:
|
|
|
123
128
|
After any update to a Web ESD (branding, forms, labels, settings), publish to make changes live:
|
|
124
129
|
|
|
125
130
|
```text
|
|
126
|
-
POST /connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>
|
|
131
|
+
POST /services/data/vXX.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>
|
|
127
132
|
```
|
|
128
133
|
|
|
129
134
|
```bash
|
|
130
135
|
sf api request rest \
|
|
131
|
-
/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID> \
|
|
136
|
+
"/services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<EMBEDDED_SERVICE_CONFIG_ID>" \
|
|
132
137
|
--method POST \
|
|
138
|
+
--body '{}' \
|
|
133
139
|
--target-org <org-alias>
|
|
134
140
|
```
|
|
135
141
|
|
|
142
|
+
The `--body '{}'` is required: a POST with no body (or `--body ""`) fails in the CLI with
|
|
143
|
+
"No 'mode' found in 'body' entry" before any request is sent.
|
|
144
|
+
|
|
136
145
|
---
|
|
137
146
|
|
|
138
147
|
## Known Limitations
|
package/skills/service-digital-engagement-deployment-configure/references/onboarding_contract.md
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Onboarding contract — delegated mode, transport, pre-scan, registration
|
|
2
|
+
|
|
3
|
+
Read this when the invocation carries a `context` object, when you are about to write to the org, or when the
|
|
4
|
+
skill is being registered in an onboarding module. It implements the Feature Setup Skill Guidelines (Conversational
|
|
5
|
+
Onboarding, Service Cloud) for this skill.
|
|
6
|
+
|
|
7
|
+
## 1. Two entry points, one write procedure
|
|
8
|
+
|
|
9
|
+
| | Delegated | Standalone |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Detected by | invocation has `context.calledFrom == "service-onboarding"` | no `context` object |
|
|
12
|
+
| Values come from | `values` in the payload — already approved in the plan table | you ask, using the defaults in SKILL.md |
|
|
13
|
+
| Questions | none. A missing required key is a caller bug: stop and report `failed` naming the key. Never default a value the admin did not approve | the Clarifying Questions in SKILL.md |
|
|
14
|
+
| Wording | `discoveryMode == "guided"` → plain business language (§4). `"pickAreas"` → Salesforce terminology | Salesforce terminology (the Clarifying Questions as written) |
|
|
15
|
+
| Ends with | the structured result in section 5 | a plain-language summary of the same outcome |
|
|
16
|
+
|
|
17
|
+
Both paths converge on the same pre-scan → write → validate procedure. The only difference is where values come from.
|
|
18
|
+
|
|
19
|
+
Delegated payload:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"values": {
|
|
24
|
+
"operation": "create",
|
|
25
|
+
"deploymentType": "Web",
|
|
26
|
+
"deploymentName": "Acme Support Chat",
|
|
27
|
+
"channelName": "Acme_Support_Channel",
|
|
28
|
+
"siteName": "ESW_AcmeSupport_1700000000000"
|
|
29
|
+
},
|
|
30
|
+
"context": { "calledFrom": "service-onboarding", "discoveryMode": "guided" }
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Required `values`: `deploymentName`, `deploymentType`, `channelName`. `deploymentName` is the label; the API name is
|
|
35
|
+
derived from it (SKILL.md Required Inputs: `Acme Support Chat` → `Acme_Support_Chat`). `operation` defaults to `create` when the pre-scan
|
|
36
|
+
finds nothing and `update` when it finds a deployment. `siteName` is required for Web updates. Optional feature keys
|
|
37
|
+
(pre-chat fields, business hours, T&C, branding) are applied only when present — do not invent them.
|
|
38
|
+
|
|
39
|
+
## 2. Transport — `/headless/metadata` first, `sf` CLI as fallback
|
|
40
|
+
|
|
41
|
+
**Transport A (primary): the headless-360 MCP `dispatch` / `dispatch_readonly` tools** against the synchronous
|
|
42
|
+
Metadata-CRUD route, fully-qualified: `/services/data/vXX.0/headless/metadata/<Type>?type=<Type>&fullName=<Name>`.
|
|
43
|
+
|
|
44
|
+
- `GET` = read (`dispatch_readonly`) → `{type, fullName, xmlRep}`. `POST` = create-only (duplicate → `DUPLICATE_VALUE`).
|
|
45
|
+
`PUT` = update. On writes the body must carry `type`, `fullName` **and** `xmlRep`.
|
|
46
|
+
- Response is synchronous: `{results:[{success, errors[], ...}]}`. HTTP 200 can still be a failure — inner `success` wins.
|
|
47
|
+
- **PUT is not a safe merge for `EmbeddedServiceConfig`.** Child collections survive an omitted block but inline
|
|
48
|
+
complex blocks can be silently cleared. Always GET → modify → PUT the **full** document. Never PUT a minimal payload.
|
|
49
|
+
Re-GET after the PUT and diff, so a dropped block is caught here and not in the widget.
|
|
50
|
+
- Use the same `dispatch` tool for the probe and for the write. `sf api request rest` / `curl` carry the `sf` CLI's
|
|
51
|
+
separate credential, which can be expired while the MCP token is valid — a REST URL called through the CLI is
|
|
52
|
+
**not** Transport A.
|
|
53
|
+
|
|
54
|
+
**Probe per type, per operation — do not infer from another type.** Before the first write run a read-only
|
|
55
|
+
`GET` for `EmbeddedServiceConfig` (and for any other type you are about to touch).
|
|
56
|
+
|
|
57
|
+
| Probe result | Meaning | Action |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| `xmlRep` returned, or "Metadata not found" style error | type is onboarded | Transport A |
|
|
60
|
+
| `UNSUPPORTED_OPERATION` for the type or verb | not onboarded for that verb | Transport B for that call only |
|
|
61
|
+
| auth / connection error | MCP unavailable | Transport B; say so |
|
|
62
|
+
|
|
63
|
+
**Transport B (fallback): `sf` CLI** — the retrieve/deploy commands already in SKILL.md. Use it only when the probe
|
|
64
|
+
says Transport A is unavailable for that type/verb, never as a convenience.
|
|
65
|
+
|
|
66
|
+
What is not a transport choice:
|
|
67
|
+
- **Web deployment creation is a Connect API call — send it with `sf api request rest`, not `dispatch`.** Through
|
|
68
|
+
`dispatch` it always fails with an `INTERNAL_ERROR` server error while building the ESW site; the same body via the CLI
|
|
69
|
+
succeeds. Do not try `dispatch` first.
|
|
70
|
+
- **Publish is a Connect API call.** Send it with `dispatch` on the fully-qualified path. If `dispatch` returns a
|
|
71
|
+
path/route error (not a business error), repeat that one call with `sf api request rest`.
|
|
72
|
+
- **Tooling API** work (custom labels, branding, reCAPTCHA) is not verified through `dispatch`. Use `sf` CLI.
|
|
73
|
+
|
|
74
|
+
## 3. Pre-scan (idempotency)
|
|
75
|
+
|
|
76
|
+
Run before any write, both modes. Read `EmbeddedServiceConfig` by `fullName` = the API name derived from `deploymentName` (Transport A GET).
|
|
77
|
+
|
|
78
|
+
| Finding | Outcome |
|
|
79
|
+
|---|---|
|
|
80
|
+
| No such deployment | not set up → create path |
|
|
81
|
+
| Exists, and every targeted field already equals the target (channel link, `isEnabled`, type, and each optional feature supplied) | **already configured** — make no write, return `already-configured` |
|
|
82
|
+
| Exists, some targeted field differs | **drift** — announce each change ("pre-chat form: on → off"), then write. Standalone: ask for a yes first. Delegated: the plan approval covers it |
|
|
83
|
+
| Exists but links a different channel than `channelName` | Standalone: ask before repointing. Delegated: return `failed`, `errorMessage` = "deployment <name> already uses channel <other>" |
|
|
84
|
+
|
|
85
|
+
Standalone, deployment exists: offer exactly three choices — no change / override / add to existing.
|
|
86
|
+
|
|
87
|
+
The metadata read does not say whether the latest edits are **published**. After any write to a Web deployment,
|
|
88
|
+
publish. If nothing was written, do not publish.
|
|
89
|
+
|
|
90
|
+
## 4. Questions in the admin's language (guided mode)
|
|
91
|
+
|
|
92
|
+
Ask about the outcome, not the Salesforce feature. Keep it to a handful; state the default with each.
|
|
93
|
+
|
|
94
|
+
| Instead of | Ask |
|
|
95
|
+
|---|---|
|
|
96
|
+
| "Which deployment type: API, Mobile or Web?" | "Where will customers chat with you — on your website, in a mobile app, or through your own custom app?" (website=Web, mobile app=Mobile, custom=API) |
|
|
97
|
+
| "Associate which `channelPlatformKey`?" | Not asked. Delegated: comes from the channel step. Standalone: "Which messaging channel should this chat use?" listing existing ones |
|
|
98
|
+
| "Enable pre-chat form fields?" | "Do you want to ask customers for their name and email before the chat starts? (Default: yes — name and email.)" |
|
|
99
|
+
| "Enable `isTermsAndConditionsEnabled`?" | "Do customers need to accept terms before chatting? (Default: no.)" |
|
|
100
|
+
| "Business hours record?" | "Should the chat only be offered during your business hours? (Default: no.)" |
|
|
101
|
+
| "Chat invitation conditions" | Skip in guided mode unless the admin raises it. It is a pickAreas/expert option |
|
|
102
|
+
|
|
103
|
+
## 5. Result returned to the coordinator
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"status": "success | already-configured | failed",
|
|
108
|
+
"errorMessage": "<empty unless failed>",
|
|
109
|
+
"outputs": {
|
|
110
|
+
"deploymentName": "Acme_Support_Chat",
|
|
111
|
+
"embeddedServiceConfigId": "<id or null>",
|
|
112
|
+
"published": true
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
`status` and `errorMessage` are the contract. `outputs` is always returned; it is an addition to the documented shape.
|
|
118
|
+
On `failed`: `errorMessage` names the failed step and the platform error; stop; do not retry.
|
|
119
|
+
|
|
120
|
+
## 6. Registration entry (draft for the onboarding team to place in a module)
|
|
121
|
+
|
|
122
|
+
```yaml
|
|
123
|
+
- id: messagingDeployment
|
|
124
|
+
title: "Chat widget for your website or app"
|
|
125
|
+
description: "Create the chat widget (embedded messaging deployment) that customers use to start a messaging conversation: where it appears, what it asks before chat starts, and publishing it live."
|
|
126
|
+
delegateSkill: service-digital-engagement-deployment-configure
|
|
127
|
+
dependsOn: [messagingChannel]
|
|
128
|
+
revisionOwner: service-digital-engagement-deployment-configure
|
|
129
|
+
# org perms: confirm exact names with Digital Engagement licensing (not yet confirmed)
|
|
130
|
+
values:
|
|
131
|
+
deploymentType: { from: signal.messagingSurface, default: "Web" }
|
|
132
|
+
deploymentName: { from: signal.messagingWidgetName, default: "<company> Support Chat" }
|
|
133
|
+
channelName: { from: outputs.messagingChannel.channelName }
|
|
134
|
+
writes: "EmbeddedServiceConfig (Metadata CRUD); Web create via Connect API embeddedmessaging/deployment/setup (sf CLI); publish via Connect API; optional BrandingSet / custom labels via Tooling API"
|
|
135
|
+
gating:
|
|
136
|
+
irreversible: false
|
|
137
|
+
note: "Reversible by disabling the deployment (isEnabled=false). Pre-chat form fields can be deactivated but the form cannot be fully deleted."
|
|
138
|
+
validate:
|
|
139
|
+
check: check-messaging-deployment
|
|
140
|
+
passWhen: "GET EmbeddedServiceConfig fullName=<derived API name> returns isEnabled=true and the embeddedServiceMessagingChannel links values.channelName; for Web, the deployment has been published"
|
|
141
|
+
alternative: "Setup > Embedded Service Deployments > New Deployment > Messaging for In-App and Web; choose the channel, set pre-chat, then Publish."
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Open items for the onboarding team: the `signal.*` keys do not exist in `onboarding-state.schema.json` yet
|
|
145
|
+
(`channels` allows only email/web); the coordinator must accept `outputs` and pass `outputs.messagingChannel.channelName`
|
|
146
|
+
to this skill; org perm names are not yet confirmed.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: service-itsm-agentic-setup-incident-management
|
|
3
|
-
description: "Orchestrator for Incident Management setup in Service Cloud ITSM: presents the features, tracks progress, and configures each — SLA & Milestones, Priority Matrix, Incident preferences, Major Incident Management, Incident persona PSG assignment, Service Management Privilege, and Incident audit tracking. Use for: set up or configure incident management, incident management walkthrough, what incident features can I configure; the incident preference toggles (default field validations, auto-close child incidents, auto-triage, assign with Einstein, restrict assigned group, rich text descriptions); Major Incident Management (approval group + MIM preferences); assigning the Incident Fulfiller or Incident Manager persona PSG; Service Management Privilege / privilege escalation setup. DO NOT TRIGGER for: the master on/off switch (
|
|
3
|
+
description: "Orchestrator for Incident Management setup in Service Cloud ITSM: presents the features, tracks progress, and configures each — SLA & Milestones, Priority Matrix, Incident preferences, Major Incident Management, Incident persona PSG assignment, Service Management Privilege, and Incident audit tracking. Use for: set up or configure incident management, incident management walkthrough, what incident features can I configure; the incident preference toggles (default field validations, auto-close child incidents, auto-triage, assign with Einstein, restrict assigned group, rich text descriptions); Major Incident Management (approval group + MIM preferences); assigning the Incident Fulfiller or Incident Manager persona PSG; Service Management Privilege / privilege escalation setup. DO NOT TRIGGER for: the master on/off switch alone (use the IncidentMgmt SOR), the Priority Matrix, SLA, or field history tracking alone, the Major Incident Manager PSG, creating/editing PSGs, or Problem/Change/Case Management."
|
|
4
4
|
metadata:
|
|
5
5
|
version: "2.1"
|
|
6
6
|
domains: ["Service"]
|
|
@@ -10,7 +10,6 @@ metadata:
|
|
|
10
10
|
- "service-itsm-agentic-setup-cmdb-access-assign"
|
|
11
11
|
- "service-itsm-agentic-setup-incident-sla-configure"
|
|
12
12
|
- "service-itsm-agentic-setup-itsm-agentforce-permset-assign"
|
|
13
|
-
- "service-itsm-incident-mgmt-configure"
|
|
14
13
|
- "service-itsm-incident-priority-configure"
|
|
15
14
|
mcpTools:
|
|
16
15
|
headless-360:
|
|
@@ -52,7 +51,7 @@ until the user is done.
|
|
|
52
51
|
|
|
53
52
|
**Delegated** features hand off to their child skill or SOR. A child skill runs its own confirmations and
|
|
54
53
|
read-backs, so this skill only coordinates. A SOR is a recipe, not an agent: for a SOR hand-off this skill
|
|
55
|
-
runs the SOR's steps itself and owns the confirmation and read-back (see Audit Tracking below).
|
|
54
|
+
runs the SOR's steps itself and owns the confirmation and read-back (see the master switch and Audit Tracking below).
|
|
56
55
|
**Inline** features are run by this skill directly through the `headless-360` MCP server — **read the
|
|
57
56
|
matching reference file before executing that feature** and follow it. Every inline operation is fetched at
|
|
58
57
|
runtime: `discover` by intent, `describe` for the current route/schema/labels, then `dispatch_readonly`
|
|
@@ -105,10 +104,21 @@ and business context that informs which features are relevant.
|
|
|
105
104
|
### 2. Ensure the Incident Management master switch is on (prerequisite)
|
|
106
105
|
|
|
107
106
|
Every feature below depends on the org-level `service-cloud-itsm-incident` master switch being enabled.
|
|
108
|
-
Before showing the menu,
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
Before showing the menu, `discover` the `IncidentMgmt` SOR by intent and `describe` its master-feature
|
|
108
|
+
steps (`read-itsm-incident-feature-status`, `enable-itsm-incident-feature`,
|
|
109
|
+
`verify-itsm-incident-feature-status`). Follow its current invocation and prefix the stored path as its
|
|
110
|
+
version note says (`v67.0` is the minimum and a safe default). A `404` from a version above the org's
|
|
111
|
+
maximum is a version mismatch: retry once at `v67.0` before treating `404` as unavailable.
|
|
112
|
+
Do not use the Service-Foundation `IncidentManagement` look-alike or its broadcast toggles.
|
|
113
|
+
Read the master status via `dispatch_readonly` and decide on `status` first: `ENABLED` is an idempotent
|
|
114
|
+
no-op even if `enableBlockedReasons` is non-empty; `NOT_AVAILABLE` means halt (do not attempt enable);
|
|
115
|
+
for `NOT_ENABLED`, surface any `enableBlockedReasons` as plain text (their messages are HTML-escaped
|
|
116
|
+
markup) and halt if present. Otherwise show the exact off → on change and ask for explicit confirmation before
|
|
117
|
+
running the SOR's enable step via `dispatch`. Re-read via the SOR's verify step and require
|
|
118
|
+
`ENABLED` before continuing. On a declined confirmation, unexpected status, `401`/`403`/`404`,
|
|
119
|
+
failed write, or read-back mismatch, stop without showing the menu; never infer success from
|
|
120
|
+
the write response. **Skip only when the master switch was already confirmed *enabled* in this
|
|
121
|
+
session** (see step 0). A cached "off"/unknown state MUST fall through to the live read.
|
|
112
122
|
|
|
113
123
|
### 3. Present the feature menu as a multi-select
|
|
114
124
|
|
|
@@ -144,8 +154,8 @@ Apply these whenever an inline feature runs; the **Everywhere** rules also apply
|
|
|
144
154
|
hand-off. They are irreversible or silently-wrong if missed.
|
|
145
155
|
|
|
146
156
|
- **Resolve the right node (Preferences).** Target the ITSM Incident Management org-preferences node
|
|
147
|
-
(
|
|
148
|
-
|
|
157
|
+
(the one with the six per-feature toggles), **not** the Service-Foundation look-alike whose toggles
|
|
158
|
+
are broadcast channels plus its own master switch.
|
|
149
159
|
- **Two preferences are one-way / enable-only (Preferences).** *Restrict Assigned Group to Regular Groups*
|
|
150
160
|
and *Enable Rich Text for Incident Descriptions* cannot be turned off once on. Never offer to disable
|
|
151
161
|
them; require an explicit "I understand this can't be undone" confirmation before enabling; never enable
|
|
@@ -189,8 +199,8 @@ hand-off. They are irreversible or silently-wrong if missed.
|
|
|
189
199
|
## Rules
|
|
190
200
|
|
|
191
201
|
- ALWAYS show "(via service-itsm-agentic-setup-incident-management)" in the setup header
|
|
192
|
-
- ALWAYS run the master-switch prerequisite (Behavior step 2) before showing the menu, unless
|
|
193
|
-
already confirmed the switch
|
|
202
|
+
- ALWAYS run the master-switch prerequisite (Behavior step 2) before showing the menu, unless a live
|
|
203
|
+
status read already confirmed the switch ENABLED on this org earlier in this session
|
|
194
204
|
- ALWAYS present the feature menu before configuring any selected feature (the master-switch prerequisite
|
|
195
205
|
is the only permitted action before the menu) — do not assume which feature the user wants, **except**
|
|
196
206
|
when the user named a specific feature, in which case go straight to it (single-select is fine)
|
|
@@ -214,8 +224,8 @@ hand-off. They are irreversible or silently-wrong if missed.
|
|
|
214
224
|
Before emitting any menu or summary, confirm each; adjust the output before sending if any is unchecked.
|
|
215
225
|
|
|
216
226
|
- [ ] The header line ends with `(via service-itsm-agentic-setup-incident-management)`
|
|
217
|
-
- [ ] The master switch was confirmed on (via `
|
|
218
|
-
unless already confirmed earlier in this
|
|
227
|
+
- [ ] The master switch was confirmed on (via the `IncidentMgmt` SOR status/verify steps) before the menu,
|
|
228
|
+
unless a live read already confirmed it ENABLED on this org earlier in this session
|
|
219
229
|
- [ ] The feature menu emitted BOTH the ASCII table AND an `AskUserQuestion` (`multiSelect: true`) in the
|
|
220
230
|
same response (single-select only if the user already named a specific feature)
|
|
221
231
|
- [ ] Each feature row's `Status` reflects the actual tracked state (`Not done`, `In progress`, `Done`)
|
package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md
CHANGED
|
@@ -51,7 +51,7 @@ licensing is part of the orchestrator's **Major Incident Management** feature).
|
|
|
51
51
|
existing assignments (idempotency); assigning the missing backing PSL(s) and then the PSG; verifying by
|
|
52
52
|
read-back.
|
|
53
53
|
- **Out of scope**: the **Major Incident Manager** PSG; creating / editing / recalculating a PSG or its
|
|
54
|
-
membership; enabling ITSM / incident-management features (`
|
|
54
|
+
membership; enabling ITSM / incident-management features (the `IncidentMgmt` SOR's master-feature steps); the
|
|
55
55
|
`IncidentFulfiller` permission **set** for the Fulfiller **agent's** access
|
|
56
56
|
(`service-itsm-agentic-setup-itsm-agentforce-permset-assign`); CMDB access
|
|
57
57
|
(`service-itsm-agentic-setup-cmdb-access-assign`); generic, non-incident permission-set / PSG assignment
|
|
@@ -60,7 +60,8 @@ licensing is part of the orchestrator's **Major Incident Management** feature).
|
|
|
60
60
|
## Preconditions
|
|
61
61
|
|
|
62
62
|
- **ITSM Incident Management must be provisioned** — the incident persona PSGs must exist on the org. If
|
|
63
|
-
neither is found, **stop and
|
|
63
|
+
neither is found, **stop and report that the personas are not provisioned**; the master-feature
|
|
64
|
+
prerequisite is handled by the orchestrator, but enabling it does not prove the PSGs exist.
|
|
64
65
|
- **The acting user must be able to assign permission sets** (the SOR gates writes on it). A write that
|
|
65
66
|
fails with an access error that is not a duplicate → surface it plainly and stop; an admin must do it.
|
|
66
67
|
- **Each backing license consumes a seat.** A seat-exhausted license blocks that persona; report it.
|
|
@@ -68,8 +69,8 @@ licensing is part of the orchestrator's **Major Incident Management** feature).
|
|
|
68
69
|
## Operations (shapes come from `describe`)
|
|
69
70
|
|
|
70
71
|
1. **Resolve which incident persona PSGs exist (read).** Look up the two PSGs by `DeveloperName`
|
|
71
|
-
(`IncidentFulfillerPSG`, `IncidentManagerPSG`) with **no `NamespacePrefix` filter**. None found →
|
|
72
|
-
|
|
72
|
+
(`IncidentFulfillerPSG`, `IncidentManagerPSG`) with **no `NamespacePrefix` filter**. None found →
|
|
73
|
+
stop and report that the personas are not provisioned. Capture each PSG's Id and status.
|
|
73
74
|
2. **Resolve the target user (read).** To exactly one active user. For "me" / "the current user", read the
|
|
74
75
|
API root's identity (the running user's `005…` Id) — **not** the `USER_ID()` SOQL function (Apex-only)
|
|
75
76
|
and **not** the Chatter current-user endpoint (fails when Chatter is off). Zero / multiple → disambiguate.
|
|
@@ -124,13 +125,13 @@ Persona: <Incident Fulfiller | Incident Manager>
|
|
|
124
125
|
```
|
|
125
126
|
|
|
126
127
|
Repeat the `Persona:` block per PSG if both were chosen. Report only what read-back confirmed. If the
|
|
127
|
-
personas are not on the org, say so
|
|
128
|
+
personas are not on the org, say so without claiming master enablement will provision them.
|
|
128
129
|
|
|
129
130
|
## Common failures (surface in plain language)
|
|
130
131
|
|
|
131
132
|
| Symptom | Likely cause | What to tell the user |
|
|
132
133
|
|---------|--------------|-----------------------|
|
|
133
|
-
| No incident PSG on the org |
|
|
134
|
+
| No incident PSG on the org | Incident persona PSGs not provisioned | The incident personas aren't set up yet — stop and report the missing PSGs |
|
|
134
135
|
| Duplicate on assign | User already has that grant | Not an error — report as already assigned |
|
|
135
136
|
| Seat / limit error on a license | An incident license has no free seats | A seat must free up (or more licenses added); the persona is incomplete without it |
|
|
136
137
|
| PSG assigned but some actions missing | A backing license wasn't assigned, or the PSG is still recalculating | Confirm every backing license is assigned; if it's settling, retry in a moment |
|
package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md
CHANGED
|
@@ -6,7 +6,7 @@ Incident Management preferences** (the feature toggles on the Incident Managemen
|
|
|
6
6
|
four meta-tools (`discover`, `describe`, `dispatch_readonly`, `dispatch`). The org comes from the OAuth JWT
|
|
7
7
|
on the MCP session — never handle an org id, alias, or credentials. Minimum API version **67.0**.
|
|
8
8
|
|
|
9
|
-
This is **not** the master Incident Management on/off switch (
|
|
9
|
+
This is **not** the master Incident Management on/off switch (the master-feature steps of the `IncidentMgmt` SOR) nor
|
|
10
10
|
the Incident Priority Matrix (`service-itsm-incident-priority-configure`).
|
|
11
11
|
|
|
12
12
|
## Delegate to the Setup Operation Recipe
|
|
@@ -20,17 +20,16 @@ id; a `discover` miss is not proof an operation is unavailable.
|
|
|
20
20
|
|
|
21
21
|
| SOR | Owns | Status |
|
|
22
22
|
|-----|------|--------|
|
|
23
|
-
| **`IncidentMgmt`**
|
|
23
|
+
| **`IncidentMgmt`** | Read a preference; toggle a preference; verify a preference read-back | Served |
|
|
24
24
|
|
|
25
25
|
Discover by intent — e.g. `discover("configure ITSM incident management preferences: automatically triage
|
|
26
26
|
incidents, assign incidents with Einstein, enable rich text for incident descriptions")`.
|
|
27
27
|
|
|
28
28
|
> **Resolve the right node — load-bearing.** Two setup nodes share the "Incident" name. Target the
|
|
29
|
-
> **ITSM Incident Management org-preferences** node
|
|
30
|
-
>
|
|
31
|
-
> (`
|
|
32
|
-
>
|
|
33
|
-
> the wrong node.
|
|
29
|
+
> **ITSM Incident Management org-preferences** node whose toggles are the six below — **not** the
|
|
30
|
+
> Service-Foundation "Incident Management" node, whose toggles are broadcast/notification channels
|
|
31
|
+
> (Email/Sites/Alerts/Slack). The `IncidentMgmt` SOR also owns the master on/off switch; a `discover`
|
|
32
|
+
> result about broadcast channels is the wrong node.
|
|
34
33
|
|
|
35
34
|
## Operations (shapes come from `describe`)
|
|
36
35
|
|
|
@@ -78,7 +77,7 @@ phrasing and the known-name enumeration.
|
|
|
78
77
|
surface the raw access error and stop.
|
|
79
78
|
- **Incident Management provisioned**: these preferences are writable only when Incident Management is
|
|
80
79
|
enabled at the feature/license level. If reads or writes fail with an availability error, say the feature
|
|
81
|
-
must be enabled first (`
|
|
80
|
+
must be enabled first (the `IncidentMgmt` SOR's master-feature steps) and stop.
|
|
82
81
|
|
|
83
82
|
## Workflow
|
|
84
83
|
|
|
@@ -124,7 +123,7 @@ and what it means (e.g. "that setting can't be turned on once incidents exist").
|
|
|
124
123
|
|---------|--------------|-----------------------|
|
|
125
124
|
| Enable of "Restrict Assigned Group…" fails | The org already has Incident records (server freezes it) | That setting can only be turned on before any incidents exist; it can't be enabled now |
|
|
126
125
|
| Read/write blocked with an access error | Caller lacks ITSM setup access | An admin with setup access must make this change |
|
|
127
|
-
| Read/write unavailable on the org | Incident Management not enabled | Enable Incident Management first
|
|
126
|
+
| Read/write unavailable on the org | Incident Management not enabled | Enable Incident Management first through the `IncidentMgmt` SOR's master-feature steps |
|
|
128
127
|
| Change didn't persist on read-back | Write did not take | Report it as failed and show the current state; do not claim success |
|
|
129
128
|
| `dispatch*` auth error | headless-360 session not authenticated / expired | Re-authenticate the connection and confirm it points at the intended org |
|
|
130
129
|
|
|
@@ -144,5 +143,5 @@ missing setup access or an unauthenticated session. A `404` = the operation is n
|
|
|
144
143
|
- Read or write against the Service-Foundation `IncidentManagement` node (broadcast channels) — wrong node.
|
|
145
144
|
- Read or write any preference name the SOR does not list — an unknown name reads as `false` and is
|
|
146
145
|
rejected on write.
|
|
147
|
-
- Toggle the **master** Incident Management switch
|
|
146
|
+
- Toggle the **master** Incident Management switch as part of this preferences feature (use the orchestrator's prerequisite over the `IncidentMgmt` SOR) or the
|
|
148
147
|
**Incident Priority Matrix** (`service-itsm-incident-priority-configure`).
|
|
@@ -25,7 +25,7 @@ routes are not always ranked first; only a `404` from the dispatch itself means
|
|
|
25
25
|
Read each step's `status` from `describe`: `implemented` = live; `proposed` = not served on every org yet.
|
|
26
26
|
|
|
27
27
|
> **MIM is configured by the two surfaces below.** The only feature that must be *on* first is **base**
|
|
28
|
-
> Incident Management (
|
|
28
|
+
> Incident Management (the master-feature steps of the `IncidentMgmt` SOR) — see Preconditions.
|
|
29
29
|
|
|
30
30
|
### Transports MIM uses (all via the same `dispatch*` tools)
|
|
31
31
|
|
|
@@ -44,7 +44,7 @@ Read each step's `status` from `describe`: `implemented` = live; `proposed` = no
|
|
|
44
44
|
precondition, licensing approvers with the **Major Incident Manager permission-set license** and standing
|
|
45
45
|
up the approvers **public group**. Verify every write by read-back.
|
|
46
46
|
- **Out of scope**: base Incident Management enablement
|
|
47
|
-
(`
|
|
47
|
+
(the `IncidentMgmt` SOR's master-feature steps — a prerequisite); the Incident Fulfiller / Incident Manager
|
|
48
48
|
**persona** PSG (the orchestrator's **Persona** feature — see `references/incident-persona-psg.md`);
|
|
49
49
|
Problem / Change / Case Management; the Priority Matrix; SLA / entitlement setup; any MIM org preference
|
|
50
50
|
**other than** the two allowlisted.
|
|
@@ -53,8 +53,8 @@ Read each step's `status` from `describe`: `implemented` = live; `proposed` = no
|
|
|
53
53
|
|
|
54
54
|
The acting user needs **ITSM setup access** (the SOR gates every MIM route on it), and:
|
|
55
55
|
|
|
56
|
-
1. **Base Incident Management must be enabled** — MIM layers on it.
|
|
57
|
-
`
|
|
56
|
+
1. **Base Incident Management must be enabled** — MIM layers on it. The orchestrator first follows the
|
|
57
|
+
`IncidentMgmt` SOR's read/confirm/enable/verify prerequisite; stop if it cannot confirm ENABLED.
|
|
58
58
|
2. **Approvers must hold the Major Incident Manager permission-set license.** This is a **LICENSE** —
|
|
59
59
|
granted via `PermissionSetLicenseAssign` (`{AssigneeId, PermissionSetLicenseId}`), **never** a
|
|
60
60
|
`PermissionSetAssignment`. Group-user validation requires every direct and transitive user of a group
|
|
@@ -135,7 +135,7 @@ Major Incident Management
|
|
|
135
135
|
```
|
|
136
136
|
|
|
137
137
|
Report only what read-back confirmed; omit lines for surfaces out of the requested scope. If base Incident
|
|
138
|
-
Management
|
|
138
|
+
Management cannot be confirmed on, say so and stop without configuring MIM.
|
|
139
139
|
|
|
140
140
|
## Common failures (surface in plain language)
|
|
141
141
|
|
|
@@ -158,5 +158,5 @@ Management is off, say so and name `service-itsm-incident-mgmt-configure`.
|
|
|
158
158
|
- Designate a **group** approver without `validate-group-users` returning **true** first.
|
|
159
159
|
- Reassign without removing the existing designation first (create is a silent no-op).
|
|
160
160
|
- Send any preference name other than `AutoCreationOfProblem` / `AutoClosureChildIncidents`.
|
|
161
|
-
- Attempt MIM setup when base Incident Management is off —
|
|
161
|
+
- Attempt MIM setup when base Incident Management is off — first complete the `IncidentMgmt` master-feature prerequisite.
|
|
162
162
|
- Pass `dispatch` the `{operation_id, arguments}` shape — it takes raw HTTP.
|
package/skills/service-itsm-agentic-setup-incident-management/references/service-mgmt-privilege.md
CHANGED
|
@@ -70,7 +70,7 @@ keyed on the org preference **`PrivilegeAssignmentEnabled`**.
|
|
|
70
70
|
- **In scope**: read / set the **Enable Privilege Assignment** master toggle; read / set the org-wide
|
|
71
71
|
**escalation level**; list / create / update / delete **Service Management Privilege** definitions; bulk
|
|
72
72
|
**add / remove employee assignments** for a privilege; verify by read-back where one exists.
|
|
73
|
-
- **Out of scope**: base Incident Management enablement (`
|
|
73
|
+
- **Out of scope**: base Incident Management enablement (the `IncidentMgmt` SOR's master-feature steps); the
|
|
74
74
|
Incident Fulfiller / Incident Manager **persona** PSG (the orchestrator's **Persona** feature); the Major
|
|
75
75
|
Incident Manager approver licensing (the **Major Incident Management** feature); Problem / Change / Case
|
|
76
76
|
Management; the Priority Matrix; SLA setup.
|