@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.
Files changed (136) hide show
  1. package/package.json +1 -1
  2. package/skills/automation-flow-generate/SKILL.md +32 -43
  3. package/skills/experience-portal-create/SKILL.md +497 -0
  4. package/skills/experience-portal-create/assets/report-template.md +30 -0
  5. package/skills/experience-portal-create/references/mcp-invocation.md +288 -0
  6. package/skills/experience-portal-create/references/post-creation-activate-publish.md +165 -0
  7. package/skills/experience-portal-create/references/templates.md +253 -0
  8. package/skills/experience-ui-bundle-features-generate/SKILL.md +5 -1
  9. package/skills/experience-ui-bundle-frontend-generate/SKILL.md +2 -0
  10. package/skills/experience-ui-bundle-frontend-generate/references/page.md +1 -0
  11. package/skills/platform-datamask-run/SKILL.md +345 -0
  12. package/skills/platform-datamask-run/references/api-surface.md +130 -0
  13. package/skills/platform-datamask-run/references/policy-authoring.md +185 -0
  14. package/skills/platform-datamask-run/references/run-and-abort.md +116 -0
  15. package/skills/platform-datamask-run/scripts/poll-job.sh +115 -0
  16. package/skills/platform-dataspace-access-configure/SKILL.md +51 -3
  17. package/skills/platform-dataspace-access-configure/scripts/inspect-dataspace-scopes.sh +56 -0
  18. package/skills/platform-lightning-type-widget-coordinate/references/build-plan-format.md +1 -0
  19. package/skills/platform-sandbox-configure/SKILL.md +17 -2
  20. package/skills/platform-trial-org-create/SKILL.md +175 -0
  21. package/skills/platform-trial-org-create/examples/create_request.json +9 -0
  22. package/skills/platform-trial-org-create/examples/error_response.json +41 -0
  23. package/skills/platform-trial-org-create/examples/success_response.json +27 -0
  24. package/skills/platform-trial-org-create/references/error_codes.md +42 -0
  25. package/skills/platform-trial-org-create/references/signup_request_fields.md +69 -0
  26. package/skills/platform-trial-org-create/scripts/create_signup_request.sh +175 -0
  27. package/skills/platform-trial-org-create/scripts/get_signup_request.sh +155 -0
  28. package/skills/platform-widget-generate/SKILL.md +47 -6
  29. package/skills/platform-widget-generate/examples/conditional.json +3 -3
  30. package/skills/platform-widget-generate/examples/list-with-foreach.json +2 -2
  31. package/skills/platform-widget-generate/examples/single-object.json +2 -2
  32. package/skills/platform-widget-generate/references/widget-bundle-layout.md +1 -1
  33. package/skills/service-agentforce-channel-configure/SKILL.md +271 -0
  34. package/skills/service-agentforce-channel-configure/references/agent-wiring.md +97 -0
  35. package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +145 -0
  36. package/skills/service-agentforce-channel-configure/references/channel-branch-voice.md +69 -0
  37. package/skills/service-agentforce-channel-configure/references/channel-types.md +61 -0
  38. package/skills/service-agentforce-channel-configure/references/live-traffic-gate.md +86 -0
  39. package/skills/service-agentforce-channel-configure/references/queue-resolution.md +135 -0
  40. package/skills/service-agentforce-channel-configure/references/routing-flow.md +384 -0
  41. package/skills/service-catalog-template-deploy/SKILL.md +310 -0
  42. package/skills/service-catalog-template-deploy/references/cli-invocation.md +258 -0
  43. package/skills/service-catalog-template-deploy/scripts/activate-verify.mjs +164 -0
  44. package/skills/service-catalog-template-deploy/scripts/build-deploy-payload.mjs +94 -0
  45. package/skills/service-catalog-template-deploy/scripts/resolve-template.mjs +331 -0
  46. package/skills/service-catalog-template-search/SKILL.md +212 -0
  47. package/skills/service-catalog-template-search/references/cli-invocation.md +128 -0
  48. package/skills/service-catalog-template-search/scripts/classify-catalog.mjs +205 -0
  49. package/skills/service-concierge-portal-generate/SKILL.md +126 -0
  50. package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +1428 -0
  51. package/skills/service-digital-engagement-channel-configure/SKILL.md +46 -6
  52. package/skills/service-digital-engagement-channel-configure/assets/messaging_channel_template.xml +2 -1
  53. package/skills/service-digital-engagement-channel-configure/examples/asa_agent_channel.xml +4 -1
  54. package/skills/service-helpagent-coordinate/README.md +8 -2
  55. package/skills/service-helpagent-coordinate/SKILL.md +126 -130
  56. package/skills/service-helpagent-coordinate/assets/help-agent-spec.md +70 -53
  57. package/skills/service-helpagent-coordinate/references/agent-script.md +571 -457
  58. package/skills/service-helpagent-coordinate/references/channel-voice.md +38 -9
  59. package/skills/service-helpagent-coordinate/references/channel-web-chat.md +173 -49
  60. package/skills/service-helpagent-coordinate/references/output-report-format.md +126 -0
  61. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +153 -0
  62. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +79 -0
  63. package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +35 -0
  64. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +271 -0
  65. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +265 -0
  66. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +220 -0
  67. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-final-report.mjs +102 -0
  68. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/record-enable-result.mjs +73 -0
  69. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +206 -0
  70. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +194 -0
  71. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +223 -0
  72. package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +45 -7
  73. package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +45 -5
  74. package/skills/service-itsm-agentic-setup-configure/SKILL.md +116 -0
  75. package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +64 -0
  76. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +158 -0
  77. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/cli-invocation.md +361 -0
  78. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/error-taxonomy.md +44 -0
  79. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/reactivation.md +66 -0
  80. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +66 -0
  81. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/specialized-templates.md +148 -0
  82. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/workflow-detail.md +169 -0
  83. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/build-create-body.mjs +116 -0
  84. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/classify-agent-existence.mjs +185 -0
  85. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/classify-preflight.mjs +168 -0
  86. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/create-scratch-dir.mjs +58 -0
  87. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +197 -0
  88. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +186 -0
  89. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +51 -0
  90. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/cli-invocation.md +345 -0
  91. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/error-taxonomy.md +44 -0
  92. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/reactivation.md +63 -0
  93. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +44 -0
  94. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/workflow-detail.md +149 -0
  95. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +110 -0
  96. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +201 -0
  97. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-activate-result.mjs +135 -0
  98. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-agent-existence.mjs +194 -0
  99. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-preflight.mjs +158 -0
  100. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/create-scratch-dir.mjs +58 -0
  101. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +191 -0
  102. package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +133 -0
  103. package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +71 -0
  104. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +308 -0
  105. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +23 -0
  106. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +193 -0
  107. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +57 -0
  108. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +394 -0
  109. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +266 -0
  110. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +106 -0
  111. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +142 -0
  112. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +82 -0
  113. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-action-surface.mjs +137 -0
  114. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-assignment-state.mjs +99 -0
  115. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +120 -0
  116. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/resolve-target-user.mjs +86 -0
  117. package/skills/service-itsm-agentic-setup-uel-user-create/SKILL.md +284 -0
  118. package/skills/service-itsm-agentic-setup-uel-user-create/references/mcp-invocation.md +302 -0
  119. package/skills/service-itsm-channels-coordinate/SKILL.md +472 -0
  120. package/skills/service-itsm-incident-mgmt-configure/SKILL.md +212 -0
  121. package/skills/service-itsm-incident-mgmt-configure/references/mcp-invocation.md +225 -0
  122. package/skills/service-itsm-incident-priority-configure/SKILL.md +53 -12
  123. package/skills/service-itsm-swarming-configure/SKILL.md +212 -0
  124. package/skills/service-itsm-teams-configure/SKILL.md +395 -0
  125. package/skills/service-itsm-teams-configure/references/azure-credential-population.md +213 -0
  126. package/skills/service-itsm-teams-configure/references/gotchas.md +23 -0
  127. package/skills/service-itsm-teams-coordinate/SKILL.md +175 -0
  128. package/skills/service-itsm-teams-coordinate/examples/output-templates.md +85 -0
  129. package/skills/service-itsm-teams-debug/SKILL.md +144 -0
  130. package/skills/service-itsm-teams-debug/references/configuration-checklists.md +277 -0
  131. package/skills/service-itsm-teams-debug/references/report-generation.md +95 -0
  132. package/skills/service-itsm-teams-employee-agent-configure/SKILL.md +139 -0
  133. package/skills/service-itsm-teams-employee-agent-configure/assets/Teams_AgentForce.EmbeddedServiceConfig-meta.xml +43 -0
  134. package/skills/service-itsm-teams-employee-agent-configure/references/teams-embedded-employee-agent.md +480 -0
  135. package/skills/service-itsm-teams-itdesk-configure/SKILL.md +232 -0
  136. 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>