service-omni-permission-set-assign について
Salesforce のスキルで、`PermissionSetAssignment` Data API リクエストを使い、エージェントユーザーに 1 つ以上の権限セットを割り当てます。既存の割り当てを確認して不足分だけを作成し、最終状態を再クエリで検証します。
主な機能
- 01エージェントユーザーへの権限セット割り当て
- 02ユーザーごとに複数セットをサポート
- 03書き込み前に既存割り当てを検出
- 04不足分のみを作成
- 05再クエリで最終状態を検証
- 06既存の割り当てを削除しない
活用シーン
- 01エージェントに Omni ウィジェットへのアクセスを付与
- 02エージェントにプレゼンスステータス権限を付与
- 03エージェント群の不足した割り当てを補完
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill service-omni-permission-set-assignインストール後、Claude Code で/service-omni-permission-set-assignを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/package.xmlreferences/api-notes.mdscripts/verify-and-assign.sh詳細
service-omni-permission-set-assign
PermissionSetAssignment Data API POST を介して、N 人のエージェントユーザーに 1 つ以上の PermissionSet を割り当てます。デフォルトの対象は Omni_Agent です。この権限セットは、OmniChannel ウィジェット、プレゼンスステータスへのアクセス、デモキューの表示を許可します。割り当てレコードがなければ、エージェントはウィジェットを開いたり、ルーティングされた作業を受け取ったりできません。SOQL ベースで検出するため、このスキルは不足している割り当てのみを作成します。エージェントユーザーは service-omni-agent-users-create で作成し、割り当てたエージェントがウィジェットを開いてステータスも選択できるように、service-omni-presence-status-deploy と併せて実行します。
入力
bash scripts/verify-and-assign.sh <org-alias> [count=3] [permission-set-names-csv=Omni_Agent]
org-alias(必須)。count(省略可、デフォルトは3、範囲は1..10)— エージェントユーザーの数と一致させる必要があります。permission-set-names-csv(省略可、デフォルトはOmni_Agent)— 複数の場合はカンマ区切りで指定します。各ユーザーにリストされたすべてのセットが割り当てられます(直積):count=3× 2 セット = 最大 6 件の割り当て。
前提条件と安全性
- 対象の組織が
sfCLI で認証済みであり、Service Cloud ライセンスがあること。sfCLI は 2.139.6 以上であること。 - エージェントユーザーが存在すること(
service-omni-agent-users-create)。数が一致しない場合は、このスキルを参照するよう案内して処理をブロックします。 - 実行ユーザーに
PermissionsAssignPermissionSetsがあること(System Administrator に標準で付与されます)。組織管理者であっても必要です。ModifyAllDataだけでは不十分です。 Omni_Agentの自己修復を行う前に、少なくとも 1 つの Omni プレゼンスステータスが存在すること。バンドルされたセットは、デプロイ時に生成されるservicePresenceStatusAccessesを介して、存在するキュレーション済みステータス(例:Available_Case/Available_VoiceとBusy)に対するエージェント機能を付与します。先にservice-omni-presence-status-deployを実行してください。このため、コーディネーターはプレゼンスの後に権限セットを実行します。- 3 要素の
safe_to_writeガードが適用されます。本番組織で権限セットを割り当てると、実ユーザーの権限が昇格するおそれがあるため、上書き手段はなく、処理をブロックします。
自己修復(実行モードのみ)。 デフォルトの Omni_Agent セットが存在しない場合、このスキルはバンドルされた Omni_Agent メタデータを一度デプロイしてから割り当てます。--plan モードではデプロイせず、action_needed を報告して読み取り専用で終了します。これはバンドルされた Omni_Agent アセットのみが対象です。それ以外の権限セットは事前に存在している必要があり、存在しない場合はクリックパスを示して実行をブロックします。
実行
verify-and-assign.sh が一連の処理をすべて実行します。
safe_to_writeを計算し、8 文字の組織サフィックスを導出します。agent{1..N}.<suffix>@example.comパターンでエージェントユーザーを特定します。ユーザーが 1 人でも見つからない場合は処理をブロックします。- 名前で各
PermissionSetを特定します。存在しない場合はOmni_Agentを自己修復し、それ以外は不足しているセットを明示して処理をブロックします。 - (ユーザー × セット)の直積に対する既存の
PermissionSetAssignmentをクエリし、不足している組み合わせを算出します。 - 不足している組み合わせごとに割り当てを 1 件 POST します(個別の POST であり、
allOrNoneは使用しません)。 - 再クエリで最終状態を確認し、レポートを出力します。
動作
直積。 各ユーザーにリストされたすべてのセットが割り当てられます。一部のみの割り当ては機能ではなく失敗です。
冪等性。 PermissionSetAssignment には(AssigneeId、PermissionSetId)に対するデータベースの一意性制約があるため、再度 POST すると DUPLICATE_VALUE が発生します。このスキルは既存の組み合わせを事前に検出し、同時実行による競合に対する安全策として DUPLICATE_VALUE を扱います。個別に POST するため、重複やエラーがあっても成功した他の POST がロールバックされることはありません。すべての POST の後に再クエリを行います。201 は Salesforce が書き込みを受け付けたことを示すだけであり、その後の SOQL で割り当てが有効であることを確認します。
非破壊。 このスキルは作成のみを行い、既存の割り当ては削除しません(ユーザーが他の管理者から個別に権限を付与されている場合があるため)。また、明示的なユーザー ID のリストを受け取らず、エージェントのパターンからユーザーを導出するため、実在する名前付きユーザーにデモ用の権限を割り当てることはありません。
出力契約
status が assigned | reused | partial | blocked のいずれかであり、解決済みの permission_sets、org_suffix、requested_count、expected_assignment_count(= requested_count × len(permission_sets))、before スナップショット、assigned_this_run/assigned_count、reused_count、after スナップショット、manual_actions、blocking_issue を含む単一の JSON オブジェクトです。
assigned— 少なくとも 1 件の新しい割り当てが作成され、すべての想定ペアが作成後に存在します。reused— すべての想定ペアがすでに存在しており、POST は行われません。partial— 一部の POST が失敗し、最終件数が想定件数を下回ります。blocked— 前提条件を満たしていません(本番組織、セットの不足、ユーザーの不足、権限の不足)。
partial の場合を除き、assigned_count + reused_count == expected_assignment_count です。blocking_issue が null 以外になるのは blocked/partial の場合のみです。
制限事項
- 個別の PermissionSet のみを割り当てます。
PermissionSetGroupは別の sObject であり、対象外です。 - 自己修復の対象は同梱の
Omni_Agentのみです。汎用的な権限セット作成機能ではありません。 - 作成のみを行い、割り当ては削除しません。
参照資料
| ファイル | 読むタイミング |
|---|---|
assets/package.xml | デフォルトの Omni_Agent 権限セットが見つからず、実行モードの自己修復パスで同梱メタデータをデプロイする必要がある場合に読み込みます |
references/api-notes.md | POST ループの前。PermissionSetAssignment のスキーマ、その DUPLICATE_VALUE の動作、ユーザーが明示的な ID リストではなくエージェントのパターンから導出される理由を確認します |