service-itsm-agentic-setup-uel-user-create
service-itsm-agentic-setup-uel-user-create について
Salesforce 管理者向けに、Unified Employee License のユーザーを作成するスキルです。headless-360 を通じて User、Person Account、Employee2 と必須の Employee Hub 権限セットを作成し、関連を検証します。
主な機能
- 01UEL と HR の前提条件を確認
- 02ユーザー、アカウント、従業員レコードを作成
- 03必須の Employee Hub 権限セットを割り当て
- 04レコード間の関連を検証
活用シーン
- 01新しい UEL 従業員の登録
- 02Salesforce と 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
詳細
統合従業員(UEL)ユーザーの作成と有効化
Unified Employee License(UEL)で従業員をプロビジョニングします。Unified Employee ライセンス/プロファイルに User を作成してリンクし、Person Account(自動生成される Contact を含む)と Employee2 レコードを作成した後、必要な権限セットを割り当てます。すべての操作は、4 つのメタツール(discover、describe、dispatch_readonly、dispatch)を介して、Salesforce がホストする headless-360 MCP サーバー(サーバーキー headless-360)で実行されます。組織は現在の MCP セッションにバインドされた OAuth JWT から特定されます。このスキルが組織 ID、エイリアス、認証情報を扱うことはありません。そのため、ユーザーごとの MCP インストールなしで、本番環境とサンドボックスのどちらでも同じように動作します。
対象範囲
- 対象:新しい UEL User、Person Account、Employee2 レコードの作成、権限セットの割り当て、関連レコード一式の検証。
- 対象外:標準ユーザー(非 UEL)の作成、既存ユーザーの複製、既存ユーザーの権限のみの管理、ユーザーの無効化、ライセンス割り当ての変更。
ルートの概要
読み取りは mcp__headless-360__dispatch_readonly、書き込みは mcp__headless-360__dispatch を介して実行します。どちらも raw HTTP を受け取ります。
{"url": "<path>", "method": "GET|POST", "body"?: {...}, "queryParams"?: {...}}。各行の完全な URL パスとリクエスト/レスポンスボディは references/mcp-invocation.md に記載されています。この表には操作と HTTP メソッドのみを示します。
| 対象 | メソッド + 操作 | 備考 |
|---|---|---|
| Unified Employee ライセンス | GET /query (UserLicense) | 0 件の場合は停止 |
| Unified Employee プロファイル | GET /query (Profile) | 0 件の場合は停止 |
| Person Account レコードタイプ | GET /query (RecordType, IsPersonType) | 0 件の場合は停止 |
| Employee Hub 権限セット | GET /query (PermissionSet) | 必須。0 件の場合は停止 |
| 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 は依存先の問題です。
必須入力
ユーザーから情報を収集します(会話のコンテキストですでに得られている情報は尋ねないでください)。
ID 情報(必須)
| フィールド | 説明 |
|---|---|
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 属性(必須)
| Field | Description |
|---|---|
Department | 従業員の部署 |
Location | 従業員の勤務地 |
EmployeeNumber | HR 従業員番号 |
Title | 役職 |
HireDate | 日付形式:YYYY-MM-DD |
権限セット
Employee Hub Unified Employee User(EmployeeHubEmployeeUser)は常に割り当てられます。UEL ユーザーに割り当てる権限セットはこれ以外にありません。呼び出し元が追加の権限セット(Incident Fulfiller、Case Agent、またはその他のフルフィラー/エージェント役割の権限セット)を求めた場合は、断ってください。これらは 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 ライセンスがありません。404 → 対象の sObject/ルートが利用できません(HR モジュール/UEL がプロビジョニングされていません。手順 2 の 5 つの前提条件チェックで個別に確認します)。
-
操作を検出する —
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 のパスであり、正確な URL を指定してdispatch_readonly/dispatchから直接呼び出せます(references/mcp-invocation.mdを参照)。ドキュメントに記載されたパスへの直接のdispatch_readonlyプローブも失敗した場合(404)は、ユーザーに Setup UI を案内してください。 -
UEL の 5 つの前提条件をすべて確認する(読み取り専用の
/queryまたは describe)。いずれかが失敗した場合は、停止し、不足している前提条件を正確に報告してください:- Unified Employee ライセンスが存在する → そうでない場合は "Unified Employee license not found in this org."
- Unified Employee プロファイルが存在する → そうでない場合は "Unified Employee profile not found. Ensure UEL license is provisioned."
- 有効な Person Account レコードタイプが存在する → そうでない場合は "No active Person Account record type found. Enable Person Accounts in Setup."
- Employee Hub 権限セットが存在する → そうでない場合は "Employee Hub Unified Employee User permission set not found. This is required for UEL provisioning."
- Employee2 の describe が 200 を返す → そうでない場合は "Employee2 sObject not accessible. Ensure the HR module is enabled."
以下を取得します:
UnifiedEmployeeProfileId、PersonAccountRecordTypeId、EmployeeHubPermSetId。
フェーズ 2 — 参照先の解決
- マネージャーを解決する — ユーザーがマネージャーを指定した場合は、Username または Name でクエリします(有効なユーザーのみ)。複数の一致がある場合は、候補を提示してユーザーに選択を求めます。
ManagerIdを取得します。マネージャーが指定されていない場合は、このステップをスキップします。 - ユーザー名の一意性を確認する —
UsernameでUserをクエリします。レコードが見つかった場合は停止し、ユーザー名が使用済みであることを伝えます。
フェーズ 3 — 確認してチェーンを作成する
- 計画を確認する — HR 属性を含む設定全体を提示し、変更を行う前に明示的な確認を待ちます。
- User を作成する — ID 情報、ロケール、
ProfileId=UnifiedEmployeeProfileId、およびManagerId(設定しない場合はManagerIdを省略)を指定してPOST /sobjects/Userを実行します。NewUserIdを取得します。 - Employee Hub 権限セットを割り当てる(必須) —
{AssigneeId: NewUserId, PermissionSetId: EmployeeHubPermSetId}を指定してPOST /sobjects/PermissionSetAssignmentを実行します。失敗した場合は、停止して正確なエラーを報告します。このセットは存在することが確認されていますが、ライセンスと互換性がない可能性があります。 - Person Account を作成する —
FirstName、LastName、PersonEmail(必須)、およびRecordTypeId=PersonAccountRecordTypeIdを指定してPOST /sobjects/Accountを実行します。NewAccountIdを取得します。PersonEmailは必ず設定してください。リンクされた PersonContact にEmailまたはLastNameがない場合、Employee2 の検証フックがレコードを拒否します。 - PersonContact を検証する — Account の
IsPersonAccountとPersonContactIdをクエリします。IsPersonAccount = trueであることを確認し、PersonContactIdを取得します。null の場合は、停止して PersonContact の生成に失敗したことを報告します。 - Employee2 レコードを作成する —
UserId=NewUserId、ContactId=PersonContactId、および HR 属性を指定してPOST /sobjects/Employee2を実行します。外部キーのフィールド名UserId/ContactIdを使用し、リレーション名のUser/Contactは使用しないでください。NewEmployee2Idを取得します。
フェーズ 4 — 検証して結果を提示する
- チェーン全体を検証する — Account(IsPersonAccount、PersonContactId)、User(IsActive、ProfileId、ManagerId)、Employee2(UserId、ContactId)をクエリし、Employee Hub 権限セットが(プロファイル以外で)唯一の PermissionSetAssignment であることを確認します。
- 以下の出力形式で報告します。
ルール/制約
| 制約 | 理由 |
|---|---|
| 変更を行う前に、5 つの前提条件をすべて検証する | 組織が UEL 用に設定されていない場合に、不完全な状態になるのを防ぎます |
POST の前に必ず describe を実行する | 各 sObject の正確な入力スキーマが必要です |
| レコードを作成する前に、計画をユーザーに確認する | 意図しないレコード作成を防ぎます |
Person Account の作成では PersonEmail が必須 | Employee2 の検証フックは、Email のない PersonContact を拒否します |
Employee2 では UserId/ContactId のフィールド名を使用する | API はリレーション名に単独の ID を指定すると拒否します |
割り当てる権限セットは Employee Hub Unified Employee User のみ | UEL ユーザーは Employee Hub のリクエスターであり、フルフィルメント担当者/エージェントではありません。他の権限セットは互換性がありません |
| 作成リクエストの本文から null/空の外部キーを省略する | API は明示的に空の ManagerId を指定すると拒否します |
失敗時には dispatch* からの正確なエラーを表示する | 問題の診断に役立ちます |
| Salesforce のレコード ID をユーザーに絶対に表示しない | 人が読み取れる名前のみを使用します |
必要な権限
実行する管理者ユーザー(CORE_ORG_ALIAS の背後にある ID)には、次の権限が必要です。
| 権限 | 目的 |
|---|---|
| 内部ユーザーの管理 | User レコードを作成する |
| プロファイルと権限セットの管理 | 権限セットを割り当てる |
| アプリケーションのカスタマイズ | Employee2 および Person Account レコードを作成する |
| 権限セットの割り当て | PermissionSetAssignment レコードを作成する |
検証チェックリスト
-
discover+describe(id)(または、discoverで見つからない場合は、ドキュメントに記載されている/sobjects/…パスで直接dispatch_readonlyプローブを実行)により、User/Account/Employee2 の作成操作を確認しましたか? - UEL の 5 つの前提条件(ライセンス、プロファイル、Person Account RT、Employee Hub セット、Employee2)をすべて満たしましたか?
- ユーザー名が一意であることを確認し、変更を加える前に計画を確認しましたか?
-
Account.IsPersonAccount = trueで、PersonContactIdが null ではありませんか? -
User.IsActive = trueが Unified Employee プロファイルに設定されていますか(マネージャーが指定されている場合は、マネージャーについても確認してください)? -
Employee2のUserIdとContactIdは正しく関連付けられていますか? - 割り当てられている権限セットは
Employee Hub Unified Employee Userのみですか(フルフィラー側の追加権限セットはありませんか)?
出力形式
失敗時は、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__* 呼び出し形式、5 つの前提条件クエリ、完全な作成チェーンのリクエスト本文、レスポンスエンベロープ、検出、および注意点 |
関連スキル
このスキルは、完全なエンティティチェーンを備えた Unified Employee License (UEL) ユーザーをプロビジョニングします。隣接する次の 2 つのフローは対象外です。標準(UEL ではない)ユーザーの作成と、既存ユーザーの完全なアクセス設定の複製です。これらのリクエストには個別に対応してください。このスキルでは扱いません。