Dynamics 365 Virtual Agent - アクションで機能を拡張する

[前回の記事](https://qiita.com/kenakamu/items/20990cd5cb67cf317bd5)に続いてトピックスを見ていきます。今回はアクションです。

# アクション

アクションを使うと、会話フロー内で Microsoft Flow を呼び出すことが出来ます。早速実装していきましょう。

# アクション(フロー)の開発

VA 用のフローは Http 要求/応答を使って作成します。
※環境が複数ある場合は、VA と同じ環境にフローを作ってください。

1\. https://va.ai.dynamics.com/ から VA にログイン。ワッフルメニューより Flow を別タブで起動。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/00475376-1381-1c4d-475d-e811635dfe95.png)

2\.「Solutions」を選択。表示されていない場合は、一旦「My flows」を選択してフローを初期化。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/33484fe8-1910-50e8-993e-a185d5ab4177.png)

3\. まだ自分のソリューションがない場合は「＋ New solution」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/6b8b9ab3-50d1-18f3-a211-b4065a077ee7.png)

4\. ソリューションを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/84b6fd0e-f4b6-6573-24eb-504390b771f2.png)

5\. 作成したソリューションを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/74889641-16d8-14e6-f303-edbf5634be98.png)

6\.「＋ New」より「Flow」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/52313433-d705-e481-d53e-9f1d8703393a.png)

7\. トリガーとして「Request」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/d226a993-25e7-2926-b779-08353661ef74.png)

8\. サンプルデータからスキーマを作るため「Use sample payload to generate schema」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/0894430f-76f0-f938-53ad-92b67e18d697.png)

9\. サンプルのデータを入れて「Done」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/a992d2f8-713d-64b9-6e7c-2f48db4077c0.png)

10\. スキーマが入ることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/44ed7705-5e49-b3b7-8021-b977855c7953.png)

11\. アクションを追加し、「Response」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/b6491b4e-f11e-c024-f0cf-159045d32751.png)

12\.「Show advanced option」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/dc16e35a-5ca0-6345-de83-89a186057ddb.png)

13\. 先ほどと同じようにサンプルデータからスキーマを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/e7a51ac9-b32c-e356-c9c4-aac142b6ef0d.png)

14\.「Body」を選択し、返信内容を追加。この際 Request で取得した変数を利用。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/70f50e63-ea07-aa53-7dc5-fec5f1a2a92d.png)

15\. フローを名前を付けて保存。ここでは「PersonalizedGreeting」として保存。ステータスが ON になっていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/582238e4-72ad-8b46-c699-906c76c9d097.png)

# アクションの利用

早速開発したアクションを使ってみます。

1\. VA ポータルに戻り、Topics を選択。Greeting を編集。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/496e3f42-6286-eeac-db44-aa79c507c23a.png)

2\. 会話フローへ移動して最後の会話を「What's your name?」に変更。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/4b758844-3c01-95be-32b0-f6e655928fc9.png)

3\.「User says」を追加し、「UserName」変数を追加。既存の「User response」は不要のためゴミ箱アイコンをクリックして削除。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/4f1cda62-957b-f7e4-8aea-188aa7683f18.png)

4\. 自動で追加された「Expression」を削除。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/b0a43c64-7241-7633-811c-f229711c24d7.png)

5\.「Action」をクリックして開発した「PersonalizedGreeting」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/36d37c11-1c5a-77f7-8788-276eeb7c69da.png)

6\. 入力変数にて、「UserName」変数を指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/2c21bc7b-11a2-1d6e-6306-6220bed88b8f.png)

7\. 続いて「Bot says」を追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/e3cb45f3-948a-d260-f5a3-c3f1756da41f.png)

8\. 変数より「PersonalizedGreeting」を指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/e7b22291-32fc-6832-0966-f9d1c41aee4c.png)

9\. 必要に応じて残りのコメントを追加して、保存。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/bb1d9937-f586-137f-3946-6d26e48e0439.png)

## テスト

1\. 画面左下の「Test your bot」をクリック。トレースを ON にして、「Start over with latest context」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/2444e124-3654-6a51-5c87-583bdb96de8d.png)

2\. Greeting トピックがトリガーされるよう話しかけて、動作を確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/46fb8eed-be2a-b823-806f-14acfa1fcb53.png)

3\. フローポータルに戻り、開発したフローより実行された履歴を確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/bca429fa-fb0b-4560-f627-786cc0e2d4b8.png)

# まとめ

フローを使ってアクションを実装できるため、幅広く機能を実装出来ます。また入出力が JSON 形式のため、自由にコントラクトを定義できる点も嬉しいです。より複雑なフローも今後試してみますが、まずは既存機能の紹介ということで、次回は分析について見ていきます。

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

# 参考

[ビデオ:Enhance bot capabilities with Microsoft Flow in Virtual Agent for Customer Service](https://www.youtube.com/watch?v=joXCzvi38Fo&t=361s)
[記事: Add actions to your bot using Microsoft Flow](https://docs.microsoft.com/ja-jp/dynamics365/ai/customer-service-virtual-agent/how-to-flow)