service-omni-service-channel-configure について
Salesforce で、対応するルーティング可能な sObject 用の ServiceChannel を確保するスキルです。既存チャネルを再利用し、見つからない場合にテンプレートをデプロイすることで、オブジェクトごとに1つという制約への抵触を防ぎます。
主な機能
- 014種類のルーティング対象 sObject
- 02既存チャネルの検出と再利用
- 03未作成時のテンプレートデプロイ
- 04前提条件と実行結果の報告
活用シーン
- 01Case ルーティング用チャネルの設定
- 02Incident、MessagingSession、VoiceCall 用チャネルの設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill service-omni-service-channel-configureインストール後、Claude Code で/service-omni-service-channel-configureを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/package.xmlsfdx-project.jsonassets/force-app/main/default/serviceChannels/Cases.serviceChannel-meta.xmlIncidents.serviceChannel-meta.xmlMessagingSessions.serviceChannel-meta.xmlVoiceCalls.serviceChannel-meta.xmlreferences/api-notes.mdscripts/deploy-and-report.sh詳細
service-omni-service-channel-configure
ルーティング可能な sObject ごとに ServiceChannel が正確に 1 つ存在するようにします。すでにバインドされているチャネル(Salesforce 標準チャネルまたは既存のカスタムチャネル)があればそれを再利用し、存在しない場合に限り、スキルの正規 v66 テンプレートをデプロイします。Salesforce では RelatedEntity ごとに 1 つの ServiceChannel しか許可されないため、このスキルは最初に検出を行い、決して無条件にデプロイしません。すでにチャネルがある sObject に 2 つ目のチャネルをデプロイすると、"This Salesforce object is already in use by another Service channel." というエラーが発生します。1 回の呼び出しで扱う sObject は 1 つです。複数の sObject を設定する場合は、service-omni-base-settings-configure で Omni-Channel を有効にした後、sObject ごとに 1 回ずつ呼び出します。
| sObject | 標準チャネル(該当する場合) | 正規アセット |
|---|---|---|
Case | Cases | Cases.serviceChannel-meta.xml |
Incident | なし(Incident Management sObject) | Incidents.serviceChannel-meta.xml — 初回実行時にデプロイ |
MessagingSession | sfdc_livemessage | MessagingSessions.serviceChannel-meta.xml — 標準チャネルがない場合に限りデプロイ |
VoiceCall | sfdc_phone | VoiceCalls.serviceChannel-meta.xml — 標準チャネルがない場合に限りデプロイ |
入力
bash scripts/deploy-and-report.sh <org-alias> [Case|Incident|MessagingSession|VoiceCall]
org-alias(必須)。sobject_type(任意、デフォルトはCase)—Case | Incident | MessagingSession | VoiceCallのいずれか。
前提条件と安全性
- 対象組織が
sfCLI(My Domain URL)で認証済みであること、Service Cloud ライセンスがあること、sfCLI が 2.139.6 以降であること。 - Omni-Channel の基本設定が有効であること(
service-omni-base-settings-configure)。enableOmniChannel=trueの場合に限り、ServiceChannelのクエリと書き込みが可能です。デプロイ時のINVALID_TYPEは、基本設定がオフであることを意味します。 Incidentには Incident Management 機能の有効化が必要です。MessagingSessionには Enhanced Messaging が必要です。このスキルは最初にEntityDefinitionを検証し、対象 sObject が存在しない場合はクリックパスを示して処理を中断します。
実行
deploy-and-report.sh は前提条件の確認、検出、必要な場合に限ったデプロイを行い、その後レポートを出力します。
- 前提条件 — 対象 sObject が
EntityDefinition経由でクエリ可能であることを確認します。そうでない場合はクリックパスを示して処理を中断します。 - 検出 — Tooling API にクエリを実行し、
RelatedEntity = <sobject_type>に該当するServiceChannelを探します。v66 ではServiceChannelは Tooling エンティティです。標準の Data API はINVALID_TYPEを返します。見つかった場合は再利用します。 - デプロイ(何も見つからなかった場合に限る)— 正規 XML(
Cases|Incidents|MessagingSessions|VoiceCalls)をsf project deploy startでデプロイします。状態がChangedの場合はcreated、Unchangedの場合はreusedです。
動作
検出してから再利用またはデプロイ。 Salesforce は RelatedEntity ごとに 2 つ目のチャネルを拒否するため、先にデプロイする方法は安全ではありません。たとえば、オペレーターが標準の Cases チャネルの名前を変更している場合、適切に再利用されず、"already in use" エラーが発生します。Tooling API による検出は高速で、1 回の呼び出しで再利用の判断と検出された DeveloperName の両方を取得できます。その代わり、このスキルでは「正規の構成と一致する」場合と「何らかのカスタムチャネルがバインドされている」場合を区別できません。正規の構成ではないチャネルがある場合は reused となり、そのチャネルには変更を加えません(v1 ではオペレーターの状態を上書きしません)。
容量モデル。 正規アセットはすべてのバリエーションで TAB_BASED を使用します。STATUS_BASED には完全なスキーマが文書化されていない付随フィールドが必要なため、対象外です。エージェントごとの容量調整は、このスキルではなく PresenceUserConfig.Capacity で行います。
同時実行。 デプロイ時に "already in use" エラーが発生した場合は、検出からデプロイまでの間に別のプロセスがチャネルを作成しています。このスキルはソフトフェイルし、再実行するとそのチャネルを再利用します。
出力契約
呼び出しごとに、status ∈ created | reused | blocked と、sobject_type、channel_developer_name、channel_id、channel_origin、target_capacity_model、target_related_entity_type、before_state、deploy_id、manual_actions、blocking_issueを含む単一の JSON オブジェクトを返します。
reused— 既存のチャネルが見つかった場合(検出でヒットした場合、またはデプロイの結果がUnchangedだった場合)。created— チャネルが存在せず、正規の XML がChangedでデプロイされた場合。blocked— sObject が org に存在しない場合、基本設定がオフの場合(INVALID_TYPE)、または競合によりチャネルがすでに使用中になった場合。channel_originはsalesforce_standard(sfdc_*形式の名前またはCases)、canonical_asset(同梱アセットの名前)、canonical_template(今回新たにデプロイ)、custom(org 固有の既存チャネル)のいずれかです。- チャネルが存在する場合、
channel_idに値が設定されます(blockedの場合はnull)。deploy_idに値が設定されるのはデプロイ分岐の場合のみです。blocking_issueが null 以外になるのは、status: blockedの場合のみです。
制限事項
- 呼び出しごとに 1 つの sObject を処理します。
- 対応しているのは
Case、Incident、MessagingSession、VoiceCallのみです。対応対象を追加するには、assets/force-app/main/default/serviceChannels/<Name>.serviceChannel-meta.xmlファイルとディスパッチャーの分岐を追加してください。 - 既存のチャネルは常に再利用されます。設定が正規の形式と異なるチャネルを、正規の形式にリセットすることはありません。
参照資料
| ファイル | 読むタイミング |
|---|---|
references/api-notes.md | 想定外の検出結果、デプロイの失敗、または sObject 固有のスキーマに関する質問がある場合 |