@salesforce/afv-skills 1.66.0 → 1.67.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 +2 -4
- package/skills/agentforce-offline-experimentation-run/SKILL.md +13 -28
- package/skills/commerce-react-storefront-create/SKILL.md +350 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +2 -2
- package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +28 -16
- package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +18 -1
- package/skills/education-cloud-domain-configure/SKILL.md +21 -23
- package/skills/education-cloud-domain-configure/references/dependent-features.md +9 -0
- package/skills/education-cloud-domain-configure/references/domain-features.md +15 -0
- package/skills/education-cloud-domain-configure/references/gotchas-extended.md +8 -0
- package/skills/education-cloud-domain-configure/references/setup-widgets.md +123 -0
- package/skills/experience-search-coordinate/SKILL.md +2 -2
- package/skills/experience-search-coordinate/references/media-route.md +30 -4
- package/skills/experience-ui-bundle-features-generate/SKILL.md +1 -1
- package/skills/experience-ui-bundle-mfa-configure/SKILL.md +1 -1
- package/skills/platform-metadata-deploy/README.md +1 -1
- package/skills/platform-metadata-deploy/SKILL.md +114 -15
- package/skills/platform-metadata-deploy/references/agent-deployment-guide.md +3 -4
- package/skills/platform-metadata-deploy/references/orchestration.md +2 -3
- package/skills/platform-value-set-generate/SKILL.md +19 -19
- package/skills/platform-widget-generate/SKILL.md +25 -51
- package/skills/platform-widget-generate/examples/formulas.json +19 -2
- package/skills/platform-widget-generate/examples/localized-labels.json +57 -0
- package/skills/platform-widget-generate/references/widget-actions.md +29 -0
- package/skills/platform-widget-generate/references/widget-bundle-validation.md +1 -0
- package/skills/platform-widget-generate/references/widget-formulas.md +24 -7
- package/skills/platform-widget-generate/references/widget-gotchas.md +10 -0
- package/skills/platform-widget-generate/references/widget-labels.md +78 -0
- package/skills/platform-widget-generate/references/widget-styling.md +12 -0
- package/skills/sales-call-scoring-configure/SKILL.md +17 -10
- package/skills/sales-call-scoring-configure/scripts/enable-call-scoring.sh +55 -33
- package/skills/service-digital-engagement-channel-configure/SKILL.md +4 -2
- package/skills/service-digital-engagement-channel-configure/references/channel_settings.md +13 -2
- package/skills/service-digital-engagement-deployment-configure/SKILL.md +37 -100
- package/skills/service-digital-engagement-deployment-configure/assets/esd_web_update_template.xml +83 -8
- package/skills/service-digital-engagement-deployment-configure/examples/esd_web_prechat_fields.xml +74 -0
- package/skills/service-digital-engagement-deployment-configure/references/connect_api_creation.md +13 -3
- package/skills/service-digital-engagement-deployment-configure/references/deployment_settings.md +13 -78
- package/skills/service-digital-engagement-deployment-configure/references/onboarding_contract.md +5 -6
- package/skills/service-digital-engagement-deployment-configure/references/prechat_forms.md +245 -0
- package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +164 -120
- package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +61 -37
- package/skills/service-itsm-agentic-setup-incident-management/references/audit-tracking.md +42 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/broadcast-communications.md +23 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/email-to-incident.md +23 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/incident-dashboards.md +25 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md +30 -146
- package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md +32 -136
- package/skills/service-itsm-agentic-setup-incident-management/references/major-incident-management.md +32 -155
- package/skills/service-itsm-agentic-setup-incident-management/references/manage-incidents-with-ai.md +45 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/priority-matrix.md +32 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/service-mgmt-privilege.md +30 -140
- package/skills/service-itsm-agentic-setup-incident-management/references/sla-milestones.md +110 -0
package/skills/service-itsm-agentic-setup-incident-management/references/broadcast-communications.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Feature: Broadcast Communications (delegated to the `service-itsm-broadcast-communications-setup` SOR)
|
|
2
|
+
|
|
3
|
+
How the orchestrator runs the **Broadcast Communications** feature over the
|
|
4
|
+
`service-itsm-broadcast-communications-setup` SOR — never the Service-Foundation `IncidentManagement`
|
|
5
|
+
look-alike's broadcast toggles. The SOR's own steps and guidance decide *how*; the orchestrator runs them
|
|
6
|
+
itself under its **SOR hand-off protocol** and owns every user-facing gate. This file adds what is specific
|
|
7
|
+
to Broadcast Communications.
|
|
8
|
+
|
|
9
|
+
1. `discover` the SOR by intent (e.g. "set up ITSM broadcast communications") and `describe` the id
|
|
10
|
+
`discover` returns. Its own prerequisite checks fall under protocol step 2.
|
|
11
|
+
2. **Phase 1 — turn it on, before asking about anything else.** Read the feature (`get-feature-status`).
|
|
12
|
+
Already on → Phase 2 with no question. Non-empty `enableBlockedReasons` or `dependencyStatuses` → name
|
|
13
|
+
the unmet prerequisite in plain language and stop. Otherwise say it's off and that turning it on **can't
|
|
14
|
+
be undone** (Salesforce Go has no way to turn it off), get an explicit yes, run `enable-feature`, and
|
|
15
|
+
require `verify-enabled` to read it on. Never turn the feature off, even when asked — offer to turn off a
|
|
16
|
+
channel or object, or to revoke sender access, instead.
|
|
17
|
+
3. **Phase 2 — configure only what the user picks** (`AskUserQuestion`, multi-select; never everything by
|
|
18
|
+
default): **sender access** for the users they name (resolve each name, username, or email to exactly
|
|
19
|
+
one user, or ask; the license goes on before the *Broadcast Communication Sender* permission set, a
|
|
20
|
+
duplicate is success, and only that permission set is ever assigned), **channels** (Email, In-app,
|
|
21
|
+
Slack, Microsoft Teams — Slack delivers only with a connected Slack org), and **objects** (Incident,
|
|
22
|
+
Change Request). For each: read, skip it if already set, confirm, write, and read back.
|
|
23
|
+
4. This is setup only — it sends no broadcast.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Feature: Email-to-Incident (delegated to the `EmailToIncident` SOR)
|
|
2
|
+
|
|
3
|
+
How the orchestrator runs the **Email-to-Incident** feature, which turns incoming email into Incidents. The
|
|
4
|
+
`EmailToIncident` SOR's own steps and guidance decide *how*; the orchestrator runs them itself under its
|
|
5
|
+
**SOR hand-off protocol** and owns every user-facing gate. This file adds what is specific to
|
|
6
|
+
Email-to-Incident.
|
|
7
|
+
|
|
8
|
+
1. `discover` the SOR by intent (e.g. "email to incident settings routing address") and `describe` the id
|
|
9
|
+
`discover` returns (`EmailToIncident`).
|
|
10
|
+
2. **Settings.** Read them (`get-email-to-incident-setting`) and ask which to change. Turning on
|
|
11
|
+
Email-to-Incident itself (`enableEmailToIncident`) **can't be undone** — say so before asking. The save
|
|
12
|
+
(`save-email-to-incident-setting`) replaces the whole settings map: send back every field the read
|
|
13
|
+
returned (the set differs by release), changing only what the user chose, and on releases that have
|
|
14
|
+
them, the draft-email, sender-error-notification, and signature settings each need Email-to-Incident on.
|
|
15
|
+
Validate any choice-list value against the SOR's value-set reads. Confirm the full before → after
|
|
16
|
+
change, save, and read back with `verify-save-setting`.
|
|
17
|
+
3. **Routing addresses — only if the user wants them.** List the existing addresses
|
|
18
|
+
(`get-all-routing-addresses`) and the assignable queues (`get-incident-queue-ids`, the only source for
|
|
19
|
+
the assignee), then create or update one with the user's routing name, email address, and default
|
|
20
|
+
Urgency and Impact (the org's picklist values). An update replaces the whole row, so send every field.
|
|
21
|
+
Read each change back with its `verify-*-routing-address` step. A delete is **irreversible** — confirm
|
|
22
|
+
it explicitly. Re-sending an address's verification email sends a real email: do it only on an explicit
|
|
23
|
+
request.
|
package/skills/service-itsm-agentic-setup-incident-management/references/incident-dashboards.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Feature: Incident Dashboards (delegated to two SORs, one per persona)
|
|
2
|
+
|
|
3
|
+
How the orchestrator runs the **Incident Dashboards** feature over `itsm-incident-dashboard-enablement`
|
|
4
|
+
(Incident Manager) and `itsm-incident-fulfiller-dashboard-enablement` (Incident Fulfiller). Each SOR's own
|
|
5
|
+
steps and guidance decide *how*; the orchestrator runs them itself under its **SOR hand-off protocol** and
|
|
6
|
+
owns every user-facing gate. This file adds what is specific to the dashboards.
|
|
7
|
+
|
|
8
|
+
1. Unless the user already said, ask which (`AskUserQuestion`): the **Incident Manager** dashboards (the
|
|
9
|
+
Incident Manager dashboards and the Home page dashboards — `itsm-incident-dashboard-enablement`), the
|
|
10
|
+
**Incident Fulfiller** dashboards (the fulfiller work view and the fulfiller Home page —
|
|
11
|
+
`itsm-incident-fulfiller-dashboard-enablement`), or both. `discover` and `describe` each chosen SOR
|
|
12
|
+
(e.g. "turn on incident manager dashboards", "turn on incident fulfiller dashboards").
|
|
13
|
+
2. Each SOR turns on two org preferences, one at a time. `check-dashboard-preference` first confirms that
|
|
14
|
+
Dynamic Dashboards for IT Service (`service-cloud-itsm-dashboard`) reads exactly `ENABLED`; it turns on
|
|
15
|
+
with IT Service Enablement, so never enable it or ask about it, and any other result stops the feature.
|
|
16
|
+
Then read each preference, skip any already on, ask the SOR's question before each write that turns one
|
|
17
|
+
on (`update-dashboard-preference`), and read each back (`verify-dashboard-preference`). Turn on only the
|
|
18
|
+
persona the user chose.
|
|
19
|
+
3. After both preferences of a SOR are handled, run its `verify-dashboards-materialized` query. The
|
|
20
|
+
dashboards deploy asynchronously, so report the titles it finds; if they are still missing after its
|
|
21
|
+
retries, say the preference is set but the dashboards are not confirmed to exist, give the user the same
|
|
22
|
+
query, and point them to All Dashboards (App Launcher → Dashboards). A user sees the dashboards only
|
|
23
|
+
with the ITSM console-view permission (a separate grant). If the write returns a dynamic-dashboard limit
|
|
24
|
+
error, report it: freeing a slot (converting a dynamic dashboard to static, or deleting an unused one) is
|
|
25
|
+
a manual admin step — never retry or remediate it here.
|
package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md
CHANGED
|
@@ -1,118 +1,31 @@
|
|
|
1
|
-
# Feature: Incident Persona PSG
|
|
2
|
-
|
|
3
|
-
How the orchestrator
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
`
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
> activates** — the persona is silently half-provisioned, and Salesforce does not auto-assign a PSG's
|
|
30
|
-
> member PSLs. **Assign the union of the member sets' backing PSLs first, then the PSG.** The PSL set
|
|
31
|
-
> differs per PSG and the Ids differ per org, so resolve it at runtime — never hardcode it.
|
|
32
|
-
|
|
33
|
-
## The two Incident Management persona PSGs
|
|
34
|
-
|
|
35
|
-
Both are Core-shipped in namespace `force` — query by `DeveloperName` with **no** `NamespacePrefix` filter
|
|
36
|
-
(which would exclude them). Resolve each PSG's Id, its member permission sets, and their backing license Ids
|
|
37
|
-
at **runtime**.
|
|
38
|
-
|
|
39
|
-
| Persona | PSG (`DeveloperName`) | Grants |
|
|
40
|
-
|---------|-----------------------|--------|
|
|
41
|
-
| Incident Fulfiller | `IncidentFulfillerPSG` | Work incidents as a fulfiller (incident + problem/change/release associators, major-incident proposer) |
|
|
42
|
-
| Incident Manager | `IncidentManagerPSG` | Manage the incident-management process and its records |
|
|
43
|
-
|
|
44
|
-
The **Major Incident Manager** PSG (`MajorIncidentManagerPSG`) is **out of scope** here (its approver
|
|
45
|
-
licensing is part of the orchestrator's **Major Incident Management** feature).
|
|
46
|
-
|
|
47
|
-
## Scope
|
|
48
|
-
|
|
49
|
-
- **In scope**: resolving which incident persona PSG(s) exist on the org; resolving the target user;
|
|
50
|
-
resolving each chosen PSG's member permission sets and their backing licenses at runtime; checking
|
|
51
|
-
existing assignments (idempotency); assigning the missing backing PSL(s) and then the PSG; verifying by
|
|
52
|
-
read-back.
|
|
53
|
-
- **Out of scope**: the **Major Incident Manager** PSG; creating / editing / recalculating a PSG or its
|
|
54
|
-
membership; enabling ITSM / incident-management features (the `IncidentMgmt` SOR's master-feature steps); the
|
|
55
|
-
`IncidentFulfiller` permission **set** for the Fulfiller **agent's** access
|
|
56
|
-
(`service-itsm-agentic-setup-itsm-agentforce-permset-assign`); CMDB access
|
|
57
|
-
(`service-itsm-agentic-setup-cmdb-access-assign`); generic, non-incident permission-set / PSG assignment
|
|
58
|
-
(`dx-org-permission-set-assign`).
|
|
59
|
-
|
|
60
|
-
## Preconditions
|
|
61
|
-
|
|
62
|
-
- **ITSM Incident Management must be provisioned** — the incident persona PSGs must exist on the org. If
|
|
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.
|
|
65
|
-
- **The acting user must be able to assign permission sets** (the SOR gates writes on it). A write that
|
|
66
|
-
fails with an access error that is not a duplicate → surface it plainly and stop; an admin must do it.
|
|
67
|
-
- **Each backing license consumes a seat.** A seat-exhausted license blocks that persona; report it.
|
|
68
|
-
|
|
69
|
-
## Operations (shapes come from `describe`)
|
|
70
|
-
|
|
71
|
-
1. **Resolve which incident persona PSGs exist (read).** Look up the two PSGs by `DeveloperName`
|
|
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.
|
|
74
|
-
2. **Resolve the target user (read).** To exactly one active user. For "me" / "the current user", read the
|
|
75
|
-
API root's identity (the running user's `005…` Id) — **not** the `USER_ID()` SOQL function (Apex-only)
|
|
76
|
-
and **not** the Chatter current-user endpoint (fails when Chatter is off). Zero / multiple → disambiguate.
|
|
77
|
-
3. **Resolve the chosen PSG's member licenses (read).** From the PSG's member permission sets, collect the
|
|
78
|
-
**distinct, non-null backing permission-set-license Ids** — the link is each member permission set's
|
|
79
|
-
`LicenseId`. Do **not** traverse the license's `Name`/`DeveloperName` from the member (that relationship
|
|
80
|
-
rejects); resolve the license label separately by Id. No members → the bundle is empty; surface and stop.
|
|
81
|
-
4. **Check existing assignments (read — idempotency).** Whether the PSG is already assigned, and which
|
|
82
|
-
backing licenses the user already holds. Write only what is missing.
|
|
83
|
-
5. **Assign the missing backing licenses, then the PSG (write — confirm first).** Assign each **missing
|
|
84
|
-
backing license first**, then the PSG (keyed on `PermissionSetGroupId`). A duplicate = already-assigned
|
|
85
|
-
(idempotent success). A seat/limit error on a license = exhausted; stop and report — do not retry.
|
|
86
|
-
6. **Verify (read).** Re-read the PSG assignment and every backing license for the user, and re-read the
|
|
87
|
-
PSG's status. Provisioned only when all read back. If `Status` is still `Updating`, tell the user
|
|
88
|
-
effective permissions are settling and will be active shortly.
|
|
89
|
-
|
|
90
|
-
If the user picks **both** personas, run steps 3–6 once **per PSG** (the bundles have different member
|
|
91
|
-
licenses) and report each.
|
|
92
|
-
|
|
93
|
-
## Invariants — the contract (these do NOT come from `describe`)
|
|
94
|
-
|
|
95
|
-
- **Assign the backing licenses before the PSG — correctness ordering, not a platform gate.** The PSG
|
|
96
|
-
sticks on its own, but any member-set permission whose backing license the user lacks **never activates**.
|
|
97
|
-
Salesforce neither rejects the PSG assignment for a missing license nor auto-assigns the licenses.
|
|
98
|
-
- **A PSG assignment keys on the permission-set-*group* Id, never a permission-set Id.**
|
|
99
|
-
- **Query the persona PSGs by `DeveloperName` with no `NamespacePrefix` filter** (namespace `force`).
|
|
100
|
-
- **Idempotent** — read before every write; a duplicate is already-assigned success, not a failure.
|
|
101
|
-
- **The PSG recalculates asynchronously** after an assignment; effective permissions can be stale until its
|
|
102
|
-
status settles.
|
|
103
|
-
- **Verify by read-back** — the write response alone is not proof (half-provisioning / recalculation).
|
|
104
|
-
- **Resolve the backing-license set at runtime** — it differs per PSG and Ids differ per org; never hardcode.
|
|
105
|
-
|
|
106
|
-
## Clarifying questions
|
|
107
|
-
|
|
108
|
-
- **Which user?** A username / name / email resolving to exactly one active user; for "me", the running user.
|
|
109
|
-
- **Which persona(s)?** For a generic request, do **not** auto-select — present an `AskUserQuestion` menu of
|
|
110
|
-
the incident PSGs that **exist on the org** (Fulfiller = work incidents; Manager = manage the process),
|
|
111
|
-
multi-select (one or both). Never offer the Major Incident Manager PSG.
|
|
112
|
-
- **Which org?** Confirm it and state plainly the org will be **modified** (a PSG + licenses are writes;
|
|
113
|
-
each license consumes a seat). For production, get explicit confirmation.
|
|
114
|
-
|
|
115
|
-
## Output expectations
|
|
1
|
+
# Feature: Incident Persona PSG (delegated to the `service-itsm-incident-persona-assign` SOR)
|
|
2
|
+
|
|
3
|
+
How the orchestrator runs the **Incident Persona PSG** feature: giving one user the **Incident Fulfiller**
|
|
4
|
+
or **Incident Manager** persona — its permission set group (PSG) plus the permission-set licenses its
|
|
5
|
+
member sets need. The `service-itsm-incident-persona-assign` SOR's own steps and guidance decide *how* —
|
|
6
|
+
the PSG lookup, the user and license resolution, licenses before the PSG, and the read-back; the
|
|
7
|
+
orchestrator runs them itself under its **SOR hand-off protocol** and owns every user-facing gate. This file
|
|
8
|
+
adds what is specific to the personas.
|
|
9
|
+
|
|
10
|
+
1. `discover` the SOR by intent (e.g. "assign the Incident Fulfiller or Incident Manager persona to a
|
|
11
|
+
user") and `describe` the id `discover` returns (`service-itsm-incident-persona-assign`).
|
|
12
|
+
2. Find the personas (`resolve-incident-persona-psgs`). If neither PSG exists, stop and report that the
|
|
13
|
+
incident personas aren't provisioned on this org. Don't follow the hand-off that step names for this
|
|
14
|
+
case: Behavior step 2 already confirmed Incident Management is on, and turning it on doesn't prove the
|
|
15
|
+
PSGs exist.
|
|
16
|
+
3. Unless the user named one, ask which persona (`AskUserQuestion`, multi-select), offering only the PSGs
|
|
17
|
+
that exist — Fulfiller works incidents, Manager runs the process. Never auto-select, and never offer the
|
|
18
|
+
Major Incident Manager PSG (that approver license is part of **Major Incident Management**). Resolve the
|
|
19
|
+
user to exactly one active user (`resolve-target-user`, or `resolve-current-user` for "me"); on zero or
|
|
20
|
+
several matches, ask.
|
|
21
|
+
4. For each chosen PSG, separately: resolve its backing licenses, check what the user already has, and check
|
|
22
|
+
seats only on the licenses still missing — a license the user already holds needs no free seat. If the
|
|
23
|
+
PSG has no member sets, say so and stop that persona. Confirm the exact grants and that this org is
|
|
24
|
+
modified (each license uses a seat; explicit confirmation for production), then run
|
|
25
|
+
`assign-backing-psl`, `assign-persona-psg`, and `verify-persona-assignment`.
|
|
26
|
+
5. Report with the block below — one `Persona:` block per PSG — only what read-back confirmed. If the PSG's
|
|
27
|
+
status still reads `Updating`, the grant is in place and its permissions are settling: say so rather than
|
|
28
|
+
failing it. An access error that isn't a duplicate means an admin must make the assignment.
|
|
116
29
|
|
|
117
30
|
```text
|
|
118
31
|
Incident Management Persona Assignment
|
|
@@ -124,34 +37,5 @@ Persona: <Incident Fulfiller | Incident Manager>
|
|
|
124
37
|
Effective permissions ............. Active | Recalculating (settles shortly)
|
|
125
38
|
```
|
|
126
39
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
## Common failures (surface in plain language)
|
|
131
|
-
|
|
132
|
-
| Symptom | Likely cause | What to tell the user |
|
|
133
|
-
|---------|--------------|-----------------------|
|
|
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 |
|
|
135
|
-
| Duplicate on assign | User already has that grant | Not an error — report as already assigned |
|
|
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 |
|
|
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 |
|
|
138
|
-
| Access error on the PSG write (not a duplicate) | Acting user can't assign permission sets | An admin must grant that or perform the assignment |
|
|
139
|
-
| `dispatch*` auth error | headless-360 session not authenticated / expired | Re-authenticate the connection and confirm it points at the intended org |
|
|
140
|
-
|
|
141
|
-
## Reading `dispatch` results
|
|
142
|
-
|
|
143
|
-
Responses come back wrapped as `{ status_code, body }`; read what you need from `body`. A write success is a
|
|
144
|
-
created record. A `400` carrying a duplicate code = already-assigned (treat as success). A seat/limit error
|
|
145
|
-
on a license = no free seats (report used-vs-total; do not retry). An access error that is **not** a
|
|
146
|
-
duplicate on the PSG write = the acting user can't assign permission sets (an admin must). A `404` = the
|
|
147
|
-
operation isn't available on this org.
|
|
148
|
-
|
|
149
|
-
## Dead ends — do NOT do these
|
|
150
|
-
|
|
151
|
-
- Assign the PSG with a permission-set Id — a PSG assignment keys on the group Id.
|
|
152
|
-
- Assign the PSG without its members' backing licenses — it silently half-provisions the persona.
|
|
153
|
-
- Hardcode the backing-license list, or add a `NamespacePrefix` filter to the PSG lookup.
|
|
154
|
-
- Create, edit, or recalculate the PSG or its membership — this feature only **assigns** the standard
|
|
155
|
-
incident PSGs.
|
|
156
|
-
- Retry a write that failed with a seat/limit error — the shortage is real; surface it.
|
|
157
|
-
- Write a route, SOQL string, or request body here — delegate to the SOR and let `describe` carry the shape.
|
|
40
|
+
This feature only assigns the two standard persona PSGs — it never creates, edits, or recalculates a PSG,
|
|
41
|
+
and it assigns no other permission set.
|
package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md
CHANGED
|
@@ -1,107 +1,35 @@
|
|
|
1
|
-
# Feature: Incident
|
|
2
|
-
|
|
3
|
-
How the orchestrator
|
|
4
|
-
Incident Management
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
the
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
`
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
## Operations (shapes come from `describe`)
|
|
35
|
-
|
|
36
|
-
1. **Read a preference (read).** Given a preference name, return its Boolean state. Unknown names are **not
|
|
37
|
-
validated on read** — they return `false` rather than raising — so only ever read a preference the SOR
|
|
38
|
-
lists; a `false` read is not proof a name is valid.
|
|
39
|
-
2. **Toggle a preference (write — confirm first).** Set a named preference enabled/disabled. An unknown
|
|
40
|
-
name raises. The two one-way preferences cannot be set to disabled.
|
|
41
|
-
3. **Verify (read).** Read the changed preference back and expect it to equal the value just set.
|
|
42
|
-
|
|
43
|
-
## The six preferences (name → label; `describe`/`agent_guidance` is authoritative)
|
|
44
|
-
|
|
45
|
-
| Preference name | Setup label | One-way |
|
|
46
|
-
|-----------------|-------------|---------|
|
|
47
|
-
| `IncidentValidationsEnabled` | Default Field Validations for Incidents | No |
|
|
48
|
-
| `AutoClosureChildIncidents` | Automatically Close Child Incidents | No |
|
|
49
|
-
| `IncidentTriageAgentEnabled` | Automatically Triage Incidents | No |
|
|
50
|
-
| `IncAssignWithAgentEnabled` | Assign Incidents with Einstein | No |
|
|
51
|
-
| `AssignedGroupValidationEnabled` | Restrict Assigned Group to Regular Groups | **Yes** |
|
|
52
|
-
| `RtaIncidentDescEnabled` | Enable Rich Text for Incident Descriptions | **Yes** |
|
|
53
|
-
|
|
54
|
-
Read the live list and labels from `describe` at runtime — this table is the authoring snapshot for trigger
|
|
55
|
-
phrasing and the known-name enumeration.
|
|
56
|
-
|
|
57
|
-
## Invariants — the contract
|
|
58
|
-
|
|
59
|
-
- **Two preferences are one-way / enable-only:** `RtaIncidentDescEnabled` and
|
|
60
|
-
`AssignedGroupValidationEnabled`. Once enabled they cannot be disabled. Never offer to disable them;
|
|
61
|
-
require an explicit "I understand this can't be undone" confirmation before enabling; never enable one
|
|
62
|
-
merely to test.
|
|
63
|
-
- **`AssignedGroupValidationEnabled` also freezes once the org has any Incident record** — it is settable
|
|
64
|
-
only while the org has no incidents. An enable can therefore **fail outright** when incidents already
|
|
65
|
-
exist; surface pre-existing incidents as the likely cause and do **not** retry.
|
|
66
|
-
- **Read does not validate the preference name** (unknown → `false`, no error); only the write is
|
|
67
|
-
allowlisted (unknown → raises). Enumerate only the six the SOR lists.
|
|
68
|
-
- **Access gate:** the caller needs `IncidentMgmt.userHasITSMSetupAccess` (sysadmin OR Customize
|
|
69
|
-
Application + Modify All Data + View Setup). Without it every read and write is blocked by the controller.
|
|
70
|
-
- **Idempotent** — read before every write; skip a write when the preference is already in the requested
|
|
71
|
-
state.
|
|
72
|
-
- **Verify by read-back** — the write response alone is not proof the change persisted.
|
|
73
|
-
|
|
74
|
-
## Preconditions
|
|
75
|
-
|
|
76
|
-
- **Setup access**: the caller needs ITSM setup access. Without it every read and write is blocked —
|
|
77
|
-
surface the raw access error and stop.
|
|
78
|
-
- **Incident Management provisioned**: these preferences are writable only when Incident Management is
|
|
79
|
-
enabled at the feature/license level. If reads or writes fail with an availability error, say the feature
|
|
80
|
-
must be enabled first (the `IncidentMgmt` SOR's master-feature steps) and stop.
|
|
81
|
-
|
|
82
|
-
## Workflow
|
|
83
|
-
|
|
84
|
-
The SOR's `agent_guidance` (returned by `describe`) carries the detailed flow and current labels; follow
|
|
85
|
-
it. In outline — **read before you write, confirm before every write, verify every write by read-back**,
|
|
86
|
-
and act only on the preferences the user chose:
|
|
87
|
-
|
|
88
|
-
1. **Read current state** — read each of the six preferences and report which are on and which are off,
|
|
89
|
-
flagging the two one-way ones.
|
|
90
|
-
2. **Ask which to change** — never infer; for a one-way enable, take the explicit can't-be-undone
|
|
91
|
-
confirmation here. On any non-yes, stop without writing.
|
|
92
|
-
3. **Apply only the chosen preferences** — skip any already in the requested state (idempotent no-op).
|
|
93
|
-
4. **Verify** — read each changed preference back; report success only when it read back as set.
|
|
94
|
-
|
|
95
|
-
## Clarifying questions
|
|
96
|
-
|
|
97
|
-
- **Which preference(s)?** If unstated, present the six (by label, flagging the two one-way) and let the
|
|
98
|
-
user pick.
|
|
99
|
-
- **Enable or disable?** Required for a change; never infer direction from current state. Disable is not
|
|
100
|
-
offered for the two one-way preferences.
|
|
101
|
-
- **Which org?** Confirm it and state plainly the org will be **modified**. For production, get explicit
|
|
102
|
-
confirmation. Enabling a one-way preference is permanent.
|
|
103
|
-
|
|
104
|
-
## Output expectations
|
|
1
|
+
# Feature: Incident Preferences (delegated to the `IncidentMgmt` SOR)
|
|
2
|
+
|
|
3
|
+
How the orchestrator runs the **Incident Preferences** feature: the six per-feature toggles on the ITSM
|
|
4
|
+
Incident Management setup page. The `IncidentMgmt` SOR's own steps and guidance decide *how* — the six
|
|
5
|
+
preference names and labels, the two one-way ones, and the read-back; the orchestrator runs them itself
|
|
6
|
+
under its **SOR hand-off protocol** and owns every user-facing gate. This file adds what is specific to the
|
|
7
|
+
preferences.
|
|
8
|
+
|
|
9
|
+
1. `discover` the SOR by intent (e.g. "configure ITSM incident management preferences: automatically triage
|
|
10
|
+
incidents, assign incidents with Einstein") and `describe` the id `discover` returns (`IncidentMgmt`) —
|
|
11
|
+
never the Service-Foundation `IncidentManagement` look-alike, whose toggles are broadcast channels.
|
|
12
|
+
2. Behavior step 2 already ran this SOR's IT Service Enablement and Incident Management steps, so start at
|
|
13
|
+
its preference flow: read (`getOrgPref_1`), change (`updateOrgPref_2`), read back
|
|
14
|
+
(`verify-update-org-pref`). Never run its `disable-itsm-incident-feature` /
|
|
15
|
+
`verify-itsm-incident-feature-disabled` steps (the master switch is not part of this feature) or
|
|
16
|
+
`delegate-email-to-incident` (that is the **Email-to-Incident** feature).
|
|
17
|
+
3. Read all six and show them with the block below, flagging the two one-way ones. Ask which to change and
|
|
18
|
+
in which direction (`AskUserQuestion`) — never infer the direction from the current state, and never
|
|
19
|
+
offer to turn a one-way preference off. Skip any already in the requested state.
|
|
20
|
+
4. Confirm the exact change and that this org is modified (explicit confirmation for production). For
|
|
21
|
+
*Restrict Assigned Group to Regular Groups* or *Enable Rich Text for Incident Descriptions*, the
|
|
22
|
+
confirmation must say it can't be undone. Write each chosen preference and read each back; mark the
|
|
23
|
+
feature `Done` only when every read-back matches.
|
|
24
|
+
5. In plain language: a failed enable of *Restrict Assigned Group…* means the org already has incidents, so
|
|
25
|
+
it can't be turned on now — don't retry. If *Automatically Triage Incidents* or *Assign Incidents with
|
|
26
|
+
Einstein* can't be read or turned on, the org lacks that switch's license (*IT Services: Agentforce
|
|
27
|
+
Features for Employees* for triage, *IT Services: Einstein Features* for Einstein assignment): say so,
|
|
28
|
+
skip it, and carry on with the others.
|
|
29
|
+
6. *Automatically Triage Incidents* and *Assign Incidents with Einstein* are also two of the three switches
|
|
30
|
+
of the **Manage Incidents with AI** feature — the same org preferences — so one set in either feature
|
|
31
|
+
reads as already set in the other. That feature's third switch, *Report Incidents from Chat or Voice
|
|
32
|
+
Using AI*, is not one of the six.
|
|
105
33
|
|
|
106
34
|
```text
|
|
107
35
|
Default Field Validations for Incidents ...... On | Off
|
|
@@ -113,35 +41,3 @@ and act only on the preferences the user chose:
|
|
|
113
41
|
|
|
114
42
|
Changed: <label> Off → On (SUCCEEDED | ALREADY-ON | FAILED)
|
|
115
43
|
```
|
|
116
|
-
|
|
117
|
-
Report only what read-back confirmed. On a failure, stop and say — in plain language — what did not succeed
|
|
118
|
-
and what it means (e.g. "that setting can't be turned on once incidents exist").
|
|
119
|
-
|
|
120
|
-
## Common failures (surface in plain language)
|
|
121
|
-
|
|
122
|
-
| Symptom | Likely cause | What to tell the user |
|
|
123
|
-
|---------|--------------|-----------------------|
|
|
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 |
|
|
125
|
-
| Read/write blocked with an access error | Caller lacks ITSM setup access | An admin with setup access must make this change |
|
|
126
|
-
| Read/write unavailable on the org | Incident Management not enabled | Enable Incident Management first through the `IncidentMgmt` SOR's master-feature steps |
|
|
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 |
|
|
128
|
-
| `dispatch*` auth error | headless-360 session not authenticated / expired | Re-authenticate the connection and confirm it points at the intended org |
|
|
129
|
-
|
|
130
|
-
## Reading `dispatch` results
|
|
131
|
-
|
|
132
|
-
Responses come back wrapped as `{ status_code, body }`; read what you need from `body`. A preference read
|
|
133
|
-
returns a Boolean in `body`. A write success persists (no meaningful body). A service error on a write =
|
|
134
|
-
either a preference name outside the six, **or** a one-way freeze (e.g. `AssignedGroupValidationEnabled`
|
|
135
|
-
with incidents already present) — surface the specific cause, do not retry blindly. A `401` / `403` =
|
|
136
|
-
missing setup access or an unauthenticated session. A `404` = the operation is not available on this org
|
|
137
|
-
(feature not enabled).
|
|
138
|
-
|
|
139
|
-
## Dead ends — do NOT do these
|
|
140
|
-
|
|
141
|
-
- Write an HTTP route or a request body here — delegate to the SOR and let `describe` carry the shape.
|
|
142
|
-
- Offer to disable a one-way preference, or enable one just to "test" it.
|
|
143
|
-
- Read or write against the Service-Foundation `IncidentManagement` node (broadcast channels) — wrong node.
|
|
144
|
-
- Read or write any preference name the SOR does not list — an unknown name reads as `false` and is
|
|
145
|
-
rejected on write.
|
|
146
|
-
- Toggle the **master** Incident Management switch as part of this preferences feature (use the orchestrator's prerequisite over the `IncidentMgmt` SOR) or the
|
|
147
|
-
**Incident Priority Matrix** (`service-itsm-incident-priority-configure`).
|