service-itsm-teams-itservice-configure
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSet Up Salesforce IT Service (Microsoft Teams)
设置Salesforce IT服务(Microsoft Teams)
Complete the "Set Up Salesforce IT Service" checklist group on the Teams ITSM Go page
('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.
service-cloud-itsm-teams-integration完成Teams ITSM Go页面(的功能页面)上的**「设置Salesforce IT服务」清单组——这是Teams ITSM集成的员工端部分,供员工在Teams中创建和管理自己的工单。所有操作均通过headless-360**调度执行。
service-cloud-itsm-teams-integrationScope
适用范围
- In scope: Turning on the preference; giving the user the exact Teams marketplace link + help doc for the IT Service app install; assigning
OrgHasEmployeeServiceTeams/TeamsForEmployeeUserpermission sets to confirmed users; selecting the Digital Experience Site to link with Teams via theMicrosoftGraphAccessorg value.SLACK_PREFERRED_SITE - Out of scope: The base Teams Salesforce Go page toggle (), Azure/Entra app registration, Named Credential population, and Teams extension/preferred-site registration — use
ITSMTeamsEnabled(a prerequisite for this skill). The IT Desk/fulfiller half of the checklist — useservice-itsm-teams-configure.service-itsm-teams-itdesk-configure
Prerequisite: run first (or alongside) — this skill assumes
the Go feature is already enabled.
service-itsm-teams-configureservice-cloud-itsm-teams-integrationExecute 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.
- 包含内容:开启组织偏好设置;为用户提供IT服务应用安装的Teams市场链接及帮助文档;为已确认的用户分配
OrgHasEmployeeServiceTeams/TeamsForEmployeeUser权限集;通过MicrosoftGraphAccess组织值选择要与Teams关联的Digital Experience Site。SLACK_PREFERRED_SITE - 排除内容:基础Teams Salesforce Go页面开关()、Azure/Entra应用注册、命名凭证配置以及Teams扩展/首选站点注册——请使用
ITSMTeamsEnabled(此技能的前置条件)。清单中的IT服务台/处理人员部分——请使用service-itsm-teams-configure。service-itsm-teams-itdesk-configure
前置条件:先运行(或同时运行)——此技能假定 Go功能已启用。
service-itsm-teams-configureservice-cloud-itsm-teams-integration请分步执行操作。这些步骤会调用真实的、改变系统状态的API。每次仅运行一个操作,展示结果,确认成功后再继续——请勿将多个设置调用批量合并到一个并行块中。
Workflow
工作流程
Step 1 — Turn on Salesforce IT Service
步骤1 — 开启Salesforce IT服务
This is a straight org-preference toggle (unlike , this one supports direct
) — enable it yourself via API, do not ask the user to click the Setup toggle:
ITSMTeamsEnabledPATCHtext
mcp__headless-360__dispatch(
method: "PATCH",
url: "/services/data/v67.0/setup/org/preferences/OrgHasEmployeeServiceTeams",
body: { "desiredState": true }
)Expect . Tell the user it's enabled — do not ask them to flip
the toggle themselves.
200 {"isPreferenceEnabled": true}这是一个直接的组织偏好开关(与不同,此开关支持直接调用)——通过API自行启用,无需让用户点击设置界面的开关:
ITSMTeamsEnabledPATCHtext
mcp__headless-360__dispatch(
method: "PATCH",
url: "/services/data/v67.0/setup/org/preferences/OrgHasEmployeeServiceTeams",
body: { "desiredState": true }
)预期返回结果为。告知用户已启用该功能——请勿让用户自行切换开关。
200 {"isPreferenceEnabled": true}Step 2 — Install Salesforce IT Service App on Teams (user's responsibility)
步骤2 — 在Teams上安装Salesforce IT服务应用(用户负责操作)
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 (SSO maps MS UPN → ; a mismatch fails login silently).
Then HALT until the user replies "installed" — a human-only action; do not proceed or
fabricate the confirmation.
UsernameUsername目前没有Salesforce或Microsoft API可用于将Teams应用安装到租户的应用目录中——此操作始终需要拥有足够租户权限的人员在Microsoft Teams管理中心/AppSource中点击“添加”。为用户提供准确的市场链接和帮助文档;请勿尝试自动化此步骤。
- 市场链接(从Go页面的“前往Microsoft市场”按钮验证为有效链接):
text
https://marketplace.microsoft.com/en-us/product/teams-app/WA200009838?tab=Overview - 帮助文档:
https://help.salesforce.com/s/articleView?id=service.it_srvcs_msteams_config_emplye_srvcs_app.htm&type=5
同时展示上述两个链接。还要告知用户员工登录所用的Microsoft邮箱必须与Salesforce用户的匹配(SSO将MS UPN映射到;不匹配会导致登录静默失败)。然后暂停操作,直到用户回复**“已安装”**——这是仅能由人工完成的操作;请勿继续或伪造确认信息。
UsernameUsernameStep 3 — Manage User Access
步骤3 — 管理用户访问权限
"Manage User Access" ("Manage" button on the Go page) assigns two permission sets — verified
live from the "Manage Microsoft Teams for Employee Service User Access" dialog:
- (label "Teams for Employee", backed by PSL
TeamsForEmployeeUser)TeamsForEmployeePsl - (label "MicrosoftGraphAccess") — assigned alongside it in the same dialog.
MicrosoftGraphAccess
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:
text
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>" }
)Verified gotcha: in scratch/test orgs (and possibly some real orgs), the first page(s) of
this query are often dominated by non-employee system/integration accounts — e.g. , , , integration users, / guest users, and agent users. When presenting a page to the user, flag
these as likely-not-employee accounts (don't silently filter them out of the list — the user may
still want one assigned — but call out which rows look like system accounts so the user doesn't
have to guess). If the user says a listed batch is "not employee users, skip," move on to the
next page rather than assigning any of them.
Automated ProcessBot UserInsights Integration*.extESW_**Site Guest UserDigitalAgent.*Once the user confirms specific user(s), look up each permission set's (they are stable per
org but don't hardcode them — query fresh):
Idtext
mcp__headless-360__dispatch_readonly(
method: "GET",
url: "/services/data/v67.0/query",
queryParams: { "q": "SELECT Id, Name FROM PermissionSet WHERE Name IN ('TeamsForEmployeeUser','MicrosoftGraphAccess')" }
)Then assign both permission sets to each confirmed user via (one record
per user/permset pair — batch with as many calls as needed, there is no bulk-assign endpoint
exposed here):
PermissionSetAssignmenttext
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 for that , or simply trust the
from the assignment call plus a readback.
PermissionSetAssignmentAssigneeId201SELECT ... FROM PermissionSetAssignment WHERE AssigneeId = '<user id>' AND PermissionSetId = '<permset id>'“管理用户访问权限”(Go页面上的“管理”按钮)会分配两个权限集——从“管理Microsoft Teams员工服务用户访问权限”对话框中验证:
- (标签为**“Teams for Employee”**,由PSL
TeamsForEmployeeUser支持)TeamsForEmployeePsl - (标签为**“MicrosoftGraphAccess”**)——在同一对话框中一并分配。
MicrosoftGraphAccess
请勿为所有活跃用户分配权限。询问用户应为哪些特定用户授予访问权限。如果用户希望先查看用户列表(而非直接指定),请分页展示——每页最多显示10个用户,然后询问“是否查看更多?”再展示下一页,因为组织中可能有数百或数千个用户:
text
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>" }
)已验证的注意点:在临时/测试组织(可能也包括部分正式组织)中,此查询的前几页通常以非员工的系统/集成账户为主——例如、、、集成用户、 / 访客用户以及代理用户。向用户展示页面时,标记这些账户为“非员工账户”(不要从列表中静默过滤——用户可能仍希望为其中某个账户分配权限——但标注出哪些行看起来是系统账户,以免用户猜测)。如果用户表示列出的批次“不是员工用户,跳过”,则直接进入下一页,不为这些账户分配权限。
Automated ProcessBot UserInsights Integration*.extESW_**Site Guest UserDigitalAgent.*用户确认特定用户后,查询每个权限集的(每个组织中的权限集Id是稳定的,但不要硬编码——请实时查询):
Idtext
mcp__headless-360__dispatch_readonly(
method: "GET",
url: "/services/data/v67.0/query",
queryParams: { "q": "SELECT Id, Name FROM PermissionSet WHERE Name IN ('TeamsForEmployeeUser','MicrosoftGraphAccess')" }
)然后通过为每个已确认的用户分配这两个权限集(每个用户/权限集对对应一条记录——根据需要批量调用,此处没有暴露批量分配的端点):
PermissionSetAssignmenttext
mcp__headless-360__dispatch(
method: "POST",
url: "/services/data/v67.0/sobjects/PermissionSetAssignment",
body: { "AssigneeId": "<user id>", "PermissionSetId": "<permission set id>" }
)可通过重新查询该对应的来验证,或直接信任分配调用返回的状态码,再通过查询确认。
AssigneeIdPermissionSetAssignment201SELECT ... FROM PermissionSetAssignment WHERE AssigneeId = '<user id>' AND PermissionSetId = '<permset id>'Login prerequisites (required for the user to actually sign in to IT Service in Teams)
登录前置条件(用户实际登录Teams中的IT服务所需)
Assigning the two permission sets 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 indescribe) and it is not the Metadata element
Profile— a Profile metadata deploy containingProfile.sessionSettings.allowOauthForEmployeesfails validation:<sessionSettings><allowOauthForEmployees>(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 noElement {…}sessionSettings invalid at this location in type Profileis ever minted for the user, and the Teams app re-pops its "Single Sign-On / Login with URL" chooser (often with aOauthToken"Service Not Available" popup)./…/setup/secur/RemoteAccessAuthorizationPage -
CORS Allowed Origins must include both Teams origins. Check withon
dispatch_readonly GET /services/data/v67.0/query, and create any that are missing withSELECT Id, UrlPattern FROM CorsWhitelistEntrybodydispatch POST /services/data/v67.0/sobjects/CorsWhitelistEntry(this is a data-API sobject, not a Tooling type — a Tooling{"UrlPattern": "<origin>"}/query returnsPOST/NOT_FOUND):INVALID_TYPEhttps://teams.cloud.microsoft- — the Lightning static-resource CDN the embedded IT Service surface loads from. Confirmed blocker: with this origin missing (even when
https://cdn.scs.static.lightning.force.comis present), the browser blocks the asset/OAuth preflight and login silently fails. After adding it, have the user hard-refresh / clear the Teams app cache.teams.cloud.microsoft
-
"API Enabled" system permission on the user. The UEL user must have the API Enabled system permission — grant it via a permission set (create/choose a permission set → System Settings → check API Enabled → assign to the user), not just the base profile. Without it the embedded app's API calls are rejected and the user can't sign in.
If a user reports "can't log in to IT Service in Teams" and Steps 1–4 all look done, walk these
three prerequisites first — they are the most common silent-login blockers. For the full pass/fail
diagnostic sequence (including the OAuth-token-mint check that isolates a portal-user OAuth failure),
see Troubleshooting: Teams for Employee Service login & agent below.
分配上述两个权限集是必要条件,但并不足够——UEL用户在Teams中打开IT服务应用时仍可能遭遇静默登录失败,除非同时满足以下三个条件。在启用用户时,请验证(并设置)这些条件:
-
员工登录配置文件上的“允许员工使用OAuth”(例如Unified Employee配置文件)——设置→配置文件→(目标配置文件)→会话设置→勾选允许员工使用OAuth。请在设置UI中完成此操作。这不是Profile对象的字段(描述中没有OAuth相关字段),也不是元数据元素
Profile——包含Profile.sessionSettings.allowOauthForEmployees的Profile元数据部署会验证失败:<sessionSettings><allowOauthForEmployees>(2026年8月验证)。也无法通过headless-360的Connect/REST/Tooling调度进行读写。请使用设置UI中的复选框。已确认的阻塞问题:如果关闭此选项,嵌入式应用的OAuth握手会失败,登录会静默失败——社区登录成功(LoginHistory中的“Employee Login to Community”=成功)但从未为用户生成Element {…}sessionSettings invalid at this location in type Profile,Teams应用会重新弹出“单点登录/使用URL登录”选择器(通常会伴随OauthToken的“服务不可用”弹窗)。/…/setup/secur/RemoteAccessAuthorizationPage -
CORS允许的源必须包含两个Teams源。通过查询
dispatch_readonly GET /services/data/v67.0/query来检查,若有缺失则通过SELECT Id, UrlPattern FROM CorsWhitelistEntry,请求体为dispatch POST /services/data/v67.0/sobjects/CorsWhitelistEntry来创建(这是数据API对象,不是Tooling类型——Tooling的{"UrlPattern": "<origin>"}/查询会返回POST/NOT_FOUND):INVALID_TYPEhttps://teams.cloud.microsoft- ——嵌入式IT服务界面加载资源的Lightning静态资源CDN。已确认的阻塞问题:如果缺少此源(即使已添加
https://cdn.scs.static.lightning.force.com),浏览器会阻止资源/OAuth预检请求,导致登录静默失败。添加后,请让用户强制刷新/清除Teams应用缓存。teams.cloud.microsoft
-
用户的“API已启用”系统权限。UEL用户必须拥有API已启用系统权限——通过权限集授予(创建/选择一个权限集→系统设置→勾选API已启用→分配给用户),而不仅仅依赖基础配置文件。没有此权限的话,嵌入式应用的API调用会被拒绝,用户无法登录。
如果用户报告“无法登录Teams中的IT服务”且步骤1-4均已完成,请首先检查这三个前置条件——它们是最常见的静默登录阻塞因素。如需完整的通过/失败诊断流程(包括隔离门户用户OAuth失败的OAuth令牌生成检查),请参阅下方的故障排查:Teams员工服务登录与代理。
Step 4 — Select a Digital Experience Site
步骤4 — 选择数字体验站点
This checklist item ("Digital Experience Site Name" dropdown, currently "None" until set) is
not the same API as 's Teams extension registration
() — that one requires the Azure/Entra
credential and is gated by the license blocker (see that skill's Gotchas).
This checklist item instead reads/writes the org-value — the same
Java-enum mechanism as Swarming's — and is
not gated by any Teams license, so it works even when the extension registration is blocked.
service-itsm-teams-configure/connect/service-itsm-teams/graph-api/extensionsMsTeamsAppApiFamilySLACK_PREFERRED_SITEOrgValueUtil.OrgValuesSWARM_COLLABORATION_TOOL- List all Digital Experience sites in the org:
text
mcp__headless-360__dispatch_readonly(method: "GET", url: "/services/data/v67.0/connect/communities") - Present the full list to the user and ask them to pick one. If they don't choose, pick one
yourself (the only site if there's exactly one, otherwise a sensible default such as the most
recently modified site) and explicitly tell the user which one you picked — don't proceed silently.
Live - Check the current value first (skip the write if already set to the chosen site's Id):
text
mcp__headless-360__dispatch_readonly(method: "GET", url: "/services/data/v67.0/setup/org/values/SLACK_PREFERRED_SITE")holds the current selection — the chosen site'sstringValue, orId."None" - Write the selection using the site's (from step 1's
Idresponse — theconnect/communitiesrecord Id, notNetwork):urlPathPrefixVerified live:textmcp__headless-360__dispatch( method: "PATCH", url: "/services/data/v67.0/setup/org/values/SLACK_PREFERRED_SITE", body: { "orgValue": "<site Id>" } )with a site's NetworkPATCH(e.g.Id) returned0DBSB000002EYwj4AG, and a follow-up200 {"stringValue": "<that Id>", ...}confirmed the same value persisted.GET - Re-run step 3's to confirm.
GET
此清单项(“Digital Experience Site Name”下拉菜单,默认显示“None”直到设置)不同于中的Teams扩展注册API()——后者需要Azure/Entra凭证,并受许可证限制(请参阅该技能的注意事项)。此清单项通过读写组织值实现——与Swarming的使用相同的 Java枚举机制——不受任何Teams许可证限制,因此即使扩展注册被阻止也能正常工作。
service-itsm-teams-configure/connect/service-itsm-teams/graph-api/extensionsMsTeamsAppApiFamilySLACK_PREFERRED_SITESWARM_COLLABORATION_TOOLOrgValueUtil.OrgValues- 列出组织中的所有Digital Experience站点:
text
mcp__headless-360__dispatch_readonly(method: "GET", url: "/services/data/v67.0/connect/communities") - 向用户展示完整列表并请其选择一个。如果用户未选择,请自行选择(如果只有一个站点则选该站点,否则选择合理的默认值,例如最近修改的站点)并明确告知用户你选择的站点——请勿静默操作。
Live - 先检查当前值(如果已设置为所选站点的Id,则跳过写入操作):
text
mcp__headless-360__dispatch_readonly(method: "GET", url: "/services/data/v67.0/setup/org/values/SLACK_PREFERRED_SITE")字段保存当前选择值——所选站点的stringValue,或Id。"None" - 使用站点的(来自步骤1中
Id响应的connect/communities记录Id,不是Network)写入选择:urlPathPrefix已验证有效:使用站点的Network Id(例如textmcp__headless-360__dispatch( method: "PATCH", url: "/services/data/v67.0/setup/org/values/SLACK_PREFERRED_SITE", body: { "orgValue": "<site Id>" } ))进行0DBSB000002EYwj4AG调用返回PATCH,后续200 {"stringValue": "<that Id>", ...}调用确认该值已持久化。GET - 重新运行步骤3的调用以确认设置成功。
GET
Step 5 — Make the embedded Agentforce agent reply in Teams
步骤5 — 让嵌入式Agentforce代理在Teams中回复
Completing Steps 1–4 provisions the IT Service surface, but it does not make the embedded
Agentforce agent actually reply inside the Teams custom client ("Salesforce Employee Assist" /
"Ask AI Agent"). That is the final, hardest part of IT Service agent setup and is covered by a
dedicated skill:
→
service-itsm-teams-employee-agent-configureInvoke it (or hand off to it) after Step 4 when the user wants the in-Teams agent to respond. It
covers the verified architecture — a Web channel with User Verification ON + a Key
Set, the deployment, an Omni-Flow routing flow to a real, Active agent, and
an Agent Access permission set on the portal user — plus the diagnostic for the common "agent
joins then leaves" symptom (auth ON but no Key Set, or missing Agent Access). The
per-user Agent Access assignment there is the natural follow-on to the Manage User Access step
(Step 3) above.
JWKS_URLTeams_AgentForceVerified gotcha — UI shows stale "None" after the API write. The Go page's dropdown is a wired
LDS cache over this org-value; a raw Connect doesn't invalidate it. The write is real and
durable (a follow-up confirms it) — if the Setup page is open, tell the user to hard-refresh
the tab to see the new selection.
PATCHGETNaming is misleading — this is a shared, cross-feature setting, not Teams-exclusive. Despite
the prefix (a holdover from this org-value's original Slack-ITSM use case), it backs
the "Select a Digital Experience Site" picker on both the Teams ITSM Go page and the
equivalent Slack ITSM Go page — writing it from one surface changes what the other surface
shows. If the user has also configured Slack ITSM, flag that setting this will also change
Slack's preferred site.
SLACK_完成步骤1-4后,IT服务界面已配置完成,但不会让嵌入式Agentforce代理在Teams自定义客户端(“Salesforce Employee Assist”/“Ask AI Agent”)中实际回复消息。这是IT服务代理设置的最后也是最复杂的部分,由专门的技能覆盖:
→
service-itsm-teams-employee-agent-configure当用户希望Teams中的代理能够响应时,在步骤4之后调用(或移交至)该技能。它涵盖了已验证的架构——启用用户验证+密钥集的Web渠道、部署、路由至真实活跃代理的Omni-Flow路由流程,以及门户用户的Agent Access权限集——还包括针对常见“代理加入后离开”症状的诊断(已启用验证但缺少密钥集,或缺少Agent Access权限)。该技能中的每用户Agent Access分配是上述管理用户访问权限步骤(步骤3)的自然延续。
JWKS_URLTeams_AgentForce已验证的注意点——API写入后UI显示陈旧的“None”。Go页面的下拉菜单基于该组织值的LDS缓存;直接的Connect 调用不会使缓存失效。写入操作是真实且持久的(后续调用可确认)——如果设置页面处于打开状态,请告知用户强制刷新标签页以查看新的选择。
PATCHGET命名具有误导性——这是一个共享的跨功能设置,并非Teams专属。尽管前缀为(此组织值最初用于Slack-ITSM集成的遗留命名),但它同时支持Teams ITSM Go页面和对应的Slack ITSM Go页面上的“选择数字体验站点”选择器——从一个界面写入该值会改变另一个界面的显示内容。如果用户同时配置了Slack ITSM,请告知用户设置此值也会更改Slack的首选站点。
SLACK_Gotchas
注意事项
| Issue | Detail |
|---|---|
| Requires the Teams Salesforce Go page feature first | |
| These are separate bits — enabling this preference does not itself unblock the Teams Salesforce Go page toggle preference, and vice versa. |
| "Select a Digital Experience Site" ≠ Teams extension registration — two different site-related APIs, don't conflate | This checklist item writes the org-value |
| Permission sets / PSLs | |
| Version prefix required | headless-360 |
| UEL user can't log in to IT Service in Teams | Assigning |
| 问题 | 详情 |
|---|---|
| 需先启用Teams Salesforce Go页面功能 | |
| 这是两个独立的设置——启用此偏好设置本身不会解除Teams Salesforce Go页面开关偏好的限制,反之亦然。 |
| “选择数字体验站点”≠Teams扩展注册——两个不同的站点相关API,请勿混淆 | 此清单项通过 |
| 权限集/PSLs | |
| 必须指定版本前缀 | headless-360的 |
| UEL用户无法登录Teams中的IT服务 | 仅分配 |
Troubleshooting: Teams for Employee Service login & agent
故障排查:Teams员工服务登录与代理
When a user reports a Teams for Employee Service failure (can't log in, "Service Not Available"
popup, agent won't reply), run these checks in order — each is a pass/fail gate with an exact
query and remediation. Stop at the first one that fails; they are ordered from most-common and
cheapest to deepest.
For a broader guided diagnosis across all Teams ITSM symptoms (IT Desk login, feature enablement, tab loading, service catalog, Agentforce, Swarming, SSO — not just IT Service login), use the dedicatedskill, which routes the reported problem to the matching pass/fail checklist. The sequence below is the IT-Service-login-focused subset.service-itsm-teams-debug
Run the read-only checks with(a Tooling-object check is noted where the query needs the Tooling API). Convert the placeholder ids to the real ones you find as you go.dispatch_readonly
当用户报告Teams员工服务故障(无法登录、“服务不可用”弹窗、代理不回复)时,请按顺序执行以下检查——每个检查都是通过/失败的关卡,包含精确的查询和修复方法。在第一个失败的检查处停止;检查顺序是从最常见、成本最低到最深入的问题。
如需针对所有Teams ITSM症状(IT服务台登录、功能启用、标签页加载、服务目录、Agentforce、Swarming、SSO——不仅仅是IT服务登录)进行更全面的引导式诊断,请使用专门的****技能,它会将报告的问题路由到匹配的通过/失败清单并给出修复建议。以下是针对IT服务登录的子集序列。service-itsm-teams-debug
使用执行只读检查(需要Tooling API的查询会特别标注)。在执行过程中将占位符ID替换为实际找到的ID。dispatch_readonly
A. Community login itself
A. 社区登录本身
text
SELECT LoginTime, Status, LoginType FROM LoginHistory
WHERE UserId='<userId>' ORDER BY LoginTime DESC LIMIT 5- → the site's
No community accessis off for an internal/UEL user. Enable "Allow internal users to log in directly" on the site's login settings (see the portal-create skill's internal-login flag). Different failure from the ones below — fix this first if present.Network.OptionsAllowInternalUserLogin - =
Employee Login to Community→ login works; the failure is downstream in OAuth or agent runtime. Continue to B.Success
text
SELECT LoginTime, Status, LoginType FROM LoginHistory
WHERE UserId='<userId>' ORDER BY LoginTime DESC LIMIT 5- → 针对内部/UEL用户,站点的
No community access已关闭。在站点的登录设置中启用“允许内部用户直接登录”(请参阅门户创建技能中的内部登录标志)。与以下故障不同——如果存在此问题,请先修复。Network.OptionsAllowInternalUserLogin - =
Employee Login to Community→ 登录成功;故障出现在OAuth或代理运行阶段。继续执行检查B。Success
B. The three silent-login prerequisites (see Step 3 → Login prerequisites)
B. 三个静默登录前置条件(请参阅步骤3 → 登录前置条件)
- Allow OAuth for employees on the login profile (Setup-UI-only checkbox). No API read path — verify by the OAuth-token check in C below (its real symptom).
- CORS Allowed Origins — must contain both origins:
Missingtext
SELECT Id, UrlPattern FROM CorsWhitelistEntryorhttps://teams.cloud.microsoft→ create it (https://cdn.scs.static.lightning.force.comPOST /sobjects/CorsWhitelistEntry), then hard-refresh.{"UrlPattern":"<origin>"} - API Enabled system permission on the user (via a permission set, not just the profile).
- 登录配置文件上的“允许员工使用OAuth”(仅能在设置UI中勾选)。没有API读取路径——通过下方C中的OAuth令牌检查来验证(这是其真实症状)。
- CORS允许的源——必须包含两个源:
缺少text
SELECT Id, UrlPattern FROM CorsWhitelistEntry或https://teams.cloud.microsoft→ 创建对应的条目(https://cdn.scs.static.lightning.force.com,请求体POST /sobjects/CorsWhitelistEntry),然后强制刷新。{"UrlPattern":"<origin>"} - 用户的“API已启用”系统权限(通过权限集授予,而非仅依赖配置文件)。
C. OAuth token mint — the decisive portal-user check
C. OAuth令牌生成——门户用户的决定性检查
This is the check that isolates a portal/UEL OAuth failure from a login failure. After the user
retries login from a fresh Teams chat:
text
SELECT Id, AppName, UserId, User.Username, CreatedDate FROM OauthToken
WHERE AppName='ServiceCloudMSTeamsEca'- A token row exists for the failing user → OAuth succeeded; the problem is agent-runtime, not login — jump to E.
- No token for the failing user, but community login shows (B) → the OAuth authorize step never minted a token. This is the "Service Not Available" popup on
Success. Work through D./<sitePrefix>/setup/secur/RemoteAccessAuthorizationPage
Diagnostic tell (verified): if a Standard-profile user mints atoken but a Unified Employee (UEL) / portal user does not — even with identical permission sets — the blocker is specific to the portal-user OAuth authorize path (profile OAuth flag, or the ECA self-authorization page being served on the community host), not the ECA authorization grant. In the verified org the Standard user minted a token without even holding the ECA-authorizing permission set, while the UEL user holding everything did not — so an identical permission-set/SetupEntityAccess config does not explain the difference.ServiceCloudMSTeamsEca
此检查用于区分门户/UEL用户的OAuth故障与登录故障。用户从全新的Teams聊天中重试登录后:
text
SELECT Id, AppName, UserId, User.Username, CreatedDate FROM OauthToken
WHERE AppName='ServiceCloudMSTeamsEca'- 存在该故障用户的令牌记录 → OAuth成功;问题出在代理运行阶段,而非登录阶段——跳至检查E。
- 故障用户无令牌记录,但社区登录显示(检查B) → OAuth授权步骤从未生成令牌。这会导致在
Success页面弹出“服务不可用”弹窗。执行检查D。/<sitePrefix>/setup/secur/RemoteAccessAuthorizationPage
诊断提示(已验证):如果标准配置文件用户能生成令牌,但Unified Employee (UEL)/门户用户无法生成——即使拥有相同的权限集——阻塞因素是特定于门户用户的OAuth授权路径(配置文件OAuth标志,或ECA自授权页面在社区主机上提供),而非ECA授权授予。在已验证的组织中,标准用户即使没有持有ECA授权的权限集也能生成令牌,而拥有所有权限的UEL用户却无法生成——因此相同的权限集/SetupEntityAccess配置无法解释此差异。ServiceCloudMSTeamsEca
D. ECA (External Client App) OAuth self-authorization
D. ECA(外部客户端应用)OAuth自授权
The External Client App gates the OAuth authorize. Symptom: the Teams
popup titled "Service Not Available / An unexpected connection error occurred" at
, and/or an access-check error body
on the streaming endpoint.
ServiceCloudMSTeamsEca/<sitePrefix>/setup/secur/RemoteAccessAuthorizationPage{"acc":8}- Policy must be (not
AdminApprovedPreAuthorized):AllSelfAuthorizedtextSELECT Id, PermittedUsersPolicyType FROM ExtlClntAppOauthPlcyCnfg WHERE ExternalClientApplicationId='<ecaId>' (Tooling)forces every user through the self-approval page, which communities cannot serve (AllSelfAuthorizedis a Setup page) → the connection error. Fix by editing the/setup/secur/*'s OAuth policy via Metadata (the Tooling object is read-only —ExternalClientApplication→update): retrieveCANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, setExtlClntAppOauthConfigurablePolicies:<Eca>_oauth_defaultPolicy, redeploy. (Valid enum values are only<permittedUsersPolicyType>AdminApprovedPreAuthorized</permittedUsersPolicyType>andAllSelfAuthorized—AdminApprovedPreAuthorizedis invalid.)AdminApproved - Pre-authorize the ECA to a permission set the user holds — denies everyone not explicitly authorized (surfaces as
AdminApprovedPreAuthorized):{"acc":8}If missing, createtextSELECT ParentId, SetupEntityType FROM SetupEntityAccess WHERE SetupEntityId='<ecaId>'(noSetupEntityAccess {ParentId=<permsetId the user has>, SetupEntityId=<ecaId>}— it auto-resolves toSetupEntityType).ExternalClientApplication - If policy is , the user holds an authorized permission set, and "Allow OAuth for employees" is on — yet the token still doesn't mint for the portal user (per C): the remaining suspect is that the OAuth authorize is being routed to the community host (
AdminApprovedPreAuthorized), which cannot render the authorization page, rather than to My Domain. This ECA is packaged/first-party — do NOT hand-edit itshttps://<org>.my.site.com/<prefix>/setup/secur/.../callbackUrl/isFirstPartyAppEnabled. At this point capture the exact popup URL + anyoauthLinkcode and escalate to the Teams ITSM / ECA product team; it is beyond a configurable-setting fix.acc
ServiceCloudMSTeamsEca/<sitePrefix>/setup/secur/RemoteAccessAuthorizationPage{"acc":8}- 策略必须为(而非
AdminApprovedPreAuthorized):AllSelfAuthorizedtextSELECT Id, PermittedUsersPolicyType FROM ExtlClntAppOauthPlcyCnfg WHERE ExternalClientApplicationId='<ecaId>' (Tooling)会强制所有用户通过自授权页面,而社区无法提供该页面(AllSelfAuthorized是设置页面)→ 导致连接错误。通过元数据编辑/setup/secur/*的OAuth策略来修复(Tooling对象是只读的——ExternalClientApplication操作会返回update):检索CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY,设置ExtlClntAppOauthConfigurablePolicies:<Eca>_oauth_defaultPolicy,重新部署。(有效枚举值仅为<permittedUsersPolicyType>AdminApprovedPreAuthorized</permittedUsersPolicyType>和AllSelfAuthorized——AdminApprovedPreAuthorized无效。)AdminApproved - 预授权ECA访问用户持有的权限集——会拒绝所有未明确授权的用户(表现为
AdminApprovedPreAuthorized):{"acc":8}如果缺失,创建textSELECT ParentId, SetupEntityType FROM SetupEntityAccess WHERE SetupEntityId='<ecaId>'(无需SetupEntityAccess {ParentId=<用户拥有的权限集Id>, SetupEntityId=<ecaId>}——会自动解析为SetupEntityType)。ExternalClientApplication - 如果策略为,用户持有授权的权限集,且“允许员工使用OAuth”已开启——但门户用户仍无法生成令牌(检查C):剩余的可疑点是OAuth授权被路由到社区主机(
AdminApprovedPreAuthorized),而该主机无法渲染授权页面,而非路由到My Domain。此ECA是打包/第一方应用——请勿手动编辑其https://<org>.my.site.com/<prefix>/setup/secur/.../callbackUrl/isFirstPartyAppEnabled。此时请捕获准确的弹窗URL + 任何oauthLink代码,并升级至Teams ITSM/ECA产品团队;这超出了可配置设置的修复范围。acc
E. Embedded Agentforce agent joins then leaves (no reply)
E. 嵌入式Agentforce代理加入后离开(不回复)
If login + OAuth succeed but the "Ask AI Agent" agent won't reply, hand off to
— the two verified fixes are (1) the
channel's User Verification ON backed by a Key Set and (2) an Agent Access permission set enabling the IT
Service Employee Agent on the portal user. That skill's reference has the full runtime-chain
diagnostics (scrt2 token, SSE 401, queries).
service-itsm-teams-employee-agent-configureTeams_AgentForceJWKS_URLConversationEntry如果登录+OAuth成功,但“Ask AI Agent”代理不回复,请移交至——已验证的两个修复方法是(1)渠道启用用户验证并配置密钥集,以及(2)为门户用户启用IT服务员工代理的Agent Access权限集。该技能的参考文档包含完整的运行时链诊断(scrt2令牌、SSE 401、查询)。
service-itsm-teams-employee-agent-configureTeams_AgentForceJWKS_URLConversationEntryRelated Skills
相关技能
| Skill | When to use instead / alongside |
|---|---|
| Enabling the base Teams Salesforce Go page toggle, Azure/Entra app registration, Named Credential population, and Teams extension registration — a prerequisite for this skill |
| The IT Desk/fulfiller half of the checklist (Turn on IT Desk, Install IT Desk app, Manage User Access, Set Teams as Collaboration Tool for Swarming) |
| The final part of IT Service agent setup — making the embedded Agentforce agent actually reply in the Teams custom client (Web channel, User Verification ON + |
| Diagnosing a failing Teams ITSM setup across any symptom (login, feature enablement, tab loading, Agentforce, Swarming, SSO) — routes the problem to a pass/fail checklist and reports remediation |
| Top-level menu across Teams, Slack, Swarming, Notifications, Portal |
| 技能 | 替代/配合使用场景 |
|---|---|
| 启用基础Teams Salesforce Go页面开关、Azure/Entra应用注册、命名凭证配置以及Teams扩展注册——此技能的前置条件 |
| 清单中的IT服务台/处理人员部分(开启IT服务台、安装IT服务台应用、管理用户访问权限、设置Teams为Swarming的协作工具) |
| IT服务代理设置的最后部分——让嵌入式Agentforce代理在Teams自定义客户端中实际回复消息(Web渠道、启用用户验证+ |
| 排查任何Teams ITSM设置故障(登录、功能启用、标签页加载、Agentforce、Swarming、SSO)——将问题路由到通过/失败清单并给出修复建议 |
| Teams、Slack、Swarming、通知、门户的顶级菜单 |