service-itsm-teams-configure

Enable Microsoft Teams for Employee Service (ITSM) in Salesforce — the Salesforce Go feature service-cloud-itsm-teams-integration gating Teams-based IT Desk and IT Service collaboration. Use this for: 'enable Teams for employee service', 'turn on ITSM Teams integration', 'enable Microsoft Teams for

By forcedotcom · 1,125 installs

npx skills add forcedotcom/sf-skills --skill service-itsm-teams-configure

Source repository · Upstream listing

Enable Microsoft Teams for Employee Service (ITSM) Enable the Salesforce Go feature "Microsoft Teams for Employee Service" ( service cloud itsm teams integration ) — the feature that lets IT Desk and IT Service agents track tickets, request catalog items, and get Agentforce assistance from inside Microsoft Teams. Every operation dispatches through headless 360 . 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. Scope In scope : Enabling the service cloud itsm teams integration Go feature via its feature enablement Connect API; verifying feature and ITSMTeamsEnabled preference state afterward; explaining why the direct org preference PATCH route fails and why this route works instead; disabling the feature if requested; giving the user step by step instructions for the Azure/Entra app registration (Step 4a) since no Salesforce API can perform that part; once the user provides the resulting Client ID/Tenant ID (in chat) and the Client Secret (written to a gitignored secret file via the copy paste command in Step 4a, never in chat), writing them directly into the MSTeamsSetupClientCredentialsEC Named Credential via API — this Salesforce side write is always automated by this skill, never deferred back to the user; registering the Experience Cloud site as the Teams "preferred site" extension via /connect/service itsm teams/graph api/extensions once that credential exists. Out of scope : Notification channel preferences ( Notifications , TeamsNotifications ) — a separate concern from this feature. Enabling the service cloud swarming Go feature itself — delegate to service itsm swarming configure . The IT Desk/fulfiller checklist group (Turn on IT Desk, Install IT Desk app, Manage User Access, Set Teams as Collaboration Tool for Swarming) — delegate to service itsm teams itdesk configure . The IT Service/employee checklist group (Turn on IT Service, Install IT Service app, Manage User Access, Select a Digital Experience Site) — delegate to service itsm teams itservice configure . Portal/site creation — use experience portal create . The actual Azure side actions (clicking through the Azure portal, generating the client secret, granting Microsoft admin consent) must be performed by the user in the Microsoft admin center — no Salesforce API reaches Azure/Entra — but this skill still provides the exact instructions for those steps (see Gotchas and Step 4a) rather than treating them as someone else's problem. The problem this skill solves ITSMTeamsEnabled is the Salesforce Go page toggle preference gating Microsoft Teams ITSM integration. Its UDD definition ( ServiceItsmTeams.settings.xml ) declares orgAccess="always" but has no editAccess attribute — unlike working preferences such as Notifications / TeamsNotifications , which explicitly set editAccess="always" . As a result, the direct Setup preferences Connect API route is blocked: Both return 401 : ( "Cannot update preference value!" on the PATCH). This is a real, code level access gate ( StandardMetadataChecker in setup connect impl relays an Aura NoAccessException — "bit(s) do not have READ/WRITE access" — for this preference specifically), not a version prefix or routing mistake. Do not retry this route with different API versions or bodies. The verified working path is different: enable the Go feature , not the preference directly. The Salesforce Go feature enablement Connect API sits behind a different access check and, on enable, flips ITSMTeamsEnabled (and related feature state) as a side effect. Workflow Step 1 — Check current feature status Response shape: If status is already "ENABLED" , skip to Step 3 (verification) — do not re enable. If enableBlockedReasons is non empty, surface those reasons to the user (typically a missing license/add on) before attempting Step 2. Step 2 — Enable the feature Known gotcha (verified): this call can return 500 INTERNAL ERROR even when the feature successfully ends up ENABLED . Do not treat a 500 here as a hard failure — always re run Step 1 ( features/status ) and Step 3 ( ITSMTeamsEnabled read) afterward to check actual state before reporting failure to the user. If status still shows NOT ENABLED after retrying once, then report the failure with the raw error. Step 3 — Verify ITSMTeamsEnabled flipped Expect 200 {"isPreferenceEnabled": true} . This confirms the underlying preference — otherwise inaccessible via direct PATCH — is now enabled as a side effect of the feature enable. Step 4 — Report interim status (setup is NOT complete yet) Report feature status and whether ITSMTeamsEnabled reads true — but frame this as progress, not completion. Enabling the Go feature is only the first half; the integration is not functional until the Microsoft Entra app is registered, its credentials are written into the Named Credential + Auth Provider, and admin consent is granted (Step 4a). Do not mark Teams "Done"/"complete" or hand back to a coordinator as done. State plainly: "The Salesforce feature is enabled; Teams integration is not yet complete — the Microsoft Entra app registration comes next." Then proceed into Step 4a. See the Completion contract below for what "complete" requires. Step 4a — Follow the Go page's own order: Create Entra app → Configure Named Credentials → Grant consent The Salesforce Go feature page (Setup → Salesforce Go → this feature, .../lightning/setup/page/feature/service cloud itsm teams integration/home?topic=SalesforceGo ) renders a "Complete the Required Steps" → "Integrate Salesforce with Teams" checklist with exactly three items, in this order — verified from a live screenshot of the page. Follow this order; do not skip ahead to Named Credentials before the Entra app exists, and do not treat "Grant Azure Administrator Consent" as optional: 1. Create Microsoft Entra ID App ("Set Up Microsoft Entra ID App" button — opens portal.azure.com). There is no Salesforce API for this sub step; give the user these exact clicks and wait for them to provide the resulting values: portal.azure.com → Microsoft Entra ID → App registrations → New registration . Name it something identifiable (e.g. Salesforce ITSM Teams Integration ); single tenant is fine unless the user's org spans multiple tenants. Leave the redirect URI blank at creation — the Delegated Graph permissions below require one, but it's added later as the Auth Provider callback (Step 5; see references/azure credential population.md ). From the app's Overview page, note the Application (client) ID and Directory (tenant) ID . Certificates & secrets → New client secret → copy the secret value immediately (unrecoverable after leaving the page). API permissions → Add a permission → Microsoft Graph → Delegated permissions → add all 17 below, then click Grant admin consent so every row reads Granted . These are Delegated (not Application) — verified working set: Channel.Create , Channel.ReadBasic.All , ChannelMember.Read.All , ChannelMember.ReadWrite.All , ChannelMessage.Edit , ChannelMessage.Read.All , ChannelMessage.ReadWrite , ChannelMessage.Send , Team.Create , Team.ReadBasic.All , Group.Read.All , Group.ReadWrite.All , openid , profile , email , offline access , User.Read . Several require admin consent ( Admin consent required = Yes ), so the Grant admin consent click is mandatory — ungranted consent required rows make Teams calls fail (see the AccessDenied gotcha). Do not add TeamworkAppSettings.ReadWrite.All (not in the working set). Scopes can change between releases — if MS docs list more, add and re grant. Provide the credentials without exposing the secret in chat : Client ID and Tenant ID are non secret and may be given in the conversation; the Client Secret is confidential — NEVER ask for it in chat. Have the user write it to a gitignored file : substitute the job/temp path for <secret file (e.g. $CLAUDE JOB DIR/tmp/teams secret ), then hand them exactly this to copy paste into the Claude Code prompt (secret Value, not the Secret ID, between the quotes): Keep the leading ! — it runs the line in this session's Bash so the file persists. It prints written ; then read it from <secret file at write time (Step 5) and never echo or log it. Note: the ! prefix line is echoed into the chat transcript — if the secret shows up there, treat it as compromised and have the user rotate it in Azure after setup works. 2. Configure Setup Named Credentials ("Go to Setup" button on the Go page — the manual equivalent of what this skill automates). Once you have the Client ID / Tenant ID and the secret is available in the secret file, do not tell the user to enter anything into Setup — call the Named Credential APIs directly , per "Populating MSTeamsSetupClientCredentialsEC given a user supplied client ID/secret" under Step 5 below. This same set of values must ALSO be written into the microsoft auth provider Auth Provider (the inbound SSO side, distinct from the outbound Graph Named Credential) — the org provisions this Auth Provider empty. Do this automatically too; see "Populating the microsoft auth provider Auth Provider" under Step 5. Both artifacts share the same Client ID / Tenant ID / Client Secret and must be populated together — populating only the Named Credential leaves portal SSO login broken. 3. Grant Azure Administrator Consent ("Grant Consent" button on the Go page). Clicking it opens a modal with a one time consent link to a fixed Salesforce owned Entra app ( client id=cd6bd63f 41ef 47cc 9465 86e986179a29 , tenant segment organizations — not the user's own tenant ID, and not the app created in step 1) requesting the Organization.ReadWrite.All delegated scope: This link is static — it does not need to be fetched per org or per user, and headless 360 has no operation that generates or dispatches it (it's rendered by an internal Aura controller with no public Connect API mirror). Paste this exact link and tell the user to click it, signed in as a Microsoft tenant admin, to grant consent — this action authenticates as the Microsoft admin and cannot be performed by this skill via API. Everything the user does above (steps 1's Azure clicks and step 3's consent click) is their manual responsibility because no Salesforce API reaches Azure/Entra. Everything Salesforce side — writing the supplied credential (secret read from the gitignored secret file, never from chat) into the Named Credential in step 2 — is this skill's job to automate; that division of labor is the entire point of this skill. Step 4b — Delegate to the IT Desk / IT Service child skills Before touching the "Set Up Salesforce IT Desk" / "Set Up Salesforce IT Service" checklist groups, ask the user which they want — these are two independent halves of the feature (fulfiller side vs. employee side) and a user may only need one: Salesforce IT Desk — for IT agents/fulfillers to swarm on and resolve tickets from Teams. Invoke service itsm teams itdesk configure . Salesforce IT Service — for employees to create and manage their own tickets from Teams. Invoke service itsm teams itservice configure . Both — invoke both child skills. Each child skill handles its own 3 4 item checklist group (Turn on <app → Install <app App on Teams → Manage User Access → optional 4th item) end to end — do not duplicate that logic here. Step 4c — Delegate the embedded Agentforce