@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
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# MS Teams for Employee Service — Configuration Checklists
|
|
2
|
+
|
|
3
|
+
The exact setup each Teams ITSM feature requires. Match the user's reported problem to a checklist
|
|
4
|
+
via the **Feature Map**, then run that checklist's checks **in order**. Each check lists what to
|
|
5
|
+
verify, the query / API field, the pass condition, and the exact Setup remediation when it fails.
|
|
6
|
+
|
|
7
|
+
> Run reads via headless-360 `dispatch_readonly` (SOQL through `GET /services/data/vXX.0/query`,
|
|
8
|
+
> Connect/REST endpoints directly). A few checks require the **SOAP Metadata API** (noted inline) —
|
|
9
|
+
> those read metadata not exposed to REST/Tooling. Always use the full `/services/data/vXX.0/...`
|
|
10
|
+
> version prefix.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Feature Map
|
|
15
|
+
|
|
16
|
+
| User says… | Feature | Checklist |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| "Can't log in to IT Desk app" / "Salesforce Desk app not working" / "IT Desk login" | Login to Salesforce IT Desk app | `LOGIN_DESK` |
|
|
19
|
+
| "UEL user can't log in to IT Service app" / "UEL login not working" | Login to IT Service — UEL user | `LOGIN_SERVICE_UEL` |
|
|
20
|
+
| "CCP user can't log in to IT Service" / "IT Service not working" / "IT Service login" | Login to IT Service — CCP user | `LOGIN_SERVICE_CCP` |
|
|
21
|
+
| "Login" / "Can't log in" (generic, no app named) | Generic login | `LOGIN` (then ask: IT Desk or IT Service?) |
|
|
22
|
+
| "Agentforce not working" / "Teams AgentForce issue" | Agentforce embedded service + messaging channel | `AGENTFORCE` |
|
|
23
|
+
| "Swarming not working" / "Collaboration tool not set" | Swarming collaboration tool + Auth Provider | `SWARMING` |
|
|
24
|
+
| "MS Teams not showing" / "Teams tab missing" / "feature enablement" / "Teams not enabled" | MS Teams feature not visible | `MSTEAMS_CORE` |
|
|
25
|
+
| "Teams not loading" / "Lightning app not embedding" | Lightning Out / embedding | `LIGHTNING_OUT` |
|
|
26
|
+
| "CI Hub / Service Catalog / Employee Enablement / My Assets tab not loading" | Tab loading (IT Desk or IT Service) | `TAB_LOADING` |
|
|
27
|
+
| "SSO not working" / "single sign-on failing" | Single Sign-On | `SSO` |
|
|
28
|
+
|
|
29
|
+
> **ECA naming:** the External Client App the login checks look for is **`ServiceCloudTeamsEca`**.
|
|
30
|
+
> Some orgs surface a related packaged instance (e.g. `ServiceCloudMSTeamsEca`); match the ECA that
|
|
31
|
+
> actually backs the Teams login. A missing app usually means the feature needs to be turned OFF
|
|
32
|
+
> then ON again from Salesforce Go.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Checklist: LOGIN_DESK
|
|
37
|
+
*Applies to: "Not able to login to IT Desk app", "Salesforce Desk app not working"*
|
|
38
|
+
|
|
39
|
+
1. **CORS → Enable CORS for OAuth endpoints** — must be **ON**
|
|
40
|
+
(Tooling: `SessionSettings.IsOauthCorsPolicyEnabled = true`)
|
|
41
|
+
2. **CORS Allowed Origins** — both URLs must be present (`CorsWhitelistEntry.UrlPattern`):
|
|
42
|
+
- `https://cdn.scs.static.lightning.force.com`
|
|
43
|
+
- `https://teams.cloud.microsoft`
|
|
44
|
+
3. **External Client App: `ServiceCloudTeamsEca`** — must exist
|
|
45
|
+
4. **Microsoft Teams for Employee Service Feature** — must be **ON**
|
|
46
|
+
- Checked via the FulfillerApp permissions API (see `MSTEAMS_CORE` check 3)
|
|
47
|
+
- Setup → Salesforce Go → Feature Sets → Deliver IT Services Across Channels → View all features → Microsoft Teams for Employee Service
|
|
48
|
+
5. **Salesforce IT Desk Feature** — must be **ON** (required specifically for IT Desk login)
|
|
49
|
+
6. **User PSL: `TeamsForITSrvcsPsl` assigned** *(requires end-user's Salesforce username)*
|
|
50
|
+
- SOQL: `SELECT Id FROM PermissionSetLicenseAssign WHERE AssigneeId = '<userId>' AND PermissionSetLicense.DeveloperName = 'TeamsForITSrvcsPsl' LIMIT 1`
|
|
51
|
+
- If not assigned: Setup → Users → open user → Permission Set License Assignments → Edit → add **Microsoft Teams for IT Services** → Save
|
|
52
|
+
- If username not provided: `MANUAL_CHECK_REQUIRED` (MANUAL) — re-run with the end-user's username
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Checklist: LOGIN_SERVICE_UEL
|
|
57
|
+
*Applies to: "UEL user not able to login to IT Service app", "UEL login not working"*
|
|
58
|
+
|
|
59
|
+
1. **CORS → Enable CORS for OAuth endpoints** — must be **ON**
|
|
60
|
+
2. **CORS Allowed Origins** — both URLs present (`cdn.scs.static.lightning.force.com` + `teams.cloud.microsoft`)
|
|
61
|
+
3. **External Client App: `ServiceCloudTeamsEca`** — must exist
|
|
62
|
+
4. **Microsoft Teams for Employee Service Feature** — must be **ON**
|
|
63
|
+
5. **Salesforce IT Service Feature** — must be **ON** (required specifically for IT Service login)
|
|
64
|
+
6. **Allow OAuth for employees** *(SOAP Metadata API — `ProfileSessionSetting`)*
|
|
65
|
+
- Setup → Profiles → Unified Employee → Session Settings → check **"Allow OAuth for employees"** → Save
|
|
66
|
+
- Read via SOAP `listMetadata(ProfileSessionSetting)` → `readMetadata` on the fullName containing `unified`
|
|
67
|
+
- Field `allowOauthForEmployees`: `true` = ENABLED (OK), `false` = DISABLED (FAIL), absent = NOT CONFIGURED (FAIL)
|
|
68
|
+
- **Not queryable via REST or Tooling API — Metadata API only.** **UEL users only.**
|
|
69
|
+
7. **User PSL: `TeamsForEmployeePsl` assigned** *(requires UEL end-user's username)*
|
|
70
|
+
- PSL DeveloperName `TeamsForEmployeePsl` (MasterLabel "Teams for Employee"); linked permission set `TeamsForEmployeeUser`
|
|
71
|
+
- SOQL: `SELECT Id FROM PermissionSetLicenseAssign WHERE AssigneeId = '<userId>' AND PermissionSetLicense.DeveloperName = 'TeamsForEmployeePsl' LIMIT 1`
|
|
72
|
+
- If not assigned: Setup → Users → open user → Permission Set License Assignments → Edit → add **Teams for Employee** → Save
|
|
73
|
+
- **UEL users only.**
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Checklist: LOGIN_SERVICE_CCP
|
|
78
|
+
*Applies to: "CCP user not able to login to IT Service app", "IT Service app not working" (non-UEL)*
|
|
79
|
+
|
|
80
|
+
1. **CORS → Enable CORS for OAuth endpoints** — must be **ON**
|
|
81
|
+
2. **CORS Allowed Origins** — both URLs present
|
|
82
|
+
3. **External Client App: `ServiceCloudTeamsEca`** — must exist
|
|
83
|
+
4. **Microsoft Teams for Employee Service Feature** — must be **ON**
|
|
84
|
+
5. **Salesforce IT Service Feature** — must be **ON**
|
|
85
|
+
6. **User API Enabled permission** *(requires CCP end-user's username)*
|
|
86
|
+
- SOQL: `SELECT Id, Username FROM User WHERE Username = '<username>' AND IsActive = true LIMIT 1`, then check the user's Profile or Permission Sets for the **API Enabled** system permission
|
|
87
|
+
- If not enabled: Setup → Users → open user → Profile or Permission Sets → verify **API Enabled** is granted
|
|
88
|
+
- **CCP users only** — UEL users use the `TeamsForEmployeePsl` PSL (above) instead.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Checklist: LOGIN
|
|
93
|
+
*Applies to: Generic login issues where no specific app is mentioned. Ask which app, then switch to LOGIN_DESK / LOGIN_SERVICE_*.*
|
|
94
|
+
|
|
95
|
+
1. **CORS → Enable CORS for OAuth endpoints** — must be **ON**
|
|
96
|
+
2. **CORS Allowed Origins** — both URLs present
|
|
97
|
+
3. **External Client App: `ServiceCloudTeamsEca`** — must exist
|
|
98
|
+
4. **Microsoft Teams for Employee Service Feature** — must be **ON**
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Checklist: TAB_LOADING
|
|
103
|
+
*Applies to: "CI Hub / Service Catalog / Employee Enablement / My Assets tab not loading" — both IT Desk and IT Service apps*
|
|
104
|
+
|
|
105
|
+
1. **Session token for 3rd-party embedding** — must be **ON**
|
|
106
|
+
- Setup → Session Settings → check **"When embedding a Lightning application in a third-party site, use a session token instead of a session cookie"** → Save
|
|
107
|
+
- Tooling: `SELECT SidToken3rdPartyAuraApp FROM SessionSettings LIMIT 1` → `true` = OK
|
|
108
|
+
2. **My Domain: Require first-party cookies** — must be **OFF**
|
|
109
|
+
- Setup → Company Settings → My Domain → **uncheck** "Require first-party use of Salesforce cookies" → Save
|
|
110
|
+
- Tooling: `SELECT IsFirstPartyCookieUseRequired FROM MyDomainSettings LIMIT 1` → `false` = OK
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Checklist: MSTEAMS_CORE
|
|
115
|
+
*Applies to: MS Teams feature not visible, Teams tab not showing, cannot enable the feature, feature-enablement issues*
|
|
116
|
+
|
|
117
|
+
1. **API Connectivity** — verify the org is reachable via REST.
|
|
118
|
+
2. **`TeamsForITSrvcsPsl` License** — present and Active
|
|
119
|
+
- SOQL: `SELECT DeveloperName, MasterLabel, Status, TotalLicenses, UsedLicenses FROM PermissionSetLicense WHERE DeveloperName = 'TeamsForITSrvcsPsl' LIMIT 1`
|
|
120
|
+
- `Status` must be `Active`. If missing, the `TeamsITSrvcsAddOn` license isn't provisioned — contact Salesforce to add it. If disabled, contact support to reactivate.
|
|
121
|
+
3. **Feature Enabled** — `GET /services/data/v66.0/connect/it-service/permissions/FulfillerApp`
|
|
122
|
+
- If the API returns `FUNCTIONALITY_NOT_ENABLED`: the `IServiceItsmTeamsFamily` feature family is disabled at the org level → turn on **Microsoft Teams for Employee Service** in Salesforce Go.
|
|
123
|
+
- Otherwise validate these flags (all must be `true`):
|
|
124
|
+
- `orgHasTeamsAllowed` — MS Teams allowed for this org
|
|
125
|
+
- `orgHasTeamsFullfillerHubEnabled` — Salesforce IT Desk feature enabled
|
|
126
|
+
- `orgHasTeamsEmployeeHubEnabled` — Employee Hub feature enabled
|
|
127
|
+
- `userHasTeamsFulfillerHubAllowed` — current user has `TeamsForITSrvcsPsl` PSL
|
|
128
|
+
- `teamsUserHasAccessToSwarm` — user has swarming access
|
|
129
|
+
- `orgHasEmployeeOrITServiceTeamsAllowed` — org-level Teams access for Employee/IT Service
|
|
130
|
+
- Also surfaces `TEAMS_LO2_APP` (app id) and `Agents` count (Agentforce agents configured).
|
|
131
|
+
- Fix `orgHasTeamsFullfillerHubEnabled=false`: Salesforce Go → Feature Sets → Deliver IT Services Across Channels → Salesforce IT Desk → Turn On.
|
|
132
|
+
- Fix `userHasTeamsFulfillerHubAllowed=false`: Setup → Users → open user → PSL Assignments → add `TeamsForITSrvcsPsl`.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Checklist: LIGHTNING_OUT
|
|
137
|
+
*Applies to: Lightning app not embedding in Teams, blank tab, loading errors*
|
|
138
|
+
|
|
139
|
+
1. **Session Settings — session token for third-party embedding** — enable **"When embedding a Lightning application in a third-party site, use a session token instead of a session cookie"** (Setup → Session Settings).
|
|
140
|
+
2. **My Domain — disable first-party cookie requirement** — **uncheck** "Require first-party use of Salesforce cookies" (Setup → Company Settings → My Domain).
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Checklist: SWARMING
|
|
145
|
+
*Applies to: "Swarming not working", "collaboration tool not set", "Teams not showing in Swarming"*
|
|
146
|
+
|
|
147
|
+
1. **Swarming Collaboration Tool** — Setup → Swarming → Select a Collaboration Tool → must be **Teams** (manual verification).
|
|
148
|
+
2. **Microsoft Auth Provider** — must exist with full metadata
|
|
149
|
+
- SOQL: `SELECT Id, DeveloperName, FriendlyName, ProviderType, ConsumerKey, ConsumerSecret FROM AuthProvider WHERE DeveloperName = 'microsoft_auth_provider' LIMIT 1`
|
|
150
|
+
- `ProviderType = Microsoft`; `ConsumerKey` = Azure AD Client ID, `ConsumerSecret` = Azure AD Client Secret (both readable via SOQL — SOAP returns a placeholder)
|
|
151
|
+
- `CallbackUrl` is NOT a SOQL field — construct it as `{orgUrl}/services/authcallback/microsoft_auth_provider`
|
|
152
|
+
3. **Azure AD App Verification** *(requires Azure AD Tenant ID)*
|
|
153
|
+
- Get a Graph token: `POST https://login.microsoftonline.com/<tenantId>/oauth2/v2.0/token` (client credentials, using `ConsumerKey` + `ConsumerSecret`). If it fails → the client secret is invalid; report the exact `AADSTS...` error.
|
|
154
|
+
- Look up the app: `GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '<clientId>'` (use `/servicePrincipals`, not `/applications` — the latter needs `Application.Read.All`).
|
|
155
|
+
- Validate: **Client ID match** (`appId` == `ConsumerKey`); **Client Secret** valid (token issued); **Multi-tenant** (`signInAudience = AzureADMultipleOrgs`); **Redirect URI** (the constructed callback URL is in `replyUrls`); and **17 delegated API permissions** granted (`GET /v1.0/servicePrincipals/{id}/oauth2PermissionGrants`):
|
|
156
|
+
`Channel.Create`, `Channel.ReadBasic.All`, `ChannelMember.Read.All`, `ChannelMember.ReadWrite.All`, `ChannelMessage.Edit`, `ChannelMessage.Read.All`, `ChannelMessage.ReadWrite`, `ChannelMessage.Send`, `email`, `Group.Read.All`, `Group.ReadWrite.All`, `offline_access`, `openid`, `profile`, `Team.Create`, `Team.ReadBasic.All`, `User.Read`
|
|
157
|
+
- If Tenant ID not provided: `MANUAL_CHECK_REQUIRED` (MANUAL) — not a failure.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Checklist: SSO
|
|
162
|
+
*Applies to: SSO not working with MS Teams. Trigger keywords: sso, single sign-on, federated login, identity provider, idp, oidc, entra id / azure ad login, okta / adfs sso.*
|
|
163
|
+
|
|
164
|
+
When an app is named, also run the app's login checklist (`LOGIN_DESK` or `LOGIN_SERVICE_CCP` /
|
|
165
|
+
`LOGIN_SERVICE_UEL`); skip duplicate checks. Total ≈ 14 checks for IT Desk/CCP, 16 for UEL.
|
|
166
|
+
|
|
167
|
+
1. **API Connectivity** — org reachable via REST (HTTP 200).
|
|
168
|
+
2. **External Client App: `ServiceCloudTeamsEca`** — exists
|
|
169
|
+
- `SELECT Id, DeveloperName, MasterLabel FROM ExternalClientApplication WHERE DeveloperName = 'ServiceCloudTeamsEca' LIMIT 1`
|
|
170
|
+
- If missing: turn ON the Teams for Employee Service feature from Salesforce Go, verify it appears in Setup → External Client App Manager; if the feature is already on, toggle it OFF then ON.
|
|
171
|
+
3. **PREFERRED_SITE (Experience Site)** — configured, valid, and **Live**
|
|
172
|
+
- `GET /services/data/v65.0/setup/org/values/SLACK_PREFERRED_SITE` → site Id
|
|
173
|
+
- `GET /services/data/v62.0/connect/communities/{siteId}` → status `Live`; construct the **full site URL** from `baseUrl` + `urlPathPrefix` (e.g. `https://<org>.my.site.com/ITSMPortal`) — used for the Azure callback + Graph extension checks.
|
|
174
|
+
- If failed: Setup → Digital Experiences → All Sites → configure the preferred site; ensure it's published and Live.
|
|
175
|
+
4. **Auth Provider: `microsoft_auth_provider`** — Microsoft type, ClientId/Secret set, **Registration Handler = `MsTeamsItsmSSOHandler`**, **Execute As = System Administrator**
|
|
176
|
+
- `SELECT Id, DeveloperName, ProviderType, ConsumerKey, ConsumerSecret, RegistrationHandlerId, ExecutionUserId FROM AuthProvider WHERE DeveloperName = 'microsoft_auth_provider' LIMIT 1`
|
|
177
|
+
- Resolve: `SELECT Name FROM ApexClass WHERE Id = '<RegistrationHandlerId>'` and `SELECT Profile.Name FROM User WHERE Id = '<ExecutionUserId>'`
|
|
178
|
+
- If misconfigured: Setup → Auth. Providers → microsoft_auth_provider → Edit → Registration Handler Type = Apex class, Registration Handler = `MsTeamsItsmSSOHandler`, Execute Registration As = an admin (System Administrator profile) → Save.
|
|
179
|
+
5. **Azure AD App (multi-tenant, callback URLs, perms)** *(requires Tenant ID)*
|
|
180
|
+
- `POST https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token` then `GET https://graph.microsoft.com/v1.0/applications?$filter=appId eq '{clientId}'`
|
|
181
|
+
- Expect `signInAudience = AzureADMultipleOrgs`; `web.redirectUris` contains **both** the org callback (`{orgUrl}/services/authcallback/microsoft_auth_provider`) and the site callback (`{siteFullUrl}/services/authcallback/microsoft_auth_provider`); `requiredResourceAccess` includes `Organization.ReadWrite.All` (application permission).
|
|
182
|
+
- If failed: Azure Portal → App Registrations → your app → Authentication (add redirect URIs, set Multitenant) → API Permissions (add `Organization.ReadWrite.All`, grant admin consent).
|
|
183
|
+
- If Tenant ID not provided: `MANUAL_CHECK_REQUIRED` (MANUAL).
|
|
184
|
+
6. **Named Credential: `MSGraphApplicationNC`** + External Credential `MSTeamsClientCredentialsEC`
|
|
185
|
+
- NC exists, URL = `https://graph.microsoft.com`, linked to EC `MSTeamsClientCredentialsEC`.
|
|
186
|
+
- EC: protocol `OAuth`, flow **Client Credentials with Client Secret**, scope `https://graph.microsoft.com/.default`, IdP URL `https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token`, principal `NamedAuthPrincipal`, **Authentication Status `Configured`**.
|
|
187
|
+
- Read: SOAP `readMetadata(NamedCredential, 'MSGraphApplicationNC')` + `readMetadata(ExternalCredential, 'MSTeamsClientCredentialsEC')`; and `GET /services/data/v65.0/named-credentials/external-credentials?externalCredential=MSTeamsClientCredentialsEC` to confirm the principal's Authentication Status is `Configured`.
|
|
188
|
+
- If status ≠ Configured: Setup → External Credentials → MSTeamsClientCredentialsEC → Principals → NamedAuthPrincipal → set Client ID + Client Secret from the Azure app.
|
|
189
|
+
7. **Microsoft Graph Organization Extension** *(requires Tenant ID)*
|
|
190
|
+
- `GET https://graph.microsoft.com/v1.0/organization/{tenantId}/extensions` → extension id matching `{tenant}-*`; `sfOrgUrl` matches the org URL, `sfSiteUrl` matches the full PREFERRED_SITE URL (no trailing slashes).
|
|
191
|
+
- If failed: the extension is created/updated via the SSO setup flow; org + site URLs must match exactly.
|
|
192
|
+
8. **ApexClass: `MsTeamsItsmSSOHandler`** — exists and Active
|
|
193
|
+
- `SELECT Id, Name, ApiVersion, Status FROM ApexClass WHERE Name = 'MsTeamsItsmSSOHandler' LIMIT 1` → `Status = Active`
|
|
194
|
+
- If inactive: Setup → Apex Classes → MsTeamsItsmSSOHandler → Edit → Status Active → Save. If missing: verify the Teams for Employee Service managed package is installed.
|
|
195
|
+
9. **User Mapping (FederationIdentifier)** *(requires end-user username)*
|
|
196
|
+
- `SELECT Id, Username, Email, FederationIdentifier, IsActive FROM User WHERE Username = '<username>' LIMIT 1` → user Active and `FederationIdentifier` set to the Azure AD UPN (must match the `upn` claim exactly).
|
|
197
|
+
- If blank: Setup → Users → open user → Edit → set **Federation ID** to the Azure AD UPN → Save.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Checklist: AGENTFORCE
|
|
202
|
+
*Applies to: "Agentforce not working in MS Teams", "Teams_AgentForce issue"*
|
|
203
|
+
|
|
204
|
+
1. **API Connectivity** — org reachable.
|
|
205
|
+
2. **`Teams_AgentForce` Embedded Service Deployment** — exists, `DeploymentType = API`, `IsEnabled = true`
|
|
206
|
+
- Read via **SOAP `readMetadata(EmbeddedServiceConfig, 'Teams_AgentForce')`** — this one call returns `deploymentType`, `isEnabled`, and the nested `<messagingChannel>` name (Tooling SOQL can't reach the nested `embeddedServiceMessagingChannel` block). A quick existence check is Tooling `SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName='Teams_AgentForce'`.
|
|
207
|
+
- **If this returns 0 rows, the ESD is MISSING — this is the #1 cause of "IT Service login works but the agent never replies."** The Teams client loads the deployment by `esDeveloperName=Teams_AgentForce`; if it doesn't exist, the agent can't respond even when the channel, flow, agent, and permsets are all correct. Remediation: create + publish it (Metadata-deploy an API-type ESD, then Connect `POST /connect/embeddedservice/embeddedserviceconfig/publish/<esdId>`) — see `service-itsm-teams-employee-agent-configure`'s "Create + publish the `Teams_AgentForce` ESD headlessly (verified)".
|
|
208
|
+
- **Published state is not readable via any query field** — no field distinguishes published vs unpublished for API-type EmbeddedMessaging deployments. The publish *call* returning `{"isSuccess": true}` is the only confirmation; if in doubt, re-run publish (idempotent).
|
|
209
|
+
3. **Linked Messaging Channel exists and is active** — channel `DeveloperName` from `<messagingChannel>` (any name; extracted dynamically); REST `MessagingChannel WHERE DeveloperName = '<name>'`, `IsActive = true`.
|
|
210
|
+
4. **Messaging Channel Configuration** — `MessageType`/`ConsentType` (REST); `sessionHandlerType`/`sessionHandlerFlow`/`sessionHandlerQueue` (SOAP v62); flow active via Tooling `FlowDefinition.ActiveVersionId`; queue exists via REST `Group WHERE Type='Queue'`.
|
|
211
|
+
5. **Only one ESD, and it is `Teams_AgentForce` (type API)** — verified live (Aug 19 2026): there is a **single** `EmbeddedServiceConfig` for this integration, `Teams_AgentForce`, `DeploymentType = API`, `site = null`. **Do NOT look for a second, Web-type ESD keyed on the channel's DeveloperName** — none exists, and querying for one produces a false FAIL. The custom-client deployment is stored as `API` even though the Setup wizard flow is labelled "Web / custom client." If check #2 found the `Teams_AgentForce` ESD (type API, enabled), this check is satisfied.
|
|
212
|
+
6. **Linked Agentforce Agent Active** — SOAP `sessionHandlerFlow` → Tooling `FlowDefinition.ActiveVersionId` → REST Tooling `GET /tooling/sobjects/Flow/{id}` → `actionCalls[routeWork].inputParameters.agentforceEmployeeAgentId`; then `BotDefinition` + `BotVersion WHERE BotDefinitionId = '<id>'` with `BotVersion.Status = Active`.
|
|
213
|
+
7. **User Verification Configuration** — from `MessagingChannel.embeddedConfig` via **SOAP v62** (`authMode`, `messagingAuthorizations.enabled`, `authorizationType`, `publicKeyCertificateSetName`, `authIdentifier`, `verifiedUserJwtExpirationTime`). **CRITICAL: SOAP v60 silently omits `<embeddedConfig>` — use v62+.**
|
|
214
|
+
8. **JWT Issuer matches Experience Site URL** — read `PublicKeyCertificateSet` (SOAP v62): `jwksEndPoint` must be `{orgUrl}/id/keys` (normalise `lightning.force.com` ↔ `my.salesforce.com`); `jwtIssuer` must match the Employee Experience Site URL provided at runtime (skipped if not provided).
|
|
215
|
+
|
|
216
|
+
> For the runtime "agent joins then leaves / won't reply" fix — auth mode **ON** backed by a
|
|
217
|
+
> **`JWKS_URL` Key Set** (`jwksEndPoint = {orgUrl}/id/keys`, `jwtIssuer` = the Employee Site URL),
|
|
218
|
+
> plus the **Agent Access** permission set on the portal user — hand off to
|
|
219
|
+
> `service-itsm-teams-employee-agent-configure`. (A build with auth ON but **no** Key Set attached
|
|
220
|
+
> is the one that produces the scrt2 "Set the auth mode to false" error — attach the Key Set, don't
|
|
221
|
+
> turn auth off.)
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Status codes
|
|
226
|
+
|
|
227
|
+
- `OK` — correct
|
|
228
|
+
- `MISCONFIGURED` (FAIL) — exists but wrong
|
|
229
|
+
- `MISSING` (FAIL) — component doesn't exist
|
|
230
|
+
- `DISABLED` (FAIL) — feature off
|
|
231
|
+
- `ERROR` (FAIL) — API call/validation failed
|
|
232
|
+
- `MANUAL_CHECK_REQUIRED` (MANUAL) — needs manual verification, or an optional input (Tenant ID/username) wasn't provided
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## API Field Reference
|
|
237
|
+
|
|
238
|
+
| Check | API / Object | Field |
|
|
239
|
+
|---|---|---|
|
|
240
|
+
| CORS OAuth enabled | Tooling: `SessionSettings` | `IsOauthCorsPolicyEnabled` |
|
|
241
|
+
| CORS Allowed Origins | REST: `CorsWhitelistEntry` | `UrlPattern` |
|
|
242
|
+
| Lightning Out session token | Tooling: `SessionSettings` | `SidToken3rdPartyAuraApp` |
|
|
243
|
+
| My Domain first-party cookies | Tooling: `MyDomainSettings` | `IsFirstPartyCookieUseRequired` |
|
|
244
|
+
| External Client App | REST: `ExternalClientApplication` | `DeveloperName = 'ServiceCloudTeamsEca'` |
|
|
245
|
+
| MS Teams for IT Services license | REST: `PermissionSetLicense` | `DeveloperName = 'TeamsForITSrvcsPsl'`, `Status`, `TotalLicenses`, `UsedLicenses` |
|
|
246
|
+
| FulfillerApp permissions | REST Connect: `GET /services/data/v66.0/connect/it-service/permissions/FulfillerApp` | `orgHasTeamsAllowed`, `orgHasTeamsFullfillerHubEnabled`, `orgHasTeamsEmployeeHubEnabled`, `userHasTeamsFulfillerHubAllowed`, `teamsUserHasAccessToSwarm`, `orgHasEmployeeOrITServiceTeamsAllowed`, `TEAMS_LO2_APP`, `Agents` — returns `FUNCTIONALITY_NOT_ENABLED` when `IServiceItsmTeamsFamily` is disabled |
|
|
247
|
+
| Teams for Employee license (UEL) | REST: `PermissionSetLicense` | `DeveloperName = 'TeamsForEmployeePsl'`, `Status`, `TotalLicenses`, `UsedLicenses` |
|
|
248
|
+
| User PSL assignment (IT Desk) | REST: `PermissionSetLicenseAssign` | `AssigneeId`, `PermissionSetLicense.DeveloperName = 'TeamsForITSrvcsPsl'` |
|
|
249
|
+
| User PSL assignment (IT Service/UEL) | REST: `PermissionSetLicenseAssign` | `AssigneeId`, `PermissionSetLicense.DeveloperName = 'TeamsForEmployeePsl'` |
|
|
250
|
+
| Allow OAuth for employees | SOAP v62: `listMetadata(ProfileSessionSetting)` → `readMetadata` on fullName containing `unified` | `allowOauthForEmployees` — `true`=ENABLED, `false`=DISABLED, absent=NOT CONFIGURED |
|
|
251
|
+
| Microsoft Auth Provider (Swarming) | REST: `AuthProvider` | `DeveloperName = 'microsoft_auth_provider'`, `ProviderType`, `ConsumerKey` (= Azure ClientId) |
|
|
252
|
+
| Microsoft Auth Provider (SSO) | REST: `AuthProvider` | + `ConsumerSecret`, `RegistrationHandlerId`, `ExecutionUserId` → resolve `ApexClass.Name` and `User.Profile.Name` |
|
|
253
|
+
| Azure AD App — multi-tenant + callbacks + perms | MS Graph: `GET /v1.0/applications?$filter=appId eq '<clientId>'` | `signInAudience` (`AzureADMultipleOrgs`), `web.redirectUris` (org + site callbacks), `requiredResourceAccess` (`Organization.ReadWrite.All`) |
|
|
254
|
+
| Azure AD App — API perms (Swarming) | MS Graph: `GET /v1.0/servicePrincipals/{id}/oauth2PermissionGrants` | `scope` (space-separated delegated permission names) |
|
|
255
|
+
| Auth Provider secret | SOQL: `AuthProvider` | `ConsumerSecret` (readable via SOQL; SOAP returns `Placeholder_Value`) |
|
|
256
|
+
| Auth Provider org callback URL | Constructed | `{SF_BASE_URL}/services/authcallback/microsoft_auth_provider` |
|
|
257
|
+
| Auth Provider site callback URL | Constructed from PREFERRED_SITE | `{SITE_FULL_URL}/services/authcallback/microsoft_auth_provider` |
|
|
258
|
+
| PREFERRED_SITE full URL | REST: `GET /services/data/v62.0/connect/communities/{siteId}` | `baseUrl` + `urlPathPrefix` |
|
|
259
|
+
| MS Graph Organization Extension | MS Graph: `GET /v1.0/organization/{tenantId}/extensions` | extension id `{tenant}-*`, `sfOrgUrl`, `sfSiteUrl` |
|
|
260
|
+
| ApexClass: MsTeamsItsmSSOHandler | REST: `ApexClass` | `SELECT Id, Name, ApiVersion, Status ... WHERE Name = 'MsTeamsItsmSSOHandler'` — `Status = Active` |
|
|
261
|
+
| User Mapping (FederationIdentifier) | REST: `User` | `SELECT Id, Username, Email, FederationIdentifier, IsActive ... WHERE Username = '<username>'` — `FederationIdentifier` set (= Azure AD UPN) |
|
|
262
|
+
| Embedded Service Deployment + channel name | SOAP v62: `readMetadata EmbeddedServiceConfig` | `deploymentType`, `isEnabled`, `<messagingChannel>` |
|
|
263
|
+
| Messaging Channel active | REST: `MessagingChannel` | `DeveloperName`, `IsActive`, `MasterLabel`, `MessageType`, `ConsentType` |
|
|
264
|
+
| Omni-Channel routing + flow + queue | SOAP v62: `MessagingChannel` | `sessionHandlerType`, `sessionHandlerFlow`, `sessionHandlerQueue` |
|
|
265
|
+
| Flow active | Tooling: `FlowDefinition` | `ActiveVersionId` (non-null = active) |
|
|
266
|
+
| Agent id from flow | REST Tooling: `GET /tooling/sobjects/Flow/{activeVersionId}` | `Metadata.actionCalls[routeWork].inputParameters.agentforceEmployeeAgentId` |
|
|
267
|
+
| Agent active | REST: `BotDefinition` + `BotVersion` | `BotVersion.Status = 'Active'` |
|
|
268
|
+
| Single ESD is `Teams_AgentForce` (type API) | Tooling: `EmbeddedServiceConfig` | one row only; `DeveloperName = 'Teams_AgentForce'`, `DeploymentType = 'API'`, `IsEnabled = true` (no separate Web-type channel ESD exists) |
|
|
269
|
+
| User verification (authMode, cert, expiry) | SOAP v62: `MessagingChannel.embeddedConfig` | `authMode`, `messagingAuthorizations.*`, `verifiedUserJwtExpirationTime` (v60 omits `<embeddedConfig>`) |
|
|
270
|
+
| JWT JWKS endpoint / Issuer | SOAP v62: `PublicKeyCertificateSet` | `jwksEndPoint` (`{orgUrl}/id/keys`), `jwtIssuer` (= Experience Site URL) |
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Environment note
|
|
275
|
+
|
|
276
|
+
Production login `https://login.salesforce.com`; Sandbox/scratch `https://test.salesforce.com`.
|
|
277
|
+
Non-production (e.g. `*.pc-rnd.salesforce.com`) uses the test login host.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Report Generation
|
|
2
|
+
|
|
3
|
+
How to render the validation report after running a checklist, plus special-case notes and the
|
|
4
|
+
optional swarming OAuth-token clear.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## The report table
|
|
9
|
+
|
|
10
|
+
Render a table with **all four columns** — never omit `Configured Value`:
|
|
11
|
+
|
|
12
|
+
- `#` — check number
|
|
13
|
+
- `Check` — check description
|
|
14
|
+
- `Status` — OK, FAIL, or MANUAL verification required
|
|
15
|
+
- **`Configured Value`** — the actual value read from the org (CORS URLs, Enabled/Disabled, app name, PSL assignment, etc.)
|
|
16
|
+
- `Action Required` — the remediation for any FAIL / MANUAL (Setup path from the checklist)
|
|
17
|
+
|
|
18
|
+
## Status rendering rules
|
|
19
|
+
|
|
20
|
+
| Recorded status | Render as | Display text |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `OK` | OK | correctly configured |
|
|
23
|
+
| `MISCONFIGURED` / `MISSING` / `DISABLED` / `ERROR` | FAIL | needs to be fixed (include the exact Setup path) |
|
|
24
|
+
| `MANUAL_CHECK_REQUIRED` | MANUAL | requires manual verification |
|
|
25
|
+
|
|
26
|
+
**Critical:** `MANUAL_CHECK_REQUIRED` is always MANUAL and "requires manual verification" — **never**
|
|
27
|
+
render it as FAIL/MISCONFIGURED, even when the cause is a missing optional input (e.g. no Tenant ID
|
|
28
|
+
provided for the Azure app check). Note that the user can re-run with that input to complete it.
|
|
29
|
+
Only `MISCONFIGURED`, `MISSING`, `DISABLED`, `ERROR` are FAIL.
|
|
30
|
+
|
|
31
|
+
## Special cases
|
|
32
|
+
|
|
33
|
+
**Azure AD App check when `MANUAL_CHECK_REQUIRED`** (Tenant ID not provided) — after the table add:
|
|
34
|
+
|
|
35
|
+
> **Note —** The Azure AD App check requires manual verification. Re-run and provide the Azure AD
|
|
36
|
+
> Tenant ID to validate the Azure app, or verify it manually per the Salesforce help doc for
|
|
37
|
+
> configuring the Teams fulfiller-hub app.
|
|
38
|
+
|
|
39
|
+
**Swarming per-user OAuth token when `MISSING`** — the token is minted on the user's first swarm
|
|
40
|
+
attempt. Tell the user to: open Microsoft Teams → the **Salesforce IT Desk app** (the fulfiller
|
|
41
|
+
app, NOT the IT Service employee app) → attempt to create/join a swarm → complete the Microsoft
|
|
42
|
+
login when prompted → the token is stored and swarming should work.
|
|
43
|
+
|
|
44
|
+
## Closing note
|
|
45
|
+
|
|
46
|
+
**If all checks passed (0 failed, 0 manual):**
|
|
47
|
+
|
|
48
|
+
> **All checks passed.** The Salesforce backend is correctly configured. If the issue persists,
|
|
49
|
+
> reload the Teams app: in Microsoft Teams, click the **⋯** on the Salesforce IT Desk or IT Service
|
|
50
|
+
> app → **Reload app**. If it's still unresolved, escalate to the ITSM support team.
|
|
51
|
+
|
|
52
|
+
**If any check failed (1+ failed or manual):** do NOT add the reload note — the per-check
|
|
53
|
+
`Action Required` steps are the fix.
|
|
54
|
+
|
|
55
|
+
## Example report
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
=== VALIDATION REPORT ===
|
|
59
|
+
Problem reported: IT Desk login not working
|
|
60
|
+
Checklist applied: LOGIN_DESK
|
|
61
|
+
Org: https://yourorg.my.salesforce.com
|
|
62
|
+
|
|
63
|
+
| # | Check | Status | Configured Value | Action Required
|
|
64
|
+
|---|-------------------------------------------|-------------|------------------------------------------------------|----------------
|
|
65
|
+
| 1 | CORS OAuth endpoints enabled | OK | Enabled |
|
|
66
|
+
| 2 | CORS Allowed Origins | OK | cdn.scs.static.lightning.force.com, teams.cloud.microsoft |
|
|
67
|
+
| 3 | External Client App: ServiceCloudTeamsEca | OK | ServiceCloudTeamsEca |
|
|
68
|
+
| 4 | Microsoft Teams for Employee Service | OK | Enabled |
|
|
69
|
+
| 5 | Salesforce IT Desk Feature | OK | Enabled |
|
|
70
|
+
| 6 | User PSL: TeamsForITSrvcsPsl assigned | FAIL MISSING | user@org.com — NOT assigned | Setup → Users → open user → PSL Assignments → add Teams for IT Services
|
|
71
|
+
|
|
72
|
+
Summary: 5 passed | 1 failed | 0 require manual verification
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Optional: clear the swarming OAuth token (SWARMING checklist, all checks passed)
|
|
78
|
+
|
|
79
|
+
Only when the checklist was `SWARMING` **and** all checks passed, offer to clear and re-mint the
|
|
80
|
+
per-user OAuth token for the `MSTeamsBrowserFlowEC` external credential (a stale token can block
|
|
81
|
+
swarming even when config is correct). Ask first with `AskUserQuestion`; only proceed on an
|
|
82
|
+
explicit "yes."
|
|
83
|
+
|
|
84
|
+
This is the **one state-changing action** in this skill. Perform it as the end-user (the person
|
|
85
|
+
with the swarming issue):
|
|
86
|
+
|
|
87
|
+
1. **Check current token:**
|
|
88
|
+
`dispatch_readonly GET /services/data/v65.0/named-credentials/credential?principalType=PerUserPrincipal&externalCredential=MSTeamsClientCredentialsEC`
|
|
89
|
+
2. **Clear it:**
|
|
90
|
+
`dispatch DELETE /services/data/v65.0/named-credentials/credential?principalType=PerUserPrincipal&externalCredential=MSTeamsBrowserFlowEC`
|
|
91
|
+
|
|
92
|
+
- **DELETE 200/204:** "OK — Token cleared. Retry swarming — you'll be prompted to re-authenticate
|
|
93
|
+
with Microsoft on the next swarm attempt."
|
|
94
|
+
- **DELETE failed:** "FAIL — Couldn't clear the token: `<error>`. Clear it manually in Setup → Named
|
|
95
|
+
Credentials → MSTeamsBrowserFlowEC."
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: service-itsm-teams-employee-agent-configure
|
|
3
|
+
description: "Configure the embedded Agentforce Employee Agent so it replies inside the Microsoft Teams ITSM custom client ('Salesforce Employee Assist' / 'Ask AI Agent'). Use this for: 'set up employee agent in Teams', 'embed Agentforce agent in Teams', 'make the IT Service Employee Agent reply in Teams', 'Teams Ask AI Agent not responding', 'agent joins then leaves without replying', 'configure MIAW deployment for Teams employee agent', 'Teams embedded messaging agent setup'. Builds the whole stack headlessly (zero Setup-UI clicks): the Web messaging channel with User Verification ON, the Enhanced Chat User Verification Key Set (JWKS_URL) it requires, the Teams_AgentForce custom-client deployment, the routing flow to the agent, and the Agent Access permission set that lets the portal user reach the agent. DO NOT TRIGGER for enabling the Teams feature Salesforce Go page toggle (service-itsm-teams-configure) or for configuring notification preferences."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
domains: ["Service"]
|
|
7
|
+
minApiVersion: "67.0"
|
|
8
|
+
relatedSkills:
|
|
9
|
+
- "experience-portal-create"
|
|
10
|
+
- "service-itsm-agentic-setup-employee-agent-configure"
|
|
11
|
+
- "service-itsm-channels-coordinate"
|
|
12
|
+
- "service-itsm-teams-configure"
|
|
13
|
+
- "service-itsm-teams-debug"
|
|
14
|
+
cliTools:
|
|
15
|
+
- tool: ["sf"]
|
|
16
|
+
semver: ">=2.0.0"
|
|
17
|
+
accessCheck:
|
|
18
|
+
- type: "orgPref"
|
|
19
|
+
value: "ITSMTeamsEnabled"
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Configure the Embedded Agentforce Employee Agent in Microsoft Teams
|
|
23
|
+
|
|
24
|
+
Make the embedded Agentforce agent ("IT Service Employee Agent") actually **reply** inside the
|
|
25
|
+
Microsoft Teams ITSM custom client ("Salesforce Employee Assist" → "Ask AI Agent"). The Teams
|
|
26
|
+
custom client loads a Messaging-in-App-and-Web (MIAW) deployment at runtime by its
|
|
27
|
+
`esDeveloperName`, which is **hard-wired to `Teams_AgentForce`** in committed Core config
|
|
28
|
+
(`service-cloud-requestor-agent-miaw.configuration.json` / the Teams app manifest) — so the
|
|
29
|
+
Embedded Service Deployment **must be named exactly `Teams_AgentForce`** and cannot be renamed
|
|
30
|
+
per-org.
|
|
31
|
+
|
|
32
|
+
This is the hardest, most under-documented part of Teams ITSM. The full build-from-scratch
|
|
33
|
+
recipe — verified live against a real org — lives in:
|
|
34
|
+
|
|
35
|
+
**→ `references/teams-embedded-employee-agent.md`**
|
|
36
|
+
|
|
37
|
+
> **Execute one step at a time.** These steps make real, state-changing API calls. Run a single
|
|
38
|
+
> operation, show its result, confirm it succeeded, then proceed — do not batch multiple setup
|
|
39
|
+
> calls into one parallel block.
|
|
40
|
+
|
|
41
|
+
## Scope
|
|
42
|
+
|
|
43
|
+
- **In scope**: Building the MIAW channel + deployment the Teams custom client loads **entirely via
|
|
44
|
+
API (zero Setup-UI clicks)** — a **Web** Enhanced-messaging channel with **User Verification ON
|
|
45
|
+
(auth mode = Auth)** backed by an **Enhanced Chat User Verification Key Set** (`PublicKeyCertificateSet`,
|
|
46
|
+
type `JWKS_URL`, endpoint `<Org>/id/keys`, issuer = Employee Site URL), the **`Teams_AgentForce`**
|
|
47
|
+
custom-client Embedded Service Deployment, and an Omni-Flow routing flow whose `routeWork` action
|
|
48
|
+
targets a **real, Active** Agentforce Employee Agent. Creating and assigning the **Agent Access
|
|
49
|
+
permission set** that grants the portal user access to the agent (the step that makes it actually
|
|
50
|
+
reply). Verifying the token/routing chain end to end via API and diagnosing the "joined then left /
|
|
51
|
+
no reply" symptom.
|
|
52
|
+
- **Out of scope**: Enabling the Teams feature Salesforce Go page toggle and Azure/SSO/Named-Credential setup
|
|
53
|
+
(`service-itsm-teams-configure`). Creating the employee portal/site (`experience-portal-create`).
|
|
54
|
+
Fixing the Agentforce agent's own GenAI planner / Omni-Channel presence / capacity **only after**
|
|
55
|
+
the auth-ON + Key Set chain and Agent-Access-assigned are all confirmed and the session still stays
|
|
56
|
+
queue-owned with no agent reply — that residual case is an agent-runtime concern owned by the
|
|
57
|
+
Agentforce Employee Agent team (see the "joins then leaves" section in the reference).
|
|
58
|
+
|
|
59
|
+
## Prerequisites
|
|
60
|
+
|
|
61
|
+
- Teams ITSM feature enabled and the employee portal site live (run `service-itsm-teams-configure`
|
|
62
|
+
and `experience-portal-create` first). You need the **Employee Site URL** (e.g.
|
|
63
|
+
`https://<org>.my.site.com/empPortal`) and the org's My Domain URL.
|
|
64
|
+
- A real, **Active** Agentforce Employee Agent exists
|
|
65
|
+
(`SELECT Id FROM BotDefinition WHERE Type='InternalCopilot' AND AgentType='AgentforceEmployeeAgent'`,
|
|
66
|
+
with an `Active` `BotVersion`). **If none exists, create it first** — enabling the
|
|
67
|
+
`service-cloud-it-service-employee-agent` Go feature *may* auto-provision it, but that is **not
|
|
68
|
+
guaranteed** (verified: in one org the feature enabled but provisioned nothing). The reliable way
|
|
69
|
+
to deploy it is **`service-itsm-agentic-setup-employee-agent-configure`** (which reads the shipped
|
|
70
|
+
Employee template's Agent Script and creates + publishes + activates the agent as an NGA-native
|
|
71
|
+
bundle); the equivalent underlying path is the ITSM Connect **agent-templates install + activate**
|
|
72
|
+
against `EmployeeCopilot__AgentforceEmployeeAgent`. Deploy the agent first, then run this skill to
|
|
73
|
+
embed it in Teams. See the "Prerequisite: the IT Service Employee Agent must exist" section in the
|
|
74
|
+
reference for both paths and their gotchas.
|
|
75
|
+
|
|
76
|
+
## The causes of "agent joins then leaves" (read this before building)
|
|
77
|
+
|
|
78
|
+
The agent replies only when the whole chain is intact — missing a link produces the classic "agent
|
|
79
|
+
joins the conversation, then leaves, no reply" symptom. All are **fixable in this skill**:
|
|
80
|
+
|
|
81
|
+
| # | Requirement | Symptom if missing | Fix |
|
|
82
|
+
|---|-------------|--------------------|-----|
|
|
83
|
+
| 1 | **Channel auth mode = Auth (User Verification ON) WITH a Key Set attached** | `/unauthenticated/access-token` → `BAD_REQUEST` "Set the auth mode to false" (auth ON but **no Key Set** → client fell back to the unauthenticated endpoint); or **401 on `/eventrouter/v1/sse`** (Key Set endpoint/issuer wrong) | Attach a `JWKS_URL` Key Set (endpoint `<Org>/id/keys`, issuer = Employee Site URL) and link it into the channel — do **not** turn auth off |
|
|
84
|
+
| 2 | **Portal user has an Agent Access permission set** enabling the IT Service Employee Agent | Tokens mint and SSE connects, but the agent joins then leaves with **zero `ConversationEntry`** | Create + assign a permission set with Agent Access → the agent |
|
|
85
|
+
| 3 | **The `Teams_AgentForce` ESD exists + is published** | `SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName='Teams_AgentForce'` → 0 rows; Teams can't load a missing deployment | Metadata-deploy the `API`-type ESD + Connect-publish it (step 3) |
|
|
86
|
+
|
|
87
|
+
> **This reverses an earlier version of this skill** that told you to turn User Verification **OFF**
|
|
88
|
+
> and never attach a Key Set. That was diagnosed on a build that flipped auth ON but **forgot the
|
|
89
|
+
> Key Set**, so the Teams client used the *unauthenticated* endpoint and hit "Set the auth mode to
|
|
90
|
+
> false." The verified, product-blessed fix is **auth ON + a JWKS_URL Key Set** (screenshot-confirmed
|
|
91
|
+
> live), which puts the client on the *authenticated* token flow the channel expects.
|
|
92
|
+
|
|
93
|
+
If the agent *still* won't reply after auth-ON + Key Set, Agent-Access-assigned, and the ESD
|
|
94
|
+
created+published are all confirmed, **delegate to `service-itsm-teams-debug`** (its `AGENTFORCE`
|
|
95
|
+
pass/fail checklist walks the full token/routing/ESD/agent chain) before escalating to the
|
|
96
|
+
Agentforce Employee Agent team (agent Omni presence / capacity / GenAI planner) as the last resort.
|
|
97
|
+
In the verified org, fixing the fixable causes above was sufficient.
|
|
98
|
+
|
|
99
|
+
## Verified recipe (summary — 100% API, zero manual steps; full XML + calls in the reference)
|
|
100
|
+
|
|
101
|
+
Deploy in this order — **Key Set first, then the channel that references it, then the ESD.** All
|
|
102
|
+
deploys use an isolated `sfdx-project.json` at `--api-version 67.0`. Run one step at a time.
|
|
103
|
+
|
|
104
|
+
1. **Enhanced Chat User Verification Key Set** — Metadata-deploy a `PublicKeyCertificateSet` with
|
|
105
|
+
`<type>JWKS_URL</type>`, `<jwksEndPoint>` = `<Org_Url>/id/keys`, `<jwtIssuer>` = the **Employee
|
|
106
|
+
Site URL**. Directory must be `PublicKeyCertificateSet/`, suffix `.PublicKeyCertificateSet-meta.xml`.
|
|
107
|
+
(`JWKS_URL` is the endpoint-URL mode; `Jwks` is the uploaded-key mode and rejects a URL.)
|
|
108
|
+
2. **Messaging channel**, deployment type **Web**, domain = the **Employee Site URL** — Metadata-deploy
|
|
109
|
+
a `MessagingChannel` (`messagingChannelType=EmbeddedMessaging`) whose `sessionHandlerFlow` = the
|
|
110
|
+
routing flow that targets the IT Service Employee Agent and `sessionHandlerQueue` = the fallback
|
|
111
|
+
queue (e.g. `chatqueue`). Turn **User Verification ON** and **link the Key Set** in one block:
|
|
112
|
+
`<embeddedConfig><authMode>Auth</authMode><messagingAuthorizations>…publicKeyCertificateSetName…</messagingAuthorizations></embeddedConfig>`.
|
|
113
|
+
Then **activate** the channel (`MessagingChannel.IsActive=true`) before publishing the ESD. The
|
|
114
|
+
routing flow + fallback queue are prerequisites — if `Route_To_MIAW_AEA` was template-installed it
|
|
115
|
+
ships with **placeholder ids** (repoint them); if none exists, author one. The `sfdc_livemessage`
|
|
116
|
+
Omni service channel is **standard/pre-existing** (query, don't create). See the reference §A/§E/§F.
|
|
117
|
+
3. **Create the `Teams_AgentForce` Embedded Service Deployment (ESD)** — the deployment the Teams
|
|
118
|
+
client loads by `esDeveloperName`. Metadata-deploy an **`API`-type** ESD named exactly
|
|
119
|
+
**`Teams_AgentForce`** whose `<messagingChannel>` references the channel from step 2, then
|
|
120
|
+
**publish** it via `POST /services/data/v67.0/connect/embeddedservice/embeddedserviceconfig/publish/<esdId>`
|
|
121
|
+
(`{}` → `isSuccess:true`; the publish route is **v67.0**). See reference §C/§D. **If this ESD is
|
|
122
|
+
missing, login works but the agent never replies** — verify with
|
|
123
|
+
`SELECT Id FROM EmbeddedServiceConfig WHERE DeveloperName='Teams_AgentForce'` (Tooling).
|
|
124
|
+
4. **Create a permission set** (e.g. "Agent Access") enabling the **IT Service Employee Agent** and
|
|
125
|
+
**assign it to the portal user** (RBAC grant — confirm before assigning). See reference §G.
|
|
126
|
+
5. **Retest from a brand-NEW Teams chat** — existing sessions stay bound to the old deployment.
|
|
127
|
+
|
|
128
|
+
Do **not** use `POST /connect/service-itsm/createMessagingChannel` — it forces its own defaults; build
|
|
129
|
+
the channel yourself so you control the flow/queue/dev-name and the exact auth + Key Set wiring. See
|
|
130
|
+
the reference for the exact API bodies, object names, verification queries, and the full gotchas index.
|
|
131
|
+
|
|
132
|
+
## Related Skills
|
|
133
|
+
|
|
134
|
+
| Skill | When to use instead |
|
|
135
|
+
|-------|---------------------|
|
|
136
|
+
| `service-itsm-teams-configure` | Enabling the Teams feature Salesforce Go page toggle + Azure/Entra app + SSO/Named Credentials — run first; it delegates here for the embedded agent |
|
|
137
|
+
| `experience-portal-create` | Creating the employee-service portal/site whose URL this skill consumes |
|
|
138
|
+
| `service-itsm-teams-debug` | Diagnosing why an already-built agent won't reply (or other Teams ITSM failures) — runs the `AGENTFORCE` pass/fail checklist and reports remediation |
|
|
139
|
+
| `service-itsm-channels-coordinate` | Top-level menu across Teams, Slack, Swarming, Notifications, Portal |
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!--
|
|
3
|
+
Deployable EmbeddedServiceConfig source template for the Teams "Ask AI Agent" custom client.
|
|
4
|
+
Canonical guidance lives in references/teams-embedded-employee-agent.md §C — this file is the
|
|
5
|
+
same metadata as a ready-to-deploy asset; keep the two in sync if you edit either.
|
|
6
|
+
Place at: force-app/main/default/embeddedServiceConfigs/Teams_AgentForce.EmbeddedServiceConfig-meta.xml
|
|
7
|
+
Deploy with the "sf project deploy start" command shown in reference §C (kept out of this
|
|
8
|
+
comment because XML comments cannot contain a double-hyphen, which CLI flags use).
|
|
9
|
+
|
|
10
|
+
Placeholders / invariants:
|
|
11
|
+
- DeveloperName (the file's API name) MUST be exactly "Teams_AgentForce" — Teams hard-codes
|
|
12
|
+
esDeveloperName; do not rename per-org.
|
|
13
|
+
- <messagingChannel> below is a PLACEHOLDER: replace "Teams_AgentForce_Channel" with YOUR
|
|
14
|
+
MessagingChannel's metadata developer name (from §A of the reference) — it is NOT required to
|
|
15
|
+
equal the ESD name.
|
|
16
|
+
- Do NOT add a <site> element — a deploymentType=API custom-client ESD has none (correct).
|
|
17
|
+
- <isEnabled>true</isEnabled> is the equivalent of "published" for an API-type ESD.
|
|
18
|
+
- <masterLabel> is a human label; adjust freely.
|
|
19
|
+
-->
|
|
20
|
+
<EmbeddedServiceConfig xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
21
|
+
<areGuestUsersAllowed>false</areGuestUsersAllowed>
|
|
22
|
+
<deploymentFeature>EmbeddedMessaging</deploymentFeature>
|
|
23
|
+
<deploymentType>API</deploymentType>
|
|
24
|
+
<embeddedServiceMessagingChannel>
|
|
25
|
+
<isChatInvitationCustomizable>false</isChatInvitationCustomizable>
|
|
26
|
+
<isEnabled>true</isEnabled>
|
|
27
|
+
<isInvitationEnabled>false</isInvitationEnabled>
|
|
28
|
+
<isSendInvtAllowedAfterAccept>false</isSendInvtAllowedAfterAccept>
|
|
29
|
+
<isSendInvtAllowedAfterReject>false</isSendInvtAllowedAfterReject>
|
|
30
|
+
<messagingChannel>Teams_AgentForce_Channel</messagingChannel>
|
|
31
|
+
<shouldShowAgentforceTagline>false</shouldShowAgentforceTagline>
|
|
32
|
+
<shouldShowDeliveryReceipts>false</shouldShowDeliveryReceipts>
|
|
33
|
+
<shouldShowEmojiSelection>false</shouldShowEmojiSelection>
|
|
34
|
+
<shouldShowReadReceipts>false</shouldShowReadReceipts>
|
|
35
|
+
<shouldShowTypingIndicators>false</shouldShowTypingIndicators>
|
|
36
|
+
<shouldStartNewLineOnEnter>false</shouldStartNewLineOnEnter>
|
|
37
|
+
</embeddedServiceMessagingChannel>
|
|
38
|
+
<isEnabled>true</isEnabled>
|
|
39
|
+
<isTermsAndConditionsEnabled>false</isTermsAndConditionsEnabled>
|
|
40
|
+
<isTermsAndConditionsRequired>false</isTermsAndConditionsRequired>
|
|
41
|
+
<masterLabel>Teams AgentForce</masterLabel>
|
|
42
|
+
<shouldHideAuthDialog>false</shouldHideAuthDialog>
|
|
43
|
+
</EmbeddedServiceConfig>
|