Dynamics 365 Virtual Agent - トピックスで会話を構成する

[前回の記事](https://qiita.com/kenakamu/items/8684ed6e8e0ea37d13ca) では D365 VA の概要を紹介しました。今回はトピックを見ていきます。
※トピックの中のアクションは別の記事で紹介します。

# VA ポータルにログイン

既にポータルを閉じてしまった場合は、以下のいずれかの手順でログインできます。

## VA ポータルアドレスで直接ログイン

1\. https://va.ai.dynamics.com にアクセス
2\. 認証情報を入力してログイン

## プレビューページからログイン

1\. http://aka.ms/virtual-agent にアクセス
2\. Try preview をクリック
3\. サインアップ済のアカウントを入力するとサインアップ済である旨のメッセージとサインインボタンが出るので、クリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/91000960-0860-5018-3855-bf99b8c9a700.png)

# トピックの種類

トピックはユーザーとボットがやり取りする会話の最小単位となります。トピックにはシステムトピックとユーザートピックがあり、トピックのフローから別のトピックが呼び出せます。

## システムトピック

どんなボットでも必ず必要となる会話をシステムトピックとして実装します。既定のサンプルでは以下のトピックが提供されます。

- はじめの挨拶
- 人に対するエスカレーション
- 会話の終了
- 問題が解決したことの確認
- 問題が解決しなかったことの確認
- さよならの挨拶
- やり直しの処理
- ありがとうの挨拶

## ユーザートピック

システムトピックとは異なり、システムごとにユニークな機能はユーザートピックとして実装します。既定のサンプルでは以下のようなものが提供されます。

- 店の場所
- 営業時間
- 支払いについて
- 発送ポリシーについて
- 注文のキャンセル
など

# トピックの構成

トピックは以下の要素で構成されます。

- 名前などのメタデータ
- トリガーフレーズ
- 会話フロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/32fe92b0-da18-b777-2cd1-eaad58b67277.png)

## メタデータ

名前や説明、最終更新日などを設定します。

## トリガーフレーズ

トピックを起動フレーズを設定。AI によりインテントが解析されるため、完全一致する必要はないが多くサンプルがあると良い。ただし他のトピックと混乱するフレーズは避けるようにしてください。

## 会話フロー

GUI で会話を構成できます。

# 会話フローを使ったカスタマイズ

会話フローは多くの機能が提供されます。

## トリガーフレーズ

トピックはトリガーフレーズから始まるため、まずユーザー発話のトリガーフレーズが配置されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/ee4932dd-7fce-f285-a7ac-1f0b4e4a0f9b.png)

## ボットの発話

既定でトリガーフレーズの下にボットの発話が設定されます。会話は HTML で表示されるため、簡易的なエディター機能が提供されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/9a48d37c-6600-4a9b-f7e6-8a6ce64dedf3.png)

## 追加のフロー

既定のフローに続き、追加のフローが追加できるようメニューが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/9f10e8dd-6aa2-f79e-5536-41b948e14e0a.png)

- End with survey : 会話を終了するため システムトピックである「End with survey」を呼び出す
- User says : ユーザーにインプットを要求する
- Bot says : ボットの発話を追加する
- Escalate : 有人チャットに繋げるシステムトピックである「Escalate」を呼び出す
- Action : Flow を使ったアクションを呼び出す
- Go to : 任意のトピックを呼び出す

※ Action は別の記事で紹介します。

End with survey と Escalate は Go to から呼び出せますが、よく使われるためショートカットとして存在します。

## 分岐の利用

ユーザーに引き続き入力を促したい場合、User says を追加します。ユーザーからの応答は変数としてそれ以降のフローで利用できます。ここでは Bot Says の内容を変えて、分岐の利用を試してみます。

1\. Bot says の中身を「Where do you think I live?」に変更。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/5b33f3d9-06ee-2ef2-8fcf-52a8d07a02c4.png)

2\. User says をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/b08f793f-faf1-b408-0496-1971336a8e5b.png)

3\. 回答を 1 つ入れた後、「Add user response」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/59f8a66d-e5f8-1ce0-bdb0-2570798971fa.png)

4\. クリックすると同時に分岐が追加される。User says に別の回答を入力。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/0a92bcf0-ea75-ba2b-47c9-d364a65da888.png)

5\. User Response のドットをクリックして、プロパティを表示。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/e4b2ce91-71b4-53bf-8e8a-dafd5235de1c.png)

6\.「Edit synonyms」からシノニムを追加。必要に応じて、他の候補にもシノニムを追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/aad86460-3a3d-d9cf-cd85-030f1c4910ca.png)

7\. Bot Says にそれぞれ回答を入力。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/975abbeb-c60c-ec4c-4295-b2a93387e265.png)

8\. 左のメニューからは「End with survey」を選択。右側は「Go to」から「Good bye」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/248192a2-102a-d0ac-05dc-9afed6aa629e.png)

9\.「Save」をクリック。

### ボットのテスト

