Service Cloud ケース割り当ての基礎と実践

ケースは、Salesforce でお問い合わせを管理するための標準オブジェクトです。ケースを適切なスキル・キャパシティを持ったユーザに割り当てることは、お問い合わせ解決時間の短縮、ひいては顧客満足度の向上に直結します。Salesforce では、ケースの担当を割り当てる (= 一定のルールに基づいて所有者を更新する) ための様々な標準機能が提供されています。この記事では、それら標準機能の基本的な使い方や考慮事項を整理しています。

## サマリ
ケースの割り当てには主に以下の標準機能を用いることができます。これらは単独でも、あるいは組み合わせて使用することもできます。

|割り当てに用いる機能 | 手動/自動 |対象 | 主な活用シナリオ | 
|- | - |- | -|  
|① リストビュー| 手動 |新規ケース・既存ケース両方|人の判断が必要で、手動で担当を決めたい | 
|② 割り当てルール | 自動 |主に新規ケース|Web-to-ケースなどで作成されたケースに対して、項目値に基づいて、適切なキューやユーザに割り振りたい |
|③ エスカレーションルール| 自動|既存ケース | 経過時間などの条件に基づいて、既存のケースの担当を更新したい | 
|④ オムニチャネル | 自動|主に新規ケース |ケースの項目値だけではなく、現在担当しているケースの数や対応中の他チャネルの業務など、ユーザの負荷に応じて自動的に担当を決めたい
|⑤自動化プロセス(フロー・Apex トリガー) | 自動 | 新規ケース・既存ケース両方 | ケースの割り当てに複雑なビジネスロジックがある

一般に、ケースは最初にキューに割り当てされ、その後、適切なユーザに割り当てるかユーザが自身で引き受けた後に、ケースのクローズに向けた作業に取り組む (例えばメールを返信するなど) といったライフサイクルを定義することが多いです。

![ケースのライフサイクル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184624/1300405f-f505-2e53-55d8-f1ed32fd4319.png)

:::note warn
上記はあくまでも主要な利用シーンでの機能の使用を図示したものであり、各機能が図示されているタイミングでしか使用できないことを意味するものではありません。また、フローや Apex トリガを使用してケースの所有者を直接設定するようなユースケースはこの記事では扱いません。
:::

## 割り当て機能の比較
### 1. リストビュー
デフォルトの [所有者の変更] アクションを使用するか、ご自身で作成されたクイックアクションを使用してリストビューから一括で所有者を変更することができます。また、リストビューの検索条件で所有者を特定のキューで絞り込んでおり、リストビューの検索レイアウトに [引き受ける] ボタンがある場合は、リストビューに [引き受ける] ボタンが表示されます。このボタンをクリックすると、そのユーザに所有者が変更されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184624/b7e6911e-564f-4f4d-9483-f63e46dacc0a.png)


小さなボリュームであれば、この機能を用いて、 SV の方が定期的に新しく作成されたケースを割り振りし、オペレータの方は自身が所有しているケースのリストビューに注力することで効率よくケースに対応していくことができます。

#### 考慮事項
* SV や管理者が定期的に割り当て状況とケースの状況を合わせて確認できるようなビューやダッシュボードなどを準備しておくことを推奨します。例えば、オペレータが自身の担当するケースをクローズできないまま翌営業日を迎え、そのオペレータが翌営業日シフトではない、といったことが起こり得ます。このとき、その日のうちにクローズできなかったケースはキューに戻すなどのオペレーションフローを整備しておくと良いでしょう。
    * 同様に、ケースの所有者が特定のユーザのままになり異動や退職を迎え、ユーザが無効化されたりキューに所属する公開グループから離脱したりする場合、そのケースのビジビリティに影響が出る場合があるため、考慮が必要です。(ケースの共有設定が非公開の場合は特に)
 
