关于 service-itsm-agentic-setup-uel-user-create
面向 Salesforce 管理员的技能,用于配置 Unified Employee License 用户。它通过 headless-360 创建并验证 User、Person Account、Employee2 记录及必需的 Employee Hub 权限集。
主要功能
- 01检查 UEL 与 HR 前置条件
- 02创建关联的用户、账户和员工记录
- 03分配必需的 Employee Hub 权限集
- 04验证完整记录关联链
适用场景
- 01配置新的 UEL 员工
- 02核实关联的 Salesforce 与 HR 记录
MCP 相关
通过 Salesforce 托管的 headless-360 MCP 服务进行发现、架构检查、只读查询和记录创建。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill service-itsm-agentic-setup-uel-user-create安装后在 Claude Code 中输入/service-itsm-agentic-setup-uel-user-create确认已加载。
附带文件references/mcp-invocation.md
详细介绍
创建并启用 Unified Employee(UEL)用户
通过在 Unified Employee 许可证/配置文件上创建并关联一个 User、一个 Person Account(自动生成 Contact)和一条 Employee2 记录,并分配所需的权限集,为 Unified Employee License(UEL)配置员工。所有操作都通过 Salesforce 托管的 headless-360 MCP 服务(服务键 headless-360)及其四个元工具(discover、describe、dispatch_readonly、dispatch)执行。组织由绑定到当前 MCP 会话的 OAuth JWT 确定——此技能不会处理组织 ID、别名或凭据——因此该流程在生产环境和沙盒中的行为完全一致,且无需为每位用户单独安装 MCP。
范围
- 范围内:创建新的 UEL 用户、Person Account、Employee2 记录;分配权限集;验证完整关联链。
- 范围外:创建标准用户(非 UEL);克隆现有用户;仅管理现有用户权限;停用用户;更改许可证分配。
路由一览
读取操作通过 mcp__headless-360__dispatch_readonly 分发;写入操作通过
mcp__headless-360__dispatch 分发。两者都接受原始 HTTP:
{"url": "<path>", "method": "GET|POST", "body"?: {...}, "queryParams"?: {...}}。每行对应的完整 URL 路径和请求/响应正文见 references/mcp-invocation.md;此表仅列出操作和 HTTP 方法。
| 关注项 | 方法 + 操作 | 说明 |
|---|---|---|
| Unified Employee 许可证 | GET /query(UserLicense) | 无记录 → 停止 |
| Unified Employee 配置文件 | GET /query(Profile) | 无记录 → 停止 |
| Person Account 记录类型 | GET /query(RecordType、IsPersonType) | 无记录 → 停止 |
| Employee Hub 权限集 | GET /query(PermissionSet) | 必需;无记录 → 停止 |
| Employee2 可访问性 | GET /sobjects/Employee2/describe | 200 = HR 模块已启用 |
| 解析经理 | GET /query(按 Username/Name 查询 User) | 仅限活跃用户 |
| 创建用户 | POST /sobjects/User | Profile = Unified Employee |
| 分配 Employee Hub 权限集 | POST /sobjects/PermissionSetAssignment | 必需 |
| 创建 Person Account | POST /sobjects/Account | 必须提供 PersonEmail |
| 读取 PersonContact | GET /query(Account) | 获取 PersonContactId |
| 创建 Employee2 | POST /sobjects/Employee2 | 使用 UserId/ContactId 字段名 |
| 验证关联链 | GET /query | User + Account + Employee2 + 权限集 |
响应封装:describe、/query 和 /sobjects/… 均使用标准 REST 格式——dispatch* 工具会返回 HTTP 状态码和已解析的正文:{ "status_code": 200, "body": <REST response> }。读取 body。创建操作返回 body.id 且 body.success == true;查询操作返回 body.records[]。状态码:200/201 表示成功;400 表示正文有误(通过 describe 重新检查架构);401/认证错误表示 MCP 会话需要重新认证;404 表示此组织中不存在该端点/实现;500 表示下游依赖项出现问题。
必填输入
从用户处收集以下信息(仅询问对话上下文中尚未提供的信息):
身份信息(必填)
| 字段 | 说明 |
|---|---|
FirstName | 员工名 |
LastName | 员工姓氏 |
Email | 员工电子邮件地址 |
凭据与区域设置(必填)
| 字段 | 说明 | 示例 |
|---|---|---|
Username | 采用电子邮件格式,且全局唯一 | [email protected] |
Alias | 最多 8 个字符 | jdoe |
TimeZoneSidKey | 时区 | America/Los_Angeles |
LocaleSidKey | 区域设置 | en_US |
LanguageLocaleKey | 语言 | en_US |
EmailEncodingKey | 电子邮件编码 | UTF-8 |
经理(可选)
| 字段 | 说明 |
|---|---|
ManagerName 或 ManagerUsername | 通过 SOQL 解析为 ManagerId |
Employee2 的 HR 属性(必填)
| 字段 | 描述 |
|---|---|
Department | 员工部门 |
Location | 员工所在地 |
EmployeeNumber | HR 员工编号 |
Title | 职位名称 |
HireDate | 日期格式:YYYY-MM-DD |
权限集
Employee Hub Unified Employee User(EmployeeHubEmployeeUser)始终分配——UEL 用户不得分配其他权限集。如果调用者要求额外权限集(Incident Fulfiller、Case Agent 或任何其他 fulfiller/agent-role 权限集),请拒绝:这些权限集适用于 Service Cloud 端的服务处理人员,而非登录 Employee Hub 的请求者。请引导调用者使用相应的服务处理人员用户创建流程,而不是扩展此流程。
工作流
所有步骤均按顺序执行。始终先读后写。 每次调用都必须通过
mcp__headless-360__* 工具进行。如果任何步骤失败,请停止并报告。
阶段 1 — 预检与发现
如果以下 discover / describe / dispatch / dispatch_readonly 调用返回任何 401 / 403 / 404,请停止并显示原始错误——组织或客户端配置不正确。401 → headless-360 MCP 客户端未通过身份验证,无法连接到 CORE_ORG_ALIAS(会话已过期)。403 → 执行用户缺少所需权限之一(ManageUsers、ManageProfilesPermissionsets、CustomizeApplication、AssignPermissionSets),或组织缺少 Unified Employee License。404 → 目标 sObject / 路由不可用(未配置 HR 模块 / UEL——此情况会在步骤 2 的五项前置条件检查中单独体现)。
-
发现操作 —
mcp__headless-360__discover(query="create User Account Employee2 sObject")并对POST /sobjects/User、POST /sobjects/Account和POST /sobjects/Employee2操作调用mcp__headless-360__describe(id=<operation_id>),以确认这些操作已编入索引并获取输入架构。discover未找到结果并不意味着路由不存在——/sobjects/…REST 端点是核心 Data API 路径,可以使用dispatch_readonly/dispatch对确切 URL 直接调用(参见references/mcp-invocation.md)。如果在文档所述路径上直接进行dispatch_readonly探测也失败(404),请引导用户使用 Setup UI。 -
验证全部五项 UEL 前置条件(均为只读
/query或 describe)。如果任一项失败,请停止并准确报告缺少的前置条件:- 存在 Unified Employee 许可证 → 否则显示“此组织中未找到 Unified Employee 许可证。”
- 存在 Unified Employee 配置文件 → 否则显示“未找到 Unified Employee 配置文件。请确保已配置 UEL 许可证。”
- 存在活动的 Person Account 记录类型 → 否则显示“未找到活动的 Person Account 记录类型。请在 Setup 中启用 Person Accounts。”
- 存在 Employee Hub 权限集 → 否则显示“未找到 Employee Hub Unified Employee User 权限集。UEL 配置必须使用此权限集。”
- Employee2 describe 返回 200 → 否则显示“无法访问 Employee2 sObject。请确保已启用 HR 模块。”
记录:
UnifiedEmployeeProfileId、PersonAccountRecordTypeId、EmployeeHubPermSetId。
阶段 2 — 解析引用
- 解析经理 — 如果用户提供了经理,请按 Username 或 Name 查询(仅限活动用户)。如果匹配到多个结果,请列出选项并请用户明确选择。记录
ManagerId。如果未提供经理,则跳过此步骤。 - 检查用户名唯一性 — 按
Username查询User;如果存在任何记录,则停止,用户名已被占用。
阶段 3 — 确认并创建关联链
- 确认计划 — 展示完整配置(包括 HR 属性),并在进行任何更改前等待明确确认。
- 创建 User — 使用
POST /sobjects/User,填写身份信息、区域设置、ProfileId=UnifiedEmployeeProfileId和ManagerId(没有经理时省略ManagerId)。记录NewUserId。 - 分配 Employee Hub 权限集(必需) — 使用
POST /sobjects/PermissionSetAssignment并填写{AssigneeId: NewUserId, PermissionSetId: EmployeeHubPermSetId}。如果失败,停止并 报告确切错误 — 该权限集已存在(已验证),但可能与许可证不兼容。 - 创建 Person Account — 使用
POST /sobjects/Account,填写FirstName、LastName、PersonEmail(必需)和RecordTypeId=PersonAccountRecordTypeId。记录NewAccountId。必须设置PersonEmail:如果关联的 PersonContact 缺少Email或LastName,Employee2 验证钩子会拒绝该记录。 - 验证 PersonContact — 查询 Account 的
IsPersonAccount和PersonContactId。 确认IsPersonAccount = true并记录PersonContactId。如果值为 null,停止并 报告生成 PersonContact 失败。 - 创建 Employee2 记录 — 使用
POST /sobjects/Employee2,填写UserId=NewUserId、ContactId=PersonContactId和 HR 属性。使用外键字段名称UserId/ContactId(而不是关系名称User/Contact)。记录NewEmployee2Id。
阶段 4 — 验证并展示
- 验证完整关联链 — 查询 Account(IsPersonAccount、PersonContactId)、User (IsActive、ProfileId、ManagerId)和 Employee2(UserId、ContactId),并确认 Employee Hub 权限集是唯一的 PermissionSetAssignment(不包括配置文件)。
- 使用下方的输出格式进行报告。
规则 / 限制
| 限制 | 原因 |
|---|---|
| 在进行任何更改前验证全部五项前置条件 | 防止组织未配置 UEL 时出现部分状态 |
执行 POST 前务必先 describe | 需要获取每个 sObject 的准确输入架构 |
| 创建记录前先与用户确认计划 | 防止意外创建记录 |
创建 Person Account 时必须填写 PersonEmail | 如果 PersonContact 没有 Email,Employee2 验证钩子会拒绝该记录 |
在 Employee2 上使用 UserId/ContactId 字段名称 | API 会拒绝关系名称下的裸 ID |
Employee Hub Unified Employee User 是唯一分配的权限集 | UEL 用户是 Employee Hub 请求者,而非履行者/Agent — 其他权限集均不兼容 |
| 从创建请求正文中省略空值/空的外键 | API 会拒绝显式为空的 ManagerId |
失败时显示 dispatch* 返回的确切错误 | 有助于诊断问题 |
| 切勿向用户显示 Salesforce 记录 ID | 仅使用易读名称 |
所需权限
执行操作的管理员用户(即 CORE_ORG_ALIAS 背后的身份)必须具备:
| 权限 | 用途 |
|---|---|
| Manage Internal Users | 创建 User 记录 |
| Manage Profiles and Permission Sets | 分配权限集 |
| Customize Application | 创建 Employee2 和 Person Account 记录 |
| Assign Permission Sets | 创建 PermissionSetAssignment 记录 |
验证清单
-
discover+describe(id)(或者,如果discover未找到,则在文档所述的/sobjects/…路径上直接执行dispatch_readonly探测)是否确认了 User / Account / Employee2 的创建操作? - UEL 的五项前置条件(许可证、配置文件、Person Account RT、Employee Hub 集合、Employee2)是否全部通过?
- 是否确认用户名唯一,并在执行任何变更前确认了计划?
-
Account.IsPersonAccount = true且PersonContactId非空吗? -
User.IsActive = true是否适用于 Unified Employee 配置文件(以及提供的经理)? -
Employee2是否正确关联了UserId和ContactId? - 是否只分配了
Employee Hub Unified Employee User权限集(没有额外的 fulfiller 侧权限)?
输出格式
失败时,原样显示 dispatch* 返回的错误。
成功时:
UEL User Provisioning Complete (via service-itsm-agentic-setup-uel-user-create)
User:
Name: <FirstName> <LastName>
Username: <Username>
Email: <Email>
Profile: Unified Employee
Manager: <ManagerName> (or "not set")
Status: Active
Person Account:
Account Name: <FirstName> <LastName>
Person Contact: linked
Employee Record:
Department: <Department>
Title: <Title>
Location: <Location>
Employee No: <EmployeeNumber>
Hire Date: <HireDate>
Permission Set Assigned:
- Employee Hub Unified Employee User
Chain: User > Person Account > PersonContact > Employee2 > Employee Hub permset
面向用户的输出中不得包含记录 ID — 仅使用易读的名称。
参考文件索引
| 文件 | 何时阅读 |
|---|---|
references/mcp-invocation.md | 每个阶段 — 精确的 mcp__headless-360__* 调用格式、五项前置条件查询、完整链路的创建请求体、响应封装、发现操作和注意事项 |
相关技能
此技能使用完整实体链配置 Unified Employee License (UEL) 用户。两个相邻流程不在本技能范围内:创建标准(非 UEL)用户,以及克隆现有用户的完整访问配置。请分别处理这些请求 — 本技能不涵盖它们。