1\. 画面左下の「Test your bot」をクリック。「Tracing」をオンにして、「Start over with latest content」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/613b8e75-1aa4-e6c5-6af1-cd550af8f269.png)

2\. トリガーフレーズに当たるものを入力して送信。トレースがオンになっている場合、カスタマイズ中の会話フローで進行したところまで色が変わる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/4ac28086-ddc0-3774-c418-30cb63cccc9c.png)

3\.「Azure」をクリックするか、シノニムでいれた単語を送信。ここでは「Azure」をクリック。会話フローで設定したとおり「End of Conversation」へ自動遷移。ここでもトレーシングは継続することを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/8b0cdd02-4e01-7f6d-0391-0e707c113077.png)

4\. トピックが連鎖することを確認したらテスト画面は「ｘ」をクリックしてクローズ。

## 変数の利用

次に変数を使ってみます。

1\. 一旦初めの Bot Says まで削除。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/60949294-ac49-865f-6b1d-65ddabb506a6.png)

2\.「User says」をクリックし、「Add variable」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/c5a3a17f-120c-0b63-ba11-730a4d9be05f.png)

3\. プロパティ画面が出るので、「Create variable」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/d274df99-3220-d77b-2e63-903124ead812.png)

4\. 変数名を指定して型を選択。ここでは Text 型を指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/6ecaabb5-0795-5d6f-c776-0e39a60c99b4.png)

5\. 自動的に「Expression」と「Bot Says」が追加される。User Response にはユーザー応答の候補を追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/9a871abd-7545-05dc-0c37-43901a59ce07.png)

6\.「Expression」に評価する値を追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/54ad1b26-d977-67ad-657d-c075ce203822.png)

7\. 分岐を作るため、Expression 上部の接続ラインをマウスオーバー。プラスボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/68bacd7a-430c-cc1b-89b3-9dceb565bd67.png)

8\. 追加の Expression または、その他全てをカバーするため「Fallback」をクリック。ここでは Expression をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/82f13845-b2a3-5a92-ae7d-16461c82ac74.png)

9\. 変数の選択と評価する値を追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/59e34bd3-9d39-ea43-843e-126bfb0f1a6d.png)

10\. 今回これら 2 つの Expression は同じ Bot Says に繋げたいので、右の Expression から出ている接続ラインを左の Bot Says にドラッグ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/a9aebe10-2f49-a6c9-bda2-adc36b9031bd.png)

11\. 接続完了を確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/78c10ee2-238c-5763-28ee-bb541d13f912.png)

12\. 繋いだ Bot Says に文章を入れた後、残った Bot Says を削除。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/9aa6855b-3e63-86fd-e85c-c01243e9a986.png)

13\. 同様の手順で「Fallback」も追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/5eb4973c-edbc-6308-5746-73585efd3f26.png)

14\. それぞれ終了トピックを追加して、保存。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/fdc9d885-a0f7-851f-72c7-bc8a04857e2a.png)

### ボットのテスト

1\. 先程と同じ手順でボットをテスト。先に進んでしまったが前の状況を見たい場合、会話をクリックすると状況を確認できる。ここでは「On-Premise Windows」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/8b80adf2-2829-560d-7598-8de6352d78ad.png)

2\. 意図した場所までトレースが戻ることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/85e248d6-ec90-816d-59ac-b85cfd3a726d.png)

## Escalate トピック

エスカレートトピックは、会話を有人チャットに切り替えたい際に利用するシステムトピックです。
[参考:Hand off a bot conversation to a live human agent](https://docs.microsoft.com/en-us/dynamics365/ai/customer-service-virtual-agent/how-to-handoff)

現時点では有人チャットの機能は VA では提供しないため、有人チャットをサポートするページに対するリンクを設定するだけですが、将来的にはなにか機能がでるかなと期待しています。

1\. Topics より Escalate を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/f112fe92-6fd6-e75a-4277-9e33dcaf9f4a.png)

2\. <link> を接続したいリンクに変更。ここではダミーとして https://aka.ms/virtual-agent を指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/71d1e81c-0477-1a36-b545-9c14df36a800.png)

3\. 保存後、テスト。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/d4b8478d-a916-9c1a-7ce8-3ce99f4ef319.png)

# まとめ

現時点でもすでに基本的なフローを作成することが可能である印象です。既存のサンプルを手掛かりに色々作成してみてください。次回はトピックスのアクションを見ていきます。

[次の記事](https://qiita.com/kenakamu/items/f06ff7b3f46241e43344)

# 参照

[記事: Work with built-in topics](https://docs.microsoft.com/ja-jp/dynamics365/ai/customer-service-virtual-agent/how-to-templates)
[記事: Work with the Test bot pane](https://docs.microsoft.com/ja-jp/dynamics365/ai/customer-service-virtual-agent/how-to-test-bot)
[記事: Work with variables](https://docs.microsoft.com/ja-jp/dynamics365/ai/customer-service-virtual-agent/how-to-variables)
[ビデオ: Create, test, and deploy your bot with Virtual Agent for Customer Service](https://www.youtube.com/watch?v=eM-hs7maZko)