### 2. 割り当てルール
割り当てルールは、一般に Web-to-ケースのような自動作成されたケースに対して、ケースまたはケースが参照するオブジェクトの項目値に基づいて、所有者をキューやユーザに自動的に設定するための機能です。顧客属性に基づいて担当を自動で振り分ける、ケースの種別に基づいて担当を振り分けるなどの使い方があります。

![割り当てルールの例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184624/86945864-ab2a-cb5b-bb93-62fb2e26e0d3.png)

手動作成・編集されたケースで割り当てルールを起動するには、ページレイアウトのプロパティで、`[ケース割り当て] チェックボックス` の `編集ページを表示` にチェックを入れてください。新規または編集アクションのフッターに `有効な割り当てルールを使用して割り当てる` のチェックボックスが表示されるようになります。これにチェックを入れて保存すると割り当てルールが起動します。

![assignment_rule_on_edit_or_new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184624/28a9cf23-264f-e1b9-bc7b-ac9bf51b09a9.png)

#### 考慮事項
* インライン編集では割り当てルールは起動できません。(参考: [IdeaExchange - Assignment rules don't work with Inline Edits](https://trailblazer.salesforce.com/ideaView?id=08730000000BptYAAS))
* Apex で作成・更新されたケースは、デフォルトでは割り当てルールは起動しません。DML 前に `DMLOptions.AssignmentRuleHeader` を設定してください。(参考: [Apex リファレンスガイド](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_class_Database_AssignmentRuleHeader.htm))
* 負荷分散の考慮が必要な場合は後述のオムニチャネルルーティングの使用を検討してください。

### 3. エスカレーションルール
エスカレーションルールは、ケースの作成日時または最終更新日時からの経過時間および、項目値に基づいて、所有者をキューやユーザに自動的に設定するための機能です。**割り当てルールに経過時間が加わったもの**だと理解すると良いでしょう。経過時間に関連するケースの自動化には、エンタイトルメント・マイルストン機能も利用できますが、管理するオブジェクトや設定が多く、やや煩雑です。厳密な SLA 管理を必要とせず、単に時間ベースで所有者を再割り当てしたいだけの場合はエスカレーションルールで十分です。

エスカレーションルール固有の機能は、「オープンしてから2営業日でクローズできなければ所有者をSVのキューに変更する」のように、標準の営業時間設定を利用できるところです。

#### 考慮事項
* エスカレーション時に**顧客に**通知が必要な場合はエスカレーションルールでは対応できません。スケジュールフローやスケジュール Apex の使用を検討してください。
* エスカレーション先がユーザの場合、そのユーザが不在の場合のオペレーションフローを検討しておくと良いでしょう。
* 本機能には直接関連しませんが、エスカレーションされたケースの KPI やトラッキング方法を全体的に検討しておくと良いでしょう。この記事では詳細は割愛しますが、エスカレーションされたケースの指標を個別に追跡したり、独立したビジビリティ設定が必要な場合は、同じケースで所有者を変更する代わりに、別レコード(例えば子ケース)を作成する方法もあります。

### 4. オムニチャネル
オムニチャネルは、ケースだけでなく、チャットやカスタムオブジェクトなど様々なチャネルから発生するレコードを、優先度やオペレータの作業負荷といったルールに基づいて自動的に振り分ける機能です。ここではケースの割り当てという観点に絞って必要な設定を紹介します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184624/b56b5110-e98b-20e2-a6e2-9c44300bdd83.png" width="600">

上図のように、ケースはユーティリティバーのオムニチャネルコンポーネントに転送され、受け入れる(=チェックボタンを押す)と所有者が自分に変更されます。ケースがオペレータにたどり着くまでには、大きく分けて 3 つの転送方法 (ルーティング) があります。キューベースのルーティング・スキルベースのルーティング・オムニチャネルフローを用いたルーティングです。

![オムニチャネルルーティングの比較](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184624/246abc43-5d96-2084-4b70-3a73708cbc47.png)


#### 業務量の考え方
ルーティングの設定を行う前に重要な業務量の設定を確認しましょう。[ルーティング設定](https://help.salesforce.com/s/articleView?id=sf.service_presence_routing_configuration_settings.htm&language=ja)でケースをオペレータに均等に割り振るためのルールを設定しますが、このとき基準になるのが「作業項目サイズ」と呼ばれる業務量や業務割合を決める設定値です。例えばあるキューに、ケースを 4 件対応中の A さんと、対応中のケースが 1 件もない B さんがいる場合、次に新しくそのキューに割り当たったケースは、より暇な B さんに転送されるのが自然です。チャットのようなリアルタイムオブジェクトの場合、業務量は、開いているタブの数(≒同時に進行しているチャットの数)でしたが、ケースのような非リアルタイムオブジェクトの場合は、開いているタブの数が現在の実際の業務量に相当しない場合の方が多いでしょう。このとき、オムニチャネル設定で [[状況ベースの業務量モデルを有効化](https://help.salesforce.com/s/articleView?id=sf.omnichannel_status_based_capacity.htm&type=5)] することで、例えば、所有している未クローズのケースの数を業務量と見るような設定ができます。

#### キューベースのルーティング
最もシンプルなルーティングです。ケースをサポートするキューがルーティング設定を参照していれば、ケースの所有者がそのキューに変更された際、ルーティング設定に基づいて、処理中のケースが最も少ない(=対応中件数が参照)か、処理できるケースが最も多い(=対応余力が最大）オペレータにケースが転送されます。

#### スキルベースのルーティング
ケースの項目値と、エージェントが有するスキルをマッピングさせることで、キューベースよりもより細かな粒度でケースの転送を行うことができます。このマッピングは、[スキルベースのルーティングルール] で行います。次の例は、ケースの原因が「請求」のレコードを、「返品・返金プロセス」のスキルレベルが 5 以上のオペレータに転送する設定です。

![Skill Routing](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184624/5521923d-0f1d-3219-2a78-a9cfa8fac577.png)

この設定でも、ケースが作成された際にダイレクトにオペレータにケースが転送される訳ではないことに注意してください。スキルベースのルーティングを行う場合も、キューとルーティング設定は必要です。スキルベースのルーティングは、キューベースのルーティングでオペレータに割り当てるための制限がより強くなったものと理解すると良いでしょう。特定のオペレータに直接ケースを割り当てたい場合は後続のオムニチャネルフローを実装してください。

#### オムニチャネルフローを用いたルーティング
オムニチャネルフローを用いると任意のロジックでケースを転送することができます。例えば、以下のように、前回同じ顧客でケースを担当したオペレータに優先的にケースを割り当てるようなフローを実装することができます。設定の詳細は、[『非リアルタイムオブジェクトを転送するためのオムニチャネルフローの呼び出し』](https://help.salesforce.com/s/articleView?id=sf.omnichannel_use_flow_to_route.htm&type=5)を参照してください。

![Omni-Channel Flow Example](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184624/663cd5e8-313f-0e62-686f-1900a8f193e3.png)

ケースのような非リアルタイムオブジェクトでは、オムニチャネルフローは自動的に呼び出されないため、ケースのレコードトリガフローなどから実装したオムニチャネルフローを呼び出すことを忘れないようにしてください。

## 番外編
### ラウンドロビンでの割り当て
[リードオブジェクトで数式項目を使用したラウンドロビン割り当ての実装例が Help に記載](https://help.salesforce.com/s/articleView?id=sf.essentials_round_robin_lead_assignment.htm&type=5)されています。ケースでも同様の実装が可能です。

## おわりに
実際の設定に絶対的な正解はありません。組織の規模や業務フロー、KPI によって必要な設定は大きく異なります。レポートやオムニチャネルスーパバイザなどを活用して、割り当てにかかっているコストや結果を可視化し、改善を積み重ねていくことが大切です。