DataSpider Servista を使って Salesforce のナレッジを活用してみた

## はじめに

今回は DataSpider Servista を使って Salesforce のナレッジを活用した事例を紹介します。

弊社では Salesforce の Service Cloud でテクニカルサポートセンターの問い合わせをケース(Case)で管理しているのですが、ケースが溜まっていくにつれて、過去のケースを検索して有益な情報を見つけるまでの時間が増加していました。

また、参考情報を探し出すために検索キーワードや検索手法にはコツがあり、ベテランに比べて新人は過去ケースの検索に時間がかかってしまう傾向がありました。

## ケースのナレッジ化

Salesforce のナレッジの機能には、ケースとカテゴリの紐付けを行うことで、ケースと関連性の高いナレッジを自動で表示してくれるというものがあります。

参考「データカテゴリの対応付けを使用した記事の絞り込み」

https://help.salesforce.com/s/articleView?id=sf.knowledge_category_mapping.htm&type=5

この機能に着目して、ケースをナレッジ化すれば検索しなくても有益な過去ケースを見つけられるのでは？と考えました。

_※弊社の場合、社内向けのナレッジとして活用しています_ 

## DataSpider Servista によるケース情報の抽出とナレッジ登録

ケースをナレッジ化するにあたり、見やすいデータにするために、必要な情報の抽出やデータクレンジングを実施しました。

問合せの時に挿入される、あいさつ文等の共通部分やケースの各種フラグ項目などはナレッジ化するうえでは不要な情報です。

可読性を向上させるために取り除ける部分はすべて DataSpider Servsita で取り除いてしまおうと考えました。

連携のイメージは以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/d6657ed3-940a-5453-5bc6-facbb5bec429.png)


### ■ケース情報の抽出とデータクレンジング

まずはDataSpider Servista の Salesforce アダプタで、ケースから必要な情報をデータ読み取り処理で抽出します。

問合せやり取りの本文が記録されているのはケースの子オブジェクトのケースコメントになるため、データ読み取り（親→子リレーション）処理を使用します。

こちらが親オブジェクトのケースの読み取り設定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/6a4a8fc3-50a1-7d28-0543-decfd3af0d29.png)

こちらが子オブジェクトのケースコメントの読み取り設定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/e66ef08d-e2aa-8357-bdd3-b1faaf205d8e.png)


抽出した情報は一旦 CSVファイルに書き出した上で、Mapper ロジックを使用して加工を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/c448bc39-d11e-86a6-7552-6b967f3de1ed.png)

お客様とのやり取り本文が格納されている[コメント]項目に正規表現置換ロジックを設定して、不要なフッターのご挨拶の文等を取り除き必要な情報のみ抽出します。

以下の正規表現パターンで弊社から送信したコメントの回答部分などの必要な個所のみ抽出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/371fde16-e8a5-d44e-debe-cab377fd0dbd.png)

さらに以下の正規表現パターンで不要なフッターの部分を取り除いて抽出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/7469240d-ecc9-4226-d8f3-e03b47c1b612.png)


**正規表現置換ロジック**は、正規表現を使用して曖昧な条件で文字列を抽出できるため、今回のようなデータクレンジングを行う際には **お勧めの機能**です。

### ■ナレッジの登録
このようにナレッジに必要な情報をまとめました。次にその情報をナレッジ化するために登録するのですが、大きく分けて以下のステップが必要です。

　・ケースから抽出した情報をナレッジに書き込む
　・ナレッジを公開する

まずは CSV ファイルに書き出した加工済みケース情報をナレッジに書き込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/0e3d7479-8e56-423f-0dda-38de4d380177.png)


書き込んだナレッジはドラフトで登録されるため、別途公開する必要があります。
※弊社の場合は「内部アプリケーション」に公開。

ナレッジの公開には Salesforce アダプタでは対応していない REST API の実行が必要なため、REST アダプタの POST 実行処理で実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/eec4b5fd-b954-0a22-9ea0-120f045fc392.png)



リクエストのデータは Mapper を設定して連携することも可能ですが、ファイルで連携する設定も可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/d1e197a1-4bd8-0243-38ae-91906d2a0fc2.png)


リクエストの内容はこんな感じです。

```java:
{
"publishStatus":"Online"
}
```

なお、ナレッジ公開用の API の仕様上、ナレッジの Salesforce ID を指定して 1件ずつ更新する必要があるため、複数のナレッジを登録する場合は繰り返し処理と組み合わせて更新する必要があります。


Salesforce で公開されたナレッジは、下のようにお客様とのやり取りから必要な箇所のみを抜粋したような形で参照できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070502/227cbd2e-74f8-4e91-097a-1bb915faa7d3.png)


## 最後に

ここまでで 過去のケースの内容をナレッジとして公開することができました。

本来の目的である、 **ナレッジとケースでカテゴリの紐付けを行うことで、ケースと関連性の高いナレッジを自動で表示する** については、ナレッジやケースでカテゴリの設定が必要になります。

弊社では DataSpider Servista と Salesforce  Einstein の機能を使ってカテゴリの設定を行っています。

こちらについてはあらためてご紹介できたらと考えています。

最後までお付き合いいただきありがとうございました。