Service Itsm Teams Itservice Configure
Configure the \"Set Up Salesforce IT Service\" checklist for Microsoft Teams Employee Service (ITSM) — the employee side, covering app enablement, marketplace install guidance, user access assignment, and Digital Experience Site selection. Use this for: 'turn on Salesforce IT Service', 'set up IT Service on Teams', 'assign Teams for Employee permission set', 'give employees access to Teams for Employee Service', 'manage user access for Teams ITSM', 'grant users the permission sets needed for Teams Employee Service', 'select a digital experience site for Teams', 'install Salesforce IT Service app on Teams', or any request to complete the IT Service half of the Teams ITSM Go page checklist (including the Manage User Access step). DO NOT TRIGGER for the base Teams Salesforce Go page toggle or Azure/Entra app setup (service-itsm-teams-configure) or for the IT Desk/fulfiller half of the checklist (service-itsm-teams-itdesk-configure).
- Skill ID
- forcedotcom/sf-skills/service-itsm-teams-itservice-configure
- Publisher
- forcedotcom
- Repository
- sf-skills
- Installs
- 0
- Files
- 1
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
forcedotcom/sf-skills/service-itsm-teams-itservice-configureInstalls these files- SKILL.md
What this skill tells the agent
Set Up Salesforce IT Service (Microsoft Teams)
Complete the "Set Up Salesforce IT Service" checklist group on the Teams ITSM Go page (service-cloud-itsm-teams-integration's feature page) — the employee side of Teams ITSM integration, for employees to create and manage their own tickets from Teams. Every operation dispatches through headless-360.
Scope
- In scope: Turning on the
OrgHasEmployeeServiceTeamspreference; giving the user the exact Teams marketplace link + help doc for the IT Service app install; assigning theTeamsForEmployeeUserpermission set to confirmed users; selecting the Digital Experience Site to link with Teams via theSLACK_PREFERRED_SITEorg value. - Out of scope: The base Teams Salesforce Go page toggle (
ITSMTeamsEnabled), Azure/Entra app registration, Named Credential population, and Teams extension/preferred-site registration — useservice-itsm-teams-configure(a prerequisite for this skill). The IT Desk/fulfiller half of the checklist — useservice-itsm-teams-itdesk-configure.
Prerequisite: run service-itsm-teams-configure first (or alongside) — this skill assumes the service-cloud-itsm-teams-integration Go feature is already enabled.
Execute one step at a time. These steps make real, state-changing API calls. Run a single operation, show its result, confirm it succeeded, then proceed — do not batch multiple setup calls into one parallel block.
Workflow
Step 1 — Turn on Salesforce IT Service
This is a straight org-preference toggle (unlike ITSMTeamsEnabled, this one supports direct PATCH) — enable it yourself via API, do not ask the user to click the Setup toggle:
mcp__headless-360__dispatch(
method: "PATCH",
url: "/services/data/v67.0/setup/org/preferences/OrgHasEmployeeServiceTeams",
body: { "desiredState": true }
)Expect 200 {"isPreferenceEnabled": true}. Tell the user it's enabled — do not ask them to flip the toggle themselves.
Step 2 — Install Salesforce IT Service App on Teams (user's responsibility)
There is no Salesforce or Microsoft API this skill can call to install a Teams app into a tenant's app catalog — this always requires a human clicking "Add" in the Microsoft Teams admin center / AppSource, signed in with sufficient tenant permissions. Give the user the exact marketplace link and help doc; do not attempt to automate this step.
- Marketplace (verified live from the Go page's "Go to Microsoft Marketplace" button): ``
text https://marketplace.microsoft.com/en-us/product/teams-app/WA200009838?tab=Overview`` - Help doc:
https://help.salesforce.com/s/articleView?id=service.it_srvcs_msteams_config_emplye_srvcs_app.htm&type=5
Print both together. Also tell the user the Microsoft email the employee signs in with must match that Salesforce user's `Username` (SSO maps MS UPN → Username; a mismatch fails login silently). Then HALT until the user replies "installed" — a human-only action; do not proceed or fabricate the confirmation.
Step 3 — Manage User Access
"Manage User Access" ("Manage" button on the Go page) assigns the permission set — verified live from the "Manage Microsoft Teams for Employee Service User Access" dialog:
TeamsForEmployeeUser(label "Teams for Employee", backed by PSLTeamsForEmployeePsl)
Do not just assign every active user. Ask the user which specific user(s) should get access. If they want to see the list of users first (rather than naming them), page it — show at most 10 users per page, then ask "want to see more?" before showing the next page, since orgs can have hundreds or thousands of users:
mcp__headless-360__dispatch_readonly(
method: "GET",
url: "/services/data/v67.0/query",
queryParams: { "q": "SELECT Id, Name, Username, Email FROM User WHERE IsActive = true ORDER BY Name LIMIT 10 OFFSET <page * 10>" }
)Who to assign — warn the user up front: the target must be a real employee / UEL user whose email exists on the Azure/Entra side (a Microsoft account in the same tenant). Login is SSO (MS UPN → the Salesforce Username), so assigning it to a user with no matching Azure account — or a misaligned email/UPN — fails login silently (see the UPN↔Username note above). State this before assigning; never assign system/integration accounts.
Verified gotcha (spotting who NOT to pick): in scratch/test orgs the first page(s) are often dominated by non-employee accounts — e.g. Automated Process, Bot User, Insights Integration, *.ext integration users, ESW_* / *Site Guest User guests, DigitalAgent.* agents — none are employee/UEL users or have an Azure identity. Flag such rows as likely-not-employee (don't silently filter — call them out); if the user says "not employee users, skip," move to the next page.
Once the user confirms specific user(s), look up the permission set's Id (it is stable per org but don't hardcode it — query fresh):
mcp__headless-360__dispatch_readonly(
method: "GET",
url: "/services/data/v67.0/query",
queryParams: { "q": "SELECT Id, Name FROM PermissionSet WHERE Name = 'TeamsForEmployeeUser'" }
)Then assign the permission set to each confirmed user via PermissionSetAssignment (one record per user — batch with as many calls as needed, there is no bulk-assign endpoint exposed here):
mcp__headless-360__dispatch(
method: "POST",
url: "/services/data/v67.0/sobjects/PermissionSetAssignment",
body: { "AssigneeId": "<user id>", "PermissionSetId": "<permission set id>" }
)Verify by re-querying PermissionSetAssignment for that AssigneeId, or simply trust the 201 from the assignment call plus a SELECT ... FROM PermissionSetAssignment WHERE AssigneeId = '<user id>' AND PermissionSetId = '<permset id>' readback.
Login prerequisites (required for the user to actually sign in to IT Service in Teams)
Assigning the permission set above is necessary but not sufficient — a UEL user who opens the IT Service app in Teams can still hit a silent login failure unless all three of the following are also in place. Verify (and set) these as part of enabling a user:
- "Allow OAuth for employees" on the employee login profile (e.g. Unified Employee) — Setup → Profiles → (profile) → Session Settings → check Allow OAuth for employees. Set this in the Setup UI. It is not a Profile SObject field (no OAuth field appears in
Profiledescribe) and it is not the Metadata elementProfile.sessionSettings.allowOauthForEmployees— a Profile metadata deploy containing<sessionSettings><allowOauthForEmployees>fails validation:Element {…}sessionSettings invalid at this location in type Profile(verified Aug 2026). Nor is it readable/writable via the headless-360 Connect/REST/Tooling dispatch. Use the Setup UI checkbox. Confirmed blocker: with it off, the OAuth handshake for the embedded app fails and login silently does not complete — the community login succeeds (LoginHistory "Employee Login to Community" = Success) but no `OauthToken` is ever minted for the user, and the Teams app re-pops its "Single Sign-On / Login with URL" chooser (often with a/…/setup/secur/RemoteAccessAuthorizationPage"Service Not Available" popup).
- CORS Allowed Origins must include both Teams origins. Check with
dispatch_readonly GET /services/data/v67.0/queryonSELECT Id, UrlPattern FROM CorsWhitelistEntry, and create any that are missing withdispatch POST /services/data/v67.0/sobjects/CorsWhitelistEntrybody{"UrlPattern": "<origin>"}(this is a data-API sobject, not a Tooling type — a ToolingPOST/query returnsNOT_FOUND/INVALID_TYPE):
https://teams.cloud.microsofthttps://cdn.scs.static.lightning.force.com— the Lightning static-resource CDN the embedded
More from forcedotcom
Use this skill in a project
Open any RiverX project, search the Skills panel for forcedotcom/sf-skills/service-itsm-teams-itservice-configure, and install it in one click